diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3dad05a1ab..8d86fcccfe 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @branarakic @djordjekovac @NZT48 @zeroxbt @u-hubar +* @branarakic @u-hubar @Mihajlo-Pavlovic diff --git a/.github/ISSUE_TEMPLATE/bug_report_v6.md b/.github/ISSUE_TEMPLATE/bug_report_v8.md similarity index 95% rename from .github/ISSUE_TEMPLATE/bug_report_v6.md rename to .github/ISSUE_TEMPLATE/bug_report_v8.md index 5c5fa41e97..111fd291ca 100644 --- a/.github/ISSUE_TEMPLATE/bug_report_v6.md +++ b/.github/ISSUE_TEMPLATE/bug_report_v8.md @@ -1,5 +1,5 @@ --- -name: Bug report for v6 ot-node +name: Bug report for V8 ot-node about: Create an issue report title: '' labels: '' diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 9acedddf3e..842e8ab0fa 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -7,7 +7,7 @@ runs: id: nodejs uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 20.x cache: npm - name: Cache node modules diff --git a/.github/workflows/update-cache.yml b/.github/workflows/update-cache.yml index cbf1f24c68..02dae82da1 100644 --- a/.github/workflows/update-cache.yml +++ b/.github/workflows/update-cache.yml @@ -3,7 +3,7 @@ name: update-cache on: push: branches: - - v6/develop + - v8/develop concurrency: group: update-cache-${{ github.ref }} diff --git a/README.md b/README.md index 1bce41177e..ff0fa2f4fd 100644 --- a/README.md +++ b/README.md @@ -164,8 +164,8 @@ By their nature, Knowledge Assets are semantic resources (following the W3C Sema
-- **NodeJS** 16.x (ideally, 16.16) -- **npm** >= 8.0.0 +- **Node.js** 20.18 +- **npm** 10.8.2 --- @@ -182,6 +182,12 @@ git clone https://github.com/OriginTrail/ot-node.git cd ot-node ``` +Switch the branch to `v8/develop`: + +```bash +git checkout v8/develop +``` + Install dependencies using `npm`: ```bash @@ -210,18 +216,18 @@ To use default Triple Store (`blazegraph`), download the exec file and run it wi java -server -Xmx4g -jar blazegraph.jar ``` -Then, depending on the OS, use one of the scripts in order to run the local network with provided number of nodes (minimal amount of nodes should be 12): +Then, depending on the OS, use one of the scripts in order to run the local network with provided number of nodes (minimal amount of nodes should be 6): **MacOS** ```bash -bash ./tools/local-network-setup/setup-macos-environment.sh --nodes=12 +bash ./tools/local-network-setup/setup-macos-environment.sh --nodes=6 ``` **Linux** ```bash -./tools/local-network-setup/setup-linux-environment.sh --nodes=12 +./tools/local-network-setup/setup-linux-environment.sh --nodes=6 ``` --- @@ -232,7 +238,7 @@ bash ./tools/local-network-setup/setup-macos-environment.sh --nodes=12
-In order to run a DKG node on the **Testnet** or **Mainnet**, please read the official documentation: https://docs.origintrail.io/decentralized-knowledge-graph-layer-2/node-setup-instructions/setup-instructions-dockerless +In order to run a DKG node on the **V8 Testnet**, please read the official documentation: https://docs.origintrail.io/dkg-v8-upcoming-version/run-a-v8-core-node-on-testnet --- @@ -251,12 +257,12 @@ From an architectural standpoint, the SDK libraries are application interfaces i The OriginTrail SDK libraries are being built in various languages by the team and the community, as listed below: -- dkg.js - JavaScript SDK implementation - - [Github repository](https://github.com/OriginTrail/dkg.js) - - [Documentation](https://docs.origintrail.io/decentralized-knowledge-graph-layer-2/dkg-sdk/dkg-v6-js-client) -- dkg.py - Python SDK implementation - - [Github repository](https://github.com/OriginTrail/dkg.py) - - [Documentation](https://docs.origintrail.io/decentralized-knowledge-graph-layer-2/dkg-sdk/dkg-v6-py-client) +- dkg.js - V8 JavaScript SDK implementation + - [Github repository](https://github.com/OriginTrail/dkg.js/tree/v8/develop) + - [Documentation](https://docs.origintrail.io/dkg-v8-upcoming-version/v8-dkg-sdk/dkg-v8-js-client) +- dkg.py - V8 Python SDK implementation + - [Github repository](https://github.com/OriginTrail/dkg.py/tree/v8/develop) + - [Documentation](https://docs.origintrail.io/dkg-v8-upcoming-version/v8-dkg-sdk/dkg-v8-py-client) --- diff --git a/tools/knowledge-assets-distribution-simulation/plots/.gitkeep b/bin/darwin/arm64/.gitkeep similarity index 100% rename from tools/knowledge-assets-distribution-simulation/plots/.gitkeep rename to bin/darwin/arm64/.gitkeep diff --git a/bin/darwin/x64/.gitkeep b/bin/darwin/x64/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bin/linux/arm64/.gitkeep b/bin/linux/arm64/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bin/linux/x64/.gitkeep b/bin/linux/x64/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bin/win32/x64/.gitkeep b/bin/win32/x64/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/config.json b/config/config.json index c67531e2a2..2c5e22ba1e 100644 --- a/config/config.json +++ b/config/config.json @@ -8,7 +8,7 @@ "enabled": false, "package": "./auto-updater/implementation/ot-auto-updater.js", "config": { - "branch": "v6/develop" + "branch": "v8/develop" } } } @@ -149,20 +149,41 @@ } }, "telemetry": { + "enabled": false, + "implementation": { + "quest-telemetry": { + "enabled": true, + "package": "./telemetry/implementation/quest-telemetry.js", + "config": { + "localEndpoint": "http::addr=localhost:10000", + "signalingServiceEndpoint": "", + "sendToSignalingService": false + } + } + } + }, + "blockchainEvents": { "enabled": true, "implementation": { - "ot-telemetry": { + "ot-ethers": { "enabled": true, - "package": "./telemetry/implementation/ot-telemetry.js", + "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js", "config": { - "sendTelemetryData": false, - "signalingServerUrl": "null" + "blockchains": ["hardhat1:31337", "hardhat2:31337"], + "rpcEndpoints": { + "hardhat1:31337": ["http://localhost:8545"], + "hardhat2:31337": ["http://localhost:9545"] + }, + "hubContractAddress": { + "hardhat1:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "hardhat2:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3" + } } } } } }, - "maximumAssertionSizeInKb": 10000, + "maximumAssertionSizeInKb": 500000, "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "info", @@ -187,7 +208,7 @@ "enabled": false, "package": "./auto-updater/implementation/ot-auto-updater.js", "config": { - "branch": "v6/develop" + "branch": "v8/develop" } } } @@ -317,20 +338,41 @@ } }, "telemetry": { + "enabled": false, + "implementation": { + "quest-telemetry": { + "enabled": true, + "package": "./telemetry/implementation/quest-telemetry.js", + "config": { + "localEndpoint": "http::addr=localhost:10000", + "signalingServiceEndpoint": "", + "sendToSignalingService": false + } + } + } + }, + "blockchainEvents": { "enabled": true, "implementation": { - "ot-telemetry": { + "ot-ethers": { "enabled": true, - "package": "./telemetry/implementation/ot-telemetry.js", + "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js", "config": { - "sendTelemetryData": false, - "signalingServerUrl": "null" + "blockchains": ["hardhat1:31337", "hardhat2:31337"], + "rpcEndpoints": { + "hardhat1:31337": ["http://localhost:8545"], + "hardhat2:31337": ["http://localhost:9545"] + }, + "hubContractAddress": { + "hardhat1:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "hardhat2:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3" + } } } } } }, - "maximumAssertionSizeInKb": 10000, + "maximumAssertionSizeInKb": 500000, "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", @@ -355,7 +397,7 @@ "enabled": true, "package": "./auto-updater/implementation/ot-auto-updater.js", "config": { - "branch": "v6/release/testnet" + "branch": "v8/release/testnet" } } } @@ -388,8 +430,7 @@ }, "port": 9000, "bootstrap": [ - "/ip4/164.92.138.30/tcp/9000/p2p/QmbiZQm18JefDizrQwbRhPgkaLykTLyrUEpeMWuKJHXuUM", - "/ip4/139.59.145.152/tcp/9000/p2p/Qme2oF6afixBjLYjF5CYeC73d5dygsTq8P7BPQp31NVkye" + "/ip4/167.172.162.235/tcp/9000/p2p/QmNcjL4P5Dzq5hn6fkncYEsTcRU2g7g4N5rE2KCvHSPDav" ] } } @@ -446,7 +487,7 @@ "enabled": false, "package": "./blockchain/implementation/ot-parachain/ot-parachain-service.js", "config": { - "hubContractAddress": "0xBbfF7Ea6b2Addc1f38A0798329e12C08f03750A6", + "hubContractAddress": "0x94cb4Ce3C6ce3654b0dA47255a2325322DaD5552", "rpcEndpoints": [ "https://lofar-testnet.origin-trail.network", "https://lofar-testnet.origintrail.network" @@ -459,7 +500,7 @@ "package": "./blockchain/implementation/gnosis/gnosis-service.js", "config": { - "hubContractAddress": "0xC06210312C9217A0EdF67453618F5eB96668679A", + "hubContractAddress": "0xC2d165484ee044aFCD0F693a84Ae57235FD986fA", "gasPriceOracleLink": "https://blockscout.chiadochain.net/api/v1/gas-price-oracle", "rpcEndpoints": ["https://rpc.chiadochain.net"], "operatorFee": 0 @@ -470,7 +511,7 @@ "package": "./blockchain/implementation/base/base-service.js", "config": { - "hubContractAddress": "0x144eDa5cbf8926327cb2cceef168A121F0E4A299", + "hubContractAddress": "0x4A0aC589D7469868ff4EC889aa2c7eE43d30d823", "rpcEndpoints": ["https://sepolia.base.org"], "operatorFee": 0 } @@ -508,20 +549,46 @@ } }, "telemetry": { + "enabled": false, + "implementation": { + "quest-telemetry": { + "enabled": true, + "package": "./telemetry/implementation/quest-telemetry.js", + "config": { + "localEndpoint": "http::addr=localhost:10000", + "signalingServiceEndpoint": "", + "sendToSignalingService": false + } + } + } + }, + "blockchainEvents": { "enabled": true, "implementation": { - "ot-telemetry": { + "ot-ethers": { "enabled": true, - "package": "./telemetry/implementation/ot-telemetry.js", + "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js", "config": { - "sendTelemetryData": true, - "signalingServerUrl": "https://testnet-signaling.origin-trail.network/signal" + "blockchains": ["otp:20430", "gnosis:10200", "base:84532"], + "rpcEndpoints": { + "base:84532": ["https://sepolia.base.org"], + "otp:20430": [ + "https://lofar-testnet.origin-trail.network", + "https://lofar-testnet.origintrail.network" + ], + "gnosis:10200": ["https://rpc.chiadochain.net"] + }, + "hubContractAddress": { + "base:84532": "0x4A0aC589D7469868ff4EC889aa2c7eE43d30d823", + "otp:20430": "0x94cb4Ce3C6ce3654b0dA47255a2325322DaD5552", + "gnosis:10200": "0xC2d165484ee044aFCD0F693a84Ae57235FD986fA" + } } } } } }, - "maximumAssertionSizeInKb": 10000, + "maximumAssertionSizeInKb": 500000, "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", @@ -546,7 +613,7 @@ "enabled": true, "package": "./auto-updater/implementation/ot-auto-updater.js", "config": { - "branch": "v6/release/testnet" + "branch": "v8/develop" } } } @@ -579,8 +646,7 @@ }, "port": 9000, "bootstrap": [ - "/ip4/64.225.99.151/tcp/9000/p2p/QmawsTRqaLPyLQ5PfStpFcpQW4bvNQ59zV1by2G5aJHuVn", - "/ip4/18.157.122.121/tcp/9000/p2p/QmfDebvsKNwCggBBmEWB43cAZtTa2umMsnRvBnMV4sY5th" + "/ip4/64.225.99.151/tcp/9000/p2p/QmawsTRqaLPyLQ5PfStpFcpQW4bvNQ59zV1by2G5aJHuVn" ] } } @@ -633,35 +699,12 @@ "blockchain": { "enabled": true, "implementation": { - "otp:2160": { - "enabled": false, - "package": "./blockchain/implementation/ot-parachain/ot-parachain-service.js", - "config": { - "hubContractAddress": "0x0425d8717a9c63345a26C7885CF8c0fEAbcE7bC9", - "rpcEndpoints": [ - "https://lofar-tm-rpc.origin-trail.network", - "https://lofar.origintrail.network" - ], - "operatorFee": 0 - } - }, - "gnosis:10200": { - "enabled": false, - "package": "./blockchain/implementation/gnosis/gnosis-service.js", - - "config": { - "hubContractAddress": "0xD2bA102A0b11944d00180eE8136208ccF87bC39A", - "gasPriceOracleLink": "https://blockscout.chiadochain.net/api/v1/gas-price-oracle", - "rpcEndpoints": ["https://rpc.chiadochain.net"], - "operatorFee": 0 - } - }, "base:84532": { "enabled": false, "package": "./blockchain/implementation/base/base-service.js", "config": { - "hubContractAddress": "0x6C861Cb69300C34DfeF674F7C00E734e840C29C0", + "hubContractAddress": "0xE043daF4cC8ae2c720ef95fc82574a37a429c40A", "rpcEndpoints": ["https://sepolia.base.org"], "operatorFee": 0 } @@ -699,20 +742,39 @@ } }, "telemetry": { + "enabled": false, + "implementation": { + "quest-telemetry": { + "enabled": true, + "package": "./telemetry/implementation/quest-telemetry.js", + "config": { + "localEndpoint": "http::addr=localhost:10000", + "signalingServiceEndpoint": "", + "sendToSignalingService": false + } + } + } + }, + "blockchainEvents": { "enabled": true, "implementation": { - "ot-telemetry": { + "ot-ethers": { "enabled": true, - "package": "./telemetry/implementation/ot-telemetry.js", + "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js", "config": { - "sendTelemetryData": true, - "signalingServerUrl": "https://devnet-signaling.origin-trail.network/signal" + "blockchains": ["base:84532"], + "rpcEndpoints": { + "base:84532": ["https://sepolia.base.org"] + }, + "hubContractAddress": { + "base:84532": "0xE043daF4cC8ae2c720ef95fc82574a37a429c40A" + } } } } } }, - "maximumAssertionSizeInKb": 10000, + "maximumAssertionSizeInKb": 500000, "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", @@ -889,20 +951,43 @@ } }, "telemetry": { + "enabled": false, + "implementation": { + "quest-telemetry": { + "enabled": true, + "package": "./telemetry/implementation/quest-telemetry.js", + "config": { + "localEndpoint": "http::addr=localhost:10000", + "signalingServiceEndpoint": "", + "sendToSignalingService": false + } + } + } + }, + "blockchainEvents": { "enabled": true, "implementation": { - "ot-telemetry": { + "ot-ethers": { "enabled": true, - "package": "./telemetry/implementation/ot-telemetry.js", + "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js", "config": { - "sendTelemetryData": true, - "signalingServerUrl": "https://mainnet-signaling.origin-trail.network/signal" + "blockchains": ["otp:2043"], + "rpcEndpoints": { + "otp:2043": [ + "https://astrosat-parachain-rpc.origin-trail.network", + "https://astrosat.origintrail.network/", + "https://astrosat-2.origintrail.network/" + ] + }, + "hubContractAddress": { + "otp:2043": "0x5fA7916c48Fe6D5F1738d12Ad234b78c90B4cAdA" + } } } } } }, - "maximumAssertionSizeInKb": 10000, + "maximumAssertionSizeInKb": 500000, "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", diff --git a/docs/openapi/DKGv6.yaml b/docs/openapi/DKGv8.yaml similarity index 99% rename from docs/openapi/DKGv6.yaml rename to docs/openapi/DKGv8.yaml index 5964ab8356..37e1ab2ca5 100644 --- a/docs/openapi/DKGv6.yaml +++ b/docs/openapi/DKGv8.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: - title: DKGv6 - description: DKG v6 API Collection. + title: DKGv8 + description: DKG V8 API Collection. version: 1.0.0 contact: {} servers: diff --git a/docs/postman/DKGv6.postman_collection.json b/docs/postman/DKGv8.postman_collection.json similarity index 99% rename from docs/postman/DKGv6.postman_collection.json rename to docs/postman/DKGv8.postman_collection.json index bd257955e4..2581e0c65c 100644 --- a/docs/postman/DKGv6.postman_collection.json +++ b/docs/postman/DKGv8.postman_collection.json @@ -1,8 +1,8 @@ { "info": { "_postman_id": "550b0443-cd47-482a-9c56-2b1229422426", - "name": "DKGv6", - "description": "DKG v6 API Collection.", + "name": "DKGv8", + "description": "DKG V8 API Collection.", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ diff --git a/installer/README.md b/installer/README.md index 2c707a134b..880e9c4b6b 100644 --- a/installer/README.md +++ b/installer/README.md @@ -1,10 +1,10 @@ -Installs the V6 Node +Installs the V8 Node 2. Login to the server as root. You __cannot__ use sudo and run this script. The command "npm install" __will__ fail. 3. Execute the following command: ``` -cd /root/ && curl https://raw.githubusercontent.com/OriginTrail/ot-node/v6/release/mainnet/installer/installer.sh --output installer.sh && chmod +x installer.sh +cd /root/ && curl https://raw.githubusercontent.com/OriginTrail/ot-node/v8/release/testnet/installer/installer.sh --output installer.sh && chmod +x installer.sh ``` diff --git a/installer/data/blazegraph.service b/installer/data/blazegraph.service index a681872d66..7258c4a5f9 100644 --- a/installer/data/blazegraph.service +++ b/installer/data/blazegraph.service @@ -1,7 +1,7 @@ #/lib/systemd/system/blazegraph.service [Unit] -Description=OtBlazegraph - OriginTrail V6 Stage 1 Beta Node +Description=OtBlazegraph - OriginTrail V8 Node Documentation=https://github.com/OriginTrail/ot-node After=network.target diff --git a/installer/data/fuseki.service b/installer/data/fuseki.service index 48b4da31ca..0f59a184d5 100644 --- a/installer/data/fuseki.service +++ b/installer/data/fuseki.service @@ -1,7 +1,7 @@ #/lib/systemd/system/fuseki.service [Unit] -Description=OtFuseki - OriginTrail V6 Stage 1 Beta Node +Description=OtFuseki - OriginTrail V8 Node Documentation=https://github.com/OriginTrail/ot-node After=network.target diff --git a/installer/data/graphdb.service b/installer/data/graphdb.service index 046b4273c6..33a43c3594 100755 --- a/installer/data/graphdb.service +++ b/installer/data/graphdb.service @@ -1,7 +1,7 @@ #/lib/systemd/system/graphdb.service [Unit] -Description=GraphDB - OriginTrail V6 Stage 1 Beta Node +Description=GraphDB - OriginTrail V8 Node Documentation=https://github.com/OriginTrail/ot-node After=network.target diff --git a/installer/data/otnode.service b/installer/data/otnode.service index 92fbc8d5ed..4bd6e210a7 100755 --- a/installer/data/otnode.service +++ b/installer/data/otnode.service @@ -1,7 +1,7 @@ #/lib/systemd/system/otnode.service [Unit] -Description=OriginTrail V6 Node +Description=OriginTrail V8 Node Documentation=https://github.com/OriginTrail/ot-node/ After=network.target graphdb.service blazegraph.service diff --git a/installer/data/template/.origintrail_noderc_one_click_mainnet.json b/installer/data/template/.origintrail_noderc_one_click_mainnet.json deleted file mode 100644 index 1745c32afc..0000000000 --- a/installer/data/template/.origintrail_noderc_one_click_mainnet.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "modules":{ - "network": { - "implementation": { - "libp2p-service": { - "config": { - "nat": { - "enabled": true, - "externalIp": "" - } - } - } - } - }, - "blockchain":{ - "implementation":{ - "otp:2043":{ - "enabled":true, - "config":{ - "sharesTokenName":"", - "sharesTokenSymbol":"", - "operatorFee":"", - "evmManagementWalletPublicKey":"", - "operationalWallets":[ - { - "evmAddress":"", - "privateKey":"" - } - ] - } - }, - "gnosis:100":{ - "enabled":true, - "config":{ - "sharesTokenName":"", - "sharesTokenSymbol":"", - "operatorFee":"", - "rpcEndpoints":[ - "" - ], - "evmManagementWalletPublicKey":"", - "operationalWallets":[ - { - "evmAddress":"", - "privateKey":"" - } - ] - } - }, - "base:8453":{ - "enabled":true, - "config":{ - "evmManagementWalletPublicKey":"", - "operationalWallets":[ - { - "evmAddress":"", - "privateKey":"" - } - ], - "sharesTokenName":"", - "sharesTokenSymbol":"", - "operatorFee":"", - "rpcEndpoints":[ - "" - ] - } - } - } - }, - "tripleStore":{ - "implementation":{ - "ot-blazegraph":{ - "enabled":true, - "package":"./triple-store/implementation/ot-blazegraph/ot-blazegraph.js", - "config":{ - "repositories":{ - "privateCurrent":{ - "url":"http://localhost:9999", - "name":"private-current", - "username":"admin", - "password":"" - }, - "privateHistory":{ - "url":"http://localhost:9999", - "name":"private-history", - "username":"admin", - "password":"" - }, - "publicCurrent":{ - "url":"http://localhost:9999", - "name":"public-current", - "username":"admin", - "password":"" - }, - "publicHistory":{ - "url":"http://localhost:9999", - "name":"public-history", - "username":"admin", - "password":"" - } - } - } - } - } - } - }, - "auth":{ - "ipWhitelist":[ - "::1", - "127.0.0.1" - ] - } -} diff --git a/installer/data/template/.origintrail_noderc_one_click_testnet.json b/installer/data/template/.origintrail_noderc_one_click_testnet.json deleted file mode 100644 index d1abfdc4d7..0000000000 --- a/installer/data/template/.origintrail_noderc_one_click_testnet.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "modules":{ - "network": { - "implementation": { - "libp2p-service": { - "config": { - "nat": { - "enabled": true, - "externalIp": "" - } - } - } - } - }, - "blockchain":{ - "implementation":{ - "otp:20430":{ - "enabled":true, - "config":{ - "sharesTokenName":"", - "sharesTokenSymbol":"", - "operatorFee":"", - "evmManagementWalletPublicKey":"", - "operationalWallets":[ - { - "evmAddress":"", - "privateKey":"" - } - ] - } - }, - "gnosis:10200":{ - "enabled":true, - "config":{ - "sharesTokenName":"", - "sharesTokenSymbol":"", - "operatorFee":"", - "rpcEndpoints":[ - "" - ], - "evmManagementWalletPublicKey":"", - "operationalWallets":[ - { - "evmAddress":"", - "privateKey":"" - } - ] - } - }, - "base:84532":{ - "enabled":true, - "config":{ - "evmManagementWalletPublicKey":"", - "operationalWallets":[ - { - "evmAddress":"", - "privateKey":"" - } - ], - "sharesTokenName":"", - "sharesTokenSymbol":"", - "operatorFee":"", - "rpcEndpoints":[ - "" - ] - } - } - } - }, - "tripleStore":{ - "implementation":{ - "ot-blazegraph":{ - "enabled":true, - "package":"./triple-store/implementation/ot-blazegraph/ot-blazegraph.js", - "config":{ - "repositories":{ - "privateCurrent":{ - "url":"http://localhost:9999", - "name":"private-current", - "username":"admin", - "password":"" - }, - "privateHistory":{ - "url":"http://localhost:9999", - "name":"private-history", - "username":"admin", - "password":"" - }, - "publicCurrent":{ - "url":"http://localhost:9999", - "name":"public-current", - "username":"admin", - "password":"" - }, - "publicHistory":{ - "url":"http://localhost:9999", - "name":"public-history", - "username":"admin", - "password":"" - } - } - } - } - } - } - }, - "auth":{ - "ipWhitelist":[ - "::1", - "127.0.0.1" - ] - } -} diff --git a/installer/installer.sh b/installer/installer.sh old mode 100755 new mode 100644 index 77754cc11a..e13e7485c7 --- a/installer/installer.sh +++ b/installer/installer.sh @@ -49,8 +49,8 @@ notification_box() { check_ubuntu_version() { UBUNTU_VERSION=$(lsb_release -r -s) - if [[ "$UBUNTU_VERSION" != "20.04" && "$UBUNTU_VERSION" != "22.04" ]]; then - notification_box "Error: OriginTrail node installer currently requires Ubuntu 20.04 LTS or 22.04 LTS versions in order to execute successfully. You are installing on Ubuntu $UBUNTU_VERSION." + if [[ "$UBUNTU_VERSION" != "20.04" && "$UBUNTU_VERSION" != "22.04" && "$UBUNTU_VERSION" != "24.04" ]]; then + notification_box "Error: OriginTrail node installer currently requires Ubuntu 20.04 LTS, 22.04 LTS or 24.04 LTS versions in order to execute successfully. You are installing on Ubuntu $UBUNTU_VERSION." echo -e "${BRED}Please make sure that you get familiar with the requirements before setting up your OriginTrail node! Documentation: docs.origintrail.io${NC}" exit 1 fi @@ -83,8 +83,8 @@ install_aliases() { install_directory() { ARCHIVE_REPOSITORY_URL="github.com/OriginTrail/ot-node/archive" - BRANCH="v6/release/mainnet" - BRANCH_DIR="/root/ot-node-6-release-mainnet" + BRANCH="v8/release/testnet" + BRANCH_DIR="/root/ot-node-8-release-testnet" perform_step wget https://$ARCHIVE_REPOSITORY_URL/$BRANCH.zip "Downloading node files" perform_step unzip *.zip "Unzipping node files" @@ -98,14 +98,10 @@ install_directory() { perform_step ln -sfn $OTNODE_DIR/$OTNODE_VERSION $OTNODE_DIR/current "Creating symlink from $OTNODE_DIR/$OTNODE_VERSION to $OTNODE_DIR/current" } -install_firewall() { - ufw allow 22/tcp && ufw allow 8900 && ufw allow 9000 - yes | ufw enable -} install_prereqs() { export DEBIAN_FRONTEND=noninteractive - NODEJS_VER="16" + NODEJS_VER="20" perform_step install_aliases "Updating .bashrc file with OriginTrail node aliases" > /dev/null 2>&1 perform_step rm -rf /var/lib/dpkg/lock-frontend "Removing any frontend locks" > /dev/null 2>&1 @@ -115,24 +111,23 @@ install_prereqs() { perform_step apt install default-jre -y "Installing default-jre" > /dev/null 2>&1 perform_step apt install build-essential -y "Installing build-essential" > /dev/null 2>&1 - # Install nodejs 16 (via NVM). - wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash > /dev/null 2>&1 + # Install nodejs 20 (via NVM). + wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash > /dev/null 2>&1 export NVM_DIR="$HOME/.nvm" # This loads nvm [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm bash_completion [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" - nvm install v16.20.1 > /dev/null 2>&1 - nvm use v16.20.1 > /dev/null 2>&1 + nvm install $NODEJS_VER > /dev/null 2>&1 + nvm use $NODEJS_VER > /dev/null 2>&1 - # Set nodejs 16.20.1 as default and link node to /usr/bin/ - nvm alias default 16.20.1 > /dev/null 2>&1 + # Set nodejs 20 as default and link node to /usr/bin/ + nvm alias default $NODEJS_VER > /dev/null 2>&1 sudo ln -s $(which node) /usr/bin/ > /dev/null 2>&1 sudo ln -s $(which npm) /usr/bin/ > /dev/null 2>&1 apt remove unattended-upgrades -y > /dev/null 2>&1 - perform_step install_firewall "Configuring firewall" > /dev/null 2>&1 perform_step apt remove unattended-upgrades -y "Remove unattended upgrades" > /dev/null 2>&1 } @@ -253,7 +248,7 @@ request_operational_wallet_keys() { WALLET_ADDRESSES=() WALLET_PRIVATE_KEYS=() - echo "You'll now be asked to input addresses and private keys of your operational wallets for $1. Input an empty value to stop." + echo "You'll now be asked to input your operational wallets public and private keys (press ENTER to skip)" wallet_no=1 while true; do read -p "Please input the address for your $1 operational wallet no. $wallet_no:" address @@ -279,91 +274,37 @@ request_operational_wallet_keys() { ' --args "${WALLET_ADDRESSES[@]}" "${WALLET_PRIVATE_KEYS[@]}") } +# Define color codes +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +MAGENTA='\033[0;35m' +CYAN='\033[0;36m' +RESET='\033[0m' + +# Function to print colored text +print_color() { + local color=$1 + local text=$2 + echo -e "${color}${text}${RESET}" +} + install_node() { # Change directory to ot-node/current cd $OTNODE_DIR - # Request node environment with strict input validation - while true; do - read -p "Please select node environment: (Default: Mainnet) [T]estnet [M]ainnet [E]xit " choice - case "$choice" in - [tT]* ) nodeEnv="testnet"; break;; - [mM]* ) nodeEnv="mainnet"; break;; - [eE]* ) text_color $RED "Installer stopped by user"; exit;; - * ) text_color $RED "Invalid choice. Please enter either [T]estnet, [M]ainnet, or [E]xit."; continue;; - esac - done + # Set node environment to testnet + nodeEnv="testnet" + print_color $CYAN "🌐 Setting up node for Base Sepolia (Testnet) environment" echo "NODE_ENV=$nodeEnv" >> $OTNODE_DIR/.env - # Set blockchain options based on the selected environment - if [ "$nodeEnv" == "mainnet" ]; then - blockchain_options=("OriginTrail Parachain" "Gnosis" "Base") - otp_blockchain_id=2043 - gnosis_blockchain_id=100 - base_blockchain_id=8453 - else - blockchain_options=("OriginTrail Parachain" "Gnosis" "Base-Sepolia") - otp_blockchain_id=20430 - gnosis_blockchain_id=10200 - base_blockchain_id=84532 - fi - - # Ask user which blockchains to connect to - selected_blockchains=() - checkbox_states=() - for _ in "${blockchain_options[@]}"; do - checkbox_states+=("[ ]") - done - - while true; do - clear # Clear the screen for a cleaner display - echo "Please select the blockchains you want to connect your node to:" - for i in "${!blockchain_options[@]}"; do - echo " ${checkbox_states[$i]} $((i+1)). ${blockchain_options[$i]}" - done - echo " [ ] $((${#blockchain_options[@]}+1)). All Blockchains" - echo " Enter 'd' to finish selection" - - # Use read -n 1 to read a single character without requiring Enter - read -n 1 -p "Enter the number to toggle selection (1-$((${#blockchain_options[@]}+1))): " choice - echo # Add a newline after the selection - - if [[ "$choice" == "d" ]]; then - if [ ${#selected_blockchains[@]} -eq 0 ]; then - text_color $RED "You must select at least one blockchain. Please try again." - read -n 1 -p "Press any key to continue..." - continue - else - break - fi - elif [[ "$choice" =~ ^[1-${#blockchain_options[@]}]$ ]]; then - index=$((choice-1)) - if [[ "${checkbox_states[$index]}" == "[ ]" ]]; then - checkbox_states[$index]="[x]" - selected_blockchains+=("${blockchain_options[$index]}") - else - checkbox_states[$index]="[ ]" - selected_blockchains=(${selected_blockchains[@]/${blockchain_options[$index]}}) - fi - elif [[ "$choice" == "$((${#blockchain_options[@]}+1))" ]]; then - if [[ "${checkbox_states[-1]}" == "[ ]" ]]; then - for i in "${!checkbox_states[@]}"; do - checkbox_states[$i]="[x]" - done - selected_blockchains=("${blockchain_options[@]}") - else - for i in "${!checkbox_states[@]}"; do - checkbox_states[$i]="[ ]" - done - selected_blockchains=() - fi - else - text_color $RED "Invalid choice. Please enter a number between 1 and $((${#blockchain_options[@]}+1))." - read -n 1 -p "Press any key to continue..." - fi - done + # Set blockchain options for testnet + blockchain_options=("Base-Sepolia") + base_blockchain_id=84532 - text_color $GREEN "Final blockchain selection: ${selected_blockchains[*]}" + print_color $CYAN "🔗 Connecting to Base-Sepolia (Testnet)" + selected_blockchains=("Base-Sepolia") CONFIG_DIR=$OTNODE_DIR/.. perform_step touch $CONFIG_DIR/.origintrail_noderc "Configuring node config file" @@ -374,27 +315,9 @@ install_node() { "enabled": "true", "config": { "repositories": { - "privateCurrent": { - "url": $tripleStoreUrl, - "name": "private-current", - "username": "admin", - "password": "" - }, - "privateHistory": { + "dkg": { "url": $tripleStoreUrl, - "name": "private-history", - "username": "admin", - "password": "" - }, - "publicCurrent": { - "url": $tripleStoreUrl, - "name": "public-current", - "username": "admin", - "password": "" - }, - "publicHistory": { - "url": $tripleStoreUrl, - "name": "public-history", + "name": "dkg", "username": "admin", "password": "" } @@ -408,12 +331,12 @@ install_node() { validate_operator_fees() { local blockchain=$1 while true; do - read -p "Enter your operator fee for $blockchain (0-100): " OPERATOR_FEE + read -p "$(print_color $CYAN "Enter your operator fee for Base Sepolia (0-100): ")" OPERATOR_FEE if [[ "$OPERATOR_FEE" =~ ^[0-9]+$ ]] && [ "$OPERATOR_FEE" -ge 0 ] && [ "$OPERATOR_FEE" -le 100 ]; then - text_color $GREEN "Operator fee for $blockchain: $OPERATOR_FEE" + print_color $GREEN "✅ Operator fee for $blockchain: $OPERATOR_FEE" break else - text_color $RED "Invalid input. Please enter a number between 0 and 100." + print_color $RED "⚠️ Invalid input. Please enter a number between 0 and 100." fi done } @@ -423,25 +346,39 @@ install_node() { local blockchain=$1 local blockchain_id=$2 - request_operational_wallet_keys $blockchain - local EVM_OP_WALLET_KEYS=$OP_WALLET_KEYS_JSON + print_color $CYAN "🔧 Configuring Base Sepolia (Testnet)..." + + print_color $YELLOW "You'll now be asked to input your operational wallets public and private keys (press ENTER to skip)" + + local EVM_OP_WALLET_KEYS='[]' + local wallet_index=1 + while true; do + read -p "$(print_color $YELLOW "Please insert your operational wallet public key no. $wallet_index: ")" wallet_address + if [ -z "$wallet_address" ]; then + break + fi + print_color $GREEN " EVM operational wallet public key no. $wallet_index: $wallet_address" + + read -p "$(print_color $YELLOW "Please insert private key for your operational wallet no. $wallet_index: ")" wallet_private_key + if [ -z "$wallet_private_key" ]; then + break + fi + print_color $GREEN " EVM operational wallet private key no. $wallet_index: $wallet_private_key" - read -p "Enter your EVM management wallet address for $blockchain: " EVM_MANAGEMENT_WALLET - text_color $GREEN "EVM management wallet address for $blockchain: $EVM_MANAGEMENT_WALLET" + EVM_OP_WALLET_KEYS=$(echo $EVM_OP_WALLET_KEYS | jq '. += [{"address": "'$wallet_address'", "privateKey": "'$wallet_private_key'"}]') + wallet_index=$((wallet_index + 1)) + done - read -p "Enter your profile shares token name for $blockchain: " SHARES_TOKEN_NAME - text_color $GREEN "Profile shares token name for $blockchain: $SHARES_TOKEN_NAME" + read -p "$(print_color $YELLOW "Enter your EVM management wallet address : ")" EVM_MANAGEMENT_WALLET + print_color $GREEN "✅ EVM management wallet address : $EVM_MANAGEMENT_WALLET" - read -p "Enter your profile shares token symbol for $blockchain: " SHARES_TOKEN_SYMBOL - text_color $GREEN "Profile shares token symbol for $blockchain: $SHARES_TOKEN_SYMBOL" + read -p "$(print_color $YELLOW "Enter your profile node name : ")" NODE_NAME + print_color $GREEN "✅ Profile shares token name : $NODE_NAME" validate_operator_fees $blockchain - local RPC_ENDPOINT="" - if [ "$blockchain" == "gnosis" ] || [ "$blockchain" == "base" ]; then - read -p "Enter your $blockchain RPC endpoint: " RPC_ENDPOINT - text_color $GREEN "$blockchain RPC endpoint: $RPC_ENDPOINT" - fi + read -p "$(print_color $YELLOW "Enter your RPC endpoint: ")" RPC_ENDPOINT + print_color $GREEN "✅ RPC endpoint: $RPC_ENDPOINT" local jq_filter=$(cat < $CONFIG_DIR/origintrail_noderc_tmp + mv $CONFIG_DIR/origintrail_noderc_tmp $CONFIG_DIR/.origintrail_noderc + chmod 600 $CONFIG_DIR/.origintrail_noderc + } + + # Configure Base-Sepolia + configure_blockchain "base" $base_blockchain_id + + # Function to configure blockchain events services + configure_blockchain_events_services() { + local blockchain=$1 + local blockchain_id=$2 + + print_color $CYAN "🔧 Configuring Blockchain Events Service for Base Sepolia (Testnet)..." + + read -p "$(print_color $YELLOW "Enter your RPC endpoint: ")" RPC_ENDPOINT + print_color $GREEN "✅ RPC endpoint: $RPC_ENDPOINT" + + local jq_filter=$(cat < $CONFIG_DIR/origintrail_noderc_tmp mv $CONFIG_DIR/origintrail_noderc_tmp $CONFIG_DIR/.origintrail_noderc + chmod 600 $CONFIG_DIR/.origintrail_noderc } - # Configure selected blockchains - for blockchain in "${selected_blockchains[@]}"; do - case "$blockchain" in - "OriginTrail Parachain") - configure_blockchain "otp" $otp_blockchain_id - ;; - "Gnosis") - configure_blockchain "gnosis" $gnosis_blockchain_id - ;; - "Base" | "Base-Sepolia") - configure_blockchain "base" $base_blockchain_id - ;; - esac - done + # Configure blockchain events service for Base Sepolia + configure_blockchain_events_services "base" $base_blockchain_id # Now execute npm install after configuring wallets + print_color $CYAN "📦 Installing npm packages..." perform_step npm ci --omit=dev --ignore-scripts "Executing npm install" + print_color $CYAN "🔧 Setting up system service..." perform_step cp $OTNODE_DIR/installer/data/otnode.service /lib/systemd/system/ "Copying otnode service file" + print_color $CYAN "🚀 Starting OriginTrail node..." systemctl daemon-reload perform_step systemctl enable otnode "Enabling otnode" perform_step systemctl start otnode "Starting otnode" - perform_step systemctl status otnode "otnode service status" + perform_step systemctl status otnode "Checking otnode status" + + print_color $GREEN "✅ OriginTrail testnet node installation complete!" } + + #For Arch Linux installation if [[ ! -z $(grep "arch" "/etc/os-release") ]]; then - source <(curl -s https://raw.githubusercontent.com/OriginTrail/ot-node/v6/develop/installer/data/archlinux) + source <(curl -s https://raw.githubusercontent.com/OriginTrail/ot-node/v8/develop/installer/data/archlinux) fi @@ -568,6 +528,31 @@ if [[ $tripleStore = "ot-blazegraph" ]]; then fi fi + +# otnode logger sytemctl setup +yes | sudo apt install ncat + +cat < /etc/systemd/system/otnode-logger.service +[Unit] +Description=v8 Logging +After=network.target + +[Service] +ExecStart=/bin/sh -c "journalctl -u otnode.service -f | ncat v8logs.origin-trail.network 1488" +TimeoutStartSec=0 +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target +EOL + +# Enable and start the service +systemctl daemon-reload +systemctl enable otnode-logger.service +systemctl start otnode-logger.service + + header_color $BGREEN"Installing SQL..." install_sql @@ -578,6 +563,7 @@ install_node header_color $BGREEN"INSTALLATION COMPLETE !" +systemctl restart systemd-journald journalctl -u otnode --output cat -fn 200 text_color $GREEN " diff --git a/ot-node.js b/ot-node.js index 30bc23bb69..7b516ae7ae 100644 --- a/ot-node.js +++ b/ot-node.js @@ -5,7 +5,7 @@ import { createRequire } from 'module'; import { execSync } from 'child_process'; import DependencyInjection from './src/service/dependency-injection.js'; import Logger from './src/logger/logger.js'; -import { MIN_NODE_VERSION } from './src/constants/constants.js'; +import { MIN_NODE_VERSION, PARANET_ACCESS_POLICY } from './src/constants/constants.js'; import FileService from './src/service/file-service.js'; import OtnodeUpdateCommand from './src/commands/common/otnode-update-command.js'; import OtAutoUpdater from './src/modules/auto-updater/implementation/ot-auto-updater.js'; @@ -29,18 +29,18 @@ class OTNode { await this.checkForUpdate(); await this.removeUpdateFile(); - await MigrationExecutor.executeMultipleOpWalletsUserConfigurationMigration( + await MigrationExecutor.executeTripleStoreUserConfigurationMigration( this.container, this.logger, this.config, ); - this.logger.info(' ██████╗ ████████╗███╗ ██╗ ██████╗ ██████╗ ███████╗'); - this.logger.info('██╔═══██╗╚══██╔══╝████╗ ██║██╔═══██╗██╔══██╗██╔════╝'); - this.logger.info('██║ ██║ ██║ ██╔██╗ ██║██║ ██║██║ ██║█████╗'); - this.logger.info('██║ ██║ ██║ ██║╚██╗██║██║ ██║██║ ██║██╔══╝'); - this.logger.info('╚██████╔╝ ██║ ██║ ╚████║╚██████╔╝██████╔╝███████╗'); - this.logger.info(' ╚═════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚══════╝'); + this.logger.info('██████╗ ██╗ ██╗ ██████╗ ██╗ ██╗ █████╗ '); + this.logger.info('██╔══██╗██║ ██╔╝██╔════╝ ██║ ██║██╔══██╗'); + this.logger.info('██║ ██║█████╔╝ ██║ ███╗ ██║ ██║╚█████╔╝'); + this.logger.info('██║ ██║██╔═██╗ ██║ ██║ ╚██╗ ██╔╝██╔══██╗'); + this.logger.info('██████╔╝██║ ██╗╚██████╔╝ ╚████╔╝ ╚█████╔╝'); + this.logger.info('╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚════╝ '); this.logger.info('======================================================'); this.logger.info(` OriginTrail Node v${pjson.version}`); @@ -49,64 +49,19 @@ class OTNode { await this.initializeDependencyContainer(); this.initializeEventEmitter(); - await this.initializeModules(); + this.initializeBlockchainEventsService(); + await this.initializeShardingTableService(); await this.initializeParanets(); - await MigrationExecutor.executeRemoveServiceAgreementsForChiadoMigration( - this.container, - this.logger, - this.config, - ); - await this.createProfiles(); await this.initializeCommandExecutor(); - await this.initializeShardingTableService(); - - await MigrationExecutor.executeMarkStakingEventsAsProcessedMigration( - this.container, - this.logger, - this.config, - ); - - await this.initializeBlockchainEventListenerService(); - - await MigrationExecutor.executePullShardingTableMigration( - this.container, - this.logger, - this.config, - ); - - await MigrationExecutor.executeServiceAgreementPruningMigration( - this.container, - this.logger, - this.config, - ); await this.initializeRouters(); await this.startNetworkModule(); - this.startTelemetryModule(); this.resumeCommandExecutor(); this.logger.info('Node is up and running!'); - - MigrationExecutor.executeGetOldServiceAgreementsMigration( - this.container, - this.logger, - this.config, - ); - - MigrationExecutor.executeServiceAgreementPruningMigration( - this.container, - this.logger, - this.config, - ); - - MigrationExecutor.executeRemoveDuplicateServiceAgreementMigration( - this.container, - this.logger, - this.config, - ); } checkNodeVersion() { @@ -183,20 +138,6 @@ class OTNode { this.logger.info('Event emitter initialized'); } - async initializeBlockchainEventListenerService() { - try { - const eventListenerService = this.container.resolve('blockchainEventListenerService'); - await eventListenerService.initialize(); - eventListenerService.startListeningOnEvents(); - this.logger.info('Event Listener Service initialized successfully'); - } catch (error) { - this.logger.error( - `Unable to initialize event listener service. Error message: ${error.message} OT-node shutting down...`, - ); - this.stop(1); - } - } - async initializeRouters() { try { this.logger.info('Initializing http api and rpc router'); @@ -225,15 +166,19 @@ class OTNode { } async createProfiles() { + const cryptoService = this.container.resolve('cryptoService'); const blockchainModuleManager = this.container.resolve('blockchainModuleManager'); + const networkModuleManager = this.container.resolve('networkModuleManager'); + const peerId = networkModuleManager.getPeerId().toB58String(); const createProfilesPromises = blockchainModuleManager .getImplementationNames() .map(async (blockchain) => { try { - if (!(await blockchainModuleManager.identityIdExists(blockchain))) { + const identityExists = await blockchainModuleManager.identityIdExists( + blockchain, + ); + if (!identityExists) { this.logger.info(`Creating profile on network: ${blockchain}`); - const networkModuleManager = this.container.resolve('networkModuleManager'); - const peerId = networkModuleManager.getPeerId().toB58String(); await blockchainModuleManager.createProfile(blockchain, peerId); if ( @@ -248,21 +193,30 @@ class OTNode { ); await setTimeout(10000); execSync( - `npm run set-ask -- --rpcEndpoint=${ - blockchainConfig.rpcEndpoints[0] - } --ask=${ - blockchainConfig.initialAskAmount + - (Math.random() - 0.5) * blockchainConfig.initialAskAmount - } --privateKey=${ - blockchainConfig.operationalWallets[0].privateKey - } --hubContractAddress=${blockchainConfig.hubContractAddress}`, + `npm run set-ask -- --rpcEndpoint=${blockchainConfig.rpcEndpoints[0]} --ask=${blockchainConfig.initialAskAmount} --privateKey=${blockchainConfig.operationalWallets[0].privateKey} --hubContractAddress=${blockchainConfig.hubContractAddress}`, { stdio: 'inherit' }, ); } } + const identityId = await blockchainModuleManager.getIdentityId(blockchain); this.logger.info(`Identity ID: ${identityId}`); + + if (identityExists) { + const onChainNodeId = await blockchainModuleManager.getNodeId( + blockchain, + identityId, + ); + const onChainPeerId = cryptoService.convertHexToAscii(onChainNodeId); + + if (peerId !== onChainPeerId) { + this.logger.warn( + `Local peer id: ${peerId} doesn't match on chain peer id: ${onChainPeerId} for blockchain: ${blockchain}, identity id: ${identityId}.`, + ); + blockchainModuleManager.removeImplementation(blockchain); + } + } } catch (error) { this.logger.warn( `Unable to create ${blockchain} blockchain profile. Removing implementation. Error: ${error.message}`, @@ -312,22 +266,6 @@ class OTNode { await networkModuleManager.start(); } - startTelemetryModule() { - const telemetryModuleManager = this.container.resolve('telemetryModuleManager'); - const repositoryModuleManager = this.container.resolve('repositoryModuleManager'); - telemetryModuleManager.listenOnEvents((eventData) => { - repositoryModuleManager.createEventRecord( - eventData.operationId, - eventData.blockchainId, - eventData.lastEvent, - eventData.timestamp, - eventData.value1, - eventData.value2, - eventData.value3, - ); - }); - } - async initializeShardingTableService() { try { const shardingTableService = this.container.resolve('shardingTableService'); @@ -341,6 +279,19 @@ class OTNode { } } + initializeBlockchainEventsService() { + try { + const blockchainEventsService = this.container.resolve('blockchainEventsService'); + blockchainEventsService.initializeBlockchainEventsServices(); + this.logger.info('Blockchain Events Service initialized successfully'); + } catch (error) { + this.logger.error( + `Unable to initialize Blockchain Events Service. Error message: ${error.message} OT-node shutting down...`, + ); + this.stop(1); + } + } + async removeUpdateFile() { const updateFilePath = this.fileService.getUpdateFilePath(); await this.fileService.removeFile(updateFilePath).catch((error) => { @@ -368,45 +319,69 @@ class OTNode { const ualService = this.container.resolve('ualService'); const validParanets = []; - // eslint-disable-next-line no-unsafe-optional-chaining - for (const paranetUAL of this.config.assetSync?.syncParanets) { + const syncParanets = + this.config.assetSync && this.config.assetSync.syncParanets + ? this.config.assetSync.syncParanets + : []; + for (const paranetUAL of syncParanets) { if (!ualService.isUAL(paranetUAL)) { this.logger.warn( `Unable to initialize Paranet with id ${paranetUAL} because of invalid UAL format`, ); - } else { - const { blockchain, contract, tokenId } = ualService.resolveUAL(paranetUAL); - if (!blockchainModuleManager.getImplementationNames().includes(blockchain)) { + continue; + } + + const { blockchain, contract, knowledgeCollectionId } = + ualService.resolveUAL(paranetUAL); + if (!blockchainModuleManager.getImplementationNames().includes(blockchain)) { + this.logger.warn( + `Unable to initialize Paranet with id ${paranetUAL} because of unsupported blockchain implementation`, + ); + continue; + } + + const paranetId = paranetService.constructParanetId(contract, knowledgeCollectionId); + // eslint-disable-next-line no-await-in-loop + const paranetExists = await blockchainModuleManager.paranetExists( + blockchain, + paranetId, + ); + if (!paranetExists) { + this.logger.warn( + `Unable to initialize Paranet with id ${paranetUAL} because it doesn't exist`, + ); + continue; + } + + // eslint-disable-next-line no-await-in-loop + const nodesAccessPolicy = await blockchainModuleManager.getNodesAccessPolicy( + blockchain, + paranetId, + ); + if (nodesAccessPolicy === PARANET_ACCESS_POLICY.CURATED) { + // eslint-disable-next-line no-await-in-loop + const identityId = await blockchainModuleManager.getIdentityId(blockchain); + // eslint-disable-next-line no-await-in-loop + const isCuratedNode = await blockchainModuleManager.isCuratedNode( + blockchain, + paranetId, + identityId, + ); + if (!isCuratedNode) { this.logger.warn( - `Unable to initialize Paranet with id ${paranetUAL} because of unsupported blockchain implementation`, + `Unable to initialize Paranet with id ${paranetUAL} because node with id ${identityId} is not a curated node`, ); - } else { - const paranetId = paranetService.constructParanetId( - blockchain, - contract, - tokenId, - ); - // eslint-disable-next-line no-await-in-loop - const paranetExists = await blockchainModuleManager.paranetExists( - blockchain, - paranetId, - ); - if (!paranetExists) { - this.logger.warn( - `Unable to initialize Paranet with id ${paranetUAL} because it doesn't exist`, - ); - } else { - validParanets.push(paranetUAL); - const repository = paranetService.getParanetRepositoryName(paranetUAL); - // eslint-disable-next-line no-await-in-loop - await tripleStoreModuleManager.initializeParanetRepository(repository); - // eslint-disable-next-line no-await-in-loop - await paranetService.initializeParanetRecord(blockchain, paranetId); - } + continue; } } - } + validParanets.push(paranetUAL); + const repository = paranetService.getParanetRepositoryName(paranetUAL); + // eslint-disable-next-line no-await-in-loop + await tripleStoreModuleManager.initializeParanetRepository(repository); + // eslint-disable-next-line no-await-in-loop + await paranetService.initializeParanetRecord(blockchain, paranetId); + } this.config.assetSync.syncParanets = validParanets; tripleStoreService.initializeRepositories(); } diff --git a/package-lock.json b/package-lock.json index e88dd6aa07..f1642657b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "origintrail_node", - "version": "6.5.1+hotfix.3", + "version": "8.0.0-sigma.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "origintrail_node", - "version": "6.5.1+hotfix.3", + "version": "8.0.0-sigma.17", "license": "ISC", "dependencies": { "@comunica/query-sparql": "^2.4.3", @@ -17,15 +17,16 @@ "@polkadot/keyring": "^10.1.7", "@polkadot/util": "^10.1.7", "@polkadot/util-crypto": "^10.1.7", + "@questdb/nodejs-client": "^3.0.0", "app-root-path": "^3.1.0", - "assertion-tools": "^2.0.2", + "assertion-tools": "^8.0.0-gamma.0", "async": "^3.2.4", "async-mutex": "^0.3.2", "awilix": "^7.0.3", "axios": "^1.6.0", "cors": "^2.8.5", "deep-extend": "^0.6.0", - "dkg-evm-module": "^4.3.3", + "dkg-evm-module": "^8.0.0-sigma.3", "dotenv": "^16.0.1", "ethers": "^5.7.2", "express": "^4.18.1", @@ -46,6 +47,7 @@ "libp2p-mplex": "^0.10.7", "libp2p-noise": "^4.0.0", "libp2p-tcp": "^0.17.2", + "mcl-wasm": "^1.7.0", "minimist": "^1.2.7", "ms": "^2.1.3", "mysql2": "^3.3.0", @@ -56,6 +58,8 @@ "rolling-rate-limiter": "^0.2.13", "semver": "^7.5.2", "sequelize": "^6.29.0", + "sqlite": "^5.1.1", + "sqlite3": "^5.1.7", "timeout-abort-controller": "^3.0.0", "toobusy-js": "^0.5.1", "uint8arrays": "^3.1.0", @@ -88,13 +92,14 @@ }, "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" }, "node_modules/@ampproject/remapping": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -105,8 +110,9 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", @@ -118,16 +124,18 @@ }, "node_modules/@babel/compat-data": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -155,21 +163,24 @@ }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.26.3", "@babel/types": "^7.26.3", @@ -183,8 +194,9 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -198,24 +210,27 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -226,8 +241,9 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", @@ -242,32 +258,36 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", "@babel/types": "^7.26.0" @@ -278,8 +298,9 @@ }, "node_modules/@babel/parser": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.26.3" }, @@ -292,7 +313,8 @@ }, "node_modules/@babel/runtime": { "version": "7.26.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -302,8 +324,9 @@ }, "node_modules/@babel/template": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.25.9", "@babel/parser": "^7.25.9", @@ -315,8 +338,9 @@ }, "node_modules/@babel/traverse": { "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.3", @@ -332,16 +356,18 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -352,18 +378,20 @@ }, "node_modules/@bergos/jsonparse": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@bergos/jsonparse/-/jsonparse-1.4.2.tgz", + "integrity": "sha512-qUt0QNJjvg4s1zk+AuLM6s/zcsQ8MvGn7+1f0vPuxvpCYa08YtTryuDInngbEyW5fNGGYe2znKt61RMGd5HnXg==", "engines": [ "node >= 0.2.0" ], - "license": "MIT", "dependencies": { "buffer": "^6.0.3" } }, "node_modules/@colors/colors": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -371,7 +399,8 @@ }, "node_modules/@comunica/actor-abstract-mediatyped": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-2.10.0.tgz", + "integrity": "sha512-0o6WBujsMnIVcwvRJv6Nj+kKPLZzqBS3On48rm01Rh9T1/My0E/buJMXwgcARKCfMonc2mJ9zxpPCh5ilGEU2A==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -379,7 +408,8 @@ }, "node_modules/@comunica/actor-abstract-parse": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-2.10.0.tgz", + "integrity": "sha512-0puCWF+y24EDOOAUUVVbC+tOf4UV+LzEbqi8T5v25jcVGCXyTqfra+bDywfrcv3adrVp18jLCJ46ycaH5xhy9Q==", "dependencies": { "@comunica/core": "^2.10.0", "readable-stream": "^4.4.2" @@ -387,7 +417,8 @@ }, "node_modules/@comunica/actor-abstract-path": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-path/-/actor-abstract-path-2.10.1.tgz", + "integrity": "sha512-+k1ltuUuIyn4iUm5oRMObyt2zhu68h7ymzxuKU4ezATlgwfwj6EM7/3W2n2/gxjg9tcFMr5GC6aNnFQmq3Iuig==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -403,7 +434,8 @@ }, "node_modules/@comunica/actor-context-preprocess-source-to-destination": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-source-to-destination/-/actor-context-preprocess-source-to-destination-2.10.0.tgz", + "integrity": "sha512-sQc42Sd4cuVumZ9+PDnWBTBYneqCFShFliK8Et83GR3wBGzu9x0tS/M2o3e63sBbb6ZkWHyO5jl/O8AbrjhcTg==", "dependencies": { "@comunica/bus-context-preprocess": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -413,7 +445,8 @@ }, "node_modules/@comunica/actor-dereference-fallback": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-2.10.0.tgz", + "integrity": "sha512-RSc/ScPdC7l13aZjz/6r4niWA8WDETbzuESQKKSWXi/HAlFOyOxdrDADdayVY2oyeZHIQibeNRtSi2ItzU7OPQ==", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/core": "^2.10.0" @@ -421,7 +454,8 @@ }, "node_modules/@comunica/actor-dereference-http": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-2.10.2.tgz", + "integrity": "sha512-gdDo83W1TAgD2jx0kVbzZKzzt++L4Y4fbyTOH3duy6vx1EMGGZlNCp6I1uguepKEjNX4N0zhAcZzdJcv8A3XMA==", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-http": "^2.10.2", @@ -433,7 +467,8 @@ }, "node_modules/@comunica/actor-dereference-rdf-parse": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-2.10.0.tgz", + "integrity": "sha512-ANWL6Bv+2WHUjVRS7hfkOfVBNJs8xYZ9KHlgBOQ94CKtQZB9uSMjdb1hLp/cQjiDmFIWLn0+GM5Xi0KFwBkVAw==", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-dereference-rdf": "^2.10.0", @@ -442,7 +477,8 @@ }, "node_modules/@comunica/actor-hash-bindings-sha1": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-hash-bindings-sha1/-/actor-hash-bindings-sha1-2.10.0.tgz", + "integrity": "sha512-f981PcCiDWbdZfM1ct1v1q/VII14y18lo1enEdHB25SF0hCkzIDwh9IrfDfJDju5I6luSWNE/MYMMeAAmF9e3g==", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/core": "^2.10.0", @@ -453,7 +489,8 @@ }, "node_modules/@comunica/actor-http-fetch": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-2.10.2.tgz", + "integrity": "sha512-siHGx0TMVNb2gXvOroq0B3JE6uuS+4s+MsDkntqdBNVigwVYqLpNSKEaL5is8pputFfohJfDQY06lAHbfDNEcw==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -464,7 +501,8 @@ }, "node_modules/@comunica/actor-http-proxy": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-2.10.2.tgz", + "integrity": "sha512-3yUF8BCh4nwq8J6NRILEsyNrQNStkE9ggJ7hYwRfA1XcMgz1pANNaWJ2P2TEKH1jNinr23bL3JeuUZCm9Kz9dA==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -474,7 +512,8 @@ }, "node_modules/@comunica/actor-http-wayback": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-wayback/-/actor-http-wayback-2.10.2.tgz", + "integrity": "sha512-wjYNXRrJvMqt9paO3HawyM+O5/14ofSHFuMAwGr/UyZQ5pCSFkY0YPd+qp9y8C4xvypPgsvT3PtiRyKgjD4FWw==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -485,7 +524,8 @@ }, "node_modules/@comunica/actor-init-query": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-init-query/-/actor-init-query-2.10.2.tgz", + "integrity": "sha512-7A4bXdKCjXRdUThvMOOyg+U17DPeBAsyDYz1SA8F4lPUR06NapcG5TmZF+YWUTN/2EG5fZPUnD3etKuPXreGUw==", "dependencies": { "@comunica/actor-http-proxy": "^2.10.2", "@comunica/bus-context-preprocess": "^2.10.0", @@ -516,7 +556,8 @@ }, "node_modules/@comunica/actor-optimize-query-operation-bgp-to-join": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-bgp-to-join/-/actor-optimize-query-operation-bgp-to-join-2.10.0.tgz", + "integrity": "sha512-M9vwM4a3VQA/ir8Q7eGRNzzx52u6RJFIXBW8p+Zkn+zv+4fsket3zLYJGhJU7dcvaSXcOi68rDP/r8KfgNXr4Q==", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -525,7 +566,8 @@ }, "node_modules/@comunica/actor-optimize-query-operation-join-bgp": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-bgp/-/actor-optimize-query-operation-join-bgp-2.10.0.tgz", + "integrity": "sha512-tzZojWPbWn/S0DZGjGfV90ZRJVWT/yX3DKGgZ1ur33U5TW8n/fBQxHNMPCLu0GkMQ1dyx6bU+ekILTqm+21Jyw==", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -534,7 +576,8 @@ }, "node_modules/@comunica/actor-optimize-query-operation-join-connected": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-connected/-/actor-optimize-query-operation-join-connected-2.10.0.tgz", + "integrity": "sha512-RsbKIAxX1HyoR/AUzqIV++dTcLiEElRIVDHYTaXVVvGgHECYdh9s+oc8cvv/lDbLVpfnc6P9C9BTAfrqOjKkhA==", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -543,7 +586,8 @@ }, "node_modules/@comunica/actor-query-operation-ask": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-ask/-/actor-query-operation-ask-2.10.1.tgz", + "integrity": "sha512-7oktqE4fkMhi6Hs9XCcwwoZRsEismVqJZ5wp9lXXOPaxnHEiFyj5gb/B6baCstoCvCt6LcU8fVvfHSitbFCpeQ==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -553,7 +597,8 @@ }, "node_modules/@comunica/actor-query-operation-bgp-join": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-bgp-join/-/actor-query-operation-bgp-join-2.10.1.tgz", + "integrity": "sha512-eNpnvgFyKlZEHkMzubYL8ndADSsAQH4rwXvh22CGnf0FwyndHr6TEpmE6j77m9vXiSJ/lda0U3Zv4vIXvtREOw==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -563,7 +608,8 @@ }, "node_modules/@comunica/actor-query-operation-construct": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-construct/-/actor-query-operation-construct-2.10.1.tgz", + "integrity": "sha512-S+Nt1+1psv01QRnfytZjiog2NBNHIbjr7XIv+MO3p6aVmLCoZ6lmjxSGNdbX+EmcGr7tbbafXK5z3zRM+ke8Mw==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -577,7 +623,8 @@ }, "node_modules/@comunica/actor-query-operation-describe-subject": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-describe-subject/-/actor-query-operation-describe-subject-2.10.1.tgz", + "integrity": "sha512-E8i0M6haJ5iZVeHMn5PbvA4G+l87mcZKqIxVpYAnJVpD667F74Dkx3IMbk+ohRmyRmnkOEmztUrjeyixHHzUEQ==", "dependencies": { "@comunica/actor-query-operation-union": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -590,7 +637,8 @@ }, "node_modules/@comunica/actor-query-operation-distinct-hash": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-distinct-hash/-/actor-query-operation-distinct-hash-2.10.1.tgz", + "integrity": "sha512-exvJbgcJ0Pe4EGbLJD5LuGpvaGcFeckCxwB5pyd9OewNke+tLLP7nbEjB8KFEPpCO9LE7zt4faB1HvpJdEHQKQ==", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/bus-query-operation": "^2.10.1", @@ -601,7 +649,8 @@ }, "node_modules/@comunica/actor-query-operation-extend": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-extend/-/actor-query-operation-extend-2.10.1.tgz", + "integrity": "sha512-wkZxUfDu8T5lXD+OFLItmjjbnEBqtv0z8pxVKgI/gX8mOeu5KcPWLH0dJODTWoIzIYrJhV25FmCgBks1rt6K8w==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -613,7 +662,8 @@ }, "node_modules/@comunica/actor-query-operation-filter-sparqlee": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-filter-sparqlee/-/actor-query-operation-filter-sparqlee-2.10.1.tgz", + "integrity": "sha512-w2PnDNnlf+9B947ZdeSs7NpW9qGJjRiuODZYwhh0e6cx89GPDhEDVuJwawF6VP3m/oLcgXOAdif0Wwo3d8KNAA==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -625,7 +675,8 @@ }, "node_modules/@comunica/actor-query-operation-from-quad": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-from-quad/-/actor-query-operation-from-quad-2.10.1.tgz", + "integrity": "sha512-7D4R8ONNJJPzoRu96dwIToOEk6/3O/T26FRzCqQKrbjFHNkX2v92KA/SiDzNz59VmDNWjYF1rsV31Ade6J89MA==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -636,7 +687,8 @@ }, "node_modules/@comunica/actor-query-operation-group": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-group/-/actor-query-operation-group-2.10.1.tgz", + "integrity": "sha512-Od5s9Vb6uDPzXa6OAUC1WSMF96spNPJI2Zqf0Ixejw4zCNevOK/VwHivYfF0vHIUZxjRrOl3Al1ZU9L8n5Wxlw==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-hash-bindings": "^2.10.0", @@ -652,7 +704,8 @@ }, "node_modules/@comunica/actor-query-operation-join": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-join/-/actor-query-operation-join-2.10.1.tgz", + "integrity": "sha512-CGed1nSPvKsM8rvj/4KFME0lLnzlDMMEU+xGczu+BZW4FK+Z6RyBtHIUmy8SgFvNP1GXz83q8KnoecF5z8IpjA==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -663,7 +716,8 @@ }, "node_modules/@comunica/actor-query-operation-leftjoin": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-leftjoin/-/actor-query-operation-leftjoin-2.10.1.tgz", + "integrity": "sha512-j0RwdoiV2WsCQnxcSa//m5FZ+ZHDRBm6ObsgpqS44WxzpV8rIB6Dq/3UxGgE7D2vK400JaiiHa3dFiHTwDF18w==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -675,7 +729,8 @@ }, "node_modules/@comunica/actor-query-operation-minus": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-minus/-/actor-query-operation-minus-2.10.1.tgz", + "integrity": "sha512-rUvHbc5/EUWMSJUgOEtxabCJ9IT9YThuG0FhcQk+BGRPGmsv2oz8uri5urKgCjfVXMH/09hRZksiDMqrmkQmZw==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -686,7 +741,8 @@ }, "node_modules/@comunica/actor-query-operation-nop": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-nop/-/actor-query-operation-nop-2.10.1.tgz", + "integrity": "sha512-l/Z8Uuoq3AlSoxkgYjrP7O7Xc9h8Y3ZOh0f7UKCuAST3U5vPQ3k1YJckrRtdli8s0NHptN9TfZjwviEHuYbDFQ==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -699,7 +755,8 @@ }, "node_modules/@comunica/actor-query-operation-orderby-sparqlee": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-orderby-sparqlee/-/actor-query-operation-orderby-sparqlee-2.10.1.tgz", + "integrity": "sha512-8D2JmCsBtqJC29zfiaAXNzZdsKybhDFo2F8iTHul3nQHxBC2CeKDrBnY70B/HpbWxkDE+pwMfSTEFc/CvNZN6A==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -711,7 +768,8 @@ }, "node_modules/@comunica/actor-query-operation-path-alt": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-alt/-/actor-query-operation-path-alt-2.10.1.tgz", + "integrity": "sha512-y1AHtkibThqHve79wAriXqrZ6hdLBhcdwyOpVqqEhY19a32P97Xv58bOwOkNeLguYdn/5CFlCTHz6dnzxUIoXg==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/actor-query-operation-union": "^2.10.1", @@ -723,7 +781,8 @@ }, "node_modules/@comunica/actor-query-operation-path-inv": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-inv/-/actor-query-operation-path-inv-2.10.1.tgz", + "integrity": "sha512-pd30Ug7bOAZ5amfA3I6v+cpitlDn2i5fE1BA006LYJISCAHSfKEgLmU2Q4ZPbwi4s1A8WKKLV7Q389Ru3Xtziw==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -733,7 +792,8 @@ }, "node_modules/@comunica/actor-query-operation-path-link": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-link/-/actor-query-operation-path-link-2.10.1.tgz", + "integrity": "sha512-akujCHvCLmxaZ3gw9b1odDcqqAQnbbr9E8dTWLZyMJ4Mei8q/FmfWTF5MjGuQOas4UmQ3mm6gcqAKRZnJqlXNg==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -743,7 +803,8 @@ }, "node_modules/@comunica/actor-query-operation-path-nps": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-nps/-/actor-query-operation-path-nps-2.10.1.tgz", + "integrity": "sha512-5X3EUzn6Cygz94gNn1XWQQUZVp+de59sw8/rxPQqgwzdi1Y1O9zrLv+/7GqMJoLz6MHmDSgsceTIY4eC1qmmOQ==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -753,7 +814,8 @@ }, "node_modules/@comunica/actor-query-operation-path-one-or-more": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-one-or-more/-/actor-query-operation-path-one-or-more-2.10.1.tgz", + "integrity": "sha512-SkQeKESQqZOlzuMIsipcZ3ni7YfeyYMZCOtxC01HFbeyq+SDVbyfYUZ4Dd9uAi/g3InyzJRfou4csxHS8g7sHw==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -765,7 +827,8 @@ }, "node_modules/@comunica/actor-query-operation-path-seq": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-seq/-/actor-query-operation-path-seq-2.10.1.tgz", + "integrity": "sha512-8TYLdVYaq9oMd9cuLFay78103bOfvygQU/C8NtPdLI9kkRWFsBatvaKmykHOHQAvaLgNhniOlrIJNEpepZGnAQ==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -776,7 +839,8 @@ }, "node_modules/@comunica/actor-query-operation-path-zero-or-more": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-more/-/actor-query-operation-path-zero-or-more-2.10.1.tgz", + "integrity": "sha512-DtqBSw4LV1KI3q1YYAwgXlWrz1PO4EUpe/bVri0UB3JSQnxjBMHuJlHn2crC9Z93tmizneXxfvtWlLSXRrehsw==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -789,7 +853,8 @@ }, "node_modules/@comunica/actor-query-operation-path-zero-or-one": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-one/-/actor-query-operation-path-zero-or-one-2.10.1.tgz", + "integrity": "sha512-qePX+7iW5DXDwaYO210y7jhSU32Zk82S5UHuLLvd4q4HS1Z7j8e4KhukbeZKzQmOsO8S5JOHHM9vwvsOc3GPlw==", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -802,7 +867,8 @@ }, "node_modules/@comunica/actor-query-operation-project": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-project/-/actor-query-operation-project-2.10.1.tgz", + "integrity": "sha512-KAaPl4GFIQMWR8I8OoJroktGssPKGbEEJHyGzTuYXrmJrcXgknOxf5IUSVJNpaFfS6dshT6nqW+ciT+wRzz0Tg==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -815,7 +881,8 @@ }, "node_modules/@comunica/actor-query-operation-quadpattern": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-quadpattern/-/actor-query-operation-quadpattern-2.10.1.tgz", + "integrity": "sha512-RZj1TXW+VDU4aYJVnSzgs8q0340e+YUeGLtoY9sl0Xzc8YNaIus4nXRUz/KfOXDknxm1q+a4Bof4yHNgXtb1Hw==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -833,7 +900,8 @@ }, "node_modules/@comunica/actor-query-operation-reduced-hash": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-reduced-hash/-/actor-query-operation-reduced-hash-2.10.1.tgz", + "integrity": "sha512-9hX25ztkbNxnaUd7Gtilok+9WJkr/s3a3y4axLoYX4/nOogYN+nZRKChvNSn4qn/lWvpG5VWv4+q0en1fP+AGA==", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/bus-query-operation": "^2.10.1", @@ -845,7 +913,8 @@ }, "node_modules/@comunica/actor-query-operation-service": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-service/-/actor-query-operation-service-2.10.1.tgz", + "integrity": "sha512-GvpvhUmhkVFOCLrmcblgIPqi91XPRog5WkC9NFMRCToaSNAMQq82DX2dvwzn3IFItcmyZrmy+GYoaQ9miK2uVQ==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -859,7 +928,8 @@ }, "node_modules/@comunica/actor-query-operation-slice": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-slice/-/actor-query-operation-slice-2.10.1.tgz", + "integrity": "sha512-KOBnTIUvwf28WB7oHevUC/xciEdH5gLg7MN8DvamkAkUiUjviEsRpkswUiD8lFe1dAs0ekA4pC0NoZ8BWp3uqA==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -870,7 +940,8 @@ }, "node_modules/@comunica/actor-query-operation-sparql-endpoint": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-sparql-endpoint/-/actor-query-operation-sparql-endpoint-2.10.2.tgz", + "integrity": "sha512-nbBzVHhYHUu/9qg9ZzTw7rKvsRb3ViBvM+Fye0oMXojZUbyu2WI6eLFUc2Ze1/LYDNf/1KHNpkg6OdsiEi8HFQ==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -891,7 +962,8 @@ }, "node_modules/@comunica/actor-query-operation-union": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-union/-/actor-query-operation-union-2.10.1.tgz", + "integrity": "sha512-Ezi2bAa9r6yyffXDDUPLlKoszsXnuhDUeQSQuU3c7JEAcwip3wC3zMNkavowwfRZ/1D5doitmUEdw2lAd+xloA==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -905,7 +977,8 @@ }, "node_modules/@comunica/actor-query-operation-update-add-rewrite": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-add-rewrite/-/actor-query-operation-update-add-rewrite-2.10.1.tgz", + "integrity": "sha512-is3mrCPciExrlny5JbCvB011kUNYE9/fzQc/zmA3h24S5hHZbygA9mSS+dI85IwwqdKPYlrEqfn8c0kCVWMKyw==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -916,7 +989,8 @@ }, "node_modules/@comunica/actor-query-operation-update-clear": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-clear/-/actor-query-operation-update-clear-2.10.2.tgz", + "integrity": "sha512-+sf6+LvXdKBv2pCuBH/ad5QdpheZSPEvw19UoaPQRQyQVBzIskOtfs4rwJHSn/YmoqhbstKZszakad3oxWwTTg==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -929,7 +1003,8 @@ }, "node_modules/@comunica/actor-query-operation-update-compositeupdate": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-compositeupdate/-/actor-query-operation-update-compositeupdate-2.10.1.tgz", + "integrity": "sha512-IVNouBPFQLOczhW3qHyEoyxWrc7wnVT2vPwRHEaGlfnSiYAX42XSNLb9jR0XjB70wh3Civue4Ovs3upOXdrN3Q==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -939,7 +1014,8 @@ }, "node_modules/@comunica/actor-query-operation-update-copy-rewrite": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-copy-rewrite/-/actor-query-operation-update-copy-rewrite-2.10.1.tgz", + "integrity": "sha512-l/3AM35hjahyHmiLoB3FPm0Jlhdmd/vqgOGj7V3Ra+TfHo5h8XOB3uzG78Q06HQNw4iyONBZc5lLlYXkzRd5lg==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -949,7 +1025,8 @@ }, "node_modules/@comunica/actor-query-operation-update-create": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-create/-/actor-query-operation-update-create-2.10.2.tgz", + "integrity": "sha512-g3DwLkYFTU8uZoIOV7oNPWStBmqvnBBPvLngG19MQQezuVoh8w88efxhbN0B/khi5/v4qcLsr7C0ffAaPF8Fbg==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -960,7 +1037,8 @@ }, "node_modules/@comunica/actor-query-operation-update-deleteinsert": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-deleteinsert/-/actor-query-operation-update-deleteinsert-2.10.2.tgz", + "integrity": "sha512-FiRCLUAxkDoFpOe9jKC5llI7njbFdb1N8McRvZjBazUS4XDutjTZEkcKLs6AcRyG3esfHt6gNm6PqCuZ+aP8TA==", "dependencies": { "@comunica/actor-query-operation-construct": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -975,7 +1053,8 @@ }, "node_modules/@comunica/actor-query-operation-update-drop": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-drop/-/actor-query-operation-update-drop-2.10.2.tgz", + "integrity": "sha512-N/878InwoyQfysjCyo9r+H82eUlNeEGODJ95gCvzF/QGRc11N3dfcd3XijyHQ9OKAoQ9oR5gcS829LB3BDtKHg==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -988,7 +1067,8 @@ }, "node_modules/@comunica/actor-query-operation-update-load": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-load/-/actor-query-operation-update-load-2.10.2.tgz", + "integrity": "sha512-lQb5fxb1+ZFbQkylmepze+e+LtVmVNvAvFBvjxUSfCT62uIKKHMeh1So5kTrGD0Co4ABCs1h6o9WB+8yQzFtQw==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -1001,7 +1081,8 @@ }, "node_modules/@comunica/actor-query-operation-update-move-rewrite": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-move-rewrite/-/actor-query-operation-update-move-rewrite-2.10.1.tgz", + "integrity": "sha512-GDLSHG2++EAAyUKhDu+mM6QfMTuzM8dS24HqeQL5Wzbkdc2KTmNKyJuhJw6SfXr6EiF/kxf1GPY6zwjcwACx/w==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -1011,7 +1092,8 @@ }, "node_modules/@comunica/actor-query-operation-values": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-values/-/actor-query-operation-values-2.10.1.tgz", + "integrity": "sha512-++9IgCVCQPIF8fzZLmrVpxPj8eI9TvkLshHAugQQBnhSijrDMUudW9eoA+eFmCaD/Ru7YtlKe3OJzRGV8FCG+Q==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1025,7 +1107,8 @@ }, "node_modules/@comunica/actor-query-parse-graphql": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-graphql/-/actor-query-parse-graphql-2.10.0.tgz", + "integrity": "sha512-l3RrkxElDYV4weXt3vpC0Q0She4AhbvPbPDronQulgN9nFAZhz4z9k8800T5uWMsL98wHNNXDFlnFk5S38lsow==", "dependencies": { "@comunica/bus-query-parse": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -1035,7 +1118,8 @@ }, "node_modules/@comunica/actor-query-parse-sparql": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-sparql/-/actor-query-parse-sparql-2.10.0.tgz", + "integrity": "sha512-DUVAuSSNn0AyvLruOpRpLZBsr96Q4LuV1gcO+alKZALtfOZikRKY/3sXz1NUkaRQc7qDH9xFFTFrfJd0jLvlDA==", "dependencies": { "@comunica/bus-query-parse": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1046,7 +1130,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-json": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-json/-/actor-query-result-serialize-json-2.10.0.tgz", + "integrity": "sha512-GuVcsOEhKgnVPT0AaCn8sJl/Uj5UUjUktEJpuMx1UAYt0//jcQsezJslYWmJrfXE/WJYidynyDxm8z3+jwLF7A==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1056,7 +1141,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-rdf": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-rdf/-/actor-query-result-serialize-rdf-2.10.0.tgz", + "integrity": "sha512-TBXJrDs5brRMFg8UisXS/F1vJw8nUtLhjugNZcd4ST8J965Ho1aNopydp4PMmwINMRxHhHtWJGwIB2Z5xD2lDw==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/bus-rdf-serialize": "^2.10.0", @@ -1066,7 +1152,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-simple": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-simple/-/actor-query-result-serialize-simple-2.10.0.tgz", + "integrity": "sha512-pS7+aB9Rym1B5oi+O68NFjEq+EwpCRYtTIxGBp39CTQ0F7m4edt9QwqmARqveJPryK5X66ACvjxvutEaTgWI8w==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1077,7 +1164,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-sparql-csv": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-csv/-/actor-query-result-serialize-sparql-csv-2.10.0.tgz", + "integrity": "sha512-Vk+7oTIPigDENK3CnV56vLfvMZVjHc3p2F4a49WDHfMgRrfQKJSQkx603vjW35n3tmUB8JSgRXr/+v7LK83KYQ==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1087,7 +1175,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-sparql-json": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-json/-/actor-query-result-serialize-sparql-json-2.10.2.tgz", + "integrity": "sha512-+J7SWXc4nXHzmQMk6q8MScrLNKdqX+/xQe6XCk0zDbDAt3/8EJh/2ROYFp4fEQyPDFWOwN4xpALgHRIh8PQRAQ==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-http-invalidate": "^2.10.0", @@ -1100,7 +1189,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-sparql-tsv": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-tsv/-/actor-query-result-serialize-sparql-tsv-2.10.0.tgz", + "integrity": "sha512-TgA2WIXKdu/SrbHEP8HvGoLjhDOZnBoHsGsLFSHpxY/Uwk21rZqJLBEkhuhkUtGYzQPJ1n6Wmpjz9lBrUHGJPw==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1111,7 +1201,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-sparql-xml": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-xml/-/actor-query-result-serialize-sparql-xml-2.10.0.tgz", + "integrity": "sha512-8RDj5ZN23HnIc6zI5pD5XKi2pyg2cx6DhI7VDRcboi7v0DxfROuQqSEtbQ8m/W6Pngdz01ySogRcIVJCzRzBLQ==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1121,7 +1212,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-stats": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-stats/-/actor-query-result-serialize-stats-2.10.2.tgz", + "integrity": "sha512-jhj/vLDRxLuRMonBaqICt4saM9/UO9wJBT3Jxk7Rp73aQWLo+lILXKzcWpuxkh/EFx8raLUBmbjWCduamU1DzQ==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-http-invalidate": "^2.10.0", @@ -1134,7 +1226,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-table": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-table/-/actor-query-result-serialize-table-2.10.0.tgz", + "integrity": "sha512-AAPrgM/rbsSThRu9jkfJhBUeTUwQTLHNVbIn8El+Akvz+Fueoi6oSi3SslpPMHOvIUiOAgCZ05f2RbBLlhP03g==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1147,7 +1240,8 @@ }, "node_modules/@comunica/actor-query-result-serialize-tree": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-tree/-/actor-query-result-serialize-tree-2.10.0.tgz", + "integrity": "sha512-sEyIzoSTV11YPY6r4fn6fwrf3WjLD6GrwXMTuevsDAKDYaMYxyriH3T/LMLLBEURy8SLD1I1Fpw/qaZisRmLTg==", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -1159,7 +1253,8 @@ }, "node_modules/@comunica/actor-rdf-join-entries-sort-cardinality": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-entries-sort-cardinality/-/actor-rdf-join-entries-sort-cardinality-2.10.0.tgz", + "integrity": "sha512-6dd/29q6QuQN2Ap090VA0KUFmmnHalPxFJb4MGh5nIbWZH0F/EvI+uK5vPx29cttr1yXL5u+MbJWaLb3IxwILg==", "dependencies": { "@comunica/bus-rdf-join-entries-sort": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1167,7 +1262,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-hash": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-hash/-/actor-rdf-join-inner-hash-2.10.1.tgz", + "integrity": "sha512-nUtdS3NJGKSJQC8KjDVz4TEDmkXHBYQi0/bwnAXCDl1phhq8lgv+YEmRDNe/kuCze7HyqEt98rlSJ+ZhvcHXVQ==", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1177,7 +1273,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-multi-bind": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-bind/-/actor-rdf-join-inner-multi-bind-2.10.1.tgz", + "integrity": "sha512-tNZ2Q7z44Yr0iIFkvtTVAsts4v0IoC4b0FYaIUeYav4y5JOlR74hWWijTAzVfb31dTMsAp3r+y0xGIdd75LRHQ==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1191,7 +1288,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-multi-empty": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-empty/-/actor-rdf-join-inner-multi-empty-2.10.1.tgz", + "integrity": "sha512-z6a3qENwuvSU0PvqOySrsHsWSUvzfWd1xIYwEvKuEIJ9vYPoefIUgggx08E95ZF/k+PxZ0vKEywFpBSUKUzGYA==", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1202,7 +1300,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-multi-smallest": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-smallest/-/actor-rdf-join-inner-multi-smallest-2.10.1.tgz", + "integrity": "sha512-MXwIvq+viDCmsxJwD4+fwMhwZINWva3jtQ3j5ne6DXgZYUJUFOw3VujvCP4/cl075RuSxYlXgy6ETHLa1TNr7g==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1214,7 +1313,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-nestedloop": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-nestedloop/-/actor-rdf-join-inner-nestedloop-2.10.1.tgz", + "integrity": "sha512-nFjGMrAIrRjRcsaU8UQXLbsDODVdf4LDpVNVQIrjfoWzhOIy13ApDQrqtuObaGVfryiFgt34zVEOwMWezWzl0A==", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1224,7 +1324,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-none": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-none/-/actor-rdf-join-inner-none-2.10.1.tgz", + "integrity": "sha512-4mqsuqvLSuXMbgY0PghqK5hmBGH5YkRTwUOpGpBE0EVQaiAoQOME0uVslkt2TBzUx5IQJC+trr/80sbA9mAhMw==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1235,7 +1336,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-single": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-single/-/actor-rdf-join-inner-single-2.10.1.tgz", + "integrity": "sha512-RfnwTEsuXNdR0cNRWaCvNPlfD5KyuScsc/55j/9mr8yqGUTE9h9Om1Is5u7xnpRMxGOEqwVP6apK3ZxsZqlL/w==", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0" @@ -1243,7 +1345,8 @@ }, "node_modules/@comunica/actor-rdf-join-inner-symmetrichash": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-symmetrichash/-/actor-rdf-join-inner-symmetrichash-2.10.1.tgz", + "integrity": "sha512-beFGkMUe3pTADtMXXPU8ab/IMULj+Hkg3Iah0zgrVZgwWH1Kgfkj/2qp32Ll5y9qcRbio4ruruKlHNXJJUU46Q==", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1253,7 +1356,8 @@ }, "node_modules/@comunica/actor-rdf-join-minus-hash": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash/-/actor-rdf-join-minus-hash-2.10.1.tgz", + "integrity": "sha512-wIaB/EpuySaARhimoLzrE0cTH0TgVkL43IAtYX7ECwH9Qcv8blO4zbL4q2KUkY7OKZRM892aqMfo3kO1vMIK7w==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1264,7 +1368,8 @@ }, "node_modules/@comunica/actor-rdf-join-minus-hash-undef": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash-undef/-/actor-rdf-join-minus-hash-undef-2.10.1.tgz", + "integrity": "sha512-tz5LdeAHnylEQIq4bRfFqaH89WZXkkdFxEshqxWijFBp5wprUYiotMDrBo9zDFaPquhs42fILtTzLY9yaalc9w==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1276,7 +1381,8 @@ }, "node_modules/@comunica/actor-rdf-join-optional-bind": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-bind/-/actor-rdf-join-optional-bind-2.10.1.tgz", + "integrity": "sha512-6dOoI/rzRZ0RUyv2WlToClE42Z2YJE5xcSrot7haT2eMdxbzr1KjyasHBcIIkSK+WViDO006lXZ1Hi4tJm9uuA==", "dependencies": { "@comunica/actor-rdf-join-inner-multi-bind": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1289,7 +1395,8 @@ }, "node_modules/@comunica/actor-rdf-join-optional-nestedloop": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-nestedloop/-/actor-rdf-join-optional-nestedloop-2.10.1.tgz", + "integrity": "sha512-d7KUDjEKZszizd4SBvYkK2A6lScrq9ciEgzdrrp6IYZhIGAhJLTgPNg3Js3NEjpE7oj4KWl2WwKJe2sWcJbKJg==", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1299,7 +1406,8 @@ }, "node_modules/@comunica/actor-rdf-join-selectivity-variable-counting": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-selectivity-variable-counting/-/actor-rdf-join-selectivity-variable-counting-2.10.0.tgz", + "integrity": "sha512-D7tdzxA93bpZGXI5emJyvzk6LabeAnzcQMU/V5x2QwJxyoNr+LFbesBHDDP3/u4UJwmeP0a+dU0e5mbpJujSXw==", "dependencies": { "@comunica/bus-rdf-join-selectivity": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1309,7 +1417,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-accumulate-cancontainundefs": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cancontainundefs/-/actor-rdf-metadata-accumulate-cancontainundefs-2.10.0.tgz", + "integrity": "sha512-N3rwX4kT9rkW+89q4xCjO3KKG0DbeNIyeMWDzeh2vTw8nAXYyTiPjHYvx/6VUMzhFUWF+50VtVv8ZJPO6nEapw==", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1317,7 +1426,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-accumulate-cardinality": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cardinality/-/actor-rdf-metadata-accumulate-cardinality-2.10.0.tgz", + "integrity": "sha512-UpC5PbhzEDCAxTUqETH89uRaFRqmP6YuWt67OAPo5wocv2tQDs6/SdLwS695XnfeMJdfDHsXyoUzQg3r8dwydw==", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1326,7 +1436,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-accumulate-pagesize": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-pagesize/-/actor-rdf-metadata-accumulate-pagesize-2.10.0.tgz", + "integrity": "sha512-r364CWGr5rMpV2ec3TsD+9Yhvi1JUuRXLBQqtgzjAPbpWjfDSM1Q4h0P1z9h3D+sdUMEX/0iGAY3AH2FjJAxwA==", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1334,7 +1445,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-accumulate-requesttime": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-requesttime/-/actor-rdf-metadata-accumulate-requesttime-2.10.0.tgz", + "integrity": "sha512-SpG7gxxAPoW2NbgyZ2UNpwluJ+IvCOYIRDTXmVTAK8bntav+/ZG30yfESFBjB3LmJEwAnktAsTgM6OhldohPKw==", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1342,7 +1454,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-all": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-all/-/actor-rdf-metadata-all-2.10.0.tgz", + "integrity": "sha512-dHaSxHTdneWVBMAF6WqZrGD+u4TPpHQaJ2WutK1NvQNPIiF0N7249aGTvXBIXZfsKYyQ73PUORDeLEOjX+tT7g==", "dependencies": { "@comunica/bus-rdf-metadata": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1351,7 +1464,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-allow-http-methods": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-allow-http-methods/-/actor-rdf-metadata-extract-allow-http-methods-2.10.0.tgz", + "integrity": "sha512-aCSX+lWcmz5Q/g34VJEblczqDS6N+gJ3AlcOcGuqhd6qHRU17dMeCIZCk8p6p+AhbJ30w4BTsrZRY2sF0MGCVA==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1359,7 +1473,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-hydra-controls": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-controls/-/actor-rdf-metadata-extract-hydra-controls-2.10.0.tgz", + "integrity": "sha512-T6F5OaQNqrHVIwSGNRX6YPDBoAOYBQj3NTPID7vQae7J80oEX+CLoTkeJJwfHpoUWx0ihs8J0UkABgK3AWeylA==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1370,7 +1485,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-hydra-count": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-count/-/actor-rdf-metadata-extract-hydra-count-2.10.0.tgz", + "integrity": "sha512-nOMLN+9OSLFOVz6jc9pcyDizhcBBVT2azn7StTMK5ukFCcPCENS4y6lYhC5cijKZY7vUa7U6VzhX2vvw20MKDA==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1378,7 +1494,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-hydra-pagesize": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-pagesize/-/actor-rdf-metadata-extract-hydra-pagesize-2.10.0.tgz", + "integrity": "sha512-mD8KS2ENr2rbfBWxtVpxkB/Y2LyyAnwQU5UYKkpet8ELhlostdGROzYCNIAgfOgirOAsLgVkbmrX0XBGouI7rA==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1386,7 +1503,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-patch-sparql-update": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-patch-sparql-update/-/actor-rdf-metadata-extract-patch-sparql-update-2.10.0.tgz", + "integrity": "sha512-U5ARpeWKShbbSfdtJeb6nyPcsdtMwEo2dp56T4aSTNSBKtAhQ78DjOxb23WIU/VR/qpw2yWcsbPnNJvSaLpRVQ==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1394,7 +1512,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-put-accepted": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-put-accepted/-/actor-rdf-metadata-extract-put-accepted-2.10.0.tgz", + "integrity": "sha512-cGJg6tMMCOSGcitkUBN7b9/Sg5zgwWQC52g+Zk22o4i+Zgt24WLjfXXbnGWGoV+h9YZo8pkg7v1cpE5GpapNCg==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1402,7 +1521,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-request-time": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-request-time/-/actor-rdf-metadata-extract-request-time-2.10.0.tgz", + "integrity": "sha512-zh3coTPZMbgF4mXKCO3bzn99INt9HFraKMZWc9s/kwBE6vhNZ5246Ql/6z1v7mccoIbanhI72gtjFTGGHru80Q==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1410,7 +1530,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-extract-sparql-service": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-sparql-service/-/actor-rdf-metadata-extract-sparql-service-2.10.0.tgz", + "integrity": "sha512-Xc+id8FURTmY3ccb4hcVuAaOou5UqD+1YkTnGfMWQxVgMlFC1eeBvwWVzvedj0sHhnfbLgDwbCVYLCK1lNndSg==", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1419,7 +1540,8 @@ }, "node_modules/@comunica/actor-rdf-metadata-primary-topic": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-primary-topic/-/actor-rdf-metadata-primary-topic-2.10.0.tgz", + "integrity": "sha512-nabxkiYSPGPRylhYjGxF0KiJ/K8QiG1N/am/t8eaqwyjn/fo2/tHl0yXUaLLx0E8fChfbBv10sVlmLhsLrg8DQ==", "dependencies": { "@comunica/bus-rdf-metadata": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1429,7 +1551,8 @@ }, "node_modules/@comunica/actor-rdf-parse-html": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-2.10.0.tgz", + "integrity": "sha512-zgImXKpc+BN1i6lQiN1Qhlb1HbKdMIeJMOys6qbzRIijdK8GkGGChwhQp7Cso3lY1Nf4K7M3jPLZeQXeED2w7g==", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -1442,7 +1565,8 @@ }, "node_modules/@comunica/actor-rdf-parse-html-microdata": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-2.10.0.tgz", + "integrity": "sha512-JLfiDauq4SmpI6TDS4HaHzI6iJe1j8lSk5FRRYK6YVEu8eO28jPmxQJiOiwbQiYqsjsV7kON/WIZSoUELoI4Ig==", "dependencies": { "@comunica/bus-rdf-parse-html": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1451,7 +1575,8 @@ }, "node_modules/@comunica/actor-rdf-parse-html-rdfa": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-2.10.0.tgz", + "integrity": "sha512-9K3iaws9+FGl50oZi53hqyzhwjNKZ3mIr2zg/TAJZoapKvc14cthH17zKSSJrqI/NgBStRmZhBBkXcwfu1CANw==", "dependencies": { "@comunica/bus-rdf-parse-html": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1460,7 +1585,8 @@ }, "node_modules/@comunica/actor-rdf-parse-html-script": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-2.10.0.tgz", + "integrity": "sha512-7XYqWchDquWnBLjG7rmmY+tdE81UZ8fPCU0Hn+vI39/MikNOpaiyr/ZYFqhogWFa9SkjmH0a7idVUzmjiwKRZQ==", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -1474,7 +1600,8 @@ }, "node_modules/@comunica/actor-rdf-parse-jsonld": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-2.10.2.tgz", + "integrity": "sha512-K4fvD0zMU22KkQCqIFVT5Oy2FREEZ9CAo9u6kOcsMxEvg9aHGIM6hkaXR8I+1JCx1mDuEj3zQ8joR4tQh8fYCw==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-parse": "^2.10.0", @@ -1488,7 +1615,8 @@ }, "node_modules/@comunica/actor-rdf-parse-n3": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-2.10.0.tgz", + "integrity": "sha512-o1MAbwJxW4Br2WCZdhFoRmAiOP4mfogeQqJ4nqlsOkoMtQ45EvLHsotb3Kqhuk5V+vsTxyK5v/a4zylGtcU7VQ==", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1497,7 +1625,8 @@ }, "node_modules/@comunica/actor-rdf-parse-rdfxml": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-2.10.0.tgz", + "integrity": "sha512-HoJN52shXY3cvYtsS0cpin9KXpW3L7g1leebyCRSqnlnHdJv5D6G0Ep8vyt2xhquKNbOQ7LnP5VhiDiqz73XDg==", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1506,7 +1635,8 @@ }, "node_modules/@comunica/actor-rdf-parse-shaclc": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-2.10.0.tgz", + "integrity": "sha512-i6tmuZuS+RtDiSXpQc3s/PxtCqwIguo4ANmVB20PK4VWgQgBwoPG7LlNcJ0xmuH/3Bv6C2Agn18PLF6dZX+fKw==", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1519,7 +1649,8 @@ }, "node_modules/@comunica/actor-rdf-parse-xml-rdfa": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-2.10.0.tgz", + "integrity": "sha512-68r/6B/fEyA1/OYleVuaPq47J+g4xJcJijpdL1wEj7CqjV+Xa+sDWRpNCyLcD/e1Y/g9UQmLz0ZnSpR00PFddA==", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1528,7 +1659,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-next": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-next/-/actor-rdf-resolve-hypermedia-links-next-2.10.0.tgz", + "integrity": "sha512-SpW46Tx8ksAxotGK2UEpvGcYjKwxB0x2KnbGmKHvo59embRjcUL/bmq3uHqZe7UwfynR2wDaRzMdVVSQccWSyA==", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1536,7 +1668,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/-/actor-rdf-resolve-hypermedia-links-queue-fifo-2.10.0.tgz", + "integrity": "sha512-Hh53Ts6z6MxKXhZZxgpXfc1hgNzIX/xbA9mD2Au7ZfAa5V5j8zPaVVKe06sxILQBTPMsFh1idP3vIqRwRXpsvg==", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/bus-rdf-resolve-hypermedia-links-queue": "^2.10.0", @@ -1545,7 +1678,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-hypermedia-none": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-none/-/actor-rdf-resolve-hypermedia-none-2.10.0.tgz", + "integrity": "sha512-C4sJ0QJetq3QxsRkYstK5YXRYDGkcVTfyBOFUMYj7PbVakapnl8qPZkVL7VPMLVLVOfyBQHTT43Yp6Nl8VvmSA==", "dependencies": { "@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source": "^2.10.0", "@comunica/bus-rdf-resolve-hypermedia": "^2.10.0", @@ -1554,7 +1688,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-hypermedia-qpf": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-qpf/-/actor-rdf-resolve-hypermedia-qpf-2.10.0.tgz", + "integrity": "sha512-1iP9xD72bxFBLpbfC7Ev0Xoc+0rwusPFdnoYbEtqMHRfiM0h3nNrsSxyzdGJMAZaJeQzmBZIEiwR5pbo9qpmaQ==", "dependencies": { "@comunica/actor-rdf-metadata-extract-hydra-controls": "^2.10.0", "@comunica/bus-dereference-rdf": "^2.10.0", @@ -1572,7 +1707,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-sparql/-/actor-rdf-resolve-hypermedia-sparql-2.10.2.tgz", + "integrity": "sha512-UFsTuzHvjK/XhRGqfHr3WAVr+iBv6XTuU1fV9EuOaB+odclQ+H6TGtmW6/38CSufj86Y691VBXMk29zdWfrmGA==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -1590,7 +1726,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-quad-pattern-federated": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-federated/-/actor-rdf-resolve-quad-pattern-federated-2.10.1.tgz", + "integrity": "sha512-OBRTTUWkXKa0ibDzcYLG7aKf3BfQp2j75xm65brRvwstNLmye9ZEq1PrNhbP5UDqQQeCgzPBrb0eGC8Vxek2RA==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", @@ -1609,7 +1746,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-quad-pattern-hypermedia": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-hypermedia/-/actor-rdf-resolve-quad-pattern-hypermedia-2.10.1.tgz", + "integrity": "sha512-XkJOYu0bizWHsvgiaGyNAnRZsqv2risREK5SY14VCMXDYqmOWJLDppveGEUZAoEKEJuo4ZLDlP2gLDGzc0krxQ==", "dependencies": { "@comunica/bus-dereference-rdf": "^2.10.0", "@comunica/bus-http-invalidate": "^2.10.0", @@ -1636,7 +1774,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source/-/actor-rdf-resolve-quad-pattern-rdfjs-source-2.10.0.tgz", + "integrity": "sha512-d6AlrngvZaVgoiiyMhkf6uiYaFZZdn/UZLo0FhZ++or1NZXo5KxK4UMgdiIygvPEiuuVzy0W1djHgOQ1rgh50g==", "dependencies": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1650,7 +1789,8 @@ }, "node_modules/@comunica/actor-rdf-resolve-quad-pattern-string-source": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-string-source/-/actor-rdf-resolve-quad-pattern-string-source-2.10.0.tgz", + "integrity": "sha512-v6QOBtXTXrDUZRHocrm2OYCsxGpyTScka/n85cewCcInqVGJP9J6zpdwetzvIy7wVJkac7JQabd96OEyDMK3sg==", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", @@ -1665,7 +1805,8 @@ }, "node_modules/@comunica/actor-rdf-serialize-jsonld": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-jsonld/-/actor-rdf-serialize-jsonld-2.10.0.tgz", + "integrity": "sha512-u1M5N7BSrkhS461fV6QXKMh6TnvpoEiSHPru7wJg1kGqR9q3reuQeKLf/U23JDYb1kom8uU3R7aBpDIjgVc49Q==", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1674,7 +1815,8 @@ }, "node_modules/@comunica/actor-rdf-serialize-n3": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-n3/-/actor-rdf-serialize-n3-2.10.0.tgz", + "integrity": "sha512-CoDktUI3YQuI7UBV+fQOdKl+5XjBx0XTOF9XxEDiNg5nwndEmDvq6C23fSHfkqX3/xDlnsuS/YysHAqXCrYoiA==", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1683,7 +1825,8 @@ }, "node_modules/@comunica/actor-rdf-serialize-shaclc": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-shaclc/-/actor-rdf-serialize-shaclc-2.10.0.tgz", + "integrity": "sha512-gp4bu4+aPtMk4bavXP27uD9X9bpa2F5u6/JtsaX2qwcqVI0x1tkVQOkm2RkUhafcHNj0Fz6lQ3aXmRIAQvaefg==", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1694,7 +1837,8 @@ }, "node_modules/@comunica/actor-rdf-update-hypermedia-patch-sparql-update": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/-/actor-rdf-update-hypermedia-patch-sparql-update-2.10.2.tgz", + "integrity": "sha512-z/fOzYlA5fPtauTUISYhCWMKtEpkvKkSZIdvcgeGvetLnvw4fytfVHdtPhirZYmPya10GCeTG7m2iHvK53lOsQ==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-update-hypermedia": "^2.10.2", @@ -1710,7 +1854,8 @@ }, "node_modules/@comunica/actor-rdf-update-hypermedia-put-ldp": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-put-ldp/-/actor-rdf-update-hypermedia-put-ldp-2.10.2.tgz", + "integrity": "sha512-Tof/mU0Lkt7HP3SwHXODczxvAFelWzAHdP+ap4Upr47K6Zg5GRPwJv//2AcPvT3p42Li6wuMz/4nh/A3pcnCKA==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-serialize": "^2.10.0", @@ -1725,7 +1870,8 @@ }, "node_modules/@comunica/actor-rdf-update-hypermedia-sparql": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-sparql/-/actor-rdf-update-hypermedia-sparql-2.10.2.tgz", + "integrity": "sha512-uw1NIAoxuAechsjTQ6b53XpGOMx3Mp5uEL5LtUwNC6COJE6tzWH8wG54Dwj+0VNxsgqsSircKu2xwGl1uOsOPg==", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-update-hypermedia": "^2.10.2", @@ -1741,7 +1887,8 @@ }, "node_modules/@comunica/actor-rdf-update-quads-hypermedia": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-hypermedia/-/actor-rdf-update-quads-hypermedia-2.10.2.tgz", + "integrity": "sha512-kzGfDv0PqcOIIULJLG8jtA/dOcrNUodu98J08ruSuYQBbnFgAZ07MG1TkWhEI/AM6D0w7hXkgQaC1sGWn4gVmA==", "dependencies": { "@comunica/bus-dereference-rdf": "^2.10.0", "@comunica/bus-http-invalidate": "^2.10.0", @@ -1756,7 +1903,8 @@ }, "node_modules/@comunica/actor-rdf-update-quads-rdfjs-store": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-rdfjs-store/-/actor-rdf-update-quads-rdfjs-store-2.10.2.tgz", + "integrity": "sha512-anX3SovvY2H8KwuWu8G9EqtITmCsz12jfqunNn5Efcch/bm4HyHTC1GThx77m6qpCdg4OMx8TLhNrH1II1UM1w==", "dependencies": { "@comunica/bus-rdf-update-quads": "^2.10.2", "@comunica/core": "^2.10.0", @@ -1769,7 +1917,8 @@ }, "node_modules/@comunica/bindings-factory": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bindings-factory/-/bindings-factory-2.10.1.tgz", + "integrity": "sha512-AUD3VWlCYljgk5jfaMejSIL9CiX3aV/cAn314e/dYP/rrnVgachcCwyaD8hKHWTBHDs5rcGxr/iwruBOfsERvQ==", "dependencies": { "@rdfjs/types": "*", "immutable": "^4.1.0", @@ -1779,7 +1928,8 @@ }, "node_modules/@comunica/bus-context-preprocess": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-context-preprocess/-/bus-context-preprocess-2.10.0.tgz", + "integrity": "sha512-eJ5CkzbnmxB9fkr2F05jnnjcaowp+yxd0+pAtvx5MLl2Kpx3nWLqHPcl4/EVVDPD+i0TEkq4AXQ1BD9BMuXK0A==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -1787,7 +1937,8 @@ }, "node_modules/@comunica/bus-dereference": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-2.10.0.tgz", + "integrity": "sha512-nWyQXiH7zbiPTVttWVKJHykhV4IuahfhfUwPx3Op+cVsK489Su84dnGeSmPkxTAFFuxe6wU6ZEH4i7PDu48YvQ==", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/actor-abstract-parse": "^2.10.0", @@ -1799,7 +1950,8 @@ }, "node_modules/@comunica/bus-dereference-rdf": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-2.10.0.tgz", + "integrity": "sha512-WY/wPmFpO76wwJ2D5Aus43ZbYnBRLvQ0EOp4yywO0lBiq6F0JisjCVCM4EtWouOEAAfqEoIjHXGyC3gPWqm+SQ==", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-rdf-parse": "^2.10.0", @@ -1809,7 +1961,8 @@ }, "node_modules/@comunica/bus-hash-bindings": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-hash-bindings/-/bus-hash-bindings-2.10.0.tgz", + "integrity": "sha512-EdzIUgpSWMtFVxEJSesuQpMkfgznDap+U0F9epotxXc20Gg/qjTzs1gF6NkpDpaidQ7cFlV16vdbdfi8uiZ+mQ==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -1817,7 +1970,8 @@ }, "node_modules/@comunica/bus-http": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-2.10.2.tgz", + "integrity": "sha512-MAYRF6uEBAuJ9dCPW2Uyne7w3lNwXFXKfa14XuPG5DFTDpgo/Z2pWupPrBsA1eIWMNJ6WOG6QyEv4rllSIBqlg==", "dependencies": { "@comunica/core": "^2.10.0", "@smessie/readable-web-to-node-stream": "^3.0.3", @@ -1828,14 +1982,16 @@ }, "node_modules/@comunica/bus-http-invalidate": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-http-invalidate/-/bus-http-invalidate-2.10.0.tgz", + "integrity": "sha512-9DevRUzuCOfHFtsryIvTU6rOz6vMbnuDzerloBoNsLFVzQCU4wPNZbxiOn0+GMDXxw7M3KgYd+KFxI2kGObVWA==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/bus-init": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-2.10.0.tgz", + "integrity": "sha512-hJejHa8sLVhQLFlduCVnhOd5aW3FCEz8wmWjyeLI3kiHFaQibnGVMhUuuNRX5f8bnnPuTdEiHc1nnYHuSi+j8A==", "dependencies": { "@comunica/core": "^2.10.0", "readable-stream": "^4.4.2" @@ -1843,7 +1999,8 @@ }, "node_modules/@comunica/bus-optimize-query-operation": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-optimize-query-operation/-/bus-optimize-query-operation-2.10.0.tgz", + "integrity": "sha512-qawKJprbVc+dfjBgVzV45UEo+jZBzY3dRo0a8UkXSvgSWPcX18SGrURl2VL4sZZSAyXQBMrGUwH2eUD8l26ZJQ==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1852,7 +2009,8 @@ }, "node_modules/@comunica/bus-query-operation": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-operation/-/bus-query-operation-2.10.1.tgz", + "integrity": "sha512-PoUSJeKaMZtZu+ZtB+5ABjPOiW1YjxOdLE1N5znxX2oiDKCQHmAXVaVkbVx1jPDLGYFNcOlOSzpRMqLQ/L4JIw==", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -1868,7 +2026,8 @@ }, "node_modules/@comunica/bus-query-parse": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-parse/-/bus-query-parse-2.10.0.tgz", + "integrity": "sha512-1LynxACgCYTuBH/JMRG/IGaWtTVwr2O8wxOosCId2W3BDW9nf2DSCyOdnxnCSMSKfnLFWiaVuKybn24OLXW2dQ==", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*", @@ -1877,7 +2036,8 @@ }, "node_modules/@comunica/bus-query-result-serialize": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-result-serialize/-/bus-query-result-serialize-2.10.0.tgz", + "integrity": "sha512-9P5KUzmXvjtLbd44UVxYNB0yqAHx7molBUc7aysUQ3pbIcP/A57GXzAfiKueeiZ9cVRRG/BGsVoDGVj59tGWNg==", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1886,7 +2046,8 @@ }, "node_modules/@comunica/bus-rdf-join": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join/-/bus-rdf-join-2.10.1.tgz", + "integrity": "sha512-pPFoJVHY5p931jIKt+9sqRCGiuuf8yFqrlOOAd3un72cwuyhwNHvn52xwvcPlNUAySz/kDmW+U0syflqI6VdAw==", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join-selectivity": "^2.10.0", @@ -1902,7 +2063,8 @@ }, "node_modules/@comunica/bus-rdf-join-entries-sort": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-entries-sort/-/bus-rdf-join-entries-sort-2.10.0.tgz", + "integrity": "sha512-17FQrdYtzjY84OI/ZvipJKD0ei3IySmsWwaGC9sIJn+1W4LBVKudTu5S0tzGTKTb0URhS4mrCliUBzyINtIZMQ==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -1910,7 +2072,8 @@ }, "node_modules/@comunica/bus-rdf-join-selectivity": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-selectivity/-/bus-rdf-join-selectivity-2.10.0.tgz", + "integrity": "sha512-YjoygSiH6r4SAYqz6gpvUql2vnznPVE62IsWqYnjFWeH1kBsxO5yEOO01s2FfN3jLcfsytTyG7VNTCN788YbaA==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/mediatortype-accuracy": "^2.10.0", @@ -1919,7 +2082,8 @@ }, "node_modules/@comunica/bus-rdf-metadata": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata/-/bus-rdf-metadata-2.10.0.tgz", + "integrity": "sha512-LRUnHVqIzyUlmPKPNAYOusCF53iN8KEX7l/VinlA7NH3XBLhTkFoth26MVqIVtjtdH0hVfUVpkwy2kFEJpGldw==", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -1927,7 +2091,8 @@ }, "node_modules/@comunica/bus-rdf-metadata-accumulate": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-accumulate/-/bus-rdf-metadata-accumulate-2.10.0.tgz", + "integrity": "sha512-XG/3s4a3yGpYt4H+sn9T2zTaUxLG+37dmhRhXv2cBmR4gaCXkglERPaOrQygHldEF+4ITF3RmXHCgANsQ1AwQg==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -1935,7 +2100,8 @@ }, "node_modules/@comunica/bus-rdf-metadata-extract": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-extract/-/bus-rdf-metadata-extract-2.10.0.tgz", + "integrity": "sha512-KcMZh+7kHjdCIMkLFki99tQH1arVp/evVnk0BGXfWd+ca3eCLrr42tb1tGfN2JkaCSxgtzWO4DRZcSzJ4sI2dQ==", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -1943,7 +2109,8 @@ }, "node_modules/@comunica/bus-rdf-parse": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-2.10.0.tgz", + "integrity": "sha512-EgCMZACfTG/+mayQpExWt0HoBT32BBVC1aS1lC43fXKBTxJ8kYrSrorVUuMACoh4dQVGTb+7j1j4K0hGNVzXGA==", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/actor-abstract-parse": "^2.10.0", @@ -1953,7 +2120,8 @@ }, "node_modules/@comunica/bus-rdf-parse-html": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-2.10.0.tgz", + "integrity": "sha512-RZliz4TtKP63QggoohGuIkGb6lq0BoYJ4aztKtGldWtPAVP/pdEvlDpiZWLB/j19g7S2aDLNY/lJtZ5efM1tHQ==", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -1961,7 +2129,8 @@ }, "node_modules/@comunica/bus-rdf-resolve-hypermedia": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia/-/bus-rdf-resolve-hypermedia-2.10.0.tgz", + "integrity": "sha512-DjCoAg62pPzEOH5gKM9gaL4CVUmhBsmyOzao0tRu20G7L6RnTIFtRaOwMN2z+2uC7AkJRHZY12bPUb+yM8V0UQ==", "dependencies": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1970,7 +2139,8 @@ }, "node_modules/@comunica/bus-rdf-resolve-hypermedia-links": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links/-/bus-rdf-resolve-hypermedia-links-2.10.0.tgz", + "integrity": "sha512-Mcz6bUdZySLK2om0cMt86n5TOThZOTpEFq2M42n7YAE3LL2KMnMDdhkaOC6SyY4tS0HGAuhce21Uq+Gz8Veq2g==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1979,7 +2149,8 @@ }, "node_modules/@comunica/bus-rdf-resolve-hypermedia-links-queue": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links-queue/-/bus-rdf-resolve-hypermedia-links-queue-2.10.0.tgz", + "integrity": "sha512-f9amJk7ikktRfOoRnwag1KMTuo9v+PiDEVQA0dijl+jhcispKdjG6XK0MdZ1KSEmtUWejjS6nMRGvfJdM37eog==", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1987,7 +2158,8 @@ }, "node_modules/@comunica/bus-rdf-resolve-quad-pattern": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-quad-pattern/-/bus-rdf-resolve-quad-pattern-2.10.0.tgz", + "integrity": "sha512-JEI4DqSprGmrbfmiIwc8PbS+HCoxXwmMtp7gDpoB1HyYKIHzzu9DOIiwmYEDRO5dwV+uTwaYKZz/mUPm2U6EEg==", "dependencies": { "@comunica/context-entries": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1999,7 +2171,8 @@ }, "node_modules/@comunica/bus-rdf-serialize": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-serialize/-/bus-rdf-serialize-2.10.0.tgz", + "integrity": "sha512-AmbN9MUgw6B6AfrIqR1u7PWHZFgbJz+j1SFJVtnHQ51hEpG+Ig9nNG2IWjHOsFK0xBBQ/wXgNmt/cufEMRM1SQ==", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2008,7 +2181,8 @@ }, "node_modules/@comunica/bus-rdf-update-hypermedia": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-hypermedia/-/bus-rdf-update-hypermedia-2.10.2.tgz", + "integrity": "sha512-GbRMxXN4kx+4UPsnGxWjyn770m675yy2gWK/xy/5qQIxxRTcuGk4wm/994FZQXpwLX1E0xJ+YKxMgXTIlEWmQA==", "dependencies": { "@comunica/bus-rdf-update-quads": "^2.10.2", "@comunica/core": "^2.10.0" @@ -2016,7 +2190,8 @@ }, "node_modules/@comunica/bus-rdf-update-quads": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-quads/-/bus-rdf-update-quads-2.10.2.tgz", + "integrity": "sha512-+iVpAHps8ytGq8AZF4xTZbLyskS40JPn64MO+OAuYovqXLlezp6vh9eJ5qETuP9NP+BpZDk3nOU3Ky3fb0QCUw==", "dependencies": { "@comunica/actor-rdf-resolve-quad-pattern-federated": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -2030,11 +2205,13 @@ }, "node_modules/@comunica/config-query-sparql": { "version": "2.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-2.7.0.tgz", + "integrity": "sha512-rMnFgT7cz9+0z7wV4OzIMY5qM9/Z0mTGrR8y2JokoHyyTcBGOSajFmy61XCSLMCsLLG8qDXsJ4ClCCky3TGfqA==" }, "node_modules/@comunica/context-entries": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-2.10.0.tgz", + "integrity": "sha512-lmCYCcXxW8C6ecFH2whZCt31NT1ejb0P/sbytK7f4ctyA06Q8iYFEcYE4eWOXMdpfkwkcnz31x9XL77OGeSC2Q==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -2045,7 +2222,8 @@ }, "node_modules/@comunica/core": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-2.10.0.tgz", + "integrity": "sha512-onsGs2iKHUPRxxMOdx42vdxslk8q9FQZdRjQtHJ6SGiCpJwIL9ciBgPIOl2RL2YfzXHemr/0umeNOppRDcWhJA==", "dependencies": { "@comunica/types": "^2.10.0", "immutable": "^4.1.0" @@ -2056,14 +2234,16 @@ }, "node_modules/@comunica/data-factory": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/data-factory/-/data-factory-2.7.0.tgz", + "integrity": "sha512-dSTzrR1w9SzAWx70ZXKXHUC8f0leUolLZ9TOhGjFhhsBMJ9Pbo0g6vHV8txX5FViShngrg9QNKhsHeQnMk5z6Q==", "dependencies": { "@rdfjs/types": "*" } }, "node_modules/@comunica/expression-evaluator": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/expression-evaluator/-/expression-evaluator-2.10.0.tgz", + "integrity": "sha512-gSfiVSAE+SaxpXq3jT5OnyZd+sD9KFaWtTiKT1tDDs8lD7Jj68aRP7VoEhvKwPwRlUx0aoaXUL2MYtV6JsXRbg==", "dependencies": { "@rdfjs/types": "*", "@types/spark-md5": "^3.0.2", @@ -2081,18 +2261,20 @@ }, "node_modules/@comunica/expression-evaluator/node_modules/uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@comunica/logger-pretty": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/logger-pretty/-/logger-pretty-2.10.0.tgz", + "integrity": "sha512-JXkeM5HnbyTPnQTf5/ugRPL9R+vXT7b/hRVYzYmhAGCjkCNL7NJPTBbIgxmZHqZ+UGxprotrvmDQtwHmVA+Ddw==", "dependencies": { "@comunica/types": "^2.10.0", "object-inspect": "^1.12.2", @@ -2101,21 +2283,24 @@ }, "node_modules/@comunica/logger-void": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/logger-void/-/logger-void-2.10.0.tgz", + "integrity": "sha512-GFJh9hV8rIC9yXAuLGGKjQRVs8IOQOINBbaTNO+FJUWWWHlo5pDEKAoGYuysz5TBGoT3Lexz8bMfdkuHMa3uIQ==", "dependencies": { "@comunica/types": "^2.10.0" } }, "node_modules/@comunica/mediator-all": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediator-all/-/mediator-all-2.10.0.tgz", + "integrity": "sha512-y1+A+sIW462G8iPzi6BSPIb4I9iy08ZruM2Thf1or6sytwLKro7E2RYjS6IdupwfFYafXXCeT85+lrJgTKERhQ==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/mediator-combine-pipeline": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-2.10.0.tgz", + "integrity": "sha512-j7+/oUlbhKB4Rq6g9oNKU+e9cQL8U9z8tAUNhoXUSHajcr4huj0t1+riaOD109/DRWhV793ILhBDzgiZbHd7DA==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -2123,14 +2308,16 @@ }, "node_modules/@comunica/mediator-combine-union": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-2.10.0.tgz", + "integrity": "sha512-QbP4zP1i6nMDZ8teC0RoTz5E8pOpxDhWPBr1ylb2jzPUjPpMgrnbHYTondlN0Oau3SMEehItojg/LYDtPOP/GQ==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/mediator-join-coefficients-fixed": { "version": "2.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediator-join-coefficients-fixed/-/mediator-join-coefficients-fixed-2.10.1.tgz", + "integrity": "sha512-HRvc0e8QDnR3sbRMMCyx9ILFA6KiUxHEqDOpt7BV3kFMWWIpBavFDwPUjLBG6sRA8o0CFu1+oVVh5fAFYZIxzQ==", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -2141,35 +2328,40 @@ }, "node_modules/@comunica/mediator-number": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-2.10.0.tgz", + "integrity": "sha512-0T8D1HGTu5Sd8iKb2dBjc6VRc/U4A15TAN6m561ra9pFlP+w31kby0ZYP6WWBHBobbUsX1LCvnbRQaAC4uWwVw==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/mediator-race": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-2.10.0.tgz", + "integrity": "sha512-JiEtOLMkPnbjSLabVpE4VqDbu2ZKKnkUdATGBeWX+o+MjPw6c0hhw01RG4WY2rQhDyNl++nLQe3EowQh8xW9TA==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/mediatortype-accuracy": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-accuracy/-/mediatortype-accuracy-2.10.0.tgz", + "integrity": "sha512-u9Noai4yGACaBRGOoRZ65XoQhazKNx5QaFOX5nJ/p84Qq4g50woC2rpsncuyrXhW1j/rIc2WvIUGUfy/g6CDiw==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/mediatortype-httprequests": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-httprequests/-/mediatortype-httprequests-2.10.0.tgz", + "integrity": "sha512-uPjs/NdngHZZWomjZor6W29UeOlxganupIOa3Z6H3qdUnsSpxeoS9URXy7BICAX+4PmgebperSn18BRA+PWiSw==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/mediatortype-join-coefficients": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-join-coefficients/-/mediatortype-join-coefficients-2.10.0.tgz", + "integrity": "sha512-EPipAV5PDNeEVXbsd+8NsqNKu5ztCAoEJ3azcFAmD9di9ppArNJWU/mxy5yUzcBgMUX4wRp6jCa5rIF5sRHG7g==", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -2177,21 +2369,24 @@ }, "node_modules/@comunica/mediatortype-time": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-2.10.0.tgz", + "integrity": "sha512-nBz1exxrja1Tj8KSlSevG4Hw2u09tTh6gtNfVjI76i/e7muu4RUWVhi9b8PcwBNAfuUqRl+5OgOSa2X4W+6QlA==", "dependencies": { "@comunica/core": "^2.10.0" } }, "node_modules/@comunica/metadata": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/metadata/-/metadata-2.10.0.tgz", + "integrity": "sha512-PF7TKhuDIO4GE9tzuAkTxarQV5cmwXZ64hp0qm8Ql/V+dVHu/3xLL9v/Q67ZX26GF9hOyr7cdpNI08M7DHc86g==", "dependencies": { "@comunica/types": "^2.10.0" } }, "node_modules/@comunica/query-sparql": { "version": "2.10.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/query-sparql/-/query-sparql-2.10.2.tgz", + "integrity": "sha512-bgjQ8N5/vP3Iy71AgDKQc06mXmEBvh7dsenw2VPbvk11iXywec4XCq8TzX+GozL+Zxxl5XyYlBw+nRjvORTGHg==", "dependencies": { "@comunica/actor-context-preprocess-source-to-destination": "^2.10.0", "@comunica/actor-dereference-fallback": "^2.10.0", @@ -2334,7 +2529,8 @@ }, "node_modules/@comunica/runner": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/runner/-/runner-2.10.0.tgz", + "integrity": "sha512-v/oEKT+IwjO6Y74bCCzlR+ZMI6oykpfz7GQrQbl1oTWQsvBbTdf0omPkoYnk1esEAsFnsJD+NGwAiRiFKeBo0A==", "dependencies": { "@comunica/bus-init": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2347,7 +2543,8 @@ }, "node_modules/@comunica/runner-cli": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/runner-cli/-/runner-cli-2.10.0.tgz", + "integrity": "sha512-16QI0rWFHURCy5waVFcZ/fhKI/hyzNx5YyCGPaEaUX8MKyamvCCXHSWvPLLbjJbsjGZ9wXrC9dwwhRmbfmidpw==", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/runner": "^2.10.0", @@ -2360,7 +2557,8 @@ }, "node_modules/@comunica/types": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-2.10.0.tgz", + "integrity": "sha512-1UjPGbZcYrapBjMGUZedrIGcn9rOLpEOlJo1ZkWddFUGTwndVg9d4BZnQw+UnQzXMcLJcdKt94Zns8iEmBqARw==", "dependencies": { "@rdfjs/types": "*", "@types/yargs": "^17.0.24", @@ -2370,7 +2568,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2380,7 +2579,8 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2388,13 +2588,15 @@ }, "node_modules/@cucumber/ci-environment": { "version": "9.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@cucumber/ci-environment/-/ci-environment-9.1.0.tgz", + "integrity": "sha512-jdnF6APXP3GawMue8kdMxhu6TBhyRUO4KDRxTowf06NtclLjIw2Ybpo9IcIOMvE8kHukvJyM00uxWX+CfS7JgQ==", + "dev": true }, "node_modules/@cucumber/cucumber": { "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-8.11.1.tgz", + "integrity": "sha512-C+wdypoSzHA48GCRorJCAZYuxXo1RSESukAmoz/JhGV7KB4pIlg9Y2aWeZKx6bJQkq8yq4+S4jg9f8FGCdc3jQ==", "dev": true, - "license": "MIT", "dependencies": { "@cucumber/ci-environment": "9.1.0", "@cucumber/cucumber-expressions": "16.1.1", @@ -2445,16 +2647,18 @@ }, "node_modules/@cucumber/cucumber-expressions": { "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber-expressions/-/cucumber-expressions-16.1.1.tgz", + "integrity": "sha512-Ugsb9qxfgrgfUKsGvbx0awVk+69NIFjWfxNT+dnm62YrF2gdTHYxAOzOLuPgvE0yqYTh+3otrFLDDfkHGThM1g==", "dev": true, - "license": "MIT", "dependencies": { "regexp-match-indices": "1.0.2" } }, "node_modules/@cucumber/cucumber/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, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2464,8 +2668,9 @@ }, "node_modules/@cucumber/cucumber/node_modules/semver": { "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2478,21 +2683,24 @@ }, "node_modules/@cucumber/cucumber/node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@cucumber/gherkin": { "version": "26.0.3", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-26.0.3.tgz", + "integrity": "sha512-xwJHi//bLFEU1drIyw2yswwUHnnVWO4XcyVBbCTDs6DkSh262GkogFI/IWwChZqJfOXnPglzLGxR1DibcZsILA==", "dev": true, - "license": "MIT", "dependencies": { "@cucumber/messages": "19.1.4 - 21" } }, "node_modules/@cucumber/gherkin-streams": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-streams/-/gherkin-streams-5.0.1.tgz", + "integrity": "sha512-/7VkIE/ASxIP/jd4Crlp4JHXqdNFxPGQokqWqsaCCiqBiu5qHoKMxcWNlp9njVL/n9yN4S08OmY3ZR8uC5x74Q==", "dev": true, - "license": "MIT", "dependencies": { "commander": "9.1.0", "source-map-support": "0.5.21" @@ -2508,16 +2716,18 @@ }, "node_modules/@cucumber/gherkin-streams/node_modules/commander": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", + "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/@cucumber/gherkin-utils": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-utils/-/gherkin-utils-8.0.2.tgz", + "integrity": "sha512-aQlziN3r3cTwprEDbLEcFoMRQajb9DTOu2OZZp5xkuNz6bjSTowSY90lHUD2pWT7jhEEckZRIREnk7MAwC2d1A==", "dev": true, - "license": "MIT", "dependencies": { "@cucumber/gherkin": "^25.0.0", "@cucumber/messages": "^19.1.4", @@ -2531,16 +2741,18 @@ }, "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/gherkin": { "version": "25.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-25.0.2.tgz", + "integrity": "sha512-EdsrR33Y5GjuOoe2Kq5Y9DYwgNRtUD32H4y2hCrT6+AWo7ibUQu7H+oiWTgfVhwbkHsZmksxHSxXz/AwqqyCRQ==", "dev": true, - "license": "MIT", "dependencies": { "@cucumber/messages": "^19.1.4" } }, "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/messages": { "version": "19.1.4", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-19.1.4.tgz", + "integrity": "sha512-Pksl0pnDz2l1+L5Ug85NlG6LWrrklN9qkMxN5Mv+1XZ3T6u580dnE6mVaxjJRdcOq4tR17Pc0RqIDZMyVY1FlA==", "dev": true, - "license": "MIT", "dependencies": { "@types/uuid": "8.3.4", "class-transformer": "0.5.1", @@ -2550,45 +2762,51 @@ }, "node_modules/@cucumber/gherkin-utils/node_modules/@types/uuid": { "version": "8.3.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true }, "node_modules/@cucumber/gherkin-utils/node_modules/commander": { "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/@cucumber/gherkin-utils/node_modules/uuid": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@cucumber/html-formatter": { "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-20.2.1.tgz", + "integrity": "sha512-bwwyr1WjlOJ5dEFOLGbtYWbUprloB2eymqXBmmTC10s0xapZXkFn4VfHgMshaH91XiCIY/MoabWNAau3AeMHkQ==", "dev": true, - "license": "MIT", "peerDependencies": { "@cucumber/messages": ">=18" } }, "node_modules/@cucumber/message-streams": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/message-streams/-/message-streams-4.0.1.tgz", + "integrity": "sha512-Kxap9uP5jD8tHUZVjTWgzxemi/0uOsbGjd4LBOSxcJoOCRbESFwemUzilJuzNTB8pcTQUh8D5oudUyxfkJOKmA==", "dev": true, - "license": "MIT", "peerDependencies": { "@cucumber/messages": ">=17.1.1" } }, "node_modules/@cucumber/messages": { "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-21.0.1.tgz", + "integrity": "sha512-pGR7iURM4SF9Qp1IIpNiVQ77J9kfxMkPOEbyy+zRmGABnWWCsqMpJdfHeh9Mb3VskemVw85++e15JT0PYdcR3g==", "dev": true, - "license": "MIT", "dependencies": { "@types/uuid": "8.3.4", "class-transformer": "0.5.1", @@ -2598,25 +2816,29 @@ }, "node_modules/@cucumber/messages/node_modules/@types/uuid": { "version": "8.3.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true }, "node_modules/@cucumber/messages/node_modules/uuid": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@cucumber/tag-expressions": { "version": "5.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@cucumber/tag-expressions/-/tag-expressions-5.0.1.tgz", + "integrity": "sha512-N43uWud8ZXuVjza423T9ZCIJsaZhFekmakt7S9bvogTxqdVGbRobjR663s0+uW0Rz9e+Pa8I6jUuWtoBLQD2Mw==", + "dev": true }, "node_modules/@dabh/diagnostics": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -2625,7 +2847,8 @@ }, "node_modules/@digitalbazaar/http-client": { "version": "3.4.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", "dependencies": { "ky": "^0.33.3", "ky-universal": "^0.11.0", @@ -2637,7 +2860,8 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -2653,14 +2877,16 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2681,15 +2907,17 @@ }, "node_modules/@eslint/js": { "version": "8.57.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@ethereumjs/common": { "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", "dev": true, - "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.5" @@ -2697,8 +2925,9 @@ }, "node_modules/@ethereumjs/common/node_modules/ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2719,8 +2948,9 @@ }, "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, - "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -2734,7 +2964,8 @@ }, "node_modules/@ethereumjs/rlp": { "version": "4.0.1", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", "bin": { "rlp": "bin/rlp" }, @@ -2744,8 +2975,9 @@ }, "node_modules/@ethereumjs/tx": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", "dev": true, - "license": "MPL-2.0", "dependencies": { "@ethereumjs/common": "^2.6.4", "ethereumjs-util": "^7.1.5" @@ -2753,8 +2985,9 @@ }, "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2775,8 +3008,9 @@ }, "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, - "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -2790,7 +3024,8 @@ }, "node_modules/@ethereumjs/util": { "version": "8.1.0", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", @@ -2802,7 +3037,8 @@ }, "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { "node": ">= 16" }, @@ -2812,14 +3048,16 @@ }, "node_modules/@ethereumjs/util/node_modules/@scure/base": { "version": "1.1.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -2831,7 +3069,8 @@ }, "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -2842,7 +3081,8 @@ }, "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -2852,6 +3092,8 @@ }, "node_modules/@ethersproject/abi": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "funding": [ { "type": "individual", @@ -2862,7 +3104,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -2877,6 +3118,8 @@ }, "node_modules/@ethersproject/abstract-provider": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "funding": [ { "type": "individual", @@ -2887,7 +3130,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -2900,6 +3142,8 @@ }, "node_modules/@ethersproject/abstract-signer": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "funding": [ { "type": "individual", @@ -2910,7 +3154,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -2921,6 +3164,8 @@ }, "node_modules/@ethersproject/address": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "funding": [ { "type": "individual", @@ -2931,7 +3176,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -2942,6 +3186,8 @@ }, "node_modules/@ethersproject/base64": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "funding": [ { "type": "individual", @@ -2952,13 +3198,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0" } }, "node_modules/@ethersproject/basex": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "funding": [ { "type": "individual", @@ -2969,7 +3216,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/properties": "^5.7.0" @@ -2977,6 +3223,8 @@ }, "node_modules/@ethersproject/bignumber": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "funding": [ { "type": "individual", @@ -2987,7 +3235,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -2996,6 +3243,8 @@ }, "node_modules/@ethersproject/bytes": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "funding": [ { "type": "individual", @@ -3006,13 +3255,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/constants": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "funding": [ { "type": "individual", @@ -3023,13 +3273,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0" } }, "node_modules/@ethersproject/contracts": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", "funding": [ { "type": "individual", @@ -3040,7 +3291,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -3056,6 +3306,8 @@ }, "node_modules/@ethersproject/hash": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "funding": [ { "type": "individual", @@ -3066,7 +3318,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -3081,6 +3332,8 @@ }, "node_modules/@ethersproject/hdnode": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", "funding": [ { "type": "individual", @@ -3091,7 +3344,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/basex": "^5.7.0", @@ -3109,6 +3361,8 @@ }, "node_modules/@ethersproject/json-wallets": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", "funding": [ { "type": "individual", @@ -3119,7 +3373,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -3138,6 +3391,8 @@ }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "funding": [ { "type": "individual", @@ -3148,7 +3403,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" @@ -3156,6 +3410,8 @@ }, "node_modules/@ethersproject/logger": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", "funding": [ { "type": "individual", @@ -3165,11 +3421,12 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ], - "license": "MIT" + ] }, "node_modules/@ethersproject/networks": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "funding": [ { "type": "individual", @@ -3180,13 +3437,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/pbkdf2": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", "funding": [ { "type": "individual", @@ -3197,7 +3455,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/sha2": "^5.7.0" @@ -3205,6 +3462,8 @@ }, "node_modules/@ethersproject/properties": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", "funding": [ { "type": "individual", @@ -3215,13 +3474,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/providers": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", "funding": [ { "type": "individual", @@ -3232,7 +3492,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -3258,7 +3517,8 @@ }, "node_modules/@ethersproject/providers/node_modules/ws": { "version": "7.4.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "engines": { "node": ">=8.3.0" }, @@ -3277,6 +3537,8 @@ }, "node_modules/@ethersproject/random": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "funding": [ { "type": "individual", @@ -3287,7 +3549,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -3295,6 +3556,8 @@ }, "node_modules/@ethersproject/rlp": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "funding": [ { "type": "individual", @@ -3305,7 +3568,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -3313,6 +3575,8 @@ }, "node_modules/@ethersproject/sha2": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", "funding": [ { "type": "individual", @@ -3323,7 +3587,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -3332,6 +3595,8 @@ }, "node_modules/@ethersproject/signing-key": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "funding": [ { "type": "individual", @@ -3342,7 +3607,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -3354,6 +3618,8 @@ }, "node_modules/@ethersproject/solidity": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", "funding": [ { "type": "individual", @@ -3364,7 +3630,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -3376,6 +3641,8 @@ }, "node_modules/@ethersproject/strings": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "funding": [ { "type": "individual", @@ -3386,7 +3653,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -3395,6 +3661,8 @@ }, "node_modules/@ethersproject/transactions": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "funding": [ { "type": "individual", @@ -3405,7 +3673,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -3420,6 +3687,8 @@ }, "node_modules/@ethersproject/units": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", "funding": [ { "type": "individual", @@ -3430,7 +3699,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -3439,6 +3707,8 @@ }, "node_modules/@ethersproject/wallet": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", "funding": [ { "type": "individual", @@ -3449,7 +3719,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -3470,6 +3739,8 @@ }, "node_modules/@ethersproject/web": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "funding": [ { "type": "individual", @@ -3480,7 +3751,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -3491,6 +3761,8 @@ }, "node_modules/@ethersproject/wordlists": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", "funding": [ { "type": "individual", @@ -3501,7 +3773,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", @@ -3512,14 +3783,23 @@ }, "node_modules/@fastify/busboy": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "engines": { "node": ">=14" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -3531,7 +3811,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "engines": { "node": ">=12.22" }, @@ -3542,12 +3823,15 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -3561,24 +3845,27 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@istanbuljs/load-nyc-config/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, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3589,8 +3876,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3601,8 +3889,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/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, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3612,8 +3901,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/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, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -3626,8 +3916,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/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, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -3637,28 +3928,32 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jeswr/prefixcc": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jeswr/prefixcc/-/prefixcc-1.2.1.tgz", + "integrity": "sha512-kBBXbqsaeh3Irp416h/RbelqJgIOp6X/OJJlYmLyr/9qlBYKTKSCuEv5/xjZ0Yf8Yec+QFRYBaOQ2JkMBSH7KA==", "dependencies": { "cross-fetch": "^3.1.5" }, @@ -3668,14 +3963,16 @@ }, "node_modules/@jeswr/prefixcc/node_modules/cross-fetch": { "version": "3.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/@jeswr/prefixcc/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3693,24 +3990,28 @@ }, "node_modules/@jeswr/prefixcc/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/@jeswr/prefixcc/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/@jeswr/prefixcc/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3722,27 +4023,31 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "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, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { "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, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3750,7 +4055,8 @@ }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", "dependencies": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -3764,7 +4070,8 @@ }, "node_modules/@motrix/nat-api": { "version": "0.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@motrix/nat-api/-/nat-api-0.3.4.tgz", + "integrity": "sha512-RIH5sSP329Xn8TjDcAHYHn82VTajhdu2Ee4PTLA+9jCAi5x0D219D1XYW7nCK22ptcLrC+qzBXlWG/j16iuoLQ==", "dependencies": { "async": "^3.2.4", "debug": "^4.3.4", @@ -3779,7 +4086,8 @@ }, "node_modules/@motrix/nat-api/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3797,15 +4105,18 @@ }, "node_modules/@motrix/nat-api/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/@motrix/nat-api/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/@motrix/nat-api/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -3813,7 +4124,8 @@ }, "node_modules/@noble/curves": { "version": "1.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -3823,7 +4135,8 @@ }, "node_modules/@noble/curves/node_modules/@noble/hashes": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { "node": ">= 16" }, @@ -3833,27 +4146,30 @@ }, "node_modules/@noble/hashes": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@noble/secp256k1": { "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3864,14 +4180,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3882,7 +4200,8 @@ }, "node_modules/@nomicfoundation/edr": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.5.tgz", + "integrity": "sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng==", "dependencies": { "@nomicfoundation/edr-darwin-arm64": "0.6.5", "@nomicfoundation/edr-darwin-x64": "0.6.5", @@ -3898,63 +4217,72 @@ }, "node_modules/@nomicfoundation/edr-darwin-arm64": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz", + "integrity": "sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw==", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz", + "integrity": "sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz", + "integrity": "sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz", + "integrity": "sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz", + "integrity": "sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz", + "integrity": "sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { "version": "0.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz", + "integrity": "sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/ethereumjs-common": { "version": "4.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", "dependencies": { "@nomicfoundation/ethereumjs-util": "9.0.4" } }, "node_modules/@nomicfoundation/ethereumjs-rlp": { "version": "5.0.4", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", "bin": { "rlp": "bin/rlp.cjs" }, @@ -3964,7 +4292,8 @@ }, "node_modules/@nomicfoundation/ethereumjs-tx": { "version": "5.0.4", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", "dependencies": { "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-rlp": "5.0.4", @@ -3985,7 +4314,8 @@ }, "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { "version": "0.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -4006,7 +4336,8 @@ }, "node_modules/@nomicfoundation/ethereumjs-util": { "version": "9.0.4", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", "dependencies": { "@nomicfoundation/ethereumjs-rlp": "5.0.4", "ethereum-cryptography": "0.1.3" @@ -4025,7 +4356,8 @@ }, "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -4046,7 +4378,8 @@ }, "node_modules/@nomicfoundation/solidity-analyzer": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "engines": { "node": ">= 12" }, @@ -4062,7 +4395,8 @@ }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "optional": true, "engines": { "node": ">= 12" @@ -4070,7 +4404,8 @@ }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", "optional": true, "engines": { "node": ">= 12" @@ -4078,7 +4413,8 @@ }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "optional": true, "engines": { "node": ">= 12" @@ -4086,7 +4422,8 @@ }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "optional": true, "engines": { "node": ">= 12" @@ -4094,7 +4431,8 @@ }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "optional": true, "engines": { "node": ">= 12" @@ -4102,7 +4440,8 @@ }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "optional": true, "engines": { "node": ">= 12" @@ -4110,29 +4449,73 @@ }, "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "optional": true, "engines": { "node": ">= 12" } }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@openzeppelin/contracts": { "version": "4.9.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", + "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", + "dev": true }, "node_modules/@polkadot-api/json-rpc-provider": { "version": "0.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", "optional": true }, "node_modules/@polkadot-api/json-rpc-provider-proxy": { "version": "0.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1.tgz", + "integrity": "sha512-gmVDUP8LpCH0BXewbzqXF2sdHddq1H1q+XrAW2of+KZj4woQkIGBRGTJHeBEVHe30EB+UejR1N2dT4PO/RvDdg==", + "dev": true, "optional": true }, "node_modules/@polkadot-api/metadata-builders": { "version": "0.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1.tgz", + "integrity": "sha512-GCI78BHDzXAF/L2pZD6Aod/yl82adqQ7ftNmKg51ixRL02JpWUA+SpUKTJE5MY1p8kiJJIo09P2um24SiJHxNA==", + "dev": true, "optional": true, "dependencies": { "@polkadot-api/substrate-bindings": "0.0.1", @@ -4141,7 +4524,9 @@ }, "node_modules/@polkadot-api/observable-client": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.1.0.tgz", + "integrity": "sha512-GBCGDRztKorTLna/unjl/9SWZcRmvV58o9jwU2Y038VuPXZcr01jcw/1O3x+yeAuwyGzbucI/mLTDa1QoEml3A==", + "dev": true, "optional": true, "dependencies": { "@polkadot-api/metadata-builders": "0.0.1", @@ -4155,7 +4540,9 @@ }, "node_modules/@polkadot-api/substrate-bindings": { "version": "0.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1.tgz", + "integrity": "sha512-bAe7a5bOPnuFVmpv7y4BBMRpNTnMmE0jtTqRUw/+D8ZlEHNVEJQGr4wu3QQCl7k1GnSV1wfv3mzIbYjErEBocg==", + "dev": true, "optional": true, "dependencies": { "@noble/hashes": "^1.3.1", @@ -4166,7 +4553,9 @@ }, "node_modules/@polkadot-api/substrate-bindings/node_modules/@noble/hashes": { "version": "1.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "dev": true, "optional": true, "engines": { "node": "^14.21.3 || >=16" @@ -4177,17 +4566,22 @@ }, "node_modules/@polkadot-api/substrate-client": { "version": "0.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.0.1.tgz", + "integrity": "sha512-9Bg9SGc3AwE+wXONQoW8GC00N3v6lCZLW74HQzqB6ROdcm5VAHM4CB/xRzWSUF9CXL78ugiwtHx3wBcpx4H4Wg==", + "dev": true, "optional": true }, "node_modules/@polkadot-api/utils": { "version": "0.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.0.1.tgz", + "integrity": "sha512-3j+pRmlF9SgiYDabSdZsBSsN5XHbpXOAce1lWj56IEEaFZVjsiCaxDOA7C9nCcgfVXuvnbxqqEGQvnY+QfBAUw==", + "dev": true, "optional": true }, "node_modules/@polkadot/api": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-9.14.2.tgz", + "integrity": "sha512-R3eYFj2JgY1zRb+OCYQxNlJXCs2FA+AU4uIEiVcXnVLmR3M55tkRNEwYAZmiFxx0pQmegGgPMc33q7TWGdw24A==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/api-augment": "9.14.2", @@ -4213,7 +4607,8 @@ }, "node_modules/@polkadot/api-augment": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-9.14.2.tgz", + "integrity": "sha512-19MmW8AHEcLkdcUIo3LLk0eCQgREWqNSxkUyOeWn7UiNMY1AhDOOwMStUBNCvrIDK6VL6GGc1sY7rkPCLMuKSw==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/api-base": "9.14.2", @@ -4229,7 +4624,8 @@ }, "node_modules/@polkadot/api-base": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-9.14.2.tgz", + "integrity": "sha512-ky9fmzG1Tnrjr/SBZ0aBB21l0TFr+CIyQenQczoUyVgiuxVaI/2Bp6R2SFrHhG28P+PW2/RcYhn2oIAR2Z2fZQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/rpc-core": "9.14.2", @@ -4243,7 +4639,8 @@ }, "node_modules/@polkadot/api-derive": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-9.14.2.tgz", + "integrity": "sha512-yw9OXucmeggmFqBTMgza0uZwhNjPxS7MaT7lSCUIRKckl1GejdV+qMhL3XFxPFeYzXwzFpdPG11zWf+qJlalqw==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/api": "9.14.2", @@ -4262,7 +4659,8 @@ }, "node_modules/@polkadot/keyring": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", + "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/util": "10.4.2", @@ -4278,7 +4676,8 @@ }, "node_modules/@polkadot/networks": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", + "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/util": "10.4.2", @@ -4290,7 +4689,8 @@ }, "node_modules/@polkadot/rpc-augment": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-9.14.2.tgz", + "integrity": "sha512-mOubRm3qbKZTbP9H01XRrfTk7k5it9WyzaWAg72DJBQBYdgPUUkGSgpPD/Srkk5/5GAQTWVWL1I2UIBKJ4TJjQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/rpc-core": "9.14.2", @@ -4304,7 +4704,8 @@ }, "node_modules/@polkadot/rpc-core": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-9.14.2.tgz", + "integrity": "sha512-krA/mtQ5t9nUQEsEVC1sjkttLuzN6z6gyJxK2IlpMS3S5ncy/R6w4FOpy+Q0H18Dn83JBo0p7ZtY7Y6XkK48Kw==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/rpc-augment": "9.14.2", @@ -4319,7 +4720,8 @@ }, "node_modules/@polkadot/rpc-provider": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-9.14.2.tgz", + "integrity": "sha512-YTSywjD5PF01V47Ru5tln2LlpUwJiSOdz6rlJXPpMaY53hUp7+xMU01FVAQ1bllSBNisSD1Msv/mYHq84Oai2g==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/keyring": "^10.4.2", @@ -4343,7 +4745,8 @@ }, "node_modules/@polkadot/types": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-9.14.2.tgz", + "integrity": "sha512-hGLddTiJbvowhhUZJ3k+olmmBc1KAjWIQxujIUIYASih8FQ3/YJDKxaofGOzh0VygOKW3jxQBN2VZPofyDP9KQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/keyring": "^10.4.2", @@ -4360,7 +4763,8 @@ }, "node_modules/@polkadot/types-augment": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-9.14.2.tgz", + "integrity": "sha512-WO9d7RJufUeY3iFgt2Wz762kOu1tjEiGBR5TT4AHtpEchVHUeosVTrN9eycC+BhleqYu52CocKz6u3qCT/jKLg==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/types": "9.14.2", @@ -4373,7 +4777,8 @@ }, "node_modules/@polkadot/types-codec": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-9.14.2.tgz", + "integrity": "sha512-AJ4XF7W1no4PENLBRU955V6gDxJw0h++EN3YoDgThozZ0sj3OxyFupKgNBZcZb2V23H8JxQozzIad8k+nJbO1w==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/util": "^10.4.2", @@ -4385,7 +4790,8 @@ }, "node_modules/@polkadot/types-create": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-9.14.2.tgz", + "integrity": "sha512-nSnKpBierlmGBQT8r6/SHf6uamBIzk4WmdMsAsR4uJKJF1PtbIqx2W5PY91xWSiMSNMzjkbCppHkwaDAMwLGaw==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/types-codec": "9.14.2", @@ -4397,7 +4803,8 @@ }, "node_modules/@polkadot/types-known": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-9.14.2.tgz", + "integrity": "sha512-iM8WOCgguzJ3TLMqlm4K1gKQEwWm2zxEKT1HZZ1irs/lAbBk9MquDWDvebryiw3XsLB8xgrp3RTIBn2Q4FjB2A==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/networks": "^10.4.2", @@ -4412,7 +4819,8 @@ }, "node_modules/@polkadot/types-support": { "version": "9.14.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-9.14.2.tgz", + "integrity": "sha512-VWCOPgXDK3XtXT7wMLyIWeNDZxUbNcw/8Pn6n6vMogs7o/n4h6WGbGMeTIQhPWyn831/RmkVs5+2DUC+2LlOhw==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/util": "^10.4.2" @@ -4423,7 +4831,8 @@ }, "node_modules/@polkadot/util": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", + "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/x-bigint": "10.4.2", @@ -4439,7 +4848,8 @@ }, "node_modules/@polkadot/util-crypto": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", + "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@noble/hashes": "1.2.0", @@ -4462,7 +4872,8 @@ }, "node_modules/@polkadot/wasm-bridge": { "version": "6.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.4.1.tgz", + "integrity": "sha512-QZDvz6dsUlbYsaMV5biZgZWkYH9BC5AfhT0f0/knv8+LrbAoQdP3Asbvddw8vyU9sbpuCHXrd4bDLBwUCRfrBQ==", "dependencies": { "@babel/runtime": "^7.20.6" }, @@ -4476,7 +4887,8 @@ }, "node_modules/@polkadot/wasm-crypto": { "version": "6.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", + "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", "dependencies": { "@babel/runtime": "^7.20.6", "@polkadot/wasm-bridge": "6.4.1", @@ -4495,7 +4907,8 @@ }, "node_modules/@polkadot/wasm-crypto-asmjs": { "version": "6.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", + "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", "dependencies": { "@babel/runtime": "^7.20.6" }, @@ -4508,7 +4921,8 @@ }, "node_modules/@polkadot/wasm-crypto-init": { "version": "6.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.4.1.tgz", + "integrity": "sha512-1ALagSi/nfkyFaH6JDYfy/QbicVbSn99K8PV9rctDUfxc7P06R7CoqbjGQ4OMPX6w1WYVPU7B4jPHGLYBlVuMw==", "dependencies": { "@babel/runtime": "^7.20.6", "@polkadot/wasm-bridge": "6.4.1", @@ -4525,7 +4939,8 @@ }, "node_modules/@polkadot/wasm-crypto-wasm": { "version": "6.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", + "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", "dependencies": { "@babel/runtime": "^7.20.6", "@polkadot/wasm-util": "6.4.1" @@ -4539,7 +4954,8 @@ }, "node_modules/@polkadot/wasm-util": { "version": "6.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.4.1.tgz", + "integrity": "sha512-Uwo+WpEsDmFExWC5kTNvsVhvqXMZEKf4gUHXFn4c6Xz4lmieRT5g+1bO1KJ21pl4msuIgdV3Bksfs/oiqMFqlw==", "dependencies": { "@babel/runtime": "^7.20.6" }, @@ -4552,7 +4968,8 @@ }, "node_modules/@polkadot/x-bigint": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", + "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -4563,7 +4980,8 @@ }, "node_modules/@polkadot/x-fetch": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", + "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2", @@ -4576,7 +4994,8 @@ }, "node_modules/@polkadot/x-global": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", + "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", "dependencies": { "@babel/runtime": "^7.20.13" }, @@ -4586,7 +5005,8 @@ }, "node_modules/@polkadot/x-randomvalues": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", + "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -4597,7 +5017,8 @@ }, "node_modules/@polkadot/x-textdecoder": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", + "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -4608,7 +5029,8 @@ }, "node_modules/@polkadot/x-textencoder": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", + "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -4619,7 +5041,8 @@ }, "node_modules/@polkadot/x-ws": { "version": "10.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", + "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2", @@ -4632,7 +5055,9 @@ }, "node_modules/@prb/math": { "version": "2.5.0", - "license": "Unlicense", + "resolved": "https://registry.npmjs.org/@prb/math/-/math-2.5.0.tgz", + "integrity": "sha512-iSNQd4L3HaYuAIhJliLVa7WGsyjFiQHGpomrFgdj7FhYGHT6Yo8bBwbmwAPF1bHD3LN8gdg+ssKrRUPNaNPEVw==", + "dev": true, "dependencies": { "@ethersproject/bignumber": "^5.5.0", "decimal.js": "^10.3.1", @@ -4647,23 +5072,28 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -4671,40 +5101,53 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@questdb/nodejs-client": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@questdb/nodejs-client/-/nodejs-client-3.0.0.tgz", + "integrity": "sha512-lBKd732rRpS/pqyWgCJFVXi9N1YoWDAUZzp6BngBVxH92As/NDXigZmCYKQVKpAEGYx14606CH5AoJ23qf3oqA==" }, "node_modules/@rdfjs/types": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", "dependencies": { "@types/node": "*" } }, "node_modules/@rtsao/scc": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@rubensworks/saxes": { "version": "6.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@rubensworks/saxes/-/saxes-6.0.1.tgz", + "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", "dependencies": { "xmlchars": "^2.2.0" }, @@ -4714,7 +5157,8 @@ }, "node_modules/@rushstack/node-core-library": { "version": "5.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.10.0.tgz", + "integrity": "sha512-2pPLCuS/3x7DCd7liZkqOewGM0OzLyCacdvOe8j6Yrx9LkETGnxul1t7603bIaB8nUAooORcct9fFDOQMbWAgw==", "dependencies": { "ajv": "~8.13.0", "ajv-draft-04": "~1.0.0", @@ -4736,7 +5180,8 @@ }, "node_modules/@rushstack/node-core-library/node_modules/ajv": { "version": "8.13.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -4750,7 +5195,8 @@ }, "node_modules/@rushstack/node-core-library/node_modules/ajv-draft-04": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", "peerDependencies": { "ajv": "^8.5.0" }, @@ -4762,7 +5208,8 @@ }, "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -4774,18 +5221,21 @@ }, "node_modules/@rushstack/node-core-library/node_modules/json-schema-traverse": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { "yallist": "^4.0.0" }, @@ -4795,7 +5245,8 @@ }, "node_modules/@rushstack/node-core-library/node_modules/semver": { "version": "7.5.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4808,18 +5259,21 @@ }, "node_modules/@rushstack/node-core-library/node_modules/universalify": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/@rushstack/node-core-library/node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@rushstack/terminal": { "version": "0.14.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.3.tgz", + "integrity": "sha512-csXbZsAdab/v8DbU1sz7WC2aNaKArcdS/FPmXMOXEj/JBBZMvDK0+1b4Qao0kkG0ciB1Qe86/Mb68GjH6/TnMw==", "dependencies": { "@rushstack/node-core-library": "5.10.0", "supports-color": "~8.1.1" @@ -4835,7 +5289,8 @@ }, "node_modules/@rushstack/ts-command-line": { "version": "4.23.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.1.tgz", + "integrity": "sha512-40jTmYoiu/xlIpkkRsVfENtBq4CW3R4azbL0Vmda+fMwHWqss6wwf/Cy/UJmMqIzpfYc2OTnjYP1ZLD3CmyeCA==", "dependencies": { "@rushstack/terminal": "0.14.3", "@types/argparse": "1.0.38", @@ -4845,34 +5300,38 @@ }, "node_modules/@rushstack/ts-command-line/node_modules/argparse": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@rushstack/ts-command-line/node_modules/sprintf-js": { "version": "1.0.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/@scure/base": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@scure/bip32": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", @@ -4881,13 +5340,14 @@ }, "node_modules/@scure/bip39": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" @@ -4895,7 +5355,8 @@ }, "node_modules/@sentry/core": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -4909,11 +5370,13 @@ }, "node_modules/@sentry/core/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/hub": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -4925,11 +5388,13 @@ }, "node_modules/@sentry/hub/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/minimal": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -4941,11 +5406,13 @@ }, "node_modules/@sentry/minimal/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/node": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -4963,18 +5430,21 @@ }, "node_modules/@sentry/node/node_modules/cookie": { "version": "0.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "engines": { "node": ">= 0.6" } }, "node_modules/@sentry/node/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/tracing": { "version": "5.30.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -4988,18 +5458,21 @@ }, "node_modules/@sentry/tracing/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/types": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", "engines": { "node": ">=6" } }, "node_modules/@sentry/utils": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -5010,12 +5483,14 @@ }, "node_modules/@sentry/utils/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5025,48 +5500,54 @@ }, "node_modules/@sinonjs/commons": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/commons/node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@sinonjs/fake-timers": { "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers/node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@sinonjs/samsam": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz", + "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", @@ -5075,12 +5556,14 @@ }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.3", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true }, "node_modules/@smessie/readable-web-to-node-stream": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@smessie/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.3.tgz", + "integrity": "sha512-8FFE7psRtRWQT31/duqbmgnSf2++QLR2YH9kj5iwsHhnoqSvHdOY3SAN5e7dhc+60p2cNk7rv3HYOiXOapTEXQ==", "dependencies": { "process": "^0.11.10", "readable-stream": "^4.5.1" @@ -5095,22 +5578,26 @@ }, "node_modules/@stablelib/aead": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==" }, "node_modules/@stablelib/binary": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", "dependencies": { "@stablelib/int": "^1.0.1" } }, "node_modules/@stablelib/bytes": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" }, "node_modules/@stablelib/chacha": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -5118,7 +5605,8 @@ }, "node_modules/@stablelib/chacha20poly1305": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", + "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", "dependencies": { "@stablelib/aead": "^1.0.1", "@stablelib/binary": "^1.0.1", @@ -5130,15 +5618,18 @@ }, "node_modules/@stablelib/constant-time": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" }, "node_modules/@stablelib/hash": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" }, "node_modules/@stablelib/hkdf": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/hkdf/-/hkdf-1.0.1.tgz", + "integrity": "sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==", "dependencies": { "@stablelib/hash": "^1.0.1", "@stablelib/hmac": "^1.0.1", @@ -5147,7 +5638,8 @@ }, "node_modules/@stablelib/hmac": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", + "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", "dependencies": { "@stablelib/constant-time": "^1.0.1", "@stablelib/hash": "^1.0.1", @@ -5156,18 +5648,21 @@ }, "node_modules/@stablelib/int": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" }, "node_modules/@stablelib/keyagreement": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", "dependencies": { "@stablelib/bytes": "^1.0.1" } }, "node_modules/@stablelib/poly1305": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", "dependencies": { "@stablelib/constant-time": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -5175,7 +5670,8 @@ }, "node_modules/@stablelib/random": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -5183,7 +5679,8 @@ }, "node_modules/@stablelib/sha256": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/hash": "^1.0.1", @@ -5192,11 +5689,13 @@ }, "node_modules/@stablelib/wipe": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" }, "node_modules/@stablelib/x25519": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", + "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", "dependencies": { "@stablelib/keyagreement": "^1.0.1", "@stablelib/random": "^1.0.2", @@ -5205,7 +5704,9 @@ }, "node_modules/@substrate/connect": { "version": "0.7.19", - "license": "GPL-3.0-only", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.19.tgz", + "integrity": "sha512-+DDRadc466gCmDU71sHrYOt1HcI2Cbhm7zdCFjZfFVHXhC/E8tOdrVSglAH2HDEHR0x2SiHRxtxOGC7ak2Zjog==", + "deprecated": "versions below 1.x are no longer maintained", "optional": true, "dependencies": { "@substrate/connect-extension-protocol": "^1.0.1", @@ -5215,22 +5716,27 @@ }, "node_modules/@substrate/connect-extension-protocol": { "version": "1.0.1", - "license": "GPL-3.0-only", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz", + "integrity": "sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==", "optional": true }, "node_modules/@substrate/connect-known-chains": { "version": "1.8.0", - "license": "GPL-3.0-only", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.8.0.tgz", + "integrity": "sha512-sl7WfeDgnZuPvUl5Xw0XIziOTe8rEBJ3uugyDETGnafxEbjYMv5aJL0ilq5djhnQ7l9OuMJCN3Ckved2yINeeQ==", "optional": true }, "node_modules/@substrate/connect/node_modules/eventemitter3": { "version": "4.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "optional": true }, "node_modules/@substrate/light-client-extension-helpers": { "version": "0.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.6.tgz", + "integrity": "sha512-girltEuxQ1BvkJWmc8JJlk4ZxnlGXc/wkLcNguhY+UoDEMBK0LsdtfzQKIfrIehi4QdeSBlFEFBoI4RqPmsZzA==", + "dev": true, "optional": true, "dependencies": { "@polkadot-api/json-rpc-provider": "0.0.1", @@ -5247,12 +5753,15 @@ }, "node_modules/@substrate/light-client-extension-helpers/node_modules/@substrate/connect-extension-protocol": { "version": "2.2.1", - "license": "GPL-3.0-only", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.1.tgz", + "integrity": "sha512-GoafTgm/Jey9E4Xlj4Z5ZBt/H4drH2CNq8VrAro80rtoznrXnFDNVivLQzZN0Xaj2g8YXSn9pC9Oc9IovYZJXw==", + "dev": true, "optional": true }, "node_modules/@substrate/smoldot-light": { "version": "0.7.9", - "license": "GPL-3.0-or-later WITH Classpath-exception-2.0", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.7.9.tgz", + "integrity": "sha512-HP8iP7sFYlpSgjjbo0lqHyU+gu9lL2hbDNce6dWk5/10mFFF9jKIFGfui4zCecUY808o/Go9pan/31kMJoLbug==", "optional": true, "dependencies": { "pako": "^2.0.4", @@ -5261,12 +5770,14 @@ }, "node_modules/@substrate/ss58-registry": { "version": "1.51.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==" }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, - "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -5276,51 +5787,60 @@ }, "node_modules/@teppeis/multimaps": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@teppeis/multimaps/-/multimaps-2.0.0.tgz", + "integrity": "sha512-TL1adzq1HdxUf9WYduLcQ/DNGYiz71U31QRgbnr0Ef1cPyOUOsBojxHVWpFeOSUucB6Lrs0LxFRA14ntgtkc9w==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.17" } }, "node_modules/@tootallnate/once": { "version": "1.1.2", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "devOptional": true, "engines": { "node": ">= 6" } }, "node_modules/@tsconfig/node10": { "version": "1.0.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "node_modules/@types/argparse": { "version": "1.0.38", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==" }, "node_modules/@types/bn.js": { "version": "5.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/cacheable-request": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -5330,80 +5850,94 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true }, "node_modules/@types/http-link-header": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", + "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@types/keyv": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/lodash": { "version": "4.17.13", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", + "dev": true }, "node_modules/@types/long": { "version": "4.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/lru-cache": { "version": "5.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, "node_modules/@types/minimatch": { "version": "3.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "node_modules/@types/minimist": { "version": "1.2.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" }, "node_modules/@types/ms": { "version": "0.7.34", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/n3": { "version": "1.21.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.21.1.tgz", + "integrity": "sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw==", "dependencies": { "@rdfjs/types": "^1.1.0", "@types/node": "*" } }, "node_modules/@types/node": { - "version": "22.10.1", - "license": "MIT", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "dependencies": { "undici-types": "~6.20.0" } }, "node_modules/@types/node-fetch": { "version": "2.6.12", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" @@ -5411,18 +5945,21 @@ }, "node_modules/@types/pbkdf2": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/qs": { "version": "6.9.17", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==" }, "node_modules/@types/readable-stream": { "version": "2.3.15", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -5430,92 +5967,117 @@ }, "node_modules/@types/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/@types/responselike": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/retry": { "version": "0.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/secp256k1": { "version": "4.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { "version": "7.5.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" }, "node_modules/@types/spark-md5": { "version": "3.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/spark-md5/-/spark-md5-3.0.5.tgz", + "integrity": "sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==" }, "node_modules/@types/sparqljs": { "version": "3.1.12", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", + "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", "dependencies": { "@rdfjs/types": ">=1.0.0" } }, "node_modules/@types/triple-beam": { "version": "1.3.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, "node_modules/@types/uritemplate": { "version": "0.3.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/uritemplate/-/uritemplate-0.3.6.tgz", + "integrity": "sha512-31BMGZ8GgLxgXxLnqg4KbbyYJjU1flhTTD2+PVQStVUPXSk0IIpK0zt+tH3eLT7ZRwLnzQw6JhYx69qza3U0wg==" }, "node_modules/@types/uuid": { "version": "9.0.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" }, "node_modules/@types/validator": { "version": "13.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz", + "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==" }, "node_modules/@types/websocket": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.10.tgz", + "integrity": "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { "version": "17.0.33", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "license": "ISC" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==" }, "node_modules/@vascosantos/moving-average": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz", + "integrity": "sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w==" }, "node_modules/abab": { "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true }, "node_modules/abort-controller": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -5525,19 +6087,22 @@ }, "node_modules/abortable-iterator": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-3.0.2.tgz", + "integrity": "sha512-qVP8HFfTpUQI2F+f1tpTriKDIZ4XrmwCrBCrQeRKO7DKWF3kgoT6NXiNDv2krrGcHxPwmI63eGQiec81sEaWIw==", "dependencies": { "get-iterator": "^1.0.2" } }, "node_modules/abortcontroller-polyfill": { - "version": "1.7.6", - "dev": true, - "license": "MIT" + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz", + "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==", + "dev": true }, "node_modules/accepts": { "version": "1.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -5548,7 +6113,8 @@ }, "node_modules/acorn": { "version": "8.14.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -5558,8 +6124,9 @@ }, "node_modules/acorn-globals": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" @@ -5567,8 +6134,9 @@ }, "node_modules/acorn-globals/node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5578,33 +6146,38 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/adm-zip": { "version": "0.4.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "engines": { "node": ">=0.3.0" } }, "node_modules/aes-js": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, "node_modules/agent-base": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dependencies": { "debug": "4" }, @@ -5612,9 +6185,22 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5625,7 +6211,8 @@ }, "node_modules/ajv": { "version": "6.12.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5639,7 +6226,8 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dependencies": { "ajv": "^8.0.0" }, @@ -5654,7 +6242,8 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.17.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5668,25 +6257,29 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/ansi-align": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dependencies": { "string-width": "^4.1.0" } }, "node_modules/ansi-colors": { "version": "4.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { "type-fest": "^0.21.3" }, @@ -5699,7 +6292,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { "node": ">=10" }, @@ -5709,15 +6303,17 @@ }, "node_modules/ansi-regex": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -5730,12 +6326,14 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true }, "node_modules/any-signal": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-2.1.2.tgz", + "integrity": "sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==", "dependencies": { "abort-controller": "^3.0.0", "native-abort-controller": "^1.0.3" @@ -5743,7 +6341,8 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5754,15 +6353,17 @@ }, "node_modules/app-root-path": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", "engines": { "node": ">= 6.0.0" } }, "node_modules/append-transform": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, - "license": "MIT", "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -5770,23 +6371,61 @@ "node": ">=8" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, "node_modules/archy": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/arg": { "version": "4.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "node_modules/argparse": { "version": "2.0.1", - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-query": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": ">= 0.4" @@ -5794,8 +6433,9 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.5", @@ -5810,12 +6450,14 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -5834,8 +6476,9 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -5854,8 +6497,9 @@ }, "node_modules/array.prototype.findlastindex": { "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -5874,8 +6518,9 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.2", + "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -5892,8 +6537,9 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", + "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -5910,8 +6556,9 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -5926,8 +6573,9 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -5948,19 +6596,22 @@ }, "node_modules/arrayify-stream": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.1.tgz", + "integrity": "sha512-z8fB6PtmnewQpFB53piS2d1KlUi3BPMICH2h7leCOUXpQcwvZ4GbHHSpdKoUrgLMR6b4Qan/uDe1St3Ao3yIHg==" }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/asn1.js": { "version": "5.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -5970,28 +6621,32 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/assertion-error-formatter": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", + "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", "dev": true, - "license": "MIT", "dependencies": { "diff": "^4.0.1", "pad-right": "^0.2.2", @@ -5999,63 +6654,75 @@ } }, "node_modules/assertion-tools": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-2.2.1.tgz", - "integrity": "sha512-JlA1S16Ox93PnYb45HvxNcax/Ii4gqTO8HLGa/ykj/ddp8EEHlokn6inJR2yMiz173WSFkCc0ciLJzGeaYBANw==", + "version": "8.0.0-gamma.1", + "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-8.0.0-gamma.1.tgz", + "integrity": "sha512-I4IHIiylrVFUoLy07qPxCbwwUk0Qpqfo0qL1cPBKcSY0e9b4+AHQoBLuSZkaE9rUy1wC+7vqBMikn4d/DW3FAw==", "dependencies": { "ethers": "^5.7.2", "jsonld": "^8.1.0", - "merkletreejs": "^0.3.2" + "merkletreejs": "^0.3.2", + "n3": "^1.23.1", + "rdf-canonize": "^4.0.1", + "uuid": "^8.3.2" } }, "node_modules/ast-types-flow": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/async": { "version": "3.2.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "node_modules/async-limiter": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true }, "node_modules/async-mutex": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", + "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", "dependencies": { "tslib": "^2.3.1" } }, "node_modules/asynciterator": { "version": "3.9.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.9.0.tgz", + "integrity": "sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g==" }, "node_modules/asyncjoin": { "version": "1.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/asyncjoin/-/asyncjoin-1.2.4.tgz", + "integrity": "sha512-7/1g5uV2/iTDQteJ/pxqZq6qkO5406V+vNyOCYtHJ+mo6bmvvQHHrZgd7AtU/rx+cnz08NPWlwk8daW61thnlA==", "dependencies": { "asynciterator": "^3.9.0" } }, "node_modules/asynckit": { "version": "0.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/atomic-sleep": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "engines": { "node": ">=8.0.0" } }, "node_modules/available-typed-arrays": { "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, - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -6068,7 +6735,8 @@ }, "node_modules/awilix": { "version": "7.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/awilix/-/awilix-7.0.3.tgz", + "integrity": "sha512-4Nmjyh9qloDwXfDK0DBuWd8WyFApyknoaKbE3leQflGLgNfNsBHy2/VYrlyy/mzMobjJ3J8XtNpbjzG3KRkIFQ==", "dependencies": { "camel-case": "^4.1.2", "fast-glob": "^3.2.11" @@ -6079,28 +6747,32 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws-ssl-profiles": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", "engines": { "node": ">= 6.0.0" } }, "node_modules/aws4": { "version": "1.13.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true }, "node_modules/axe-core": { "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "dev": true, - "license": "MPL-2.0", "peer": true, "engines": { "node": ">=4" @@ -6108,7 +6780,8 @@ }, "node_modules/axios": { "version": "1.7.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -6117,8 +6790,9 @@ }, "node_modules/axobject-query": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": ">= 0.4" @@ -6126,23 +6800,27 @@ }, "node_modules/b4a": { "version": "1.6.7", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true }, "node_modules/balanced-match": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "dev": true, - "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "bare-events": "^2.0.0", @@ -6152,37 +6830,43 @@ }, "node_modules/bare-os": { "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", "dev": true, - "license": "Apache-2.0", "optional": true }, "node_modules/bare-path": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "bare-os": "^2.1.0" } }, "node_modules/bare-stream": { - "version": "2.4.2", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz", + "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { - "streamx": "^2.20.0" + "streamx": "^2.21.0" } }, "node_modules/base-x": { "version": "3.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -6196,58 +6880,68 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/base64url": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", "engines": { "node": ">=6.0.0" } }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { "version": "0.14.5", - "dev": true, - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, "node_modules/bech32": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "node_modules/big-integer": { "version": "1.6.52", - "license": "Unlicense", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "engines": { "node": ">=0.6" } }, "node_modules/bignumber.js": { "version": "9.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", "engines": { "node": "*" } }, "node_modules/binary": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", "dependencies": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" } }, "node_modules/binary-extensions": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" }, @@ -6257,14 +6951,16 @@ }, "node_modules/bindings": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bl": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -6273,7 +6969,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6285,19 +6982,23 @@ }, "node_modules/blakejs": { "version": "1.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" }, "node_modules/bluebird": { "version": "3.4.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" }, "node_modules/bn.js": { "version": "5.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { "version": "1.20.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -6319,14 +7020,16 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6336,11 +7039,13 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/boxen": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -6360,7 +7065,8 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6368,7 +7074,8 @@ }, "node_modules/braces": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { "fill-range": "^7.1.1" }, @@ -6378,20 +7085,24 @@ }, "node_modules/brorand": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true }, "node_modules/browser-stdout": { "version": "1.3.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "node_modules/browserify-aes": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -6403,6 +7114,8 @@ }, "node_modules/browserslist": { "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -6418,7 +7131,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001669", "electron-to-chromium": "^1.5.41", @@ -6434,14 +7146,16 @@ }, "node_modules/bs58": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { "base-x": "^3.0.2" } }, "node_modules/bs58check": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dependencies": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -6450,6 +7164,8 @@ }, "node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -6464,7 +7180,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -6472,42 +7187,51 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "node_modules/buffer-from": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", "engines": { "node": ">=0.10" } }, "node_modules/buffer-reverse": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==" }, "node_modules/buffer-to-arraybuffer": { "version": "0.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", + "dev": true }, "node_modules/buffer-xor": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/buffers": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", "engines": { "node": ">=0.2.0" } }, "node_modules/bufferutil": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -6517,6 +7241,8 @@ }, "node_modules/busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -6526,23 +7252,157 @@ }, "node_modules/bytes": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cacache/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==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, "node_modules/cacheable-lookup": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.6.0" } }, "node_modules/cacheable-request": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, - "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -6558,8 +7418,9 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -6572,16 +7433,18 @@ }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/caching-transform": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, - "license": "MIT", "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -6594,7 +7457,8 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -6609,8 +7473,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.0", - "license": "MIT", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -6619,16 +7484,33 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "dependencies": { + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -6636,7 +7518,8 @@ }, "node_modules/camelcase": { "version": "6.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, @@ -6645,7 +7528,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001687", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "dev": true, "funding": [ { @@ -6660,17 +7545,18 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/canonicalize": { "version": "2.0.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" }, "node_modules/capital-case": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -6679,13 +7565,15 @@ }, "node_modules/caseless": { "version": "0.12.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true }, "node_modules/chai": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -6701,14 +7589,19 @@ }, "node_modules/chainsaw": { "version": "0.1.0", - "license": "MIT/X11", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", "dependencies": { "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" } }, "node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6722,7 +7615,8 @@ }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -6732,8 +7626,9 @@ }, "node_modules/check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -6743,7 +7638,8 @@ }, "node_modules/chokidar": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dependencies": { "readdirp": "^4.0.1" }, @@ -6756,17 +7652,20 @@ }, "node_modules/chownr": { "version": "1.1.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/ci-info": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "node_modules/cids": { "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "class-is": "^1.1.0", @@ -6781,6 +7680,8 @@ }, "node_modules/cids/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -6796,7 +7697,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -6804,8 +7704,10 @@ }, "node_modules/cids/node_modules/multicodec": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.6.0", "varint": "^5.0.0" @@ -6813,12 +7715,14 @@ }, "node_modules/cids/node_modules/varint": { "version": "5.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true }, "node_modules/cipher-base": { "version": "1.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" @@ -6829,23 +7733,27 @@ }, "node_modules/class-is": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" }, "node_modules/class-transformer": { "version": "0.5.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "dev": true }, "node_modules/clean-stack": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "engines": { "node": ">=6" } }, "node_modules/cli-boxes": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "engines": { "node": ">=6" }, @@ -6855,8 +7763,9 @@ }, "node_modules/cli-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, @@ -6869,8 +7778,9 @@ }, "node_modules/cli-table3": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -6883,8 +7793,9 @@ }, "node_modules/cli-truncate": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, - "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" @@ -6898,8 +7809,9 @@ }, "node_modules/cli-truncate/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -6909,8 +7821,9 @@ }, "node_modules/cli-truncate/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -6925,8 +7838,9 @@ }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6939,7 +7853,8 @@ }, "node_modules/cliui": { "version": "8.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -6951,8 +7866,9 @@ }, "node_modules/clone-response": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, - "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -6962,16 +7878,18 @@ }, "node_modules/clone-response/node_modules/mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/color": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -6982,7 +7900,8 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -6992,23 +7911,36 @@ }, "node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colorette": { "version": "2.0.20", - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/colorspace": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -7016,7 +7948,8 @@ }, "node_modules/colorspace/node_modules/color": { "version": "3.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -7024,18 +7957,21 @@ }, "node_modules/colorspace/node_modules/color-convert": { "version": "1.9.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { "color-name": "1.1.3" } }, "node_modules/colorspace/node_modules/color-name": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/combined-stream": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -7045,24 +7981,29 @@ }, "node_modules/command-exists": { "version": "1.2.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "node_modules/commander": { "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/commondir": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true }, "node_modules/complex.js": { "version": "2.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.2.tgz", + "integrity": "sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g==", + "dev": true, "engines": { "node": "*" }, @@ -7073,7 +8014,8 @@ }, "node_modules/componentsjs": { "version": "5.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/componentsjs/-/componentsjs-5.5.1.tgz", + "integrity": "sha512-hmqq+ZUa98t9CoeWPGwE14I18aXQFAt66HRd8DaZCNggcSr82vhlyrjeXX0JAUMgr2MyQzwKstkv4INRAREguA==", "dependencies": { "@rdfjs/types": "*", "@types/minimist": "^1.2.0", @@ -7095,28 +8037,39 @@ } }, "node_modules/componentsjs/node_modules/@types/node": { - "version": "18.19.67", - "license": "MIT", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/componentsjs/node_modules/undici-types": { "version": "5.26.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/concat-map": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true }, "node_modules/content-disposition": { "version": "0.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { "safe-buffer": "5.2.1" }, @@ -7126,8 +8079,9 @@ }, "node_modules/content-hash": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", "dev": true, - "license": "ISC", "dependencies": { "cids": "^0.7.1", "multicodec": "^0.5.5", @@ -7136,34 +8090,40 @@ }, "node_modules/content-type": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "1.9.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/cookie": { "version": "0.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-util-is": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "node_modules/cors": { "version": "2.8.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -7174,8 +8134,9 @@ }, "node_modules/crc-32": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, - "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" }, @@ -7185,7 +8146,8 @@ }, "node_modules/create-hash": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -7196,7 +8158,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -7208,18 +8171,21 @@ }, "node_modules/create-require": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cross-fetch": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7237,15 +8203,18 @@ }, "node_modules/cross-fetch/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/cross-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/cross-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -7253,7 +8222,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7265,17 +8235,20 @@ }, "node_modules/crypto-js": { "version": "4.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, "node_modules/cssom": { "version": "0.4.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true }, "node_modules/cssstyle": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, - "license": "MIT", "dependencies": { "cssom": "~0.3.6" }, @@ -7285,12 +8258,14 @@ }, "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true }, "node_modules/d": { "version": "1.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dependencies": { "es5-ext": "^0.10.64", "type": "^2.7.2" @@ -7301,8 +8276,9 @@ }, "node_modules/d3": { "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", "dev": true, - "license": "ISC", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -7341,8 +8317,9 @@ }, "node_modules/d3-array": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", "dev": true, - "license": "ISC", "dependencies": { "internmap": "1 - 2" }, @@ -7352,16 +8329,18 @@ }, "node_modules/d3-axis": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-brush": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dev": true, - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -7375,8 +8354,9 @@ }, "node_modules/d3-chord": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", "dev": true, - "license": "ISC", "dependencies": { "d3-path": "1 - 3" }, @@ -7386,21 +8366,24 @@ }, "node_modules/d3-collection": { "version": "1.0.7", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "dev": true }, "node_modules/d3-color": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-contour": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dev": true, - "license": "ISC", "dependencies": { "d3-array": "^3.2.0" }, @@ -7410,8 +8393,9 @@ }, "node_modules/d3-delaunay": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", "dev": true, - "license": "ISC", "dependencies": { "delaunator": "5" }, @@ -7421,16 +8405,18 @@ }, "node_modules/d3-dispatch": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-drag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dev": true, - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -7441,8 +8427,9 @@ }, "node_modules/d3-dsv": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", "dev": true, - "license": "ISC", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -7465,24 +8452,27 @@ }, "node_modules/d3-dsv/node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/d3-ease": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=12" } }, "node_modules/d3-fetch": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "dev": true, - "license": "ISC", "dependencies": { "d3-dsv": "1 - 3" }, @@ -7492,8 +8482,9 @@ }, "node_modules/d3-force": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "dev": true, - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -7505,16 +8496,18 @@ }, "node_modules/d3-format": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-geo": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", "dev": true, - "license": "ISC", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -7524,16 +8517,18 @@ }, "node_modules/d3-hierarchy": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-interpolate": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dev": true, - "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -7543,8 +8538,9 @@ }, "node_modules/d3-node": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-node/-/d3-node-3.0.0.tgz", + "integrity": "sha512-JuuBToljSQBo+KHSuPVOEdKawsxuLDlrB8TZY8AkPkpvyKaGgX+g0ksgjRg+Mgat9fB77qFQrk09j72cD0yk7w==", "dev": true, - "license": "MIT", "dependencies": { "d3": "^5.16.0", "jsdom": "^16.7.0" @@ -7552,13 +8548,15 @@ }, "node_modules/d3-node/node_modules/commander": { "version": "2.20.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/d3-node/node_modules/d3": { "version": "5.16.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-array": "1", "d3-axis": "1", @@ -7595,18 +8593,21 @@ }, "node_modules/d3-node/node_modules/d3-array": { "version": "1.2.4", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "dev": true }, "node_modules/d3-node/node_modules/d3-axis": { "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", + "dev": true }, "node_modules/d3-node/node_modules/d3-brush": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", + "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-dispatch": "1", "d3-drag": "1", @@ -7617,8 +8618,9 @@ }, "node_modules/d3-node/node_modules/d3-chord": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-array": "1", "d3-path": "1" @@ -7626,26 +8628,30 @@ }, "node_modules/d3-node/node_modules/d3-color": { "version": "1.4.1", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", + "dev": true }, "node_modules/d3-node/node_modules/d3-contour": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-array": "^1.1.1" } }, "node_modules/d3-node/node_modules/d3-dispatch": { "version": "1.0.6", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", + "dev": true }, "node_modules/d3-node/node_modules/d3-drag": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-dispatch": "1", "d3-selection": "1" @@ -7653,8 +8659,9 @@ }, "node_modules/d3-node/node_modules/d3-dsv": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "commander": "2", "iconv-lite": "0.4", @@ -7674,21 +8681,24 @@ }, "node_modules/d3-node/node_modules/d3-ease": { "version": "1.0.7", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", + "dev": true }, "node_modules/d3-node/node_modules/d3-fetch": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-dsv": "1" } }, "node_modules/d3-node/node_modules/d3-force": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-collection": "1", "d3-dispatch": "1", @@ -7698,54 +8708,63 @@ }, "node_modules/d3-node/node_modules/d3-format": { "version": "1.4.5", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "dev": true }, "node_modules/d3-node/node_modules/d3-geo": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-array": "1" } }, "node_modules/d3-node/node_modules/d3-hierarchy": { "version": "1.1.9", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", + "dev": true }, "node_modules/d3-node/node_modules/d3-interpolate": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-color": "1" } }, "node_modules/d3-node/node_modules/d3-path": { "version": "1.0.9", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "dev": true }, "node_modules/d3-node/node_modules/d3-polygon": { "version": "1.0.6", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", + "dev": true }, "node_modules/d3-node/node_modules/d3-quadtree": { "version": "1.0.7", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", + "dev": true }, "node_modules/d3-node/node_modules/d3-random": { "version": "1.1.2", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", + "dev": true }, "node_modules/d3-node/node_modules/d3-scale": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-array": "^1.2.0", "d3-collection": "1", @@ -7757,8 +8776,9 @@ }, "node_modules/d3-node/node_modules/d3-scale-chromatic": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-color": "1", "d3-interpolate": "1" @@ -7766,39 +8786,45 @@ }, "node_modules/d3-node/node_modules/d3-selection": { "version": "1.4.2", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", + "dev": true }, "node_modules/d3-node/node_modules/d3-shape": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-path": "1" } }, "node_modules/d3-node/node_modules/d3-time": { "version": "1.1.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "dev": true }, "node_modules/d3-node/node_modules/d3-time-format": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-time": "1" } }, "node_modules/d3-node/node_modules/d3-timer": { "version": "1.0.10", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "dev": true }, "node_modules/d3-node/node_modules/d3-transition": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-color": "1", "d3-dispatch": "1", @@ -7810,8 +8836,9 @@ }, "node_modules/d3-node/node_modules/d3-zoom": { "version": "1.8.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "d3-dispatch": "1", "d3-drag": "1", @@ -7822,8 +8849,9 @@ }, "node_modules/d3-node/node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7833,40 +8861,45 @@ }, "node_modules/d3-path": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-polygon": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-quadtree": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-random": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-scale": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", "dev": true, - "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -7880,8 +8913,9 @@ }, "node_modules/d3-scale-chromatic": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", "dev": true, - "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -7892,16 +8926,18 @@ }, "node_modules/d3-selection": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-shape": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", "dev": true, - "license": "ISC", "dependencies": { "d3-path": "^3.1.0" }, @@ -7911,8 +8947,9 @@ }, "node_modules/d3-time": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", "dev": true, - "license": "ISC", "dependencies": { "d3-array": "2 - 3" }, @@ -7922,8 +8959,9 @@ }, "node_modules/d3-time-format": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", "dev": true, - "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -7933,16 +8971,18 @@ }, "node_modules/d3-timer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-transition": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dev": true, - "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -7959,13 +8999,15 @@ }, "node_modules/d3-voronoi": { "version": "1.1.4", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", + "dev": true }, "node_modules/d3-zoom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", "dev": true, - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -7979,14 +9021,16 @@ }, "node_modules/damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, - "license": "BSD-2-Clause", "peer": true }, "node_modules/dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -7996,15 +9040,17 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "engines": { "node": ">= 12" } }, "node_modules/data-urls": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, - "license": "MIT", "dependencies": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", @@ -8016,8 +9062,9 @@ }, "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.6", @@ -8033,8 +9080,9 @@ }, "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -8050,8 +9098,9 @@ }, "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.6", @@ -8067,14 +9116,16 @@ }, "node_modules/dateformat": { "version": "4.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "engines": { "node": "*" } }, "node_modules/debug": { - "version": "4.3.7", - "license": "MIT", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { "ms": "^2.1.3" }, @@ -8089,28 +9140,32 @@ }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decimal.js": { "version": "10.4.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true }, "node_modules/decode-uri-component": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/decompress-response": { "version": "6.0.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { "mimic-response": "^3.1.0" }, @@ -8123,8 +9178,9 @@ }, "node_modules/deep-eql": { "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, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -8134,18 +9190,21 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/default-gateway": { "version": "6.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dependencies": { "execa": "^5.0.0" }, @@ -8155,8 +9214,9 @@ }, "node_modules/default-require-extensions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, - "license": "MIT", "dependencies": { "strip-bom": "^4.0.0" }, @@ -8169,15 +9229,17 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/define-data-property": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -8192,8 +9254,9 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -8208,36 +9271,47 @@ }, "node_modules/delaunator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", "dev": true, - "license": "ISC", "dependencies": { "robust-predicates": "^3.0.2" } }, "node_modules/delayed-stream": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, "node_modules/denque": { "version": "2.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "engines": { "node": ">=0.10" } }, "node_modules/depd": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { "node": ">= 0.8" } }, "node_modules/destroy": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -8245,41 +9319,44 @@ }, "node_modules/detect-libc": { "version": "2.0.3", - "dev": true, - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } }, "node_modules/diff": { "version": "4.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "engines": { "node": ">=0.3.1" } }, "node_modules/dkg-evm-module": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-4.4.0.tgz", - "integrity": "sha512-2hBZI/KnbbOEiKr3mU7Nknz3Wis8hLWGvyCifevG4/fUO8v+oVdrshLvQJ6izAfDHeua2PHcW8Z3hn6eIdUVxA==", - "dependencies": { - "@openzeppelin/contracts": "^4.9.3", - "@polkadot/api": "^11.0.3", - "@polkadot/keyring": "^12.6.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "@prb/math": "^2.5.0", - "dotenv": "^16.0.3", - "hardhat": "^2.22.5", - "hardhat-deploy": "^0.11.25", - "hardhat-deploy-ethers": "^0.3.0-beta.13", + "version": "8.0.0-sigma.3", + "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-8.0.0-sigma.3.tgz", + "integrity": "sha512-32vhPrSwzSZt2cG3j5nf3y0Cu3QhMhanc7DeoXQ2e5VGKLVlA3yuNGw5e1zm0z3kQputYzNJaeznBFu13tDRwQ==", + "dependencies": { + "@openzeppelin/contracts": "^5.1.0", + "@polkadot/api": "^15.0.2", + "@polkadot/keyring": "^13.2.3", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "@prb/math": "^4.1.0", + "dotenv": "^16.4.7", + "hardhat": "^2.22.17", + "hardhat-deploy": "^0.12.4", + "hardhat-deploy-ethers": "^0.4.2", + "solady": "^0.0.285", "ts-node": "^10.9.1", - "typescript": "^4.9.4" + "typescript": "^5.7.2" } }, "node_modules/dkg-evm-module/node_modules/@noble/hashes": { "version": "1.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", "engines": { "node": "^14.21.3 || >=16" }, @@ -8287,9 +9364,905 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/dkg-evm-module/node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", + "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/dkg-evm-module/node_modules/@openzeppelin/contracts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz", + "integrity": "sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==" + }, + "node_modules/dkg-evm-module/node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "node_modules/dkg-evm-module/node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, "node_modules/dkg-evm-module/node_modules/@polkadot/api": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-15.0.2.tgz", + "integrity": "sha512-CA8Pq2Gsz2MJvpkpIVNzaBs2eJGCr0sEodAb0vTOZW/ZlIDHcBWyWq3KXE+lBMWVzYBEC4Vz6MafNgq6Bsshlw==", + "dependencies": { + "@polkadot/api-augment": "15.0.2", + "@polkadot/api-base": "15.0.2", + "@polkadot/api-derive": "15.0.2", + "@polkadot/keyring": "^13.2.3", + "@polkadot/rpc-augment": "15.0.2", + "@polkadot/rpc-core": "15.0.2", + "@polkadot/rpc-provider": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-augment": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/types-create": "15.0.2", + "@polkadot/types-known": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/api-augment": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-15.0.2.tgz", + "integrity": "sha512-7qtfTihLKS7cT2kEsd8Y1+MJ+2n4Sl0y9BHuPhdNfKcDbGwCxIB7JzXNujww4Is4bF7w1lXcM2U0E/XwJi1BbQ==", + "dependencies": { + "@polkadot/api-base": "15.0.2", + "@polkadot/rpc-augment": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-augment": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/api-base": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-15.0.2.tgz", + "integrity": "sha512-5++EjpuCxzmrL2JJj511RrPK+IovuIQa8DJhyOp62VDMXPkqS/O6Df5wjYzQh/ftT1ZysftXqJAUA/LSUsH+2g==", + "dependencies": { + "@polkadot/rpc-core": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/util": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-15.0.2.tgz", + "integrity": "sha512-nD8hXZxEv2/wuhjMmVP09lTAYd8inNgrLpLGUR+7hBQeVEQQTdNatkqMKpNIOk2MO46mtUK35NepvDBK9DWZzA==", + "dependencies": { + "@polkadot/api": "15.0.2", + "@polkadot/api-augment": "15.0.2", + "@polkadot/api-base": "15.0.2", + "@polkadot/rpc-core": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/keyring": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.2.3.tgz", + "integrity": "sha512-pgTo6DXNXub0wGD+MnVHYhKxf80Jl+QMOCb818ioGdXz++Uw4mTueFAwtB+N7TGo0HafhChUiNJDxFdlDkcAng==", + "dependencies": { + "@polkadot/util": "13.2.3", + "@polkadot/util-crypto": "13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.2.3", + "@polkadot/util-crypto": "13.2.3" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/networks": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.2.3.tgz", + "integrity": "sha512-mG+zkXg/33AyPrkv2xBbAo3LBUwOwBn6qznBU/4jxiZPnVvCwMaxE7xHM22B5riItbNJ169FXv3wy0v6ZmkFbw==", + "dependencies": { + "@polkadot/util": "13.2.3", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-augment": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-15.0.2.tgz", + "integrity": "sha512-of88GdzsOs15HP+Gowh4G/iKKFkCNIeF0Wes8LiONfn+j2TmWt8blbyGhrIZZeApzbFUDFjnxUPGT40uWJcMpw==", + "dependencies": { + "@polkadot/rpc-core": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-core": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-15.0.2.tgz", + "integrity": "sha512-KOUnfXOAFCN0N23sEbS+FzXhX88JCvJst/nKzO9+q67NgYBEqgcaoG4tqt/VVedgkNi0kA7WAA3wyjt5UYMnrg==", + "dependencies": { + "@polkadot/rpc-augment": "15.0.2", + "@polkadot/rpc-provider": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/util": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-15.0.2.tgz", + "integrity": "sha512-BwLP8gNskzqtQ2kMk+EX6WK4d9TU0XJ/nJg0TKC2dX5sSTpTF2JQIYp1wuOik4rKNXIU/1hKaDSSylMJj7AHeQ==", + "dependencies": { + "@polkadot/keyring": "^13.2.3", + "@polkadot/types": "15.0.2", + "@polkadot/types-support": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "@polkadot/x-fetch": "^13.2.3", + "@polkadot/x-global": "^13.2.3", + "@polkadot/x-ws": "^13.2.3", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/types": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-15.0.2.tgz", + "integrity": "sha512-6gZBnuXU58hQAXWI2daED2OaQwFMxbQdkE8HVGMovMobEf0PxPfIqf+GdnVmWbe09EU9mv2gCWBcdnvHSRBlQg==", + "dependencies": { + "@polkadot/keyring": "^13.2.3", + "@polkadot/types-augment": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/types-create": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/types-augment": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-15.0.2.tgz", + "integrity": "sha512-UiFJVEYML30+V9GdFAHPbA3s4MVQTL1CevsZMnX0+ApvlgEHJMZnVFfYF7jL2bl9BcUYM/zoxEAhj2MpqFFfxw==", + "dependencies": { + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/types-codec": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-15.0.2.tgz", + "integrity": "sha512-44Q40p1rl0t7Bl1QUamewqXNVPway9xgqByyifv6ODSGhtt+lFoarb3U4JzqRUuuK0PP57ePB0L8q81Totxeew==", + "dependencies": { + "@polkadot/util": "^13.2.3", + "@polkadot/x-bigint": "^13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/types-create": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-15.0.2.tgz", + "integrity": "sha512-YhpcqbH3oI87PkgrV6Fez9jWDqFIep0KcS1YWQcwc9gsBNnuour80t2AAK41/tqAYwOZi6tpJwIevnEhVkxFYA==", + "dependencies": { + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/types-known": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-15.0.2.tgz", + "integrity": "sha512-SyBo4xBoesHYiEfdW/nOgaftKgM7+puBWqQXq1Euz0MM5LDLjxBw22Srgk9ulGM6l9MsekIwCyX8geJ6/6J3Cg==", + "dependencies": { + "@polkadot/networks": "^13.2.3", + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/types-create": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/types-support": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-15.0.2.tgz", + "integrity": "sha512-I7Im/4K2/XDZ1LfeQeeNyvIkfvozIPQs8K1/nsICDOmBbvIsjxSeKWHOcFDMJ8AlPEer6bqNQavOyZA/pg9R/Q==", + "dependencies": { + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/util": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.2.3.tgz", + "integrity": "sha512-pioNnsig3qHXrfOKMe4Yqos8B8N3/EZUpS+WfTpWnn1VjYban/0GrTXeavPlAwggnY27b8fS6rBzQBhnVYDw8g==", + "dependencies": { + "@polkadot/x-bigint": "13.2.3", + "@polkadot/x-global": "13.2.3", + "@polkadot/x-textdecoder": "13.2.3", + "@polkadot/x-textencoder": "13.2.3", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/util-crypto": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.2.3.tgz", + "integrity": "sha512-5sbggmLbn5eiuVMyPROPlT5roHRqdKHOfSpioNbGvGIZ1qIWVoC1RfsK0NWJOVGDzy6DpQe0KYT/kgcU5Xsrzw==", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.2.3", + "@polkadot/util": "13.2.3", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.2.3", + "@polkadot/x-randomvalues": "13.2.3", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.2.3" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/x-bigint": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.2.3.tgz", + "integrity": "sha512-VKgEAh0LsxTd/Hg517Tt5ZU4CySjBwMpaojbkjgv3fOdg1cN7t4eFEUxpyj7mlO0cp22SzDh7nmy4TO98qhLQA==", + "dependencies": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/x-fetch": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.2.3.tgz", + "integrity": "sha512-7Nmk+8ieEGzz43nc1rX6nH3rQo6rhGmAaIXJWnXY9gOHY0k1me1bJYbP+xDdh8vcLh8eY3D1sESUwG6QYZW2lg==", + "dependencies": { + "@polkadot/x-global": "13.2.3", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/x-global": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.2.3.tgz", + "integrity": "sha512-7MYQIAEwBkRcNrgqac5PbB0kNPlI6ISJEy6/Nb+crj8BFjQ8rf11PF49fq0QsvDeuYM1aNLigrvYZNptQs4lbw==", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/x-randomvalues": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.2.3.tgz", + "integrity": "sha512-Zf0GTfLmVk+VzPUmcQSpXjjmFzMTjPhXoLuIoE7xIu73T+vQ+TX9j7DvorN6bIRsnZ9l1SyTZsSf/NTjNZKIZg==", + "dependencies": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.2.3", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/x-textdecoder": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.2.3.tgz", + "integrity": "sha512-i8hRXPtGknmdm3FYv6/94I52VXHJZa5sgYNw1+Hqb4Jqmq4awUjea35CKXd/+aw70Qn8Ngg31l2GoiH494fa+Q==", + "dependencies": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/x-textencoder": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.2.3.tgz", + "integrity": "sha512-wJI3Bb/dC4zyBXJFm5+ZhyBXWoI5wvP8k8qX0/ZC0PQsgSAqs7LVhiofk4Wd94n0P41W5re58LrGXLyziSAshw==", + "dependencies": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@polkadot/x-ws": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.2.3.tgz", + "integrity": "sha512-Y6MTAWgcnrnx/LkBx65X3ZyoJH5EFj3tXtflRoKg1+PLHSLuNBV7Wi5mLcE70z4e5c+4hgBbLq+8SqCqzFtSPw==", + "dependencies": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/dkg-evm-module/node_modules/@prb/math": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@prb/math/-/math-4.1.0.tgz", + "integrity": "sha512-ef5Xrlh3BeX4xT5/Wi810dpEPq2bYPndRxgFIaKSU1F/Op/s8af03kyom+mfU7gEpvfIZ46xu8W0duiHplbBMg==" + }, + "node_modules/dkg-evm-module/node_modules/@scure/base": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", + "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/dkg-evm-module/node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/dkg-evm-module/node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.1.tgz", + "integrity": "sha512-GoafTgm/Jey9E4Xlj4Z5ZBt/H4drH2CNq8VrAro80rtoznrXnFDNVivLQzZN0Xaj2g8YXSn9pC9Oc9IovYZJXw==", + "optional": true + }, + "node_modules/dkg-evm-module/node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/dkg-evm-module/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "peer": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/dkg-evm-module/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "peer": true + }, + "node_modules/dkg-evm-module/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/dkg-evm-module/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/dkg-evm-module/node_modules/ethers": { + "version": "6.13.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", + "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/dkg-evm-module/node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/dkg-evm-module/node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/dkg-evm-module/node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "peer": true + }, + "node_modules/dkg-evm-module/node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/dkg-evm-module/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/dkg-evm-module/node_modules/hardhat-deploy": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.12.4.tgz", + "integrity": "sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-ethers": "^5.0.0" + } + }, + "node_modules/dkg-evm-module/node_modules/hardhat-deploy-ethers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.4.2.tgz", + "integrity": "sha512-AskNH/XRYYYqPT94MvO5s1yMi+/QvoNjS4oU5VcVqfDU99kgpGETl+uIYHIrSXtH5sy7J6gyVjpRMf4x0tjLSQ==", + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.2", + "hardhat": "^2.16.0", + "hardhat-deploy": "^0.12.0" + } + }, + "node_modules/dkg-evm-module/node_modules/hardhat-deploy/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/dkg-evm-module/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/dkg-evm-module/node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/dkg-evm-module/node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/dkg-evm-module/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "peer": true + }, + "node_modules/dkg.js": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/dkg.js/-/dkg.js-6.5.5.tgz", + "integrity": "sha512-MSVbGYAZkWtTPCdDG+PLAsy/lGff5IKvCnk0QEdZ6P6ieV6Hbq4HMJHIxpFVXlw7OIdwNaEEt5S+jtTfkVuqmg==", + "dev": true, + "dependencies": { + "assertion-tools": "^2.2.1", + "axios": "^0.27.2", + "dkg-evm-module": "^4.4.0", + "ethers": "^6.1.0", + "jsonld": "^8.1.0", + "web3": "^1.7.3" + } + }, + "node_modules/dkg.js/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "dev": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/dkg.js/node_modules/@polkadot/api": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-11.3.1.tgz", + "integrity": "sha512-q4kFIIHTLvKxM24b0Eo8hJevsPMme+aITJGrDML9BgdZYTRN14+cu5nXiCsQvaEamdyYj+uCXWe2OV9X7pPxsA==", + "dev": true, "dependencies": { "@polkadot/api-augment": "11.3.1", "@polkadot/api-base": "11.3.1", @@ -8313,9 +10286,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-augment": { + "node_modules/dkg.js/node_modules/@polkadot/api-augment": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-11.3.1.tgz", + "integrity": "sha512-Yj+6rb6h0WwY3yJ+UGhjGW+tyMRFUMsKQuGw+eFsXdjiNU9UoXsAqA2dG7Q1F+oeX/g+y2gLGBezNoCwbl6HfA==", + "dev": true, "dependencies": { "@polkadot/api-base": "11.3.1", "@polkadot/rpc-augment": "11.3.1", @@ -8329,9 +10304,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-base": { + "node_modules/dkg.js/node_modules/@polkadot/api-base": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-11.3.1.tgz", + "integrity": "sha512-b8UkNL00NN7+3QaLCwL5cKg+7YchHoKCAhwKusWHNBZkkO6Oo2BWilu0dZkPJOyqV9P389Kbd9+oH+SKs9u2VQ==", + "dev": true, "dependencies": { "@polkadot/rpc-core": "11.3.1", "@polkadot/types": "11.3.1", @@ -8343,9 +10320,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive": { + "node_modules/dkg.js/node_modules/@polkadot/api-derive": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-11.3.1.tgz", + "integrity": "sha512-9dopzrh4cRuft1nANmBvMY/hEhFDu0VICMTOGxQLOl8NMfcOFPTLAN0JhSBUoicGZhV+c4vpv01NBx/7/IL1HA==", + "dev": true, "dependencies": { "@polkadot/api": "11.3.1", "@polkadot/api-augment": "11.3.1", @@ -8362,9 +10341,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/keyring": { + "node_modules/dkg.js/node_modules/@polkadot/keyring": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", + "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", + "dev": true, "dependencies": { "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", @@ -8378,9 +10359,11 @@ "@polkadot/util-crypto": "12.6.2" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/networks": { + "node_modules/dkg.js/node_modules/@polkadot/networks": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-12.6.2.tgz", + "integrity": "sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==", + "dev": true, "dependencies": { "@polkadot/util": "12.6.2", "@substrate/ss58-registry": "^1.44.0", @@ -8390,9 +10373,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-augment": { + "node_modules/dkg.js/node_modules/@polkadot/rpc-augment": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-11.3.1.tgz", + "integrity": "sha512-2PaDcKNju4QYQpxwVkWbRU3M0t340nMX9cMo+8awgvgL1LliV/fUDZueMKLuSS910JJMTPQ7y2pK4eQgMt08gQ==", + "dev": true, "dependencies": { "@polkadot/rpc-core": "11.3.1", "@polkadot/types": "11.3.1", @@ -8404,9 +10389,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-core": { + "node_modules/dkg.js/node_modules/@polkadot/rpc-core": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-11.3.1.tgz", + "integrity": "sha512-KKNepsDd/mpmXcA6v/h14eFFPEzLGd7nrvx2UUXUxoZ0Fq2MH1hplP3s93k1oduNY/vOXJR2K9S4dKManA6GVQ==", + "dev": true, "dependencies": { "@polkadot/rpc-augment": "11.3.1", "@polkadot/rpc-provider": "11.3.1", @@ -8419,9 +10406,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider": { + "node_modules/dkg.js/node_modules/@polkadot/rpc-provider": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-11.3.1.tgz", + "integrity": "sha512-pqERChoHo45hd3WAgW8UuzarRF+G/o/eXEbl0PXLubiayw4X4qCmIzmtntUcKYgxGNcYGZaG87ZU8OjN97m6UA==", + "dev": true, "dependencies": { "@polkadot/keyring": "^12.6.2", "@polkadot/types": "11.3.1", @@ -8443,9 +10432,11 @@ "@substrate/connect": "0.8.10" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types": { + "node_modules/dkg.js/node_modules/@polkadot/types": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-11.3.1.tgz", + "integrity": "sha512-5c7uRFXQTT11Awi6T0yFIdAfD6xGDAOz06Kp7M5S9OGNZY28wSPk5x6BYfNphWPaIBmHHewYJB5qmnrdYQAWKQ==", + "dev": true, "dependencies": { "@polkadot/keyring": "^12.6.2", "@polkadot/types-augment": "11.3.1", @@ -8460,9 +10451,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-augment": { + "node_modules/dkg.js/node_modules/@polkadot/types-augment": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-11.3.1.tgz", + "integrity": "sha512-eR3HVpvUmB3v7q2jTWVmVfAVfb1/kuNn7ij94Zqadg/fuUq0pKqIOKwkUj3OxRM3A/5BnW3MbgparjKD3r+fyw==", + "dev": true, "dependencies": { "@polkadot/types": "11.3.1", "@polkadot/types-codec": "11.3.1", @@ -8473,9 +10466,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-codec": { + "node_modules/dkg.js/node_modules/@polkadot/types-codec": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-11.3.1.tgz", + "integrity": "sha512-i7IiiuuL+Z/jFoKTA9xeh4wGQnhnNNjMT0+1ohvlOvnFsoKZKFQQOaDPPntGJVL1JDCV+KjkN2uQKZSeW8tguQ==", + "dev": true, "dependencies": { "@polkadot/util": "^12.6.2", "@polkadot/x-bigint": "^12.6.2", @@ -8485,9 +10480,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-create": { + "node_modules/dkg.js/node_modules/@polkadot/types-create": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-11.3.1.tgz", + "integrity": "sha512-pBXtpz5FehcRJ6j5MzFUIUN8ZWM7z6HbqK1GxBmYbJVRElcGcOg7a/rL2pQVphU0Rx1E8bSO4thzGf4wUxSX7w==", + "dev": true, "dependencies": { "@polkadot/types-codec": "11.3.1", "@polkadot/util": "^12.6.2", @@ -8497,9 +10494,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-known": { + "node_modules/dkg.js/node_modules/@polkadot/types-known": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-11.3.1.tgz", + "integrity": "sha512-3BIof7u6tn9bk3ZCIxA07iNoQ3uj4+vn3DTOjCKECozkRlt6V+kWRvqh16Hc0SHMg/QjcMb2fIu/WZhka1McUQ==", + "dev": true, "dependencies": { "@polkadot/networks": "^12.6.2", "@polkadot/types": "11.3.1", @@ -8512,9 +10511,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-support": { + "node_modules/dkg.js/node_modules/@polkadot/types-support": { "version": "11.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-11.3.1.tgz", + "integrity": "sha512-jTFz1GKyF7nI29yIOq4v0NiWTOf5yX4HahJNeFD8TcxoLhF+6tH/XXqrUXJEfbaTlSrRWiW1LZYlb+snctqKHA==", + "dev": true, "dependencies": { "@polkadot/util": "^12.6.2", "tslib": "^2.6.2" @@ -8523,9 +10524,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util": { + "node_modules/dkg.js/node_modules/@polkadot/util": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", + "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", + "dev": true, "dependencies": { "@polkadot/x-bigint": "12.6.2", "@polkadot/x-global": "12.6.2", @@ -8539,9 +10542,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util-crypto": { + "node_modules/dkg.js/node_modules/@polkadot/util-crypto": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", + "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", + "dev": true, "dependencies": { "@noble/curves": "^1.3.0", "@noble/hashes": "^1.3.3", @@ -8561,9 +10566,11 @@ "@polkadot/util": "12.6.2" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-bridge": { + "node_modules/dkg.js/node_modules/@polkadot/wasm-bridge": { "version": "7.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dev": true, "dependencies": { "@polkadot/wasm-util": "7.4.1", "tslib": "^2.7.0" @@ -8576,9 +10583,11 @@ "@polkadot/x-randomvalues": "*" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto": { + "node_modules/dkg.js/node_modules/@polkadot/wasm-crypto": { "version": "7.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dev": true, "dependencies": { "@polkadot/wasm-bridge": "7.4.1", "@polkadot/wasm-crypto-asmjs": "7.4.1", @@ -8595,9 +10604,11 @@ "@polkadot/x-randomvalues": "*" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-asmjs": { + "node_modules/dkg.js/node_modules/@polkadot/wasm-crypto-asmjs": { "version": "7.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dev": true, "dependencies": { "tslib": "^2.7.0" }, @@ -8608,9 +10619,11 @@ "@polkadot/util": "*" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-init": { + "node_modules/dkg.js/node_modules/@polkadot/wasm-crypto-init": { "version": "7.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dev": true, "dependencies": { "@polkadot/wasm-bridge": "7.4.1", "@polkadot/wasm-crypto-asmjs": "7.4.1", @@ -8626,9 +10639,11 @@ "@polkadot/x-randomvalues": "*" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-wasm": { + "node_modules/dkg.js/node_modules/@polkadot/wasm-crypto-wasm": { "version": "7.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dev": true, "dependencies": { "@polkadot/wasm-util": "7.4.1", "tslib": "^2.7.0" @@ -8640,9 +10655,11 @@ "@polkadot/util": "*" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-util": { + "node_modules/dkg.js/node_modules/@polkadot/wasm-util": { "version": "7.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dev": true, "dependencies": { "tslib": "^2.7.0" }, @@ -8653,9 +10670,11 @@ "@polkadot/util": "*" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-bigint": { + "node_modules/dkg.js/node_modules/@polkadot/x-bigint": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz", + "integrity": "sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==", + "dev": true, "dependencies": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -8664,9 +10683,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-fetch": { + "node_modules/dkg.js/node_modules/@polkadot/x-fetch": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz", + "integrity": "sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==", + "dev": true, "dependencies": { "@polkadot/x-global": "12.6.2", "node-fetch": "^3.3.2", @@ -8676,9 +10697,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-global": { + "node_modules/dkg.js/node_modules/@polkadot/x-global": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.6.2.tgz", + "integrity": "sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -8686,9 +10709,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-randomvalues": { + "node_modules/dkg.js/node_modules/@polkadot/x-randomvalues": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", + "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", + "dev": true, "dependencies": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -8701,9 +10726,11 @@ "@polkadot/wasm-util": "*" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-textdecoder": { + "node_modules/dkg.js/node_modules/@polkadot/x-textdecoder": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", + "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", + "dev": true, "dependencies": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -8712,9 +10739,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-textencoder": { + "node_modules/dkg.js/node_modules/@polkadot/x-textencoder": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", + "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", + "dev": true, "dependencies": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -8723,9 +10752,11 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-ws": { + "node_modules/dkg.js/node_modules/@polkadot/x-ws": { "version": "12.6.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.6.2.tgz", + "integrity": "sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==", + "dev": true, "dependencies": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2", @@ -8735,16 +10766,21 @@ "node": ">=18" } }, - "node_modules/dkg-evm-module/node_modules/@scure/base": { + "node_modules/dkg.js/node_modules/@scure/base": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", + "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", + "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/dkg-evm-module/node_modules/@substrate/connect": { + "node_modules/dkg.js/node_modules/@substrate/connect": { "version": "0.8.10", - "license": "GPL-3.0-only", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.10.tgz", + "integrity": "sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w==", + "deprecated": "versions below 1.x are no longer maintained", + "dev": true, "optional": true, "dependencies": { "@substrate/connect-extension-protocol": "^2.0.0", @@ -8753,48 +10789,121 @@ "smoldot": "2.0.22" } }, - "node_modules/dkg-evm-module/node_modules/@substrate/connect-extension-protocol": { + "node_modules/dkg.js/node_modules/@substrate/connect-extension-protocol": { "version": "2.2.1", - "license": "GPL-3.0-only", - "optional": true - }, - "node_modules/dkg.js": { - "version": "6.5.4", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.1.tgz", + "integrity": "sha512-GoafTgm/Jey9E4Xlj4Z5ZBt/H4drH2CNq8VrAro80rtoznrXnFDNVivLQzZN0Xaj2g8YXSn9pC9Oc9IovYZJXw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "assertion-tools": "^2.2.1", - "axios": "^0.27.2", - "dkg-evm-module": "^4.4.0", - "ethers": "^6.1.0", - "jsonld": "^8.1.0", - "web3": "^1.7.3" - } + "optional": true }, "node_modules/dkg.js/node_modules/@types/node": { "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } }, "node_modules/dkg.js/node_modules/aes-js": { "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true + }, + "node_modules/dkg.js/node_modules/assertion-tools": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-2.2.1.tgz", + "integrity": "sha512-JlA1S16Ox93PnYb45HvxNcax/Ii4gqTO8HLGa/ykj/ddp8EEHlokn6inJR2yMiz173WSFkCc0ciLJzGeaYBANw==", "dev": true, - "license": "MIT" + "dependencies": { + "ethers": "^5.7.2", + "jsonld": "^8.1.0", + "merkletreejs": "^0.3.2" + } + }, + "node_modules/dkg.js/node_modules/assertion-tools/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } }, "node_modules/dkg.js/node_modules/axios": { "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "dev": true, - "license": "MIT", "dependencies": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" } }, + "node_modules/dkg.js/node_modules/dkg-evm-module": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-4.4.0.tgz", + "integrity": "sha512-2hBZI/KnbbOEiKr3mU7Nknz3Wis8hLWGvyCifevG4/fUO8v+oVdrshLvQJ6izAfDHeua2PHcW8Z3hn6eIdUVxA==", + "dev": true, + "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "@polkadot/api": "^11.0.3", + "@polkadot/keyring": "^12.6.2", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "@prb/math": "^2.5.0", + "dotenv": "^16.0.3", + "hardhat": "^2.22.5", + "hardhat-deploy": "^0.11.25", + "hardhat-deploy-ethers": "^0.3.0-beta.13", + "ts-node": "^10.9.1", + "typescript": "^4.9.4" + } + }, "node_modules/dkg.js/node_modules/ethers": { "version": "6.13.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", + "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", "dev": true, "funding": [ { @@ -8806,7 +10915,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -8822,8 +10930,9 @@ }, "node_modules/dkg.js/node_modules/ethers/node_modules/@noble/curves": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, - "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -8833,8 +10942,9 @@ }, "node_modules/dkg.js/node_modules/ethers/node_modules/@noble/hashes": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 16" }, @@ -8844,18 +10954,21 @@ }, "node_modules/dkg.js/node_modules/tslib": { "version": "2.7.0", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true }, "node_modules/dkg.js/node_modules/undici-types": { "version": "6.19.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true }, "node_modules/dkg.js/node_modules/ws": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -8874,7 +10987,8 @@ }, "node_modules/dns-over-http-resolver": { "version": "1.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz", + "integrity": "sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==", "dependencies": { "debug": "^4.3.1", "native-fetch": "^3.0.0", @@ -8883,7 +10997,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dependencies": { "esutils": "^2.0.2" }, @@ -8893,7 +11008,8 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -8905,22 +11021,27 @@ }, "node_modules/dom-walk": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, "node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domexception": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, - "license": "MIT", "dependencies": { "webidl-conversions": "^5.0.0" }, @@ -8930,15 +11051,17 @@ }, "node_modules/domexception/node_modules/webidl-conversions": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=8" } }, "node_modules/domhandler": { "version": "5.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { "domelementtype": "^2.3.0" }, @@ -8951,7 +11074,8 @@ }, "node_modules/domutils": { "version": "3.1.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -8963,7 +11087,8 @@ }, "node_modules/dotenv": { "version": "16.4.7", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "engines": { "node": ">=12" }, @@ -8973,22 +11098,39 @@ }, "node_modules/dottie": { "version": "2.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" + }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/duplexer2": { "version": "0.1.4", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/duplexer2/node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9001,24 +11143,28 @@ }, "node_modules/duplexer2/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/duplexer2/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, - "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -9026,30 +11172,35 @@ }, "node_modules/ecc-jsbn/node_modules/jsbn": { "version": "0.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/ed2curve": { "version": "0.3.0", - "license": "Unlicense", + "resolved": "https://registry.npmjs.org/ed2curve/-/ed2curve-0.3.0.tgz", + "integrity": "sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==", "dependencies": { "tweetnacl": "1.x.x" } }, "node_modules/ee-first": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-fetch": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz", + "integrity": "sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==", "dependencies": { "encoding": "^0.1.13" }, @@ -9058,13 +11209,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.71", - "dev": true, - "license": "ISC" + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", + "dev": true }, "node_modules/elliptic": { "version": "6.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -9077,11 +11230,13 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/emittery": { "version": "0.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "engines": { "node": ">=12" }, @@ -9091,41 +11246,48 @@ }, "node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/enabled": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "node_modules/encode-utf8": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, "node_modules/encodeurl": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } }, "node_modules/encoding": { "version": "0.1.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { "once": "^1.4.0" } }, "node_modules/enquirer": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -9136,7 +11298,8 @@ }, "node_modules/entities": { "version": "4.5.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, @@ -9146,27 +11309,31 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "engines": { "node": ">=6" } }, "node_modules/err-code": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" }, "node_modules/error-stack-parser": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, - "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/es-abstract": { "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -9224,26 +11391,26 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -9268,8 +11435,8 @@ }, "node_modules/es-object-atoms": { "version": "1.0.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dependencies": { "es-errors": "^1.3.0" }, @@ -9279,8 +11446,9 @@ }, "node_modules/es-set-tostringtag": { "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, - "license": "MIT", "peer": true, "dependencies": { "get-intrinsic": "^1.2.4", @@ -9293,8 +11461,9 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "hasown": "^2.0.0" @@ -9302,8 +11471,9 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-callable": "^1.2.7", @@ -9319,8 +11489,9 @@ }, "node_modules/es5-ext": { "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, - "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -9333,12 +11504,14 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, "node_modules/es6-iterator": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -9347,19 +11520,22 @@ }, "node_modules/es6-promise": { "version": "4.2.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true }, "node_modules/es6-promisify": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", + "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==", "engines": { "node": ">=6" } }, "node_modules/es6-symbol": { "version": "3.1.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" @@ -9370,22 +11546,27 @@ }, "node_modules/escalade": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-latex": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", + "dev": true }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" }, @@ -9395,8 +11576,9 @@ }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -9415,7 +11597,9 @@ }, "node_modules/eslint": { "version": "8.57.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -9468,8 +11652,9 @@ }, "node_modules/eslint-config-airbnb": { "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, - "license": "MIT", "dependencies": { "eslint-config-airbnb-base": "^15.0.0", "object.assign": "^4.1.2", @@ -9488,8 +11673,9 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, - "license": "MIT", "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", @@ -9506,15 +11692,17 @@ }, "node_modules/eslint-config-airbnb-base/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-config-google": { "version": "0.13.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.13.0.tgz", + "integrity": "sha512-ELgMdOIpn0CFdsQS+FuxO+Ttu4p+aLaXHv9wA9yVnzqlUGV7oN/eRRnJekk7TCur6Cu2FXX0fqfIXRBaM14lpQ==", "engines": { "node": ">=0.10.0" }, @@ -9524,8 +11712,9 @@ }, "node_modules/eslint-config-prettier": { "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, - "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -9535,8 +11724,9 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "debug": "^3.2.7", @@ -9546,8 +11736,9 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" @@ -9555,8 +11746,9 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "debug": "^3.2.7" @@ -9572,8 +11764,9 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" @@ -9581,8 +11774,9 @@ }, "node_modules/eslint-plugin-import": { "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", @@ -9614,8 +11808,9 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" @@ -9623,8 +11818,9 @@ }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "esutils": "^2.0.2" @@ -9635,8 +11831,9 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver.js" @@ -9644,8 +11841,9 @@ }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "aria-query": "^5.3.2", @@ -9673,8 +11871,9 @@ }, "node_modules/eslint-plugin-react": { "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-includes": "^3.1.8", @@ -9705,8 +11904,9 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -9717,8 +11917,9 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "esutils": "^2.0.2" @@ -9729,8 +11930,9 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-core-module": "^2.13.0", @@ -9746,8 +11948,9 @@ }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver.js" @@ -9755,7 +11958,8 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -9769,7 +11973,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -9779,7 +11984,8 @@ }, "node_modules/esniff": { "version": "2.0.1", - "license": "ISC", + "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", @@ -9792,7 +11998,8 @@ }, "node_modules/espree": { "version": "9.6.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -9807,8 +12014,9 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -9819,7 +12027,8 @@ }, "node_modules/esquery": { "version": "1.6.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dependencies": { "estraverse": "^5.1.0" }, @@ -9829,7 +12038,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { "estraverse": "^5.2.0" }, @@ -9839,29 +12049,33 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/eth-ens-namehash": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", "dev": true, - "license": "ISC", "dependencies": { "idna-uts46-hx": "^2.3.1", "js-sha3": "^0.5.7" @@ -9869,13 +12083,15 @@ }, "node_modules/eth-ens-namehash/node_modules/js-sha3": { "version": "0.5.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true }, "node_modules/eth-lib": { "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", @@ -9887,18 +12103,21 @@ }, "node_modules/eth-lib/node_modules/bn.js": { "version": "4.12.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true }, "node_modules/eth-lib/node_modules/safe-buffer": { "version": "5.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/eth-lib/node_modules/ws": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, - "license": "MIT", "dependencies": { "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0", @@ -9907,14 +12126,16 @@ }, "node_modules/ethereum-bloom-filters": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", "dependencies": { "@noble/hashes": "^1.4.0" } }, "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { "version": "1.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", "engines": { "node": "^14.21.3 || >=16" }, @@ -9924,7 +12145,8 @@ }, "node_modules/ethereum-cryptography": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -9934,7 +12156,9 @@ }, "node_modules/ethereumjs-abi": { "version": "0.6.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "deprecated": "This library has been deprecated and usage is discouraged.", "dependencies": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -9942,11 +12166,13 @@ }, "node_modules/ethereumjs-abi/node_modules/bn.js": { "version": "4.12.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/ethereumjs-util": { "version": "6.2.1", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -9959,18 +12185,21 @@ }, "node_modules/ethereumjs-util/node_modules/@types/bn.js": { "version": "4.11.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dependencies": { "@types/node": "*" } }, "node_modules/ethereumjs-util/node_modules/bn.js": { "version": "4.12.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -9991,6 +12220,8 @@ }, "node_modules/ethers": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "funding": [ { "type": "individual", @@ -10001,7 +12232,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -10037,7 +12267,8 @@ }, "node_modules/ethjs-unit": { "version": "0.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "dependencies": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -10049,11 +12280,13 @@ }, "node_modules/ethjs-unit/node_modules/bn.js": { "version": "4.11.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/ethjs-util": { "version": "0.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -10065,7 +12298,8 @@ }, "node_modules/event-emitter": { "version": "0.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -10073,25 +12307,30 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "5.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/events": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } }, "node_modules/evm-bn": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", + "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", + "dev": true, "dependencies": { "@ethersproject/bignumber": "^5.5.0", "from-exponential": "^1.1.1" @@ -10102,7 +12341,8 @@ }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -10110,7 +12350,8 @@ }, "node_modules/execa": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -10131,15 +12372,16 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "dev": true, - "license": "(MIT OR WTFPL)", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "engines": { "node": ">=6" } }, "node_modules/express": { "version": "4.21.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -10183,7 +12425,8 @@ }, "node_modules/express-fileupload": { "version": "1.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.5.1.tgz", + "integrity": "sha512-LsYG1ALXEB7vlmjuSw8ABeOctMp8a31aUC5ZF55zuz7O2jLFnmJYrCv10py357ky48aEoBQ/9bVXgFynjvaPmA==", "dependencies": { "busboy": "^1.6.0" }, @@ -10193,7 +12436,8 @@ }, "node_modules/express-rate-limit": { "version": "6.11.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.11.2.tgz", + "integrity": "sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==", "engines": { "node": ">= 14" }, @@ -10203,50 +12447,59 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/ext": { "version": "1.7.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dependencies": { "type": "^2.7.2" } }, "node_modules/extend": { "version": "3.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "node_modules/extsprintf": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", "dev": true, "engines": [ "node >=0.6.0" - ], - "license": "MIT" + ] }, "node_modules/fast-copy": { "version": "3.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-fifo": { "version": "1.3.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-glob": { "version": "3.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -10260,7 +12513,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -10270,40 +12524,49 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-redact": { "version": "3.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "engines": { "node": ">=6" } }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fast-uri": { "version": "3.0.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" }, "node_modules/fastq": { "version": "1.17.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fecha": { "version": "4.2.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "node_modules/fetch-blob": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "funding": [ { "type": "github", @@ -10314,7 +12577,6 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -10325,7 +12587,8 @@ }, "node_modules/fetch-sparql-endpoint": { "version": "4.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-4.2.1.tgz", + "integrity": "sha512-nRaexc3QCO95bjESf4ngNQ1J+qNtVzxFGlPUopqOIVHm/j6IDhWg996kk7fBM98Mmo0uM9b6uiTbXmJHOrnqYA==", "dependencies": { "@rdfjs/types": "*", "@smessie/readable-web-to-node-stream": "^3.0.3", @@ -10348,14 +12611,16 @@ }, "node_modules/fetch-sparql-endpoint/node_modules/cross-fetch": { "version": "3.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/fetch-sparql-endpoint/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -10373,15 +12638,18 @@ }, "node_modules/fetch-sparql-endpoint/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/fetch-sparql-endpoint/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/fetch-sparql-endpoint/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -10389,8 +12657,9 @@ }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -10403,15 +12672,17 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/file-entry-cache": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dependencies": { "flat-cache": "^3.0.4" }, @@ -10421,11 +12692,13 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "node_modules/fill-range": { "version": "7.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -10435,7 +12708,8 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -10451,19 +12725,22 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-cache-dir": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, - "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -10478,7 +12755,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -10492,14 +12770,16 @@ }, "node_modules/flat": { "version": "5.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -10511,32 +12791,37 @@ }, "node_modules/flatstr": { "version": "1.0.12", - "license": "MIT" + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" }, "node_modules/flatted": { "version": "3.3.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" }, "node_modules/fmix": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", "dependencies": { "imul": "^1.0.0" } }, "node_modules/fn.name": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -10548,16 +12833,18 @@ }, "node_modules/for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -10568,15 +12855,17 @@ }, "node_modules/forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/form-data": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -10588,12 +12877,14 @@ }, "node_modules/form-data-encoder": { "version": "1.7.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -10603,18 +12894,22 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" } }, "node_modules/fp-ts": { "version": "1.19.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, "node_modules/fraction.js": { "version": "4.3.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, "engines": { "node": "*" }, @@ -10625,17 +12920,22 @@ }, "node_modules/fresh": { "version": "0.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, "node_modules/from-exponential": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", + "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==", + "dev": true }, "node_modules/fromentries": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { @@ -10650,17 +12950,17 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { "version": "10.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -10672,19 +12972,23 @@ }, "node_modules/fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^2.6.0" } }, "node_modules/fs.realpath": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -10695,7 +12999,9 @@ }, "node_modules/fstream": { "version": "1.0.12", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", "dependencies": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -10708,7 +13014,9 @@ }, "node_modules/fstream/node_modules/rimraf": { "version": "2.7.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -10718,15 +13026,17 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -10743,52 +13053,83 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/generate-function": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "dependencies": { "is-property": "^1.0.2" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "license": "MIT", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10799,19 +13140,22 @@ }, "node_modules/get-iterator": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" }, "node_modules/get-package-type": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -10821,8 +13165,9 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.5", @@ -10838,20 +13183,23 @@ }, "node_modules/getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/github-from-package": { "version": "0.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "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", @@ -10869,7 +13217,8 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dependencies": { "is-glob": "^4.0.3" }, @@ -10879,8 +13228,9 @@ }, "node_modules/global": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, - "license": "MIT", "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" @@ -10888,8 +13238,9 @@ }, "node_modules/global-dirs": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, - "license": "MIT", "dependencies": { "ini": "2.0.0" }, @@ -10902,7 +13253,8 @@ }, "node_modules/globals": { "version": "13.24.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -10915,8 +13267,9 @@ }, "node_modules/globalthis": { "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, - "license": "MIT", "peer": true, "dependencies": { "define-properties": "^1.2.1", @@ -10931,7 +13284,8 @@ }, "node_modules/gopd": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { "node": ">= 0.4" }, @@ -10941,8 +13295,9 @@ }, "node_modules/got": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", "dev": true, - "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.6.0", "@szmarczak/http-timer": "^5.0.1", @@ -10967,19 +13322,22 @@ }, "node_modules/got/node_modules/p-cancelable": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.20" } }, "node_modules/graceful-fs": { "version": "4.2.11", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphdb": { "version": "2.0.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/graphdb/-/graphdb-2.0.2.tgz", + "integrity": "sha512-ORbS7yw/kTUdKXyeO7QaXx1I3fxigej3KQQdrVSpu0ZQ1W7OVQHDAd/Gu+x2clpwm6sela94Uh/+YKkQGbZqmA==", "dependencies": { "axios": "^0.21.4", "base64url": "^3.0.1", @@ -10999,29 +13357,34 @@ }, "node_modules/graphdb/node_modules/@types/node": { "version": "13.13.52", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" }, "node_modules/graphdb/node_modules/axios": { "version": "0.21.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dependencies": { "follow-redirects": "^1.14.0" } }, "node_modules/graphdb/node_modules/canonicalize": { "version": "1.0.8", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "node_modules/graphdb/node_modules/fast-redact": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.1.0.tgz", + "integrity": "sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==", "engines": { "node": ">=6" } }, "node_modules/graphdb/node_modules/jsonld-streaming-parser": { "version": "2.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", + "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", "dependencies": { "@rdfjs/types": "*", "@types/http-link-header": "^1.0.1", @@ -11034,7 +13397,8 @@ }, "node_modules/graphdb/node_modules/pino": { "version": "5.17.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pino/-/pino-5.17.0.tgz", + "integrity": "sha512-LqrqmRcJz8etUjyV0ddqB6OTUutCgQULPFg2b4dtijRHUsucaAdBgSUW58vY6RFSX+NT8963F+q0tM6lNwGShA==", "dependencies": { "fast-redact": "^2.0.0", "fast-safe-stringify": "^2.0.7", @@ -11049,15 +13413,18 @@ }, "node_modules/graphdb/node_modules/pino-std-serializers": { "version": "2.5.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==" }, "node_modules/graphdb/node_modules/quick-format-unescaped": { "version": "3.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz", + "integrity": "sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ==" }, "node_modules/graphdb/node_modules/rdfxml-streaming-parser": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz", + "integrity": "sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ==", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0", @@ -11067,7 +13434,8 @@ }, "node_modules/graphdb/node_modules/sonic-boom": { "version": "0.7.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.7.tgz", + "integrity": "sha512-Ei5YOo5J64GKClHIL/5evJPgASXFVpfVYbJV9PILZQytTK6/LCwHvsZJW2Ig4p9FMC2OrBrMnXKgRN/OEoAWfg==", "dependencies": { "atomic-sleep": "^1.0.0", "flatstr": "^1.0.12" @@ -11075,7 +13443,8 @@ }, "node_modules/graphdb/node_modules/sparqljson-parse": { "version": "1.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz", + "integrity": "sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw==", "dependencies": { "@rdfjs/types": "*", "@types/node": "^13.1.0", @@ -11085,7 +13454,8 @@ }, "node_modules/graphdb/node_modules/sparqlxml-parse": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-1.5.0.tgz", + "integrity": "sha512-+0DCekgO3G6ugeVntrZS6+Fj60MsHR0q51WoRAdVzARb5V3jhX3dZJbwSaeydsOsXrtts4XSMc/z+kbqy5/VUQ==", "dependencies": { "@rdfjs/types": "*", "@types/node": "^13.1.0", @@ -11095,25 +13465,30 @@ }, "node_modules/graphdb/node_modules/uuid": { "version": "3.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "bin": { "uuid": "bin/uuid" } }, "node_modules/graphemer": { "version": "1.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/graphql": { "version": "15.9.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.9.0.tgz", + "integrity": "sha512-GCOQdvm7XxV1S4U4CGrsdlEN37245eC8P9zaYCMr6K1BG0IPGy5lUwmJsEOGyl1GD6HXjOtl2keCP9asRBwNvA==", "engines": { "node": ">= 10.x" } }, "node_modules/graphql-to-sparql": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graphql-to-sparql/-/graphql-to-sparql-3.0.1.tgz", + "integrity": "sha512-A+RwB99o66CUj+XuqtP/u3P7fGS/qF6P+/jhNl1BE/JZ2SCnkrODvV0LADuJeCDmPh45fDhq+GTDVoN1ZQHYFw==", "dependencies": { "@rdfjs/types": "*", "graphql": "^15.5.2", @@ -11128,16 +13503,19 @@ }, "node_modules/har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, - "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -11148,7 +13526,8 @@ }, "node_modules/hardhat": { "version": "2.22.17", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.17.tgz", + "integrity": "sha512-tDlI475ccz4d/dajnADUTRc1OJ3H8fpP9sWhXhBPpYsQOg8JHq5xrDimo53UhWPl7KJmAeDCm1bFG74xvpGRpg==", "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -11213,7 +13592,9 @@ }, "node_modules/hardhat-deploy": { "version": "0.11.45", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", + "dev": true, "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -11243,7 +13624,9 @@ }, "node_modules/hardhat-deploy-ethers": { "version": "0.3.0-beta.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz", + "integrity": "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==", + "dev": true, "peerDependencies": { "ethers": "^5.0.0", "hardhat": "^2.0.0" @@ -11251,14 +13634,18 @@ }, "node_modules/hardhat-deploy/node_modules/axios": { "version": "0.21.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, "dependencies": { "follow-redirects": "^1.14.0" } }, "node_modules/hardhat-deploy/node_modules/chokidar": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -11280,7 +13667,9 @@ }, "node_modules/hardhat-deploy/node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -11290,7 +13679,9 @@ }, "node_modules/hardhat-deploy/node_modules/readdirp": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -11300,7 +13691,8 @@ }, "node_modules/hardhat/node_modules/fs-extra": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -11312,14 +13704,16 @@ }, "node_modules/hardhat/node_modules/jsonfile": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/hardhat/node_modules/resolve": { "version": "1.17.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dependencies": { "path-parse": "^1.0.6" }, @@ -11329,21 +13723,24 @@ }, "node_modules/hardhat/node_modules/semver": { "version": "6.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/hardhat/node_modules/universalify": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/hardhat/node_modules/ws": { "version": "7.5.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -11362,8 +13759,9 @@ }, "node_modules/has-ansi": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-4.0.1.tgz", + "integrity": "sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -11373,8 +13771,9 @@ }, "node_modules/has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11382,14 +13781,16 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { "es-define-property": "^1.0.0" }, @@ -11398,10 +13799,13 @@ } }, "node_modules/has-proto": { - "version": "1.1.0", - "license": "MIT", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.7" + "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11412,7 +13816,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -11422,8 +13827,9 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -11434,9 +13840,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, "node_modules/hash-base": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -11448,7 +13861,8 @@ }, "node_modules/hash-base/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11460,7 +13874,8 @@ }, "node_modules/hash.js": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -11468,8 +13883,9 @@ }, "node_modules/hasha": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, - "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -11483,19 +13899,22 @@ }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/hashlru": { "version": "2.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", + "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==" }, "node_modules/hasown": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -11505,18 +13924,21 @@ }, "node_modules/he": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "bin": { "he": "bin/he" } }, "node_modules/heap": { "version": "0.2.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "node_modules/help-me": { "version": "4.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", "dependencies": { "glob": "^8.0.0", "readable-stream": "^3.6.0" @@ -11524,14 +13946,17 @@ }, "node_modules/help-me/node_modules/brace-expansion": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/help-me/node_modules/glob": { "version": "8.1.0", - "license": "ISC", + "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", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11548,7 +13973,8 @@ }, "node_modules/help-me/node_modules/minimatch": { "version": "5.1.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11558,7 +13984,8 @@ }, "node_modules/help-me/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11570,7 +13997,8 @@ }, "node_modules/hmac-drbg": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -11579,8 +14007,9 @@ }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-encoding": "^1.0.5" }, @@ -11590,11 +14019,14 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/htmlparser2": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -11602,7 +14034,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -11612,12 +14043,14 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "devOptional": true }, "node_modules/http-errors": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -11631,20 +14064,23 @@ }, "node_modules/http-https": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", + "dev": true }, "node_modules/http-link-header": { "version": "1.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", "engines": { "node": ">=6.0.0" } }, "node_modules/http-proxy-agent": { "version": "4.0.1", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "devOptional": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -11656,8 +14092,9 @@ }, "node_modules/http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -11670,8 +14107,9 @@ }, "node_modules/http2-wrapper": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, - "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -11682,7 +14120,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "license": "MIT", + "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" @@ -11693,15 +14132,26 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/husky": { "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, - "license": "MIT", "bin": { "husky": "lib/bin.js" }, @@ -11714,7 +14164,8 @@ }, "node_modules/iconv-lite": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -11724,8 +14175,9 @@ }, "node_modules/idna-uts46-hx": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "2.1.0" }, @@ -11735,14 +14187,17 @@ }, "node_modules/idna-uts46-hx/node_modules/punycode": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -11756,23 +14211,25 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } }, "node_modules/immutable": { "version": "4.3.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" }, "node_modules/import-fresh": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -11786,42 +14243,55 @@ }, "node_modules/import-lazy": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "engines": { "node": ">=8" } }, "node_modules/imul": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", "engines": { "node": ">=0.10.0" } }, "node_modules/imurmurhash": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, "node_modules/inflection": { "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", "engines": [ "node >= 0.4.0" - ], - "license": "MIT" + ] }, "node_modules/inflight": { "version": "1.0.6", - "license": "ISC", + "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" @@ -11829,19 +14299,22 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/interface-datastore": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-5.2.0.tgz", + "integrity": "sha512-nthO4C4BMJM2j9x/mT2KFa/g/sbcY8yf9j/kOBgli3u5mq9ZdPvQyDxi0OhKzr4JmoM81OYh5xcFjyebquqwvA==", "dependencies": { "err-code": "^3.0.1", "interface-store": "^1.0.2", @@ -11856,12 +14329,14 @@ }, "node_modules/interface-store": { "version": "1.0.2", - "license": "(Apache-2.0 OR MIT)" + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-1.0.2.tgz", + "integrity": "sha512-rUBLYsgoWwxuUpnQoSUr+DR/3dH3reVeIu5aOHFZK31lAexmb++kR6ZECNRgrx6WvoaM3Akdo0A7TDrqgCzZaQ==" }, "node_modules/internal-slot": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "es-errors": "^1.3.0", @@ -11874,26 +14349,30 @@ }, "node_modules/internmap": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/io-ts": { "version": "1.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dependencies": { "fp-ts": "^1.0.0" } }, "node_modules/ip": { "version": "1.1.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" }, "node_modules/ip-address": { "version": "8.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-8.1.0.tgz", + "integrity": "sha512-Wz91gZKpNKoXtqvY8ScarKYwhXoK4r/b5QuT+uywe/azv0/nUCo7Bh0IRRI7F9DHR06kJNWtzMGLIbXavngbKA==", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "1.1.2" @@ -11904,21 +14383,24 @@ }, "node_modules/ip-regex": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "engines": { "node": ">=8" } }, "node_modules/ipaddr.js": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "engines": { "node": ">= 10" } }, "node_modules/ipfs-utils": { "version": "8.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-8.1.6.tgz", + "integrity": "sha512-V/cwb6113DrDhrjDTWImA6+zmJbpdbUkxdxmEQO7it8ykV76bBmzU1ZXSM0QR0qxGy9VW8dkUlPAC2K10VgSmw==", "dependencies": { "abort-controller": "^3.0.0", "any-signal": "^2.1.0", @@ -11949,12 +14431,13 @@ } }, "node_modules/is-arguments": { - "version": "1.1.1", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11965,8 +14448,9 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -11981,12 +14465,14 @@ }, "node_modules/is-arrayish": { "version": "0.3.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/is-async-function": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" @@ -12000,8 +14486,9 @@ }, "node_modules/is-bigint": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-bigints": "^1.0.2" @@ -12015,7 +14502,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -12024,12 +14512,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { @@ -12041,6 +14530,8 @@ }, "node_modules/is-buffer": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", @@ -12055,15 +14546,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12073,7 +14564,8 @@ }, "node_modules/is-core-module": { "version": "2.15.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { "hasown": "^2.0.2" }, @@ -12085,11 +14577,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -12100,12 +14595,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12116,19 +14613,22 @@ }, "node_modules/is-electron": { "version": "2.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" }, "node_modules/is-extglob": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7" @@ -12142,8 +14642,9 @@ }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12153,13 +14654,15 @@ }, "node_modules/is-function": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true }, "node_modules/is-generator-function": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12172,7 +14675,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -12182,7 +14686,8 @@ }, "node_modules/is-hex-prefixed": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "engines": { "node": ">=6.5.0", "npm": ">=3" @@ -12190,8 +14695,9 @@ }, "node_modules/is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, - "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -12205,7 +14711,8 @@ }, "node_modules/is-ip": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", "dependencies": { "ip-regex": "^4.0.0" }, @@ -12213,14 +14720,22 @@ "node": ">=8" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, "node_modules/is-loopback-addr": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-1.0.1.tgz", + "integrity": "sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw==" }, "node_modules/is-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -12231,8 +14746,9 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -12243,15 +14759,17 @@ }, "node_modules/is-number": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz", + "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -12266,35 +14784,40 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { "node": ">=8" } }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true }, "node_modules/is-property": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" }, "node_modules/is-regex": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "gopd": "^1.1.0", + "call-bound": "^1.0.2", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, @@ -12307,8 +14830,9 @@ }, "node_modules/is-set": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -12319,8 +14843,9 @@ }, "node_modules/is-shared-array-buffer": { "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7" @@ -12334,7 +14859,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -12344,8 +14870,9 @@ }, "node_modules/is-string": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz", + "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -12359,14 +14886,15 @@ } }, "node_modules/is-symbol": { - "version": "1.1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "has-symbols": "^1.0.3", - "safe-regex-test": "^1.0.3" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12377,8 +14905,9 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -12391,11 +14920,13 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -12405,8 +14936,9 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -12417,8 +14949,9 @@ }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2" @@ -12429,8 +14962,9 @@ }, "node_modules/is-weakset": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -12445,25 +14979,29 @@ }, "node_modules/is-windows": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/iso-random-stream": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", + "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", "dependencies": { "events": "^3.3.0", "readable-stream": "^3.4.0" @@ -12474,7 +15012,8 @@ }, "node_modules/iso-random-stream/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12486,28 +15025,32 @@ }, "node_modules/iso-url": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", "engines": { "node": ">=12" } }, "node_modules/isstream": { "version": "0.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-hook": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "append-transform": "^2.0.0" }, @@ -12517,8 +15060,9 @@ }, "node_modules/istanbul-lib-instrument": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -12531,16 +15075,18 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, - "license": "ISC", "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -12555,8 +15101,9 @@ }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -12566,8 +15113,9 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -12579,8 +15127,9 @@ }, "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", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -12593,8 +15142,9 @@ }, "node_modules/istanbul-lib-report/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, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12604,8 +15154,9 @@ }, "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", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -12617,8 +15168,9 @@ }, "node_modules/istanbul-reports": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -12629,11 +15181,13 @@ }, "node_modules/it-all": { "version": "1.0.6", - "license": "ISC" + "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", + "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" }, "node_modules/it-buffer": { "version": "0.1.3", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/it-buffer/-/it-buffer-0.1.3.tgz", + "integrity": "sha512-9a2/9SYVwG7bcn3tpRDR4bXbtuMLXnDK48KVC+GXiQg97ZOOdWz2nIITBsOQ19b+gj01Rw8RNwtiLDLI8P8oiQ==", "dependencies": { "bl": "^5.0.0", "buffer": "^6.0.3" @@ -12641,19 +15195,23 @@ }, "node_modules/it-drain": { "version": "1.0.5", - "license": "ISC" + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-1.0.5.tgz", + "integrity": "sha512-r/GjkiW1bZswC04TNmUnLxa6uovme7KKwPhc+cb1hHU65E3AByypHH6Pm91WHuvqfFsm+9ws0kPtDBV3/8vmIg==" }, "node_modules/it-filter": { "version": "1.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-1.0.3.tgz", + "integrity": "sha512-EI3HpzUrKjTH01miLHWmhNWy3Xpbx4OXMXltgrNprL5lDpF3giVpHIouFpr5l+evXw6aOfxhnt01BIB+4VQA+w==" }, "node_modules/it-first": { "version": "1.0.7", - "license": "ISC" + "resolved": "https://registry.npmjs.org/it-first/-/it-first-1.0.7.tgz", + "integrity": "sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g==" }, "node_modules/it-glob": { "version": "0.0.14", - "license": "ISC", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", + "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", "dependencies": { "@types/minimatch": "^3.0.4", "minimatch": "^3.0.4" @@ -12661,7 +15219,8 @@ }, "node_modules/it-handshake": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-2.0.0.tgz", + "integrity": "sha512-K4q+mz8aLlCK3vTjtgNdHC9c/JbuOATsfogarjMsLcBZC5vYfKbX3Gq3AWcCdjIsIrPqzTlhPKSxl64LJkrt2w==", "dependencies": { "it-pushable": "^1.4.0", "it-reader": "^3.0.0", @@ -12670,11 +15229,13 @@ }, "node_modules/it-length": { "version": "1.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/it-length/-/it-length-1.0.4.tgz", + "integrity": "sha512-KN4jXzp77/GQ4fxUGMbsJx3ALUZ6SP3E79tzs2weGghtImDLFZzua/l3fOK0LN/hMH0M330HJRZWwYZfDNuCIA==" }, "node_modules/it-length-prefixed": { "version": "5.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-5.0.3.tgz", + "integrity": "sha512-b+jDHLcnOnPDQN79ronmzF5jeBjdJsy0ce2O6i6X4J5tnaO8Fd146ZA/tMbzaLlKnTpXa0eKtofpYhumXGENeg==", "dependencies": { "bl": "^5.0.0", "buffer": "^6.0.3", @@ -12683,25 +15244,29 @@ }, "node_modules/it-map": { "version": "1.0.6", - "license": "ISC" + "resolved": "https://registry.npmjs.org/it-map/-/it-map-1.0.6.tgz", + "integrity": "sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ==" }, "node_modules/it-merge": { "version": "1.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-1.0.4.tgz", + "integrity": "sha512-DcL6GksTD2HQ7+5/q3JznXaLNfwjyG3/bObaF98da+oHfUiPmdo64oJlT9J8R8G5sJRU7thwaY5zxoAKCn7FJw==", "dependencies": { "it-pushable": "^1.4.0" } }, "node_modules/it-pair": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-1.0.0.tgz", + "integrity": "sha512-9raOiDu5OAuDOahtMtapKQDrQTxBfzlzrNcB6o7JARHkt+7Bb1dMkW/TpYdAjBJE77KH3e2zGzwpGUP9tXbLww==", "dependencies": { "get-iterator": "^1.0.2" } }, "node_modules/it-pb-rpc": { "version": "0.1.13", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/it-pb-rpc/-/it-pb-rpc-0.1.13.tgz", + "integrity": "sha512-aZ4FNJsDgNepVVTmYXgXbQabIiOQyqYWUhdfovaHDcPSM5KjegwJihJEWMJjMyj+oLSKcZl0vmHgHxXWJ9/ufw==", "dependencies": { "is-buffer": "^2.0.5", "it-handshake": "^2.0.0", @@ -12710,29 +15275,34 @@ }, "node_modules/it-pipe": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-1.1.0.tgz", + "integrity": "sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==" }, "node_modules/it-pushable": { "version": "1.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-1.4.2.tgz", + "integrity": "sha512-vVPu0CGRsTI8eCfhMknA7KIBqqGFolbRx+1mbQ6XuZ7YCz995Qj7L4XUviwClFunisDq96FdxzF5FnAbw15afg==", "dependencies": { "fast-fifo": "^1.0.0" } }, "node_modules/it-reader": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-3.0.0.tgz", + "integrity": "sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==", "dependencies": { "bl": "^5.0.0" } }, "node_modules/it-take": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/it-take/-/it-take-1.0.2.tgz", + "integrity": "sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw==" }, "node_modules/it-to-stream": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", + "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", "dependencies": { "buffer": "^6.0.3", "fast-fifo": "^1.0.0", @@ -12744,7 +15314,8 @@ }, "node_modules/it-to-stream/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12755,16 +15326,18 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.3", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -12772,31 +15345,38 @@ }, "node_modules/javascript-natural-sort": { "version": "0.7.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true }, "node_modules/jju": { "version": "1.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" }, "node_modules/joycon": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "engines": { "node": ">=10" } }, "node_modules/js-sha3": { "version": "0.8.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { "argparse": "^2.0.1" }, @@ -12806,12 +15386,14 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, "node_modules/jsdom": { "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, - "license": "MIT", "dependencies": { "abab": "^2.0.5", "acorn": "^8.2.4", @@ -12855,8 +15437,9 @@ }, "node_modules/jsdom/node_modules/form-data": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -12868,8 +15451,9 @@ }, "node_modules/jsdom/node_modules/ws": { "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -12887,9 +15471,10 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -12899,36 +15484,43 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-schema": { "version": "0.4.0", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json-stream-stringify": { "version": "3.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", "engines": { "node": ">=7.10.1" } }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -12938,7 +15530,8 @@ }, "node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -12948,7 +15541,8 @@ }, "node_modules/jsonld": { "version": "8.3.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz", + "integrity": "sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA==", "dependencies": { "@digitalbazaar/http-client": "^3.4.1", "canonicalize": "^1.0.1", @@ -12961,7 +15555,8 @@ }, "node_modules/jsonld-context-parser": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", "dependencies": { "@types/http-link-header": "^1.0.1", "@types/node": "^18.0.0", @@ -12974,22 +15569,25 @@ } }, "node_modules/jsonld-context-parser/node_modules/@types/node": { - "version": "18.19.67", - "license": "MIT", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/jsonld-context-parser/node_modules/cross-fetch": { "version": "3.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/jsonld-context-parser/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -13007,19 +15605,23 @@ }, "node_modules/jsonld-context-parser/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/jsonld-context-parser/node_modules/undici-types": { "version": "5.26.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/jsonld-context-parser/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/jsonld-context-parser/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -13027,7 +15629,8 @@ }, "node_modules/jsonld-streaming-parser": { "version": "3.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.4.0.tgz", + "integrity": "sha512-897CloyQgQidfkB04dLM5XaAXVX/cN9A2hvgHJo4y4jRhIpvg3KLMBBfcrswepV2N3T8c/Rp2JeFdWfVsbVZ7g==", "dependencies": { "@bergos/jsonparse": "^1.4.0", "@rdfjs/types": "*", @@ -13043,11 +15646,13 @@ }, "node_modules/jsonld-streaming-parser/node_modules/canonicalize": { "version": "1.0.8", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "node_modules/jsonld-streaming-serializer": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-2.1.0.tgz", + "integrity": "sha512-COHdLoeMTnrqHMoFhN3PoAwqnrKrpPC7/ACb0WbELYvt+HSOIFN3v4IJP7fOtLNQ4GeaeYkvbeWJ7Jo4EjxMDw==", "dependencies": { "@rdfjs/types": "*", "@types/readable-stream": "^2.3.13", @@ -13058,11 +15663,13 @@ }, "node_modules/jsonld/node_modules/canonicalize": { "version": "1.0.8", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "node_modules/jsonld/node_modules/lru-cache": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { "yallist": "^4.0.0" }, @@ -13072,7 +15679,8 @@ }, "node_modules/jsonld/node_modules/rdf-canonize": { "version": "3.4.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", "dependencies": { "setimmediate": "^1.0.5" }, @@ -13082,25 +15690,29 @@ }, "node_modules/jsonld/node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "engines": [ "node >= 0.2.0" - ], - "license": "MIT" + ] }, "node_modules/jsonschema": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", "engines": { "node": "*" } }, "node_modules/JSONStream": { "version": "1.3.5", - "license": "(MIT OR Apache-2.0)", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -13114,7 +15726,8 @@ }, "node_modules/jsonwebtoken": { "version": "9.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -13134,8 +15747,9 @@ }, "node_modules/jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -13148,19 +15762,21 @@ }, "node_modules/jsprim/node_modules/extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "engines": [ "node >=0.6.0" - ], - "license": "MIT" + ] }, "node_modules/jsprim/node_modules/verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -13169,8 +15785,9 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-includes": "^3.1.6", @@ -13184,12 +15801,14 @@ }, "node_modules/just-extend": { "version": "6.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true }, "node_modules/jwa": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -13198,7 +15817,8 @@ }, "node_modules/jws": { "version": "3.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -13206,15 +15826,17 @@ }, "node_modules/k-bucket": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", + "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/keccak": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -13226,7 +15848,8 @@ }, "node_modules/keccak/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13238,30 +15861,35 @@ }, "node_modules/keypair": { "version": "1.0.4", - "license": "BSD / GPL" + "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", + "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" }, "node_modules/keyv": { "version": "4.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/knuth-shuffle-seeded": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "seed-random": "~2.2.0" } }, "node_modules/kuler": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "node_modules/ky": { "version": "0.33.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", "engines": { "node": ">=14.16" }, @@ -13271,7 +15899,8 @@ }, "node_modules/ky-universal": { "version": "0.11.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", "dependencies": { "abort-controller": "^3.0.0", "node-fetch": "^3.2.10" @@ -13294,14 +15923,16 @@ }, "node_modules/language-subtag-registry": { "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, - "license": "CC0-1.0", "peer": true }, "node_modules/language-tags": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "language-subtag-registry": "^0.3.20" @@ -13312,7 +15943,8 @@ }, "node_modules/levn": { "version": "0.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -13323,7 +15955,8 @@ }, "node_modules/libp2p": { "version": "0.32.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.32.5.tgz", + "integrity": "sha512-G21yQUdq4LaGDvjMi3ySmcx1cESl8ZsTG1BAfjzjx65DsZJKQ5GPZlamcv+Rwppk3OIplWoRnCu6gam/fI//bw==", "dependencies": { "@motrix/nat-api": "^0.3.1", "@vascosantos/moving-average": "^1.1.0", @@ -13383,7 +16016,8 @@ }, "node_modules/libp2p-bootstrap": { "version": "0.13.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-bootstrap/-/libp2p-bootstrap-0.13.0.tgz", + "integrity": "sha512-8sXEZrikY+chKvMorkvOi9E/v9GvwsYr9DAEfzQZrOKQZByqhan1aXQKWrSpc4AxEv5/UopRzu1P47bkOi8wdw==", "dependencies": { "debug": "^4.3.1", "mafmt": "^10.0.0", @@ -13396,7 +16030,8 @@ }, "node_modules/libp2p-crypto": { "version": "0.19.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.7.tgz", + "integrity": "sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==", "dependencies": { "err-code": "^3.0.1", "is-typedarray": "^1.0.0", @@ -13416,7 +16051,8 @@ }, "node_modules/libp2p-interfaces": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-1.3.1.tgz", + "integrity": "sha512-Bh991Nv2KT/jZ7DjPd/zqhk8cCtkHl6OWw8lyK7wBX7Aj3/ezGwjoDABJzKgt1lbvcgCeQIbzPiIbaKj4DUI4w==", "dependencies": { "abort-controller": "^3.0.0", "abortable-iterator": "^3.0.0", @@ -13436,7 +16072,8 @@ }, "node_modules/libp2p-interfaces/node_modules/libp2p-crypto": { "version": "0.20.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", + "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", "dependencies": { "err-code": "^3.0.1", "iso-random-stream": "^2.0.0", @@ -13456,7 +16093,8 @@ }, "node_modules/libp2p-kad-dht": { "version": "0.24.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-kad-dht/-/libp2p-kad-dht-0.24.2.tgz", + "integrity": "sha512-fBIwmta7LnoQ77giJRVqhnj9QKcws0SvzPWAsOy5AP3ByuxhcmqrHXTDI1iBnkvtCCegOuL41JkJOvaafu1XnA==", "dependencies": { "debug": "^4.3.1", "err-code": "^3.0.0", @@ -13488,7 +16126,8 @@ }, "node_modules/libp2p-mplex": { "version": "0.10.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.7.tgz", + "integrity": "sha512-21VV0DZWuOsHgitWy1GZD1M/kki3a/hVoAJ5QC48p01JNSK5W8gxRiZtq7cCGJ/xNpbQxvMlMtS5eq8CFRlysg==", "dependencies": { "abortable-iterator": "^3.0.2", "bl": "^5.0.0", @@ -13501,7 +16140,9 @@ }, "node_modules/libp2p-noise": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-noise/-/libp2p-noise-4.0.0.tgz", + "integrity": "sha512-DCXRKh9Y4pkw4HEWKPpZbeoROilZA1nrQMHIVrJ4JDEMUKVRucJc9GZTFNzo4yJUZ+ayQAlrfbUARiPPFbpfng==", + "deprecated": "This repository is now being maintained by ChainSafe, and can be found at https://github.com/ChainSafe/js-libp2p-noise under @chainsafe/libp2p-noise", "dependencies": { "@stablelib/chacha20poly1305": "^1.0.1", "@stablelib/hkdf": "^1.0.1", @@ -13521,14 +16162,16 @@ }, "node_modules/libp2p-noise/node_modules/uint8arrays": { "version": "2.1.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", + "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/libp2p-record": { "version": "0.10.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-record/-/libp2p-record-0.10.6.tgz", + "integrity": "sha512-CbdO2P9DQn/DKll6R/J4nIw6Qt8xbUTfxYgJjpP9oz3izHKkpGQo0mPTe0NyuFTGIQ4OprrxqWqG5v8ZCGBqqw==", "dependencies": { "err-code": "^3.0.1", "multiformats": "^9.4.5", @@ -13541,7 +16184,8 @@ }, "node_modules/libp2p-tcp": { "version": "0.17.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.17.2.tgz", + "integrity": "sha512-SAdgDB4Rm0olPbyvanKP5JBaiRwbIOo0Nt++WYe1U2B6akg2uatsDOtulfpnc1gsL1B5vamnOpOzKaDj4kkt8g==", "dependencies": { "abortable-iterator": "^3.0.0", "class-is": "^1.1.0", @@ -13558,7 +16202,8 @@ }, "node_modules/libp2p-utils": { "version": "0.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.4.1.tgz", + "integrity": "sha512-kq/US2unamiyY+YwP47dO1uqpAdcbdYI2Fzi9JIEhjfPBaD1MR/uyQ/YP7ABthl3EaxAjIQYd1TVp85d6QKAtQ==", "dependencies": { "abortable-iterator": "^3.0.0", "debug": "^4.3.0", @@ -13571,7 +16216,8 @@ }, "node_modules/libp2p/node_modules/timeout-abort-controller": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-1.1.1.tgz", + "integrity": "sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==", "dependencies": { "abort-controller": "^3.0.0", "retimer": "^2.0.0" @@ -13579,20 +16225,23 @@ }, "node_modules/libp2p/node_modules/timeout-abort-controller/node_modules/retimer": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/retimer/-/retimer-2.0.0.tgz", + "integrity": "sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==" }, "node_modules/lilconfig": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/lint-staged": { "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "5.3.0", "commander": "11.0.0", @@ -13617,8 +16266,9 @@ }, "node_modules/lint-staged/node_modules/chalk": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -13628,16 +16278,18 @@ }, "node_modules/lint-staged/node_modules/commander": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" } }, "node_modules/lint-staged/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, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -13652,8 +16304,9 @@ }, "node_modules/lint-staged/node_modules/execa": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -13674,16 +16327,18 @@ }, "node_modules/lint-staged/node_modules/human-signals": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=14.18.0" } }, "node_modules/lint-staged/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, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -13693,8 +16348,9 @@ }, "node_modules/lint-staged/node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -13705,8 +16361,9 @@ }, "node_modules/lint-staged/node_modules/mimic-fn": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13716,13 +16373,15 @@ }, "node_modules/lint-staged/node_modules/ms": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/lint-staged/node_modules/npm-run-path": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -13735,8 +16394,9 @@ }, "node_modules/lint-staged/node_modules/onetime": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -13749,8 +16409,9 @@ }, "node_modules/lint-staged/node_modules/path-key": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13760,8 +16421,9 @@ }, "node_modules/lint-staged/node_modules/strip-final-newline": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13771,20 +16433,23 @@ }, "node_modules/lint-staged/node_modules/yaml": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, - "license": "ISC", "engines": { "node": ">= 14" } }, "node_modules/listenercount": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" }, "node_modules/listr2": { "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, - "license": "MIT", "dependencies": { "cli-truncate": "^3.1.0", "colorette": "^2.0.20", @@ -13807,8 +16472,9 @@ }, "node_modules/listr2/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13818,8 +16484,9 @@ }, "node_modules/listr2/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13829,8 +16496,9 @@ }, "node_modules/listr2/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -13845,8 +16513,9 @@ }, "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -13859,8 +16528,9 @@ }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -13875,7 +16545,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { "p-locate": "^5.0.0" }, @@ -13888,63 +16559,83 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.includes": { "version": "4.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "peer": true }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "node_modules/lodash.isstring": { "version": "4.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "node_modules/lodash.merge": { "version": "4.6.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/lodash.mergewith": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true }, "node_modules/lodash.once": { "version": "4.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -13958,8 +16649,9 @@ }, "node_modules/log-update": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^5.0.0", "cli-cursor": "^4.0.0", @@ -13976,8 +16668,9 @@ }, "node_modules/log-update/node_modules/ansi-escapes": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^1.0.2" }, @@ -13990,8 +16683,9 @@ }, "node_modules/log-update/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -14001,8 +16695,9 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -14012,8 +16707,9 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -14028,8 +16724,9 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -14042,8 +16739,9 @@ }, "node_modules/log-update/node_modules/type-fest": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -14053,8 +16751,9 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -14069,7 +16768,8 @@ }, "node_modules/logform": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -14084,19 +16784,22 @@ }, "node_modules/logform/node_modules/@colors/colors": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "engines": { "node": ">=0.1.90" } }, "node_modules/long": { "version": "5.2.3", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -14107,23 +16810,26 @@ }, "node_modules/loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lower-case": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/lowercase-keys": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -14133,15 +16839,18 @@ }, "node_modules/lru_map": { "version": "0.3.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" }, "node_modules/lru-cache": { "version": "10.4.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/lru.min": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz", + "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==", "engines": { "bun": ">=1.0.0", "deno": ">=1.30.0", @@ -14154,23 +16863,26 @@ }, "node_modules/luxon": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz", + "integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/mafmt": { "version": "10.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-10.0.0.tgz", + "integrity": "sha512-K1bziJOXcnepfztu+2Xy9FLKVLaFMDuspmiyJIYRxnO0WOxFSV7XKSdMxMrVZxcvg1+YjlTIvSGTImUHU2k4Aw==", "dependencies": { "multiaddr": "^10.0.0" } }, "node_modules/make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -14183,23 +16895,93 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/make-error": { "version": "1.3.6", - "license": "ISC" + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/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==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true }, "node_modules/match-all": { "version": "1.2.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" + }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "engines": { + "node": ">= 0.4" + } }, "node_modules/mathjs": { "version": "10.6.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", + "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", + "dev": true, "dependencies": { "@babel/runtime": "^7.18.6", "complex.js": "^2.1.1", @@ -14218,9 +17000,34 @@ "node": ">= 14" } }, + "node_modules/mcl-wasm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.7.0.tgz", + "integrity": "sha512-ok9uE7ekFh5+orI0dFT19KeY/y5P6ONp0dks8oo/KniyNK6mJ0zloL3+s6LiEQXW8VxQHwsfZslitL/R7MM9ew==", + "dependencies": { + "@types/node": "^20.2.5" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/mcl-wasm/node_modules/@types/node": { + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/mcl-wasm/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, "node_modules/md5.js": { "version": "1.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -14229,27 +17036,32 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "engines": { "node": ">= 0.10.0" } }, "node_modules/merge-descriptors": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge-options": { "version": "3.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "dependencies": { "is-plain-obj": "^2.1.0" }, @@ -14259,18 +17071,21 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { "node": ">= 8" } }, "node_modules/merkletreejs": { "version": "0.3.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", + "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", "dependencies": { "bignumber.js": "^9.0.1", "buffer-reverse": "^1.0.1", @@ -14284,18 +17099,21 @@ }, "node_modules/methods": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, "node_modules/micro-ftch": { "version": "0.3.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" }, "node_modules/microdata-rdf-streaming-parser": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-2.0.1.tgz", + "integrity": "sha512-oEEYP3OwPGOtoE4eIyJvX1eJXI7VkGR4gKYqpEufaRXc2ele/Tkid/KMU3Los13wGrOq6woSxLEGOYSHzpRvwA==", "dependencies": { "@rdfjs/types": "*", "htmlparser2": "^8.0.0", @@ -14306,6 +17124,8 @@ }, "node_modules/microdata-rdf-streaming-parser/node_modules/htmlparser2": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -14313,7 +17133,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -14323,7 +17142,8 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -14334,8 +17154,9 @@ }, "node_modules/microtime": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.1.1.tgz", + "integrity": "sha512-to1r7o24cDsud9IhN6/8wGmMx5R2kT0w2Xwm5okbYI3d1dk6Xv0m+Z+jg2vS9pt+ocgQHTCtgs/YuyJhySzxNg==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-addon-api": "^5.0.0", "node-gyp-build": "^4.4.0" @@ -14346,11 +17167,13 @@ }, "node_modules/microtime/node_modules/node-addon-api": { "version": "5.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" }, "node_modules/mime": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, @@ -14360,14 +17183,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -14377,15 +17202,16 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "3.1.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { "node": ">=10" }, @@ -14395,6 +17221,8 @@ }, "node_modules/min-document": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dev": true, "dependencies": { "dom-walk": "^0.1.0" @@ -14402,15 +17230,18 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14420,31 +17251,203 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, - "license": "ISC", "dependencies": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, "node_modules/minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^2.9.0" } }, "node_modules/mkdirp": { "version": "0.5.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { "minimist": "^1.2.6" }, @@ -14454,13 +17457,15 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mkdirp-promise": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", "dev": true, - "license": "ISC", "dependencies": { "mkdirp": "*" }, @@ -14470,14 +17475,16 @@ }, "node_modules/mnemonist": { "version": "0.38.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dependencies": { "obliterator": "^2.0.0" } }, "node_modules/mocha": { "version": "10.8.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -14510,14 +17517,16 @@ }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/chokidar": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -14539,7 +17548,8 @@ }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -14548,14 +17558,17 @@ }, "node_modules/mocha/node_modules/diff": { "version": "5.2.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "engines": { "node": ">=0.3.1" } }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", - "license": "ISC", + "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", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14572,7 +17585,8 @@ }, "node_modules/mocha/node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -14582,7 +17596,8 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -14592,7 +17607,8 @@ }, "node_modules/mocha/node_modules/readdirp": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -14602,7 +17618,8 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -14618,26 +17635,30 @@ }, "node_modules/mock-fs": { "version": "4.14.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", + "dev": true }, "node_modules/mock-socket": { "version": "9.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", "engines": { "node": ">= 8" } }, "node_modules/moment": { "version": "2.30.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { "node": "*" } }, "node_modules/moment-timezone": { "version": "0.5.46", - "license": "MIT", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", "dependencies": { "moment": "^2.29.4" }, @@ -14647,11 +17668,14 @@ }, "node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multiaddr": { "version": "10.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-10.0.1.tgz", + "integrity": "sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==", + "deprecated": "This module is deprecated, please upgrade to @multiformats/multiaddr", "dependencies": { "dns-over-http-resolver": "^1.2.3", "err-code": "^3.0.1", @@ -14663,8 +17687,10 @@ }, "node_modules/multibase": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "dependencies": { "base-x": "^3.0.8", "buffer": "^5.5.0" @@ -14672,6 +17698,8 @@ }, "node_modules/multibase/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -14687,7 +17715,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -14695,25 +17722,30 @@ }, "node_modules/multicodec": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "dependencies": { "varint": "^5.0.0" } }, "node_modules/multicodec/node_modules/varint": { "version": "5.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true }, "node_modules/multiformats": { "version": "9.9.0", - "license": "(Apache-2.0 AND MIT)" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" }, "node_modules/multihashes": { "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "multibase": "^0.7.0", @@ -14722,6 +17754,8 @@ }, "node_modules/multihashes/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -14737,7 +17771,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -14745,8 +17778,10 @@ }, "node_modules/multihashes/node_modules/multibase": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "dependencies": { "base-x": "^3.0.8", "buffer": "^5.5.0" @@ -14754,12 +17789,14 @@ }, "node_modules/multihashes/node_modules/varint": { "version": "5.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true }, "node_modules/multistream-select": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-2.0.1.tgz", + "integrity": "sha512-ziVNT/vux0uUElP4OKNMVr0afU/X6PciAmT2UJNolhzhSLXIwFAaYfmLajD8NoZ+DsBQ1bp0zZ2nMVPF+FhClA==", "dependencies": { "bl": "^5.0.0", "debug": "^4.1.1", @@ -14775,7 +17812,8 @@ }, "node_modules/murmur-128": { "version": "0.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", "dependencies": { "encode-utf8": "^1.0.2", "fmix": "^0.1.0", @@ -14784,7 +17822,8 @@ }, "node_modules/mutable-proxy": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mutable-proxy/-/mutable-proxy-1.0.0.tgz", + "integrity": "sha512-4OvNRr1DJpy2QuDUV74m+BWZ//n4gG4bmd21MzDSPqHEidIDWqwyOjcadU1LBMO3vXYGurVKjfBrxrSQIHFu9A==", "engines": { "node": ">=6.X.X", "npm": ">=3.X.X" @@ -14792,7 +17831,8 @@ }, "node_modules/mysql2": { "version": "3.11.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.5.tgz", + "integrity": "sha512-0XFu8rUmFN9vC0ME36iBvCUObftiMHItrYFhlCRvFWbLgpNqtC4Br/NmZX1HNCszxT0GGy5QtP+k3Q3eCJPaYA==", "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", @@ -14810,8 +17850,9 @@ }, "node_modules/mz": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, - "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -14820,7 +17861,8 @@ }, "node_modules/n3": { "version": "1.23.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.23.1.tgz", + "integrity": "sha512-3f0IYJo+6+lXypothmlwPzm3wJNffsxUwnfONeFv2QqWq7RjTvyCMtkRXDUXW6XrZoOzaQX8xTTSYNlGjXcGtw==", "dependencies": { "buffer": "^6.0.3", "queue-microtask": "^1.1.2", @@ -14832,7 +17874,8 @@ }, "node_modules/named-placeholders": { "version": "1.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", "dependencies": { "lru-cache": "^7.14.1" }, @@ -14842,34 +17885,39 @@ }, "node_modules/named-placeholders/node_modules/lru-cache": { "version": "7.18.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "engines": { "node": ">=12" } }, "node_modules/nan": { "version": "2.22.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==" }, "node_modules/nano-json-stream-parser": { "version": "0.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", + "dev": true }, "node_modules/nanoclone": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -14879,52 +17927,61 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "node_modules/native-abort-controller": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", + "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==", "peerDependencies": { "abort-controller": "*" } }, "node_modules/native-fetch": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", + "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==", "peerDependencies": { "node-fetch": "*" } }, "node_modules/natural-compare": { "version": "1.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/negotiate": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/negotiate/-/negotiate-1.0.1.tgz", + "integrity": "sha512-KBCIM4dAIT9j/pSXLHHQbZG74NmKNXTtxU2zHN0HG6uzzuFE01m1UdGoUmVHmACiBuCAOL7KwfqSW1oUQBj/vg==" }, "node_modules/negotiator": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/netmask": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "engines": { "node": ">= 0.4.0" } }, "node_modules/next-tick": { "version": "1.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "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==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", @@ -14935,36 +17992,41 @@ }, "node_modules/nise/node_modules/@sinonjs/commons": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", + "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "node_modules/nise/node_modules/path-to-regexp": { "version": "6.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true }, "node_modules/nise/node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/no-case": { "version": "3.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -14972,15 +18034,20 @@ }, "node_modules/noble-ed25519": { "version": "1.2.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.6.tgz", + "integrity": "sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==", + "deprecated": "Switch to namespaced @noble/ed25519 for security and feature updates" }, "node_modules/noble-secp256k1": { "version": "1.2.14", - "license": "MIT" + "resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", + "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==", + "deprecated": "Switch to namespaced @noble/secp256k1 for security and feature updates" }, "node_modules/nock": { "version": "13.5.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", "dependencies": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", @@ -14992,8 +18059,8 @@ }, "node_modules/node-abi": { "version": "3.71.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", "dependencies": { "semver": "^7.3.5" }, @@ -15003,10 +18070,13 @@ }, "node_modules/node-addon-api": { "version": "2.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node_modules/node-domexception": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "funding": [ { "type": "github", @@ -15017,14 +18087,14 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "3.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -15040,24 +18110,153 @@ }, "node_modules/node-forge": { "version": "0.10.0", - "license": "(BSD-3-Clause OR GPL-2.0)", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "engines": { "node": ">= 6.0.0" } }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, "node_modules/node-gyp-build": { "version": "4.8.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-gyp/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-gyp/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-gyp/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, "node_modules/node-preload": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, - "license": "MIT", "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -15066,21 +18265,39 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "dev": true, - "license": "MIT" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } }, "node_modules/normalize-path": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15090,7 +18307,8 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -15098,9 +18316,26 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/number-to-bn": { "version": "1.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dependencies": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -15112,17 +18347,20 @@ }, "node_modules/number-to-bn/node_modules/bn.js": { "version": "4.11.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/nwsapi": { "version": "2.2.16", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", + "dev": true }, "node_modules/nyc": { "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -15161,16 +18399,18 @@ }, "node_modules/nyc/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -15179,8 +18419,9 @@ }, "node_modules/nyc/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, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -15191,8 +18432,9 @@ }, "node_modules/nyc/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, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -15202,8 +18444,9 @@ }, "node_modules/nyc/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, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -15216,8 +18459,9 @@ }, "node_modules/nyc/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, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -15227,8 +18471,9 @@ }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -15238,16 +18483,18 @@ }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -15259,13 +18506,15 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -15285,8 +18534,9 @@ }, "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -15297,22 +18547,25 @@ }, "node_modules/oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "engines": { "node": ">= 0.4" }, @@ -15322,16 +18575,18 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -15347,8 +18602,9 @@ }, "node_modules/object.entries": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -15360,8 +18616,9 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -15378,8 +18635,9 @@ }, "node_modules/object.groupby": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -15392,8 +18650,9 @@ }, "node_modules/object.values": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -15409,26 +18668,30 @@ }, "node_modules/obliterator": { "version": "2.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" }, "node_modules/oboe": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "dev": true, - "license": "BSD", "dependencies": { "http-https": "^1.0.0" } }, "node_modules/on-exit-leak-free": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "engines": { "node": ">=14.0.0" } }, "node_modules/on-finished": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -15438,21 +18701,24 @@ }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/one-time": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "dependencies": { "fn.name": "1.x.x" } }, "node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -15465,7 +18731,8 @@ }, "node_modules/optionator": { "version": "0.9.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -15480,14 +18747,16 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { "node": ">=0.10.0" } }, "node_modules/p-any": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", + "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", "dependencies": { "p-cancelable": "^2.0.0", "p-some": "^5.0.0" @@ -15501,21 +18770,24 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "engines": { "node": ">=8" } }, "node_modules/p-defer": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", "engines": { "node": ">=8" } }, "node_modules/p-fifo": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", + "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", "dependencies": { "fast-fifo": "^1.0.0", "p-defer": "^3.0.0" @@ -15523,14 +18795,16 @@ }, "node_modules/p-finally": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "engines": { "node": ">=4" } }, "node_modules/p-limit": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -15543,7 +18817,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { "p-limit": "^3.0.2" }, @@ -15556,7 +18831,8 @@ }, "node_modules/p-map": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -15569,7 +18845,8 @@ }, "node_modules/p-queue": { "version": "6.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" @@ -15583,11 +18860,13 @@ }, "node_modules/p-queue/node_modules/eventemitter3": { "version": "4.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/p-queue/node_modules/p-timeout": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dependencies": { "p-finally": "^1.0.0" }, @@ -15597,14 +18876,16 @@ }, "node_modules/p-reflect": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", + "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", "engines": { "node": ">=8" } }, "node_modules/p-retry": { "version": "4.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -15615,7 +18896,8 @@ }, "node_modules/p-settle": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", + "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", "dependencies": { "p-limit": "^2.2.2", "p-reflect": "^2.1.0" @@ -15629,7 +18911,8 @@ }, "node_modules/p-settle/node_modules/p-limit": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" }, @@ -15642,7 +18925,8 @@ }, "node_modules/p-some": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", + "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", "dependencies": { "aggregate-error": "^3.0.0", "p-cancelable": "^2.0.0" @@ -15656,22 +18940,25 @@ }, "node_modules/p-timeout": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", + "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", "engines": { "node": ">=10" } }, "node_modules/p-try": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { "node": ">=6" } }, "node_modules/package-hash": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, - "license": "ISC", "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -15684,8 +18971,9 @@ }, "node_modules/pad-right": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", "dev": true, - "license": "MIT", "dependencies": { "repeat-string": "^1.5.2" }, @@ -15695,12 +18983,14 @@ }, "node_modules/pako": { "version": "2.1.0", - "license": "(MIT AND Zlib)", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", "optional": true }, "node_modules/parent-module": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { "callsites": "^3.0.0" }, @@ -15710,24 +19000,28 @@ }, "node_modules/parse-headers": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", + "dev": true }, "node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/parseurl": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { "node": ">= 0.8" } }, "node_modules/pascal-case": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -15735,44 +19029,51 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.12", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -15786,7 +19087,8 @@ }, "node_modules/peer-id": { "version": "0.15.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.15.4.tgz", + "integrity": "sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==", "dependencies": { "class-is": "^1.1.0", "libp2p-crypto": "^0.20.0", @@ -15804,7 +19106,8 @@ }, "node_modules/peer-id/node_modules/libp2p-crypto": { "version": "0.20.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", + "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", "dependencies": { "err-code": "^3.0.1", "iso-random-stream": "^2.0.0", @@ -15824,7 +19127,8 @@ }, "node_modules/pem-jwk": { "version": "2.0.0", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", + "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", "dependencies": { "asn1.js": "^5.0.1" }, @@ -15837,20 +19141,24 @@ }, "node_modules/performance-now": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true }, "node_modules/pg-connection-string": { "version": "2.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" }, "node_modules/picocolors": { "version": "1.1.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -15860,8 +19168,9 @@ }, "node_modules/pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -15871,7 +19180,8 @@ }, "node_modules/pino": { "version": "8.21.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", @@ -15891,7 +19201,8 @@ }, "node_modules/pino-abstract-transport": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" @@ -15899,7 +19210,8 @@ }, "node_modules/pino-pretty": { "version": "9.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-9.4.1.tgz", + "integrity": "sha512-loWr5SNawVycvY//hamIzyz3Fh5OSpvkcO13MwdDW+eKIGylobPLqnVGTDwDXkdmpJd1BhEG+qhDw09h6SqJiQ==", "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", @@ -15922,12 +19234,14 @@ }, "node_modules/pino-std-serializers": { "version": "6.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" }, "node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -15937,8 +19251,9 @@ }, "node_modules/pkg-dir/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, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -15949,8 +19264,9 @@ }, "node_modules/pkg-dir/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, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -15960,8 +19276,9 @@ }, "node_modules/pkg-dir/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, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -15974,8 +19291,9 @@ }, "node_modules/pkg-dir/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, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -15985,23 +19303,25 @@ }, "node_modules/pony-cause": { "version": "2.1.11", - "license": "0BSD", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", + "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", "engines": { "node": ">=12.0.0" } }, "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, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/prebuild-install": { "version": "7.1.2", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -16025,8 +19345,8 @@ }, "node_modules/prebuild-install/node_modules/bl": { "version": "4.1.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -16035,7 +19355,8 @@ }, "node_modules/prebuild-install/node_modules/buffer": { "version": "5.7.1", - "dev": true, + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -16050,7 +19371,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -16058,8 +19378,8 @@ }, "node_modules/prebuild-install/node_modules/readable-stream": { "version": "3.6.2", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16071,8 +19391,8 @@ }, "node_modules/prebuild-install/node_modules/tar-fs": { "version": "2.1.1", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -16082,8 +19402,8 @@ }, "node_modules/prebuild-install/node_modules/tar-stream": { "version": "2.2.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -16097,15 +19417,17 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -16118,7 +19440,8 @@ }, "node_modules/private-ip": { "version": "2.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.3.4.tgz", + "integrity": "sha512-ts/YFVwfBeLq61f9+KsOhXW6RH0wvY0gU50R6QZYzgFhggyyLK6WDFeYdjfi/HMnBm2hecLvsR3PB3JcRxDk+A==", "dependencies": { "ip-regex": "^4.3.0", "ipaddr.js": "^2.0.1", @@ -16128,19 +19451,22 @@ }, "node_modules/process": { "version": "0.11.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/process-on-spawn": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, - "license": "MIT", "dependencies": { "fromentries": "^1.2.0" }, @@ -16150,24 +19476,62 @@ }, "node_modules/process-warning": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, "node_modules/promise-polyfill": { "version": "1.1.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", + "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-retry/node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } }, "node_modules/prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "loose-envify": "^1.4.0", @@ -16177,20 +19541,23 @@ }, "node_modules/propagate": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "engines": { "node": ">= 8" } }, "node_modules/property-expr": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "dev": true }, "node_modules/protobufjs": { "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", "hasInstallScript": true, - "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -16213,11 +19580,13 @@ }, "node_modules/protobufjs/node_modules/long": { "version": "4.0.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "node_modules/proxy-addr": { "version": "2.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -16228,19 +19597,22 @@ }, "node_modules/proxy-addr/node_modules/ipaddr.js": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { "node": ">= 0.10" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/psl": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -16250,7 +19622,8 @@ }, "node_modules/pump": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -16258,14 +19631,16 @@ }, "node_modules/punycode": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, "node_modules/qs": { "version": "6.13.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -16278,8 +19653,9 @@ }, "node_modules/query-string": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, - "license": "MIT", "dependencies": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -16291,11 +19667,14 @@ }, "node_modules/querystringify": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -16309,22 +19688,24 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/queue-tick": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, "node_modules/quick-format-unescaped": { "version": "4.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" }, "node_modules/quick-lru": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -16334,21 +19715,24 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -16361,7 +19745,8 @@ }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -16371,7 +19756,8 @@ }, "node_modules/rc": { "version": "1.2.8", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -16384,25 +19770,40 @@ }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } }, + "node_modules/rdf-canonize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/rdf-data-factory": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.2.tgz", + "integrity": "sha512-TfQD63Lokabd09ES1jAtKK8AA6rkr9rwyUBGo6olOt1CE0Um36CUQIqytyf0am2ouBPR0l7SaHxCiMcPGHkt1A==", "dependencies": { "@rdfjs/types": "*" } }, "node_modules/rdf-isomorphic": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", + "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", "dependencies": { "@rdfjs/types": "*", "hash.js": "^1.1.7", @@ -16412,7 +19813,8 @@ }, "node_modules/rdf-literal": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", + "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -16420,7 +19822,8 @@ }, "node_modules/rdf-object": { "version": "1.14.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-object/-/rdf-object-1.14.0.tgz", + "integrity": "sha512-/KSUWr7onDtL7d81kOpcUzJ2vHYOYJc2KU9WzBZRYydBhK0Sksh5Hg4VCQNaxUEvYEgdrrTuq9SLpOOCmag0rQ==", "dependencies": { "@rdfjs/types": "*", "jsonld-context-parser": "^2.0.2", @@ -16431,7 +19834,8 @@ }, "node_modules/rdf-parse": { "version": "2.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-2.3.3.tgz", + "integrity": "sha512-N5XEHm+ajFzwo/vVNzB4tDtvqMwBosbVJmZl5DlzplQM9ejlJBlN/43i0ImAb/NMtJJgQPC3jYnkCKGA7wdo/w==", "dependencies": { "@comunica/actor-http-fetch": "^2.0.1", "@comunica/actor-http-proxy": "^2.0.1", @@ -16461,7 +19865,8 @@ }, "node_modules/rdf-quad": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-quad/-/rdf-quad-1.5.0.tgz", + "integrity": "sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA==", "dependencies": { "rdf-data-factory": "^1.0.1", "rdf-literal": "^1.2.0", @@ -16470,7 +19875,8 @@ }, "node_modules/rdf-store-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-store-stream/-/rdf-store-stream-2.0.1.tgz", + "integrity": "sha512-znGaibHLvbRE0BrDcXHRleRcLKlHYP6ADr1RFJ3yA28QBmhOjxxgbBFTvCMzgsxvBIqdaFS8Vd2FG4NefJL4Mg==", "dependencies": { "@rdfjs/types": "*", "rdf-stores": "^1.0.0" @@ -16478,7 +19884,8 @@ }, "node_modules/rdf-stores": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-stores/-/rdf-stores-1.0.0.tgz", + "integrity": "sha512-wqp7M5409rbhpWQE0C1vyVysbz++aD2vEkZ6yueSxhDtyLvznS41R3cKiuUpm3ikc/yTpaCZwPo4iyKEaAwBIg==", "dependencies": { "@rdfjs/types": "*", "asynciterator": "^3.8.0", @@ -16489,7 +19896,8 @@ }, "node_modules/rdf-streaming-store": { "version": "1.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-streaming-store/-/rdf-streaming-store-1.1.5.tgz", + "integrity": "sha512-Rfd3qo1otF/Jfau/lAFX8J1ZPorN0eaHoIkAlenIIcdZjq9AoIP85rEa4Sn+yMZOqNU1Kc4cCPUv5CFHhpAT2Q==", "dependencies": { "@rdfjs/types": "*", "@types/n3": "^1.10.4", @@ -16502,7 +19910,8 @@ }, "node_modules/rdf-streaming-store/node_modules/@types/readable-stream": { "version": "4.0.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -16510,11 +19919,13 @@ }, "node_modules/rdf-streaming-store/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/rdf-string": { "version": "1.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -16522,7 +19933,8 @@ }, "node_modules/rdf-string-ttl": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-string-ttl/-/rdf-string-ttl-1.3.2.tgz", + "integrity": "sha512-yqolaVoUvTaSC5aaQuMcB4BL54G/pCGsV4jQH87f0TvAx8zHZG0koh7XWrjva/IPGcVb1QTtaeEdfda5mcddJg==", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -16530,7 +19942,8 @@ }, "node_modules/rdf-terms": { "version": "1.11.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", + "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0", @@ -16539,7 +19952,8 @@ }, "node_modules/rdfa-streaming-parser": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-2.0.1.tgz", + "integrity": "sha512-7Yyaj030LO7iQ38Wh/RNLVeYrVFJeyx3dpCK7C1nvX55eIN/gE4HWfbg4BYI9X7Bd+eUIUMVeiKYLmYjV6apow==", "dependencies": { "@rdfjs/types": "*", "htmlparser2": "^8.0.0", @@ -16550,6 +19964,8 @@ }, "node_modules/rdfa-streaming-parser/node_modules/htmlparser2": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -16557,7 +19973,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -16567,7 +19982,8 @@ }, "node_modules/rdfxml-streaming-parser": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.4.0.tgz", + "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", "dependencies": { "@rdfjs/types": "*", "@rubensworks/saxes": "^6.0.1", @@ -16581,20 +19997,23 @@ }, "node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/react-native-fetch-api": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", + "integrity": "sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==", "dependencies": { "p-defer": "^3.0.0" } }, "node_modules/readable-stream": { "version": "4.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -16608,11 +20027,13 @@ }, "node_modules/readable-stream-node-to-web": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", + "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==" }, "node_modules/readdirp": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "engines": { "node": ">= 14.16.0" }, @@ -16623,36 +20044,41 @@ }, "node_modules/real-require": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "engines": { "node": ">= 12.13.0" } }, "node_modules/receptacle": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", + "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", "dependencies": { "ms": "^2.1.1" } }, "node_modules/reflect-metadata": { "version": "0.1.13", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true }, "node_modules/reflect.getprototypeof": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", + "dunder-proto": "^1.0.0", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" }, "engines": { "node": ">= 0.4" @@ -16663,28 +20089,32 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp-match-indices": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz", + "integrity": "sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "regexp-tree": "^0.1.11" } }, "node_modules/regexp-tree": { "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, - "license": "MIT", "bin": { "regexp-tree": "bin/regexp-tree" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -16701,12 +20131,14 @@ }, "node_modules/relative-to-absolute-iri": { "version": "1.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", + "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==" }, "node_modules/release-zalgo": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, - "license": "ISC", "dependencies": { "es6-error": "^4.0.1" }, @@ -16716,16 +20148,19 @@ }, "node_modules/repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, - "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -16754,8 +20189,9 @@ }, "node_modules/request/node_modules/form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -16767,16 +20203,18 @@ }, "node_modules/request/node_modules/qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/request/node_modules/tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -16787,39 +20225,46 @@ }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requires-port": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "node_modules/resolve": { "version": "1.22.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -16834,20 +20279,23 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true }, "node_modules/resolve-from": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { "node": ">=4" } }, "node_modules/resolve-pkg": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", + "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -16857,16 +20305,18 @@ }, "node_modules/resolve-pkg/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/responselike": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, - "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -16876,16 +20326,18 @@ }, "node_modules/responselike/node_modules/lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/restore-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -16899,22 +20351,26 @@ }, "node_modules/retimer": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz", + "integrity": "sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==" }, "node_modules/retry": { "version": "0.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "engines": { "node": ">= 4" } }, "node_modules/retry-as-promised": { "version": "7.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" }, "node_modules/reusify": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -16922,12 +20378,15 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true }, "node_modules/rimraf": { "version": "3.0.2", - "license": "ISC", + "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" }, @@ -16940,7 +20399,8 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -16948,7 +20408,8 @@ }, "node_modules/rlp": { "version": "2.2.7", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dependencies": { "bn.js": "^5.2.0" }, @@ -16958,12 +20419,14 @@ }, "node_modules/robust-predicates": { "version": "3.0.2", - "dev": true, - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "dev": true }, "node_modules/rolling-rate-limiter": { "version": "0.2.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rolling-rate-limiter/-/rolling-rate-limiter-0.2.13.tgz", + "integrity": "sha512-fF5XeJn7t22cC9LIh77BDfs7Mg0jon03qezMfPige0vehzhmNyQ6U+eSYbaL1l80sX9z+22+6x4pQ8xHT0LrVw==", "dependencies": { "microtime": "^3.0.0", "uuid": "^8.3.0" @@ -16974,6 +20437,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -16988,32 +20453,35 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rw": { "version": "1.3.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true }, "node_modules/rxjs": { "version": "7.8.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.1.2", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -17025,6 +20493,8 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -17038,18 +20508,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-regex-test": { - "version": "1.0.3", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -17060,29 +20530,34 @@ }, "node_modules/safe-stable-stringify": { "version": "2.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "engines": { "node": ">=10" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sanitize-filename": { "version": "1.6.3", - "license": "WTFPL OR ISC", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, "node_modules/sax": { "version": "1.4.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/sax-stream": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sax-stream/-/sax-stream-1.3.0.tgz", + "integrity": "sha512-tcfsAAICAkyNNe4uiKtKmLKxx3C7qPAej13UUoN+7OLYq/P5kHGahZtJhhMVM3fIMndA6TlYHWFlFEzFkv1VGg==", "dependencies": { "debug": "~2", "sax": "~1" @@ -17090,19 +20565,22 @@ }, "node_modules/sax-stream/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/sax-stream/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/saxes": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, - "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -17112,17 +20590,20 @@ }, "node_modules/scale-ts": { "version": "1.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", "optional": true }, "node_modules/scrypt-js": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/secp256k1": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", @@ -17134,20 +20615,25 @@ }, "node_modules/secure-json-parse": { "version": "2.7.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" }, "node_modules/seed-random": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", + "dev": true }, "node_modules/seedrandom": { "version": "3.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "dev": true }, "node_modules/semver": { "version": "7.6.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -17157,7 +20643,8 @@ }, "node_modules/send": { "version": "0.19.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -17179,34 +20666,40 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, "node_modules/seq-queue": { - "version": "0.0.5" + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/sequelize": { "version": "6.37.5", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.5.tgz", + "integrity": "sha512-10WA4poUb3XWnUROThqL2Apq9C2NhyV1xHPMZuybNMCucDsbbFuKg51jhmyvvAUyUqCiimwTZamc3AHhMoBr2Q==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/sequelize" } ], - "license": "MIT", "dependencies": { "@types/debug": "^4.1.8", "@types/validator": "^13.7.17", @@ -17260,21 +20753,24 @@ }, "node_modules/sequelize-pool": { "version": "7.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", "engines": { "node": ">= 10.0.0" } }, "node_modules/serialize-javascript": { "version": "6.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-static": { "version": "1.16.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -17287,8 +20783,9 @@ }, "node_modules/servify": { "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "dev": true, - "license": "MIT", "dependencies": { "body-parser": "^1.16.0", "cors": "^2.8.1", @@ -17302,16 +20799,19 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "devOptional": true }, "node_modules/set-delayed-interval": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz", + "integrity": "sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw==" }, "node_modules/set-function-length": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -17326,8 +20826,9 @@ }, "node_modules/set-function-name": { "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, - "license": "MIT", "peer": true, "dependencies": { "define-data-property": "^1.1.4", @@ -17341,15 +20842,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -17360,7 +20864,8 @@ }, "node_modules/shaclc-parse": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shaclc-parse/-/shaclc-parse-1.4.0.tgz", + "integrity": "sha512-zyxjIYQH2ghg/wtMvOp+4Nr6aK8j9bqFiVT3w47K8WHPYN+S3Zgnh2ybT+dGgMwo9KjiOoywxhjC7d8Z6GCmfA==", "dependencies": { "@rdfjs/types": "^1.1.0", "n3": "^1.16.3" @@ -17368,7 +20873,8 @@ }, "node_modules/shaclc-write": { "version": "1.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shaclc-write/-/shaclc-write-1.4.3.tgz", + "integrity": "sha512-dtJ6LokIluzQuHRWCFvNnmGyh07FxBK2L4utkOQn/wYD9eNamUUCt7sDBcuFDyD3jAGv0Ipmv0EitTyKcM1f/w==", "dependencies": { "@jeswr/prefixcc": "^1.2.1", "n3": "^1.16.3", @@ -17377,9 +20883,10 @@ }, "node_modules/sharp": { "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "dev": true, "hasInstallScript": true, - "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.2", @@ -17399,12 +20906,14 @@ }, "node_modules/sharp/node_modules/node-addon-api": { "version": "6.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -17414,19 +20923,72 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.6", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -17437,11 +20999,13 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-concat": { "version": "1.0.1", - "dev": true, + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "funding": [ { "type": "github", @@ -17455,12 +21019,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/simple-get": { "version": "4.0.1", - "dev": true, + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "funding": [ { "type": "github", @@ -17475,7 +21039,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -17484,15 +21047,18 @@ }, "node_modules/simple-swizzle": { "version": "0.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/sinon": { "version": "14.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", + "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", + "deprecated": "16.1.1", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^2.0.0", "@sinonjs/fake-timers": "^9.1.2", @@ -17508,16 +21074,18 @@ }, "node_modules/sinon/node_modules/diff": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/sinon/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, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17527,8 +21095,9 @@ }, "node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -17542,8 +21111,9 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -17553,23 +21123,89 @@ }, "node_modules/slugify": { "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0.0" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/smoldot": { "version": "2.0.22", - "license": "GPL-3.0-or-later WITH Classpath-exception-2.0", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.22.tgz", + "integrity": "sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==", + "dev": true, "optional": true, "dependencies": { "ws": "^8.8.1" } }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "optional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks/node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "optional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/socks/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "optional": true + }, + "node_modules/solady": { + "version": "0.0.285", + "resolved": "https://registry.npmjs.org/solady/-/solady-0.0.285.tgz", + "integrity": "sha512-MkY9KFFuhMeTkWU+4wIzBoEkGr1DXdMR98/zGB8S7efg9Wph9Z4d98RRu7c8pRpmRfrSPAYuMKkvauMCpWXStg==" + }, "node_modules/solc": { "version": "0.8.26", - "license": "MIT", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "dependencies": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -17588,21 +21224,24 @@ }, "node_modules/solc/node_modules/commander": { "version": "8.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { "node": ">= 12" } }, "node_modules/solc/node_modules/semver": { "version": "5.7.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/solc/node_modules/tmp": { "version": "0.0.33", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -17612,21 +21251,24 @@ }, "node_modules/sonic-boom": { "version": "3.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", "dependencies": { "atomic-sleep": "^1.0.0" } }, "node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", - "license": "MIT", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -17634,11 +21276,13 @@ }, "node_modules/spark-md5": { "version": "3.0.2", - "license": "(WTFPL OR MIT)" + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" }, "node_modules/sparqlalgebrajs": { "version": "4.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-4.3.8.tgz", + "integrity": "sha512-Xo1/5icRtVk2N38BrY9NXN8N/ZPjULlns7sDHv0nlcGOsOediBLWVy8LmV+Q90RHvb3atZZbrFy3VqrM4iXciA==", "dependencies": { "@rdfjs/types": "*", "@types/sparqljs": "^3.1.3", @@ -17656,7 +21300,8 @@ }, "node_modules/sparqljs": { "version": "3.7.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", + "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", "dependencies": { "rdf-data-factory": "^1.1.2" }, @@ -17669,7 +21314,8 @@ }, "node_modules/sparqljson-parse": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", "dependencies": { "@bergos/jsonparse": "^1.4.1", "@rdfjs/types": "*", @@ -17680,7 +21326,8 @@ }, "node_modules/sparqljson-to-tree": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparqljson-to-tree/-/sparqljson-to-tree-3.0.2.tgz", + "integrity": "sha512-8h/ZEPPBhBlMbgMX1TOumJQku2mLYYdwd/octsDa/bdqdNcMeAcB7S2Qh4SEZ+0pPNed9CBk1d5TEUpwJlcdmw==", "dependencies": { "@rdfjs/types": "*", "rdf-literal": "^1.3.2", @@ -17689,7 +21336,8 @@ }, "node_modules/sparqlxml-parse": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", + "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", "dependencies": { "@rdfjs/types": "*", "@rubensworks/saxes": "^6.0.1", @@ -17701,8 +21349,9 @@ }, "node_modules/spawn-wrap": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -17717,26 +21366,156 @@ }, "node_modules/split2": { "version": "4.2.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "engines": { "node": ">= 10.x" } }, "node_modules/sprintf-js": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "node_modules/sqlite": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-5.1.1.tgz", + "integrity": "sha512-oBkezXa2hnkfuJwUo44Hl9hS3er+YFtueifoajrgidvqsJRQFpc5fKoAkAor1O5ZnLoa28GBScfHXs8j0K358Q==" + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sqlite3/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/sqlite3/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sqlite3/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sqlite3/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sqlite3/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sqlite3/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sqlite3/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "node_modules/sqlite3/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sqlite3/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/sqlstring": { "version": "2.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", "engines": { "node": ">= 0.6" } }, "node_modules/sshpk": { "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, - "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -17759,29 +21538,64 @@ }, "node_modules/sshpk/node_modules/jsbn": { "version": "0.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true }, "node_modules/sshpk/node_modules/tweetnacl": { "version": "0.14.5", - "dev": true, - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ssri/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true }, "node_modules/stack-trace": { "version": "0.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "engines": { "node": "*" } }, "node_modules/stackframe": { "version": "1.3.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true }, "node_modules/stacktrace-parser": { "version": "0.1.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "dependencies": { "type-fest": "^0.7.1" }, @@ -17791,57 +21605,67 @@ }, "node_modules/stacktrace-parser/node_modules/type-fest": { "version": "0.7.1", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", "engines": { "node": ">=8" } }, "node_modules/statuses": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } }, "node_modules/stream-to-it": { "version": "0.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", + "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", "dependencies": { "get-iterator": "^1.0.2" } }, "node_modules/stream-to-string": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", + "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", "dependencies": { "promise-polyfill": "^1.1.6" } }, "node_modules/streamify-array": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/streamify-array/-/streamify-array-1.0.1.tgz", + "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==" }, "node_modules/streamify-string": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", + "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==" }, "node_modules/streaming-iterables": { "version": "6.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-6.2.0.tgz", + "integrity": "sha512-3AYC8oB60WyD1ic7uHmN/vm2oRGzRnQ3XFBl/bFMDi1q1+nc5/vjMmiE4vroIya3jG59t87VpyAj/iXYxyw9AA==", "engines": { "node": ">=10" } }, "node_modules/streamsearch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } }, "node_modules/streamx": { - "version": "2.21.0", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "dev": true, - "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", "queue-tick": "^1.0.1", @@ -17853,29 +21677,33 @@ }, "node_modules/strict-uri-encode": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "engines": { "node": ">=0.6.19" } }, "node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -17887,19 +21715,22 @@ }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { "node": ">=8" } }, "node_modules/string.prototype.includes": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -17912,8 +21743,9 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -17938,8 +21770,9 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "define-properties": "^1.1.3", @@ -17947,15 +21780,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17965,23 +21802,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -17997,7 +21840,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -18007,29 +21851,33 @@ }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/strip-bom": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "engines": { "node": ">=6" } }, "node_modules/strip-hex-prefix": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "dependencies": { "is-hex-prefixed": "1.0.0" }, @@ -18040,7 +21888,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { "node": ">=8" }, @@ -18050,7 +21899,8 @@ }, "node_modules/supports-color": { "version": "8.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { "has-flag": "^4.0.0" }, @@ -18063,7 +21913,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { "node": ">= 0.4" }, @@ -18073,8 +21924,9 @@ }, "node_modules/swarm-js": { "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", "dev": true, - "license": "MIT", "dependencies": { "bluebird": "^3.5.0", "buffer": "^5.0.5", @@ -18091,8 +21943,9 @@ }, "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, - "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -18102,11 +21955,14 @@ }, "node_modules/swarm-js/node_modules/bluebird": { "version": "3.7.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "node_modules/swarm-js/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -18122,7 +21978,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -18130,16 +21985,18 @@ }, "node_modules/swarm-js/node_modules/cacheable-lookup": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.6.0" } }, "node_modules/swarm-js/node_modules/fs-extra": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -18148,8 +22005,9 @@ }, "node_modules/swarm-js/node_modules/got": { "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, - "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -18172,8 +22030,9 @@ }, "node_modules/swarm-js/node_modules/http2-wrapper": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, - "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -18184,37 +22043,42 @@ }, "node_modules/swarm-js/node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/swarm-js/node_modules/lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/swarm-js/node_modules/universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/symbol-tree": { "version": "3.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "node_modules/tar": { "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dev": true, - "license": "ISC", "dependencies": { "chownr": "^1.1.4", "fs-minipass": "^1.2.7", @@ -18230,8 +22094,9 @@ }, "node_modules/tar-fs": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -18243,8 +22108,9 @@ }, "node_modules/tar-stream": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, - "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -18253,8 +22119,9 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -18266,32 +22133,37 @@ }, "node_modules/text-decoder": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.2.tgz", + "integrity": "sha512-/MDslo7ZyWTA2vnk1j7XoDVfXsGk3tp+zFEJHJGm0UjIlQifonVFwlVbQDFh8KJzTBnT8ie115TYqir6bclddA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } }, "node_modules/text-hex": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, "node_modules/text-table": { "version": "0.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/thenify": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, - "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } }, "node_modules/thenify-all": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, - "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -18301,37 +22173,44 @@ }, "node_modules/thread-stream": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", "dependencies": { "real-require": "^0.2.0" } }, "node_modules/through": { "version": "2.3.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/timeout-abort-controller": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", + "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", "dependencies": { "retimer": "^3.0.0" } }, "node_modules/tiny-emitter": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "dev": true }, "node_modules/tinyglobby": { "version": "0.2.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", "dependencies": { "fdir": "^6.4.2", "picomatch": "^4.0.2" @@ -18342,7 +22221,8 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -18354,7 +22234,8 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { "node": ">=12" }, @@ -18364,15 +22245,17 @@ }, "node_modules/tmp": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.14" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { "is-number": "^7.0.0" }, @@ -18382,31 +22265,36 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } }, "node_modules/toobusy-js": { "version": "0.5.1", - "license": "WTFPL", + "resolved": "https://registry.npmjs.org/toobusy-js/-/toobusy-js-0.5.1.tgz", + "integrity": "sha512-GiCux/c8G2TV0FTDgtxnXOxmSAndaI/9b1YxT14CqyeBDtTZAcJLx9KlXT3qECi8D0XCc78T4sN/7gWtjRyCaA==", "engines": { "node": ">=0.9.1" } }, "node_modules/toposort": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "dev": true }, "node_modules/toposort-class": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, "node_modules/tough-cookie": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -18419,16 +22307,18 @@ }, "node_modules/tough-cookie/node_modules/universalify": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -18438,32 +22328,40 @@ }, "node_modules/traverse": { "version": "0.3.9", - "license": "MIT/X11" + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "engines": { + "node": "*" + } }, "node_modules/treeify": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "engines": { "node": ">=0.6" } }, "node_modules/triple-beam": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", "engines": { "node": ">= 14.0.0" } }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", - "license": "WTFPL", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dependencies": { "utf8-byte-length": "^1.0.1" } }, "node_modules/ts-node": { "version": "10.9.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -18504,7 +22402,8 @@ }, "node_modules/ts-node/node_modules/acorn-walk": { "version": "8.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dependencies": { "acorn": "^8.11.0" }, @@ -18514,8 +22413,9 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/json5": "^0.0.29", @@ -18526,8 +22426,9 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "minimist": "^1.2.0" @@ -18538,8 +22439,9 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -18547,16 +22449,18 @@ }, "node_modules/tslib": { "version": "2.8.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/tsort": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -18566,19 +22470,23 @@ }, "node_modules/tweetnacl": { "version": "1.0.3", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "node_modules/tweetnacl-util": { "version": "0.15.1", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, "node_modules/type": { "version": "2.7.3", - "license": "ISC" + "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", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -18588,15 +22496,17 @@ }, "node_modules/type-detect": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "engines": { "node": ">=10" }, @@ -18606,7 +22516,8 @@ }, "node_modules/type-is": { "version": "1.6.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -18617,8 +22528,9 @@ }, "node_modules/typed-array-buffer": { "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -18631,8 +22543,9 @@ }, "node_modules/typed-array-byte-length": { "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, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -18650,8 +22563,9 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", @@ -18671,8 +22585,9 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", @@ -18691,20 +22606,25 @@ }, "node_modules/typed-function": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", + "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==", + "dev": true, "engines": { "node": ">= 10" } }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { "version": "4.9.5", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -18715,19 +22635,22 @@ }, "node_modules/uint8arrays": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/ultron": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true }, "node_modules/umzug": { "version": "3.8.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-3.8.2.tgz", + "integrity": "sha512-BEWEF8OJjTYVC56GjELeHl/1XjFejrD7aHzn+HldRJTx+pL1siBrKHZC8n4K/xL3bEzVA9o++qD1tK2CpZu4KA==", "dependencies": { "@rushstack/ts-command-line": "^4.12.2", "emittery": "^0.13.0", @@ -18740,8 +22663,9 @@ } }, "node_modules/umzug/node_modules/type-fest": { - "version": "4.30.0", - "license": "(MIT OR CC0-1.0)", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.1.tgz", + "integrity": "sha512-ojFL7eDMX2NF0xMbDwPZJ8sb7ckqtlAi1GsmgsFXvErT9kFTk1r0DuQKvrCh73M6D4nngeHJmvogF9OluXs7Hw==", "engines": { "node": ">=16" }, @@ -18751,8 +22675,9 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -18766,7 +22691,8 @@ }, "node_modules/undici": { "version": "5.28.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -18776,29 +22702,52 @@ }, "node_modules/undici-types": { "version": "6.20.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } }, "node_modules/universalify": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, "node_modules/unordered-array-remove": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", + "integrity": "sha512-45YsfD6svkgaCBNyvD+dFHm4qFX9g3wRSIVgWVPtm2OCnphvPxzJoe20ATsiNpNJrmzHifnxm+BN5F7gFT/4gw==" }, "node_modules/unpipe": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, "node_modules/unzipper": { "version": "0.10.14", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", "dependencies": { "big-integer": "^1.6.17", "binary": "~0.3.0", @@ -18814,11 +22763,13 @@ }, "node_modules/unzipper/node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/unzipper/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -18831,17 +22782,21 @@ }, "node_modules/unzipper/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/unzipper/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/update-browserslist-db": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -18857,7 +22812,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.0" @@ -18871,26 +22825,31 @@ }, "node_modules/upper-case-first": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/uri-js": { "version": "4.4.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uritemplate": { - "version": "0.3.4" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/uritemplate/-/uritemplate-0.3.4.tgz", + "integrity": "sha512-enADBvHfhjrwxFMTVWeIIYz51SZ91uC6o2MR/NQTVljJB6HTZ8eQL3Q7JBj3RxNISA14MOwJaU3vpf5R6dyxHA==" }, "node_modules/url-parse": { "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -18898,13 +22857,15 @@ }, "node_modules/url-set-query": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", + "dev": true }, "node_modules/ursa-optional": { "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", + "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", "hasInstallScript": true, - "license": "Apache-2.0", "dependencies": { "bindings": "^1.5.0", "nan": "^2.14.2" @@ -18915,8 +22876,9 @@ }, "node_modules/utf-8-validate": { "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -18926,16 +22888,19 @@ }, "node_modules/utf8": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, "node_modules/utf8-byte-length": { "version": "1.0.5", - "license": "(WTFPL OR MIT)" + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==" }, "node_modules/util": { "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -18946,57 +22911,67 @@ }, "node_modules/util-arity": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", + "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==", + "dev": true }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "node_modules/validate-iri": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz", + "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==" }, "node_modules/validator": { "version": "13.12.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", "engines": { "node": ">= 0.10" } }, "node_modules/varint": { "version": "6.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" }, "node_modules/vary": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, "node_modules/verror": { "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -19008,16 +22983,19 @@ }, "node_modules/w3c-hr-time": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, - "license": "MIT", "dependencies": { "browser-process-hrtime": "^1.0.0" } }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, - "license": "MIT", "dependencies": { "xml-name-validator": "^3.0.0" }, @@ -19027,20 +23005,23 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "engines": { "node": ">= 8" } }, "node_modules/web-streams-ponyfill": { "version": "1.4.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", + "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==" }, "node_modules/web3": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.4.tgz", + "integrity": "sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==", "dev": true, "hasInstallScript": true, - "license": "LGPL-3.0", "dependencies": { "web3-bzz": "1.10.4", "web3-core": "1.10.4", @@ -19056,9 +23037,10 @@ }, "node_modules/web3-bzz": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.4.tgz", + "integrity": "sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==", "dev": true, "hasInstallScript": true, - "license": "LGPL-3.0", "dependencies": { "@types/node": "^12.12.6", "got": "12.1.0", @@ -19070,13 +23052,15 @@ }, "node_modules/web3-bzz/node_modules/@types/node": { "version": "12.20.55", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true }, "node_modules/web3-core": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz", + "integrity": "sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", @@ -19092,8 +23076,9 @@ }, "node_modules/web3-core-helpers": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz", + "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "web3-eth-iban": "1.10.4", "web3-utils": "1.10.4" @@ -19104,8 +23089,9 @@ }, "node_modules/web3-core-method": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz", + "integrity": "sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "@ethersproject/transactions": "^5.6.2", "web3-core-helpers": "1.10.4", @@ -19119,8 +23105,9 @@ }, "node_modules/web3-core-promievent": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz", + "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4" }, @@ -19130,13 +23117,15 @@ }, "node_modules/web3-core-promievent/node_modules/eventemitter3": { "version": "4.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true }, "node_modules/web3-core-requestmanager": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz", + "integrity": "sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "util": "^0.12.5", "web3-core-helpers": "1.10.4", @@ -19150,8 +23139,9 @@ }, "node_modules/web3-core-subscriptions": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz", + "integrity": "sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.10.4" @@ -19162,18 +23152,21 @@ }, "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { "version": "4.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true }, "node_modules/web3-core/node_modules/@types/node": { "version": "12.20.55", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true }, "node_modules/web3-eth": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.4.tgz", + "integrity": "sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.4", "web3-core-helpers": "1.10.4", @@ -19194,8 +23187,9 @@ }, "node_modules/web3-eth-abi": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz", + "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "@ethersproject/abi": "^5.6.3", "web3-utils": "1.10.4" @@ -19206,8 +23200,9 @@ }, "node_modules/web3-eth-accounts": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz", + "integrity": "sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "@ethereumjs/common": "2.6.5", "@ethereumjs/tx": "3.5.2", @@ -19226,13 +23221,15 @@ }, "node_modules/web3-eth-accounts/node_modules/bn.js": { "version": "4.12.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true }, "node_modules/web3-eth-accounts/node_modules/eth-lib": { "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", @@ -19241,20 +23238,22 @@ }, "node_modules/web3-eth-accounts/node_modules/uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/web3-eth-contract": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz", + "integrity": "sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "@types/bn.js": "^5.1.1", "web3-core": "1.10.4", @@ -19271,8 +23270,9 @@ }, "node_modules/web3-eth-ens": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz", + "integrity": "sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", @@ -19289,8 +23289,9 @@ }, "node_modules/web3-eth-iban": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz", + "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "bn.js": "^5.2.1", "web3-utils": "1.10.4" @@ -19301,8 +23302,9 @@ }, "node_modules/web3-eth-personal": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz", + "integrity": "sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "@types/node": "^12.12.6", "web3-core": "1.10.4", @@ -19317,13 +23319,15 @@ }, "node_modules/web3-eth-personal/node_modules/@types/node": { "version": "12.20.55", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true }, "node_modules/web3-net": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.4.tgz", + "integrity": "sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.4", "web3-core-method": "1.10.4", @@ -19335,8 +23339,9 @@ }, "node_modules/web3-providers-http": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz", + "integrity": "sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "abortcontroller-polyfill": "^1.7.5", "cross-fetch": "^4.0.0", @@ -19349,8 +23354,9 @@ }, "node_modules/web3-providers-ipc": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz", + "integrity": "sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "oboe": "2.1.5", "web3-core-helpers": "1.10.4" @@ -19361,8 +23367,9 @@ }, "node_modules/web3-providers-ws": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz", + "integrity": "sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==", "dev": true, - "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.10.4", @@ -19374,14 +23381,16 @@ }, "node_modules/web3-providers-ws/node_modules/eventemitter3": { "version": "4.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true }, "node_modules/web3-shh": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.4.tgz", + "integrity": "sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==", "dev": true, "hasInstallScript": true, - "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.4", "web3-core-method": "1.10.4", @@ -19394,7 +23403,8 @@ }, "node_modules/web3-utils": { "version": "1.10.4", - "license": "LGPL-3.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", "dependencies": { "@ethereumjs/util": "^8.1.0", "bn.js": "^5.2.1", @@ -19411,7 +23421,8 @@ }, "node_modules/web3-utils/node_modules/@noble/hashes": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { "node": ">= 16" }, @@ -19421,14 +23432,16 @@ }, "node_modules/web3-utils/node_modules/@scure/base": { "version": "1.1.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/web3-utils/node_modules/@scure/bip32": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -19440,7 +23453,8 @@ }, "node_modules/web3-utils/node_modules/@scure/bip39": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -19451,7 +23465,8 @@ }, "node_modules/web3-utils/node_modules/ethereum-cryptography": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -19461,15 +23476,17 @@ }, "node_modules/webidl-conversions": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=10.4" } }, "node_modules/websocket": { "version": "1.0.35", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -19484,27 +23501,31 @@ }, "node_modules/websocket/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/websocket/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/whatwg-encoding": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "0.4.24" } }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -19514,13 +23535,15 @@ }, "node_modules/whatwg-mimetype": { "version": "2.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true }, "node_modules/whatwg-url": { "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", @@ -19532,7 +23555,8 @@ }, "node_modules/wherearewe": { "version": "1.0.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-1.0.2.tgz", + "integrity": "sha512-HyLZ7n1Yox+w1qWaFEgP/sMs5D7ka2UXmoVNaY0XzbEHLGljo4ScBchYm6cWRYNO33tmFX3Mgg4BiZkDOjihyw==", "dependencies": { "is-electron": "^2.2.0" }, @@ -19543,7 +23567,8 @@ }, "node_modules/which": { "version": "2.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, @@ -19556,8 +23581,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz", + "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-bigint": "^1.1.0", @@ -19574,24 +23600,25 @@ } }, "node_modules/which-builtin-type": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -19602,8 +23629,9 @@ }, "node_modules/which-collection": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-map": "^2.0.3", @@ -19620,13 +23648,15 @@ }, "node_modules/which-module": { "version": "2.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true }, "node_modules/which-typed-array": { "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -19641,9 +23671,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/widest-line": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { "string-width": "^4.0.0" }, @@ -19653,7 +23693,8 @@ }, "node_modules/winston": { "version": "3.17.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", @@ -19673,7 +23714,8 @@ }, "node_modules/winston-transport": { "version": "4.9.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", "dependencies": { "logform": "^2.7.0", "readable-stream": "^3.6.2", @@ -19685,7 +23727,8 @@ }, "node_modules/winston-transport/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -19697,14 +23740,16 @@ }, "node_modules/winston/node_modules/@colors/colors": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "engines": { "node": ">=0.1.90" } }, "node_modules/winston/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -19716,25 +23761,29 @@ }, "node_modules/wkx": { "version": "0.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", "dependencies": { "@types/node": "*" } }, "node_modules/word-wrap": { "version": "1.2.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "engines": { "node": ">=0.10.0" } }, "node_modules/workerpool": { "version": "6.5.1", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -19749,12 +23798,14 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -19764,7 +23815,8 @@ }, "node_modules/ws": { "version": "8.18.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "engines": { "node": ">=10.0.0" }, @@ -19783,8 +23835,9 @@ }, "node_modules/xhr": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "dev": true, - "license": "MIT", "dependencies": { "global": "~4.4.0", "is-function": "^1.0.1", @@ -19794,8 +23847,9 @@ }, "node_modules/xhr-request": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-to-arraybuffer": "^0.0.5", "object-assign": "^4.1.1", @@ -19808,16 +23862,18 @@ }, "node_modules/xhr-request-promise": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", "dev": true, - "license": "MIT", "dependencies": { "xhr-request": "^1.1.0" } }, "node_modules/xhr-request/node_modules/decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, - "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -19827,16 +23883,18 @@ }, "node_modules/xhr-request/node_modules/mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/xhr-request/node_modules/simple-get": { "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", "dev": true, - "license": "MIT", "dependencies": { "decompress-response": "^3.3.0", "once": "^1.3.1", @@ -19845,12 +23903,14 @@ }, "node_modules/xml-name-validator": { "version": "3.0.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true }, "node_modules/xml2js": { "version": "0.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -19861,65 +23921,75 @@ }, "node_modules/xml2js/node_modules/xmlbuilder": { "version": "11.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "engines": { "node": ">=4.0" } }, "node_modules/xmlbuilder": { "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0" } }, "node_modules/xmlchars": { "version": "2.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "node_modules/xsalsa20": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", + "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "license": "ISC", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" } }, "node_modules/yaeti": { "version": "0.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", "engines": { "node": ">=0.10.32" } }, "node_modules/yallist": { "version": "3.1.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/yargs": { "version": "17.7.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -19935,14 +24005,16 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -19955,7 +24027,8 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "engines": { "node": ">=10" }, @@ -19965,21 +24038,24 @@ }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "engines": { "node": ">=12" } }, "node_modules/yn": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "engines": { "node": ">=10" }, @@ -19989,8 +24065,9 @@ }, "node_modules/yup": { "version": "0.32.11", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", + "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.15.4", "@types/lodash": "^4.14.175", @@ -20004,9 +24081,26 @@ "node": ">=10" } }, + "node_modules/zksync-ethers": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.10.0.tgz", + "integrity": "sha512-OAjTGAHF9wbdkRGkj7XZuF/a1Sk/FVbwH4pmLjAKlR7mJ7sQtQhBhrPU2dCc67xLaNvEESPfwil19ES5wooYFg==", + "dependencies": { + "ethers": "~5.7.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "ethers": "~5.7.0" + } + }, "node_modules/zksync-web3": { "version": "0.14.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", + "dev": true, "peerDependencies": { "ethers": "^5.7.0" } @@ -20015,10 +24109,13 @@ "dependencies": { "@adraffy/ens-normalize": { "version": "1.10.1", - "dev": true + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" }, "@ampproject/remapping": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.5", @@ -20027,6 +24124,8 @@ }, "@babel/code-frame": { "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.25.9", @@ -20036,10 +24135,14 @@ }, "@babel/compat-data": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true }, "@babel/core": { "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", @@ -20061,16 +24164,22 @@ "dependencies": { "convert-source-map": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/generator": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dev": true, "requires": { "@babel/parser": "^7.26.3", @@ -20082,6 +24191,8 @@ }, "@babel/helper-compilation-targets": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, "requires": { "@babel/compat-data": "^7.25.9", @@ -20093,6 +24204,8 @@ "dependencies": { "lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { "yallist": "^3.0.2" @@ -20100,12 +24213,16 @@ }, "semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/helper-module-imports": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, "requires": { "@babel/traverse": "^7.25.9", @@ -20114,6 +24231,8 @@ }, "@babel/helper-module-transforms": { "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.25.9", @@ -20123,18 +24242,26 @@ }, "@babel/helper-string-parser": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true }, "@babel/helper-validator-identifier": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true }, "@babel/helper-validator-option": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true }, "@babel/helpers": { "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, "requires": { "@babel/template": "^7.25.9", @@ -20143,6 +24270,8 @@ }, "@babel/parser": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, "requires": { "@babel/types": "^7.26.3" @@ -20150,12 +24279,16 @@ }, "@babel/runtime": { "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "requires": { "regenerator-runtime": "^0.14.0" } }, "@babel/template": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, "requires": { "@babel/code-frame": "^7.25.9", @@ -20165,6 +24298,8 @@ }, "@babel/traverse": { "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dev": true, "requires": { "@babel/code-frame": "^7.26.2", @@ -20178,12 +24313,16 @@ "dependencies": { "globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true } } }, "@babel/types": { "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.25.9", @@ -20192,17 +24331,23 @@ }, "@bergos/jsonparse": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@bergos/jsonparse/-/jsonparse-1.4.2.tgz", + "integrity": "sha512-qUt0QNJjvg4s1zk+AuLM6s/zcsQ8MvGn7+1f0vPuxvpCYa08YtTryuDInngbEyW5fNGGYe2znKt61RMGd5HnXg==", "requires": { "buffer": "^6.0.3" } }, "@colors/colors": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, "optional": true }, "@comunica/actor-abstract-mediatyped": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-2.10.0.tgz", + "integrity": "sha512-0o6WBujsMnIVcwvRJv6Nj+kKPLZzqBS3On48rm01Rh9T1/My0E/buJMXwgcARKCfMonc2mJ9zxpPCh5ilGEU2A==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -20210,6 +24355,8 @@ }, "@comunica/actor-abstract-parse": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-2.10.0.tgz", + "integrity": "sha512-0puCWF+y24EDOOAUUVVbC+tOf4UV+LzEbqi8T5v25jcVGCXyTqfra+bDywfrcv3adrVp18jLCJ46ycaH5xhy9Q==", "requires": { "@comunica/core": "^2.10.0", "readable-stream": "^4.4.2" @@ -20217,6 +24364,8 @@ }, "@comunica/actor-abstract-path": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-path/-/actor-abstract-path-2.10.1.tgz", + "integrity": "sha512-+k1ltuUuIyn4iUm5oRMObyt2zhu68h7ymzxuKU4ezATlgwfwj6EM7/3W2n2/gxjg9tcFMr5GC6aNnFQmq3Iuig==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20232,6 +24381,8 @@ }, "@comunica/actor-context-preprocess-source-to-destination": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-source-to-destination/-/actor-context-preprocess-source-to-destination-2.10.0.tgz", + "integrity": "sha512-sQc42Sd4cuVumZ9+PDnWBTBYneqCFShFliK8Et83GR3wBGzu9x0tS/M2o3e63sBbb6ZkWHyO5jl/O8AbrjhcTg==", "requires": { "@comunica/bus-context-preprocess": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -20241,6 +24392,8 @@ }, "@comunica/actor-dereference-fallback": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-2.10.0.tgz", + "integrity": "sha512-RSc/ScPdC7l13aZjz/6r4niWA8WDETbzuESQKKSWXi/HAlFOyOxdrDADdayVY2oyeZHIQibeNRtSi2ItzU7OPQ==", "requires": { "@comunica/bus-dereference": "^2.10.0", "@comunica/core": "^2.10.0" @@ -20248,6 +24401,8 @@ }, "@comunica/actor-dereference-http": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-2.10.2.tgz", + "integrity": "sha512-gdDo83W1TAgD2jx0kVbzZKzzt++L4Y4fbyTOH3duy6vx1EMGGZlNCp6I1uguepKEjNX4N0zhAcZzdJcv8A3XMA==", "requires": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-http": "^2.10.2", @@ -20259,6 +24414,8 @@ }, "@comunica/actor-dereference-rdf-parse": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-2.10.0.tgz", + "integrity": "sha512-ANWL6Bv+2WHUjVRS7hfkOfVBNJs8xYZ9KHlgBOQ94CKtQZB9uSMjdb1hLp/cQjiDmFIWLn0+GM5Xi0KFwBkVAw==", "requires": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-dereference-rdf": "^2.10.0", @@ -20267,6 +24424,8 @@ }, "@comunica/actor-hash-bindings-sha1": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-hash-bindings-sha1/-/actor-hash-bindings-sha1-2.10.0.tgz", + "integrity": "sha512-f981PcCiDWbdZfM1ct1v1q/VII14y18lo1enEdHB25SF0hCkzIDwh9IrfDfJDju5I6luSWNE/MYMMeAAmF9e3g==", "requires": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/core": "^2.10.0", @@ -20277,6 +24436,8 @@ }, "@comunica/actor-http-fetch": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-2.10.2.tgz", + "integrity": "sha512-siHGx0TMVNb2gXvOroq0B3JE6uuS+4s+MsDkntqdBNVigwVYqLpNSKEaL5is8pputFfohJfDQY06lAHbfDNEcw==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -20287,6 +24448,8 @@ }, "@comunica/actor-http-proxy": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-2.10.2.tgz", + "integrity": "sha512-3yUF8BCh4nwq8J6NRILEsyNrQNStkE9ggJ7hYwRfA1XcMgz1pANNaWJ2P2TEKH1jNinr23bL3JeuUZCm9Kz9dA==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -20296,6 +24459,8 @@ }, "@comunica/actor-http-wayback": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-http-wayback/-/actor-http-wayback-2.10.2.tgz", + "integrity": "sha512-wjYNXRrJvMqt9paO3HawyM+O5/14ofSHFuMAwGr/UyZQ5pCSFkY0YPd+qp9y8C4xvypPgsvT3PtiRyKgjD4FWw==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -20306,6 +24471,8 @@ }, "@comunica/actor-init-query": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-init-query/-/actor-init-query-2.10.2.tgz", + "integrity": "sha512-7A4bXdKCjXRdUThvMOOyg+U17DPeBAsyDYz1SA8F4lPUR06NapcG5TmZF+YWUTN/2EG5fZPUnD3etKuPXreGUw==", "requires": { "@comunica/actor-http-proxy": "^2.10.2", "@comunica/bus-context-preprocess": "^2.10.0", @@ -20334,6 +24501,8 @@ }, "@comunica/actor-optimize-query-operation-bgp-to-join": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-bgp-to-join/-/actor-optimize-query-operation-bgp-to-join-2.10.0.tgz", + "integrity": "sha512-M9vwM4a3VQA/ir8Q7eGRNzzx52u6RJFIXBW8p+Zkn+zv+4fsket3zLYJGhJU7dcvaSXcOi68rDP/r8KfgNXr4Q==", "requires": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -20342,6 +24511,8 @@ }, "@comunica/actor-optimize-query-operation-join-bgp": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-bgp/-/actor-optimize-query-operation-join-bgp-2.10.0.tgz", + "integrity": "sha512-tzZojWPbWn/S0DZGjGfV90ZRJVWT/yX3DKGgZ1ur33U5TW8n/fBQxHNMPCLu0GkMQ1dyx6bU+ekILTqm+21Jyw==", "requires": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -20350,6 +24521,8 @@ }, "@comunica/actor-optimize-query-operation-join-connected": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-connected/-/actor-optimize-query-operation-join-connected-2.10.0.tgz", + "integrity": "sha512-RsbKIAxX1HyoR/AUzqIV++dTcLiEElRIVDHYTaXVVvGgHECYdh9s+oc8cvv/lDbLVpfnc6P9C9BTAfrqOjKkhA==", "requires": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -20358,6 +24531,8 @@ }, "@comunica/actor-query-operation-ask": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-ask/-/actor-query-operation-ask-2.10.1.tgz", + "integrity": "sha512-7oktqE4fkMhi6Hs9XCcwwoZRsEismVqJZ5wp9lXXOPaxnHEiFyj5gb/B6baCstoCvCt6LcU8fVvfHSitbFCpeQ==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20367,6 +24542,8 @@ }, "@comunica/actor-query-operation-bgp-join": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-bgp-join/-/actor-query-operation-bgp-join-2.10.1.tgz", + "integrity": "sha512-eNpnvgFyKlZEHkMzubYL8ndADSsAQH4rwXvh22CGnf0FwyndHr6TEpmE6j77m9vXiSJ/lda0U3Zv4vIXvtREOw==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20376,6 +24553,8 @@ }, "@comunica/actor-query-operation-construct": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-construct/-/actor-query-operation-construct-2.10.1.tgz", + "integrity": "sha512-S+Nt1+1psv01QRnfytZjiog2NBNHIbjr7XIv+MO3p6aVmLCoZ6lmjxSGNdbX+EmcGr7tbbafXK5z3zRM+ke8Mw==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20389,6 +24568,8 @@ }, "@comunica/actor-query-operation-describe-subject": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-describe-subject/-/actor-query-operation-describe-subject-2.10.1.tgz", + "integrity": "sha512-E8i0M6haJ5iZVeHMn5PbvA4G+l87mcZKqIxVpYAnJVpD667F74Dkx3IMbk+ohRmyRmnkOEmztUrjeyixHHzUEQ==", "requires": { "@comunica/actor-query-operation-union": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20401,6 +24582,8 @@ }, "@comunica/actor-query-operation-distinct-hash": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-distinct-hash/-/actor-query-operation-distinct-hash-2.10.1.tgz", + "integrity": "sha512-exvJbgcJ0Pe4EGbLJD5LuGpvaGcFeckCxwB5pyd9OewNke+tLLP7nbEjB8KFEPpCO9LE7zt4faB1HvpJdEHQKQ==", "requires": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/bus-query-operation": "^2.10.1", @@ -20411,6 +24594,8 @@ }, "@comunica/actor-query-operation-extend": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-extend/-/actor-query-operation-extend-2.10.1.tgz", + "integrity": "sha512-wkZxUfDu8T5lXD+OFLItmjjbnEBqtv0z8pxVKgI/gX8mOeu5KcPWLH0dJODTWoIzIYrJhV25FmCgBks1rt6K8w==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20422,6 +24607,8 @@ }, "@comunica/actor-query-operation-filter-sparqlee": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-filter-sparqlee/-/actor-query-operation-filter-sparqlee-2.10.1.tgz", + "integrity": "sha512-w2PnDNnlf+9B947ZdeSs7NpW9qGJjRiuODZYwhh0e6cx89GPDhEDVuJwawF6VP3m/oLcgXOAdif0Wwo3d8KNAA==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20433,6 +24620,8 @@ }, "@comunica/actor-query-operation-from-quad": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-from-quad/-/actor-query-operation-from-quad-2.10.1.tgz", + "integrity": "sha512-7D4R8ONNJJPzoRu96dwIToOEk6/3O/T26FRzCqQKrbjFHNkX2v92KA/SiDzNz59VmDNWjYF1rsV31Ade6J89MA==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20443,6 +24632,8 @@ }, "@comunica/actor-query-operation-group": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-group/-/actor-query-operation-group-2.10.1.tgz", + "integrity": "sha512-Od5s9Vb6uDPzXa6OAUC1WSMF96spNPJI2Zqf0Ixejw4zCNevOK/VwHivYfF0vHIUZxjRrOl3Al1ZU9L8n5Wxlw==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-hash-bindings": "^2.10.0", @@ -20458,6 +24649,8 @@ }, "@comunica/actor-query-operation-join": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-join/-/actor-query-operation-join-2.10.1.tgz", + "integrity": "sha512-CGed1nSPvKsM8rvj/4KFME0lLnzlDMMEU+xGczu+BZW4FK+Z6RyBtHIUmy8SgFvNP1GXz83q8KnoecF5z8IpjA==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -20468,6 +24661,8 @@ }, "@comunica/actor-query-operation-leftjoin": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-leftjoin/-/actor-query-operation-leftjoin-2.10.1.tgz", + "integrity": "sha512-j0RwdoiV2WsCQnxcSa//m5FZ+ZHDRBm6ObsgpqS44WxzpV8rIB6Dq/3UxGgE7D2vK400JaiiHa3dFiHTwDF18w==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -20479,6 +24674,8 @@ }, "@comunica/actor-query-operation-minus": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-minus/-/actor-query-operation-minus-2.10.1.tgz", + "integrity": "sha512-rUvHbc5/EUWMSJUgOEtxabCJ9IT9YThuG0FhcQk+BGRPGmsv2oz8uri5urKgCjfVXMH/09hRZksiDMqrmkQmZw==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -20489,6 +24686,8 @@ }, "@comunica/actor-query-operation-nop": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-nop/-/actor-query-operation-nop-2.10.1.tgz", + "integrity": "sha512-l/Z8Uuoq3AlSoxkgYjrP7O7Xc9h8Y3ZOh0f7UKCuAST3U5vPQ3k1YJckrRtdli8s0NHptN9TfZjwviEHuYbDFQ==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20501,6 +24700,8 @@ }, "@comunica/actor-query-operation-orderby-sparqlee": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-orderby-sparqlee/-/actor-query-operation-orderby-sparqlee-2.10.1.tgz", + "integrity": "sha512-8D2JmCsBtqJC29zfiaAXNzZdsKybhDFo2F8iTHul3nQHxBC2CeKDrBnY70B/HpbWxkDE+pwMfSTEFc/CvNZN6A==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20512,6 +24713,8 @@ }, "@comunica/actor-query-operation-path-alt": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-alt/-/actor-query-operation-path-alt-2.10.1.tgz", + "integrity": "sha512-y1AHtkibThqHve79wAriXqrZ6hdLBhcdwyOpVqqEhY19a32P97Xv58bOwOkNeLguYdn/5CFlCTHz6dnzxUIoXg==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/actor-query-operation-union": "^2.10.1", @@ -20523,6 +24726,8 @@ }, "@comunica/actor-query-operation-path-inv": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-inv/-/actor-query-operation-path-inv-2.10.1.tgz", + "integrity": "sha512-pd30Ug7bOAZ5amfA3I6v+cpitlDn2i5fE1BA006LYJISCAHSfKEgLmU2Q4ZPbwi4s1A8WKKLV7Q389Ru3Xtziw==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20532,6 +24737,8 @@ }, "@comunica/actor-query-operation-path-link": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-link/-/actor-query-operation-path-link-2.10.1.tgz", + "integrity": "sha512-akujCHvCLmxaZ3gw9b1odDcqqAQnbbr9E8dTWLZyMJ4Mei8q/FmfWTF5MjGuQOas4UmQ3mm6gcqAKRZnJqlXNg==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20541,6 +24748,8 @@ }, "@comunica/actor-query-operation-path-nps": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-nps/-/actor-query-operation-path-nps-2.10.1.tgz", + "integrity": "sha512-5X3EUzn6Cygz94gNn1XWQQUZVp+de59sw8/rxPQqgwzdi1Y1O9zrLv+/7GqMJoLz6MHmDSgsceTIY4eC1qmmOQ==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20550,6 +24759,8 @@ }, "@comunica/actor-query-operation-path-one-or-more": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-one-or-more/-/actor-query-operation-path-one-or-more-2.10.1.tgz", + "integrity": "sha512-SkQeKESQqZOlzuMIsipcZ3ni7YfeyYMZCOtxC01HFbeyq+SDVbyfYUZ4Dd9uAi/g3InyzJRfou4csxHS8g7sHw==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -20561,6 +24772,8 @@ }, "@comunica/actor-query-operation-path-seq": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-seq/-/actor-query-operation-path-seq-2.10.1.tgz", + "integrity": "sha512-8TYLdVYaq9oMd9cuLFay78103bOfvygQU/C8NtPdLI9kkRWFsBatvaKmykHOHQAvaLgNhniOlrIJNEpepZGnAQ==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20571,6 +24784,8 @@ }, "@comunica/actor-query-operation-path-zero-or-more": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-more/-/actor-query-operation-path-zero-or-more-2.10.1.tgz", + "integrity": "sha512-DtqBSw4LV1KI3q1YYAwgXlWrz1PO4EUpe/bVri0UB3JSQnxjBMHuJlHn2crC9Z93tmizneXxfvtWlLSXRrehsw==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -20583,6 +24798,8 @@ }, "@comunica/actor-query-operation-path-zero-or-one": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-one/-/actor-query-operation-path-zero-or-one-2.10.1.tgz", + "integrity": "sha512-qePX+7iW5DXDwaYO210y7jhSU32Zk82S5UHuLLvd4q4HS1Z7j8e4KhukbeZKzQmOsO8S5JOHHM9vwvsOc3GPlw==", "requires": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -20595,6 +24812,8 @@ }, "@comunica/actor-query-operation-project": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-project/-/actor-query-operation-project-2.10.1.tgz", + "integrity": "sha512-KAaPl4GFIQMWR8I8OoJroktGssPKGbEEJHyGzTuYXrmJrcXgknOxf5IUSVJNpaFfS6dshT6nqW+ciT+wRzz0Tg==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20607,6 +24826,8 @@ }, "@comunica/actor-query-operation-quadpattern": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-quadpattern/-/actor-query-operation-quadpattern-2.10.1.tgz", + "integrity": "sha512-RZj1TXW+VDU4aYJVnSzgs8q0340e+YUeGLtoY9sl0Xzc8YNaIus4nXRUz/KfOXDknxm1q+a4Bof4yHNgXtb1Hw==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20624,6 +24845,8 @@ }, "@comunica/actor-query-operation-reduced-hash": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-reduced-hash/-/actor-query-operation-reduced-hash-2.10.1.tgz", + "integrity": "sha512-9hX25ztkbNxnaUd7Gtilok+9WJkr/s3a3y4axLoYX4/nOogYN+nZRKChvNSn4qn/lWvpG5VWv4+q0en1fP+AGA==", "requires": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/bus-query-operation": "^2.10.1", @@ -20635,6 +24858,8 @@ }, "@comunica/actor-query-operation-service": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-service/-/actor-query-operation-service-2.10.1.tgz", + "integrity": "sha512-GvpvhUmhkVFOCLrmcblgIPqi91XPRog5WkC9NFMRCToaSNAMQq82DX2dvwzn3IFItcmyZrmy+GYoaQ9miK2uVQ==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20648,6 +24873,8 @@ }, "@comunica/actor-query-operation-slice": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-slice/-/actor-query-operation-slice-2.10.1.tgz", + "integrity": "sha512-KOBnTIUvwf28WB7oHevUC/xciEdH5gLg7MN8DvamkAkUiUjviEsRpkswUiD8lFe1dAs0ekA4pC0NoZ8BWp3uqA==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -20658,6 +24885,8 @@ }, "@comunica/actor-query-operation-sparql-endpoint": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-sparql-endpoint/-/actor-query-operation-sparql-endpoint-2.10.2.tgz", + "integrity": "sha512-nbBzVHhYHUu/9qg9ZzTw7rKvsRb3ViBvM+Fye0oMXojZUbyu2WI6eLFUc2Ze1/LYDNf/1KHNpkg6OdsiEi8HFQ==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -20678,6 +24907,8 @@ }, "@comunica/actor-query-operation-union": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-union/-/actor-query-operation-union-2.10.1.tgz", + "integrity": "sha512-Ezi2bAa9r6yyffXDDUPLlKoszsXnuhDUeQSQuU3c7JEAcwip3wC3zMNkavowwfRZ/1D5doitmUEdw2lAd+xloA==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20691,6 +24922,8 @@ }, "@comunica/actor-query-operation-update-add-rewrite": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-add-rewrite/-/actor-query-operation-update-add-rewrite-2.10.1.tgz", + "integrity": "sha512-is3mrCPciExrlny5JbCvB011kUNYE9/fzQc/zmA3h24S5hHZbygA9mSS+dI85IwwqdKPYlrEqfn8c0kCVWMKyw==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20701,6 +24934,8 @@ }, "@comunica/actor-query-operation-update-clear": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-clear/-/actor-query-operation-update-clear-2.10.2.tgz", + "integrity": "sha512-+sf6+LvXdKBv2pCuBH/ad5QdpheZSPEvw19UoaPQRQyQVBzIskOtfs4rwJHSn/YmoqhbstKZszakad3oxWwTTg==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -20713,6 +24948,8 @@ }, "@comunica/actor-query-operation-update-compositeupdate": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-compositeupdate/-/actor-query-operation-update-compositeupdate-2.10.1.tgz", + "integrity": "sha512-IVNouBPFQLOczhW3qHyEoyxWrc7wnVT2vPwRHEaGlfnSiYAX42XSNLb9jR0XjB70wh3Civue4Ovs3upOXdrN3Q==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20722,6 +24959,8 @@ }, "@comunica/actor-query-operation-update-copy-rewrite": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-copy-rewrite/-/actor-query-operation-update-copy-rewrite-2.10.1.tgz", + "integrity": "sha512-l/3AM35hjahyHmiLoB3FPm0Jlhdmd/vqgOGj7V3Ra+TfHo5h8XOB3uzG78Q06HQNw4iyONBZc5lLlYXkzRd5lg==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20731,6 +24970,8 @@ }, "@comunica/actor-query-operation-update-create": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-create/-/actor-query-operation-update-create-2.10.2.tgz", + "integrity": "sha512-g3DwLkYFTU8uZoIOV7oNPWStBmqvnBBPvLngG19MQQezuVoh8w88efxhbN0B/khi5/v4qcLsr7C0ffAaPF8Fbg==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -20741,6 +24982,8 @@ }, "@comunica/actor-query-operation-update-deleteinsert": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-deleteinsert/-/actor-query-operation-update-deleteinsert-2.10.2.tgz", + "integrity": "sha512-FiRCLUAxkDoFpOe9jKC5llI7njbFdb1N8McRvZjBazUS4XDutjTZEkcKLs6AcRyG3esfHt6gNm6PqCuZ+aP8TA==", "requires": { "@comunica/actor-query-operation-construct": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -20755,6 +24998,8 @@ }, "@comunica/actor-query-operation-update-drop": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-drop/-/actor-query-operation-update-drop-2.10.2.tgz", + "integrity": "sha512-N/878InwoyQfysjCyo9r+H82eUlNeEGODJ95gCvzF/QGRc11N3dfcd3XijyHQ9OKAoQ9oR5gcS829LB3BDtKHg==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -20767,6 +25012,8 @@ }, "@comunica/actor-query-operation-update-load": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-load/-/actor-query-operation-update-load-2.10.2.tgz", + "integrity": "sha512-lQb5fxb1+ZFbQkylmepze+e+LtVmVNvAvFBvjxUSfCT62uIKKHMeh1So5kTrGD0Co4ABCs1h6o9WB+8yQzFtQw==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -20779,6 +25026,8 @@ }, "@comunica/actor-query-operation-update-move-rewrite": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-move-rewrite/-/actor-query-operation-update-move-rewrite-2.10.1.tgz", + "integrity": "sha512-GDLSHG2++EAAyUKhDu+mM6QfMTuzM8dS24HqeQL5Wzbkdc2KTmNKyJuhJw6SfXr6EiF/kxf1GPY6zwjcwACx/w==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -20788,6 +25037,8 @@ }, "@comunica/actor-query-operation-values": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-values/-/actor-query-operation-values-2.10.1.tgz", + "integrity": "sha512-++9IgCVCQPIF8fzZLmrVpxPj8eI9TvkLshHAugQQBnhSijrDMUudW9eoA+eFmCaD/Ru7YtlKe3OJzRGV8FCG+Q==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -20801,6 +25052,8 @@ }, "@comunica/actor-query-parse-graphql": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-graphql/-/actor-query-parse-graphql-2.10.0.tgz", + "integrity": "sha512-l3RrkxElDYV4weXt3vpC0Q0She4AhbvPbPDronQulgN9nFAZhz4z9k8800T5uWMsL98wHNNXDFlnFk5S38lsow==", "requires": { "@comunica/bus-query-parse": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -20810,6 +25063,8 @@ }, "@comunica/actor-query-parse-sparql": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-sparql/-/actor-query-parse-sparql-2.10.0.tgz", + "integrity": "sha512-DUVAuSSNn0AyvLruOpRpLZBsr96Q4LuV1gcO+alKZALtfOZikRKY/3sXz1NUkaRQc7qDH9xFFTFrfJd0jLvlDA==", "requires": { "@comunica/bus-query-parse": "^2.10.0", "@comunica/core": "^2.10.0", @@ -20820,6 +25075,8 @@ }, "@comunica/actor-query-result-serialize-json": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-json/-/actor-query-result-serialize-json-2.10.0.tgz", + "integrity": "sha512-GuVcsOEhKgnVPT0AaCn8sJl/Uj5UUjUktEJpuMx1UAYt0//jcQsezJslYWmJrfXE/WJYidynyDxm8z3+jwLF7A==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -20829,6 +25086,8 @@ }, "@comunica/actor-query-result-serialize-rdf": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-rdf/-/actor-query-result-serialize-rdf-2.10.0.tgz", + "integrity": "sha512-TBXJrDs5brRMFg8UisXS/F1vJw8nUtLhjugNZcd4ST8J965Ho1aNopydp4PMmwINMRxHhHtWJGwIB2Z5xD2lDw==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/bus-rdf-serialize": "^2.10.0", @@ -20838,6 +25097,8 @@ }, "@comunica/actor-query-result-serialize-simple": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-simple/-/actor-query-result-serialize-simple-2.10.0.tgz", + "integrity": "sha512-pS7+aB9Rym1B5oi+O68NFjEq+EwpCRYtTIxGBp39CTQ0F7m4edt9QwqmARqveJPryK5X66ACvjxvutEaTgWI8w==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -20848,6 +25109,8 @@ }, "@comunica/actor-query-result-serialize-sparql-csv": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-csv/-/actor-query-result-serialize-sparql-csv-2.10.0.tgz", + "integrity": "sha512-Vk+7oTIPigDENK3CnV56vLfvMZVjHc3p2F4a49WDHfMgRrfQKJSQkx603vjW35n3tmUB8JSgRXr/+v7LK83KYQ==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -20857,6 +25120,8 @@ }, "@comunica/actor-query-result-serialize-sparql-json": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-json/-/actor-query-result-serialize-sparql-json-2.10.2.tgz", + "integrity": "sha512-+J7SWXc4nXHzmQMk6q8MScrLNKdqX+/xQe6XCk0zDbDAt3/8EJh/2ROYFp4fEQyPDFWOwN4xpALgHRIh8PQRAQ==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-http-invalidate": "^2.10.0", @@ -20869,6 +25134,8 @@ }, "@comunica/actor-query-result-serialize-sparql-tsv": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-tsv/-/actor-query-result-serialize-sparql-tsv-2.10.0.tgz", + "integrity": "sha512-TgA2WIXKdu/SrbHEP8HvGoLjhDOZnBoHsGsLFSHpxY/Uwk21rZqJLBEkhuhkUtGYzQPJ1n6Wmpjz9lBrUHGJPw==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -20879,6 +25146,8 @@ }, "@comunica/actor-query-result-serialize-sparql-xml": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-xml/-/actor-query-result-serialize-sparql-xml-2.10.0.tgz", + "integrity": "sha512-8RDj5ZN23HnIc6zI5pD5XKi2pyg2cx6DhI7VDRcboi7v0DxfROuQqSEtbQ8m/W6Pngdz01ySogRcIVJCzRzBLQ==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -20888,6 +25157,8 @@ }, "@comunica/actor-query-result-serialize-stats": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-stats/-/actor-query-result-serialize-stats-2.10.2.tgz", + "integrity": "sha512-jhj/vLDRxLuRMonBaqICt4saM9/UO9wJBT3Jxk7Rp73aQWLo+lILXKzcWpuxkh/EFx8raLUBmbjWCduamU1DzQ==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-http-invalidate": "^2.10.0", @@ -20900,6 +25171,8 @@ }, "@comunica/actor-query-result-serialize-table": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-table/-/actor-query-result-serialize-table-2.10.0.tgz", + "integrity": "sha512-AAPrgM/rbsSThRu9jkfJhBUeTUwQTLHNVbIn8El+Akvz+Fueoi6oSi3SslpPMHOvIUiOAgCZ05f2RbBLlhP03g==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -20912,6 +25185,8 @@ }, "@comunica/actor-query-result-serialize-tree": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-tree/-/actor-query-result-serialize-tree-2.10.0.tgz", + "integrity": "sha512-sEyIzoSTV11YPY6r4fn6fwrf3WjLD6GrwXMTuevsDAKDYaMYxyriH3T/LMLLBEURy8SLD1I1Fpw/qaZisRmLTg==", "requires": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -20923,6 +25198,8 @@ }, "@comunica/actor-rdf-join-entries-sort-cardinality": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-entries-sort-cardinality/-/actor-rdf-join-entries-sort-cardinality-2.10.0.tgz", + "integrity": "sha512-6dd/29q6QuQN2Ap090VA0KUFmmnHalPxFJb4MGh5nIbWZH0F/EvI+uK5vPx29cttr1yXL5u+MbJWaLb3IxwILg==", "requires": { "@comunica/bus-rdf-join-entries-sort": "^2.10.0", "@comunica/core": "^2.10.0" @@ -20930,6 +25207,8 @@ }, "@comunica/actor-rdf-join-inner-hash": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-hash/-/actor-rdf-join-inner-hash-2.10.1.tgz", + "integrity": "sha512-nUtdS3NJGKSJQC8KjDVz4TEDmkXHBYQi0/bwnAXCDl1phhq8lgv+YEmRDNe/kuCze7HyqEt98rlSJ+ZhvcHXVQ==", "requires": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -20939,6 +25218,8 @@ }, "@comunica/actor-rdf-join-inner-multi-bind": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-bind/-/actor-rdf-join-inner-multi-bind-2.10.1.tgz", + "integrity": "sha512-tNZ2Q7z44Yr0iIFkvtTVAsts4v0IoC4b0FYaIUeYav4y5JOlR74hWWijTAzVfb31dTMsAp3r+y0xGIdd75LRHQ==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -20952,6 +25233,8 @@ }, "@comunica/actor-rdf-join-inner-multi-empty": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-empty/-/actor-rdf-join-inner-multi-empty-2.10.1.tgz", + "integrity": "sha512-z6a3qENwuvSU0PvqOySrsHsWSUvzfWd1xIYwEvKuEIJ9vYPoefIUgggx08E95ZF/k+PxZ0vKEywFpBSUKUzGYA==", "requires": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -20962,6 +25245,8 @@ }, "@comunica/actor-rdf-join-inner-multi-smallest": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-smallest/-/actor-rdf-join-inner-multi-smallest-2.10.1.tgz", + "integrity": "sha512-MXwIvq+viDCmsxJwD4+fwMhwZINWva3jtQ3j5ne6DXgZYUJUFOw3VujvCP4/cl075RuSxYlXgy6ETHLa1TNr7g==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -20973,6 +25258,8 @@ }, "@comunica/actor-rdf-join-inner-nestedloop": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-nestedloop/-/actor-rdf-join-inner-nestedloop-2.10.1.tgz", + "integrity": "sha512-nFjGMrAIrRjRcsaU8UQXLbsDODVdf4LDpVNVQIrjfoWzhOIy13ApDQrqtuObaGVfryiFgt34zVEOwMWezWzl0A==", "requires": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -20982,6 +25269,8 @@ }, "@comunica/actor-rdf-join-inner-none": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-none/-/actor-rdf-join-inner-none-2.10.1.tgz", + "integrity": "sha512-4mqsuqvLSuXMbgY0PghqK5hmBGH5YkRTwUOpGpBE0EVQaiAoQOME0uVslkt2TBzUx5IQJC+trr/80sbA9mAhMw==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -20992,6 +25281,8 @@ }, "@comunica/actor-rdf-join-inner-single": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-single/-/actor-rdf-join-inner-single-2.10.1.tgz", + "integrity": "sha512-RfnwTEsuXNdR0cNRWaCvNPlfD5KyuScsc/55j/9mr8yqGUTE9h9Om1Is5u7xnpRMxGOEqwVP6apK3ZxsZqlL/w==", "requires": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0" @@ -20999,6 +25290,8 @@ }, "@comunica/actor-rdf-join-inner-symmetrichash": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-symmetrichash/-/actor-rdf-join-inner-symmetrichash-2.10.1.tgz", + "integrity": "sha512-beFGkMUe3pTADtMXXPU8ab/IMULj+Hkg3Iah0zgrVZgwWH1Kgfkj/2qp32Ll5y9qcRbio4ruruKlHNXJJUU46Q==", "requires": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -21008,6 +25301,8 @@ }, "@comunica/actor-rdf-join-minus-hash": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash/-/actor-rdf-join-minus-hash-2.10.1.tgz", + "integrity": "sha512-wIaB/EpuySaARhimoLzrE0cTH0TgVkL43IAtYX7ECwH9Qcv8blO4zbL4q2KUkY7OKZRM892aqMfo3kO1vMIK7w==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -21018,6 +25313,8 @@ }, "@comunica/actor-rdf-join-minus-hash-undef": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash-undef/-/actor-rdf-join-minus-hash-undef-2.10.1.tgz", + "integrity": "sha512-tz5LdeAHnylEQIq4bRfFqaH89WZXkkdFxEshqxWijFBp5wprUYiotMDrBo9zDFaPquhs42fILtTzLY9yaalc9w==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -21029,6 +25326,8 @@ }, "@comunica/actor-rdf-join-optional-bind": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-bind/-/actor-rdf-join-optional-bind-2.10.1.tgz", + "integrity": "sha512-6dOoI/rzRZ0RUyv2WlToClE42Z2YJE5xcSrot7haT2eMdxbzr1KjyasHBcIIkSK+WViDO006lXZ1Hi4tJm9uuA==", "requires": { "@comunica/actor-rdf-join-inner-multi-bind": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -21041,6 +25340,8 @@ }, "@comunica/actor-rdf-join-optional-nestedloop": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-nestedloop/-/actor-rdf-join-optional-nestedloop-2.10.1.tgz", + "integrity": "sha512-d7KUDjEKZszizd4SBvYkK2A6lScrq9ciEgzdrrp6IYZhIGAhJLTgPNg3Js3NEjpE7oj4KWl2WwKJe2sWcJbKJg==", "requires": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -21050,6 +25351,8 @@ }, "@comunica/actor-rdf-join-selectivity-variable-counting": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-selectivity-variable-counting/-/actor-rdf-join-selectivity-variable-counting-2.10.0.tgz", + "integrity": "sha512-D7tdzxA93bpZGXI5emJyvzk6LabeAnzcQMU/V5x2QwJxyoNr+LFbesBHDDP3/u4UJwmeP0a+dU0e5mbpJujSXw==", "requires": { "@comunica/bus-rdf-join-selectivity": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21059,6 +25362,8 @@ }, "@comunica/actor-rdf-metadata-accumulate-cancontainundefs": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cancontainundefs/-/actor-rdf-metadata-accumulate-cancontainundefs-2.10.0.tgz", + "integrity": "sha512-N3rwX4kT9rkW+89q4xCjO3KKG0DbeNIyeMWDzeh2vTw8nAXYyTiPjHYvx/6VUMzhFUWF+50VtVv8ZJPO6nEapw==", "requires": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21066,6 +25371,8 @@ }, "@comunica/actor-rdf-metadata-accumulate-cardinality": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cardinality/-/actor-rdf-metadata-accumulate-cardinality-2.10.0.tgz", + "integrity": "sha512-UpC5PbhzEDCAxTUqETH89uRaFRqmP6YuWt67OAPo5wocv2tQDs6/SdLwS695XnfeMJdfDHsXyoUzQg3r8dwydw==", "requires": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21074,6 +25381,8 @@ }, "@comunica/actor-rdf-metadata-accumulate-pagesize": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-pagesize/-/actor-rdf-metadata-accumulate-pagesize-2.10.0.tgz", + "integrity": "sha512-r364CWGr5rMpV2ec3TsD+9Yhvi1JUuRXLBQqtgzjAPbpWjfDSM1Q4h0P1z9h3D+sdUMEX/0iGAY3AH2FjJAxwA==", "requires": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21081,6 +25390,8 @@ }, "@comunica/actor-rdf-metadata-accumulate-requesttime": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-requesttime/-/actor-rdf-metadata-accumulate-requesttime-2.10.0.tgz", + "integrity": "sha512-SpG7gxxAPoW2NbgyZ2UNpwluJ+IvCOYIRDTXmVTAK8bntav+/ZG30yfESFBjB3LmJEwAnktAsTgM6OhldohPKw==", "requires": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21088,6 +25399,8 @@ }, "@comunica/actor-rdf-metadata-all": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-all/-/actor-rdf-metadata-all-2.10.0.tgz", + "integrity": "sha512-dHaSxHTdneWVBMAF6WqZrGD+u4TPpHQaJ2WutK1NvQNPIiF0N7249aGTvXBIXZfsKYyQ73PUORDeLEOjX+tT7g==", "requires": { "@comunica/bus-rdf-metadata": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21096,6 +25409,8 @@ }, "@comunica/actor-rdf-metadata-extract-allow-http-methods": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-allow-http-methods/-/actor-rdf-metadata-extract-allow-http-methods-2.10.0.tgz", + "integrity": "sha512-aCSX+lWcmz5Q/g34VJEblczqDS6N+gJ3AlcOcGuqhd6qHRU17dMeCIZCk8p6p+AhbJ30w4BTsrZRY2sF0MGCVA==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21103,6 +25418,8 @@ }, "@comunica/actor-rdf-metadata-extract-hydra-controls": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-controls/-/actor-rdf-metadata-extract-hydra-controls-2.10.0.tgz", + "integrity": "sha512-T6F5OaQNqrHVIwSGNRX6YPDBoAOYBQj3NTPID7vQae7J80oEX+CLoTkeJJwfHpoUWx0ihs8J0UkABgK3AWeylA==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21113,6 +25430,8 @@ }, "@comunica/actor-rdf-metadata-extract-hydra-count": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-count/-/actor-rdf-metadata-extract-hydra-count-2.10.0.tgz", + "integrity": "sha512-nOMLN+9OSLFOVz6jc9pcyDizhcBBVT2azn7StTMK5ukFCcPCENS4y6lYhC5cijKZY7vUa7U6VzhX2vvw20MKDA==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21120,6 +25439,8 @@ }, "@comunica/actor-rdf-metadata-extract-hydra-pagesize": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-pagesize/-/actor-rdf-metadata-extract-hydra-pagesize-2.10.0.tgz", + "integrity": "sha512-mD8KS2ENr2rbfBWxtVpxkB/Y2LyyAnwQU5UYKkpet8ELhlostdGROzYCNIAgfOgirOAsLgVkbmrX0XBGouI7rA==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21127,6 +25448,8 @@ }, "@comunica/actor-rdf-metadata-extract-patch-sparql-update": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-patch-sparql-update/-/actor-rdf-metadata-extract-patch-sparql-update-2.10.0.tgz", + "integrity": "sha512-U5ARpeWKShbbSfdtJeb6nyPcsdtMwEo2dp56T4aSTNSBKtAhQ78DjOxb23WIU/VR/qpw2yWcsbPnNJvSaLpRVQ==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21134,6 +25457,8 @@ }, "@comunica/actor-rdf-metadata-extract-put-accepted": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-put-accepted/-/actor-rdf-metadata-extract-put-accepted-2.10.0.tgz", + "integrity": "sha512-cGJg6tMMCOSGcitkUBN7b9/Sg5zgwWQC52g+Zk22o4i+Zgt24WLjfXXbnGWGoV+h9YZo8pkg7v1cpE5GpapNCg==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21141,6 +25466,8 @@ }, "@comunica/actor-rdf-metadata-extract-request-time": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-request-time/-/actor-rdf-metadata-extract-request-time-2.10.0.tgz", + "integrity": "sha512-zh3coTPZMbgF4mXKCO3bzn99INt9HFraKMZWc9s/kwBE6vhNZ5246Ql/6z1v7mccoIbanhI72gtjFTGGHru80Q==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21148,6 +25475,8 @@ }, "@comunica/actor-rdf-metadata-extract-sparql-service": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-sparql-service/-/actor-rdf-metadata-extract-sparql-service-2.10.0.tgz", + "integrity": "sha512-Xc+id8FURTmY3ccb4hcVuAaOou5UqD+1YkTnGfMWQxVgMlFC1eeBvwWVzvedj0sHhnfbLgDwbCVYLCK1lNndSg==", "requires": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21156,6 +25485,8 @@ }, "@comunica/actor-rdf-metadata-primary-topic": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-primary-topic/-/actor-rdf-metadata-primary-topic-2.10.0.tgz", + "integrity": "sha512-nabxkiYSPGPRylhYjGxF0KiJ/K8QiG1N/am/t8eaqwyjn/fo2/tHl0yXUaLLx0E8fChfbBv10sVlmLhsLrg8DQ==", "requires": { "@comunica/bus-rdf-metadata": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21165,6 +25496,8 @@ }, "@comunica/actor-rdf-parse-html": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-2.10.0.tgz", + "integrity": "sha512-zgImXKpc+BN1i6lQiN1Qhlb1HbKdMIeJMOys6qbzRIijdK8GkGGChwhQp7Cso3lY1Nf4K7M3jPLZeQXeED2w7g==", "requires": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -21177,6 +25510,8 @@ }, "@comunica/actor-rdf-parse-html-microdata": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-2.10.0.tgz", + "integrity": "sha512-JLfiDauq4SmpI6TDS4HaHzI6iJe1j8lSk5FRRYK6YVEu8eO28jPmxQJiOiwbQiYqsjsV7kON/WIZSoUELoI4Ig==", "requires": { "@comunica/bus-rdf-parse-html": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21185,6 +25520,8 @@ }, "@comunica/actor-rdf-parse-html-rdfa": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-2.10.0.tgz", + "integrity": "sha512-9K3iaws9+FGl50oZi53hqyzhwjNKZ3mIr2zg/TAJZoapKvc14cthH17zKSSJrqI/NgBStRmZhBBkXcwfu1CANw==", "requires": { "@comunica/bus-rdf-parse-html": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21193,6 +25530,8 @@ }, "@comunica/actor-rdf-parse-html-script": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-2.10.0.tgz", + "integrity": "sha512-7XYqWchDquWnBLjG7rmmY+tdE81UZ8fPCU0Hn+vI39/MikNOpaiyr/ZYFqhogWFa9SkjmH0a7idVUzmjiwKRZQ==", "requires": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -21206,6 +25545,8 @@ }, "@comunica/actor-rdf-parse-jsonld": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-2.10.2.tgz", + "integrity": "sha512-K4fvD0zMU22KkQCqIFVT5Oy2FREEZ9CAo9u6kOcsMxEvg9aHGIM6hkaXR8I+1JCx1mDuEj3zQ8joR4tQh8fYCw==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-parse": "^2.10.0", @@ -21219,6 +25560,8 @@ }, "@comunica/actor-rdf-parse-n3": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-2.10.0.tgz", + "integrity": "sha512-o1MAbwJxW4Br2WCZdhFoRmAiOP4mfogeQqJ4nqlsOkoMtQ45EvLHsotb3Kqhuk5V+vsTxyK5v/a4zylGtcU7VQ==", "requires": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21227,6 +25570,8 @@ }, "@comunica/actor-rdf-parse-rdfxml": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-2.10.0.tgz", + "integrity": "sha512-HoJN52shXY3cvYtsS0cpin9KXpW3L7g1leebyCRSqnlnHdJv5D6G0Ep8vyt2xhquKNbOQ7LnP5VhiDiqz73XDg==", "requires": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21235,6 +25580,8 @@ }, "@comunica/actor-rdf-parse-shaclc": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-2.10.0.tgz", + "integrity": "sha512-i6tmuZuS+RtDiSXpQc3s/PxtCqwIguo4ANmVB20PK4VWgQgBwoPG7LlNcJ0xmuH/3Bv6C2Agn18PLF6dZX+fKw==", "requires": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21247,6 +25594,8 @@ }, "@comunica/actor-rdf-parse-xml-rdfa": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-2.10.0.tgz", + "integrity": "sha512-68r/6B/fEyA1/OYleVuaPq47J+g4xJcJijpdL1wEj7CqjV+Xa+sDWRpNCyLcD/e1Y/g9UQmLz0ZnSpR00PFddA==", "requires": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21255,6 +25604,8 @@ }, "@comunica/actor-rdf-resolve-hypermedia-links-next": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-next/-/actor-rdf-resolve-hypermedia-links-next-2.10.0.tgz", + "integrity": "sha512-SpW46Tx8ksAxotGK2UEpvGcYjKwxB0x2KnbGmKHvo59embRjcUL/bmq3uHqZe7UwfynR2wDaRzMdVVSQccWSyA==", "requires": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21262,6 +25613,8 @@ }, "@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/-/actor-rdf-resolve-hypermedia-links-queue-fifo-2.10.0.tgz", + "integrity": "sha512-Hh53Ts6z6MxKXhZZxgpXfc1hgNzIX/xbA9mD2Au7ZfAa5V5j8zPaVVKe06sxILQBTPMsFh1idP3vIqRwRXpsvg==", "requires": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/bus-rdf-resolve-hypermedia-links-queue": "^2.10.0", @@ -21270,6 +25623,8 @@ }, "@comunica/actor-rdf-resolve-hypermedia-none": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-none/-/actor-rdf-resolve-hypermedia-none-2.10.0.tgz", + "integrity": "sha512-C4sJ0QJetq3QxsRkYstK5YXRYDGkcVTfyBOFUMYj7PbVakapnl8qPZkVL7VPMLVLVOfyBQHTT43Yp6Nl8VvmSA==", "requires": { "@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source": "^2.10.0", "@comunica/bus-rdf-resolve-hypermedia": "^2.10.0", @@ -21278,6 +25633,8 @@ }, "@comunica/actor-rdf-resolve-hypermedia-qpf": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-qpf/-/actor-rdf-resolve-hypermedia-qpf-2.10.0.tgz", + "integrity": "sha512-1iP9xD72bxFBLpbfC7Ev0Xoc+0rwusPFdnoYbEtqMHRfiM0h3nNrsSxyzdGJMAZaJeQzmBZIEiwR5pbo9qpmaQ==", "requires": { "@comunica/actor-rdf-metadata-extract-hydra-controls": "^2.10.0", "@comunica/bus-dereference-rdf": "^2.10.0", @@ -21295,6 +25652,8 @@ }, "@comunica/actor-rdf-resolve-hypermedia-sparql": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-sparql/-/actor-rdf-resolve-hypermedia-sparql-2.10.2.tgz", + "integrity": "sha512-UFsTuzHvjK/XhRGqfHr3WAVr+iBv6XTuU1fV9EuOaB+odclQ+H6TGtmW6/38CSufj86Y691VBXMk29zdWfrmGA==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -21312,6 +25671,8 @@ }, "@comunica/actor-rdf-resolve-quad-pattern-federated": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-federated/-/actor-rdf-resolve-quad-pattern-federated-2.10.1.tgz", + "integrity": "sha512-OBRTTUWkXKa0ibDzcYLG7aKf3BfQp2j75xm65brRvwstNLmye9ZEq1PrNhbP5UDqQQeCgzPBrb0eGC8Vxek2RA==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", @@ -21330,6 +25691,8 @@ }, "@comunica/actor-rdf-resolve-quad-pattern-hypermedia": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-hypermedia/-/actor-rdf-resolve-quad-pattern-hypermedia-2.10.1.tgz", + "integrity": "sha512-XkJOYu0bizWHsvgiaGyNAnRZsqv2risREK5SY14VCMXDYqmOWJLDppveGEUZAoEKEJuo4ZLDlP2gLDGzc0krxQ==", "requires": { "@comunica/bus-dereference-rdf": "^2.10.0", "@comunica/bus-http-invalidate": "^2.10.0", @@ -21356,6 +25719,8 @@ }, "@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source/-/actor-rdf-resolve-quad-pattern-rdfjs-source-2.10.0.tgz", + "integrity": "sha512-d6AlrngvZaVgoiiyMhkf6uiYaFZZdn/UZLo0FhZ++or1NZXo5KxK4UMgdiIygvPEiuuVzy0W1djHgOQ1rgh50g==", "requires": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21369,6 +25734,8 @@ }, "@comunica/actor-rdf-resolve-quad-pattern-string-source": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-string-source/-/actor-rdf-resolve-quad-pattern-string-source-2.10.0.tgz", + "integrity": "sha512-v6QOBtXTXrDUZRHocrm2OYCsxGpyTScka/n85cewCcInqVGJP9J6zpdwetzvIy7wVJkac7JQabd96OEyDMK3sg==", "requires": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", @@ -21383,6 +25750,8 @@ }, "@comunica/actor-rdf-serialize-jsonld": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-jsonld/-/actor-rdf-serialize-jsonld-2.10.0.tgz", + "integrity": "sha512-u1M5N7BSrkhS461fV6QXKMh6TnvpoEiSHPru7wJg1kGqR9q3reuQeKLf/U23JDYb1kom8uU3R7aBpDIjgVc49Q==", "requires": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21391,6 +25760,8 @@ }, "@comunica/actor-rdf-serialize-n3": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-n3/-/actor-rdf-serialize-n3-2.10.0.tgz", + "integrity": "sha512-CoDktUI3YQuI7UBV+fQOdKl+5XjBx0XTOF9XxEDiNg5nwndEmDvq6C23fSHfkqX3/xDlnsuS/YysHAqXCrYoiA==", "requires": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21399,6 +25770,8 @@ }, "@comunica/actor-rdf-serialize-shaclc": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-shaclc/-/actor-rdf-serialize-shaclc-2.10.0.tgz", + "integrity": "sha512-gp4bu4+aPtMk4bavXP27uD9X9bpa2F5u6/JtsaX2qwcqVI0x1tkVQOkm2RkUhafcHNj0Fz6lQ3aXmRIAQvaefg==", "requires": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21409,6 +25782,8 @@ }, "@comunica/actor-rdf-update-hypermedia-patch-sparql-update": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/-/actor-rdf-update-hypermedia-patch-sparql-update-2.10.2.tgz", + "integrity": "sha512-z/fOzYlA5fPtauTUISYhCWMKtEpkvKkSZIdvcgeGvetLnvw4fytfVHdtPhirZYmPya10GCeTG7m2iHvK53lOsQ==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-update-hypermedia": "^2.10.2", @@ -21424,6 +25799,8 @@ }, "@comunica/actor-rdf-update-hypermedia-put-ldp": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-put-ldp/-/actor-rdf-update-hypermedia-put-ldp-2.10.2.tgz", + "integrity": "sha512-Tof/mU0Lkt7HP3SwHXODczxvAFelWzAHdP+ap4Upr47K6Zg5GRPwJv//2AcPvT3p42Li6wuMz/4nh/A3pcnCKA==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-serialize": "^2.10.0", @@ -21438,6 +25815,8 @@ }, "@comunica/actor-rdf-update-hypermedia-sparql": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-sparql/-/actor-rdf-update-hypermedia-sparql-2.10.2.tgz", + "integrity": "sha512-uw1NIAoxuAechsjTQ6b53XpGOMx3Mp5uEL5LtUwNC6COJE6tzWH8wG54Dwj+0VNxsgqsSircKu2xwGl1uOsOPg==", "requires": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-update-hypermedia": "^2.10.2", @@ -21453,6 +25832,8 @@ }, "@comunica/actor-rdf-update-quads-hypermedia": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-hypermedia/-/actor-rdf-update-quads-hypermedia-2.10.2.tgz", + "integrity": "sha512-kzGfDv0PqcOIIULJLG8jtA/dOcrNUodu98J08ruSuYQBbnFgAZ07MG1TkWhEI/AM6D0w7hXkgQaC1sGWn4gVmA==", "requires": { "@comunica/bus-dereference-rdf": "^2.10.0", "@comunica/bus-http-invalidate": "^2.10.0", @@ -21467,6 +25848,8 @@ }, "@comunica/actor-rdf-update-quads-rdfjs-store": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-rdfjs-store/-/actor-rdf-update-quads-rdfjs-store-2.10.2.tgz", + "integrity": "sha512-anX3SovvY2H8KwuWu8G9EqtITmCsz12jfqunNn5Efcch/bm4HyHTC1GThx77m6qpCdg4OMx8TLhNrH1II1UM1w==", "requires": { "@comunica/bus-rdf-update-quads": "^2.10.2", "@comunica/core": "^2.10.0", @@ -21479,6 +25862,8 @@ }, "@comunica/bindings-factory": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/bindings-factory/-/bindings-factory-2.10.1.tgz", + "integrity": "sha512-AUD3VWlCYljgk5jfaMejSIL9CiX3aV/cAn314e/dYP/rrnVgachcCwyaD8hKHWTBHDs5rcGxr/iwruBOfsERvQ==", "requires": { "@rdfjs/types": "*", "immutable": "^4.1.0", @@ -21488,6 +25873,8 @@ }, "@comunica/bus-context-preprocess": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-context-preprocess/-/bus-context-preprocess-2.10.0.tgz", + "integrity": "sha512-eJ5CkzbnmxB9fkr2F05jnnjcaowp+yxd0+pAtvx5MLl2Kpx3nWLqHPcl4/EVVDPD+i0TEkq4AXQ1BD9BMuXK0A==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -21495,6 +25882,8 @@ }, "@comunica/bus-dereference": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-2.10.0.tgz", + "integrity": "sha512-nWyQXiH7zbiPTVttWVKJHykhV4IuahfhfUwPx3Op+cVsK489Su84dnGeSmPkxTAFFuxe6wU6ZEH4i7PDu48YvQ==", "requires": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/actor-abstract-parse": "^2.10.0", @@ -21506,6 +25895,8 @@ }, "@comunica/bus-dereference-rdf": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-2.10.0.tgz", + "integrity": "sha512-WY/wPmFpO76wwJ2D5Aus43ZbYnBRLvQ0EOp4yywO0lBiq6F0JisjCVCM4EtWouOEAAfqEoIjHXGyC3gPWqm+SQ==", "requires": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-rdf-parse": "^2.10.0", @@ -21515,6 +25906,8 @@ }, "@comunica/bus-hash-bindings": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-hash-bindings/-/bus-hash-bindings-2.10.0.tgz", + "integrity": "sha512-EdzIUgpSWMtFVxEJSesuQpMkfgznDap+U0F9epotxXc20Gg/qjTzs1gF6NkpDpaidQ7cFlV16vdbdfi8uiZ+mQ==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -21522,6 +25915,8 @@ }, "@comunica/bus-http": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-2.10.2.tgz", + "integrity": "sha512-MAYRF6uEBAuJ9dCPW2Uyne7w3lNwXFXKfa14XuPG5DFTDpgo/Z2pWupPrBsA1eIWMNJ6WOG6QyEv4rllSIBqlg==", "requires": { "@comunica/core": "^2.10.0", "@smessie/readable-web-to-node-stream": "^3.0.3", @@ -21532,12 +25927,16 @@ }, "@comunica/bus-http-invalidate": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-http-invalidate/-/bus-http-invalidate-2.10.0.tgz", + "integrity": "sha512-9DevRUzuCOfHFtsryIvTU6rOz6vMbnuDzerloBoNsLFVzQCU4wPNZbxiOn0+GMDXxw7M3KgYd+KFxI2kGObVWA==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/bus-init": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-2.10.0.tgz", + "integrity": "sha512-hJejHa8sLVhQLFlduCVnhOd5aW3FCEz8wmWjyeLI3kiHFaQibnGVMhUuuNRX5f8bnnPuTdEiHc1nnYHuSi+j8A==", "requires": { "@comunica/core": "^2.10.0", "readable-stream": "^4.4.2" @@ -21545,6 +25944,8 @@ }, "@comunica/bus-optimize-query-operation": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-optimize-query-operation/-/bus-optimize-query-operation-2.10.0.tgz", + "integrity": "sha512-qawKJprbVc+dfjBgVzV45UEo+jZBzY3dRo0a8UkXSvgSWPcX18SGrURl2VL4sZZSAyXQBMrGUwH2eUD8l26ZJQ==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21553,6 +25954,8 @@ }, "@comunica/bus-query-operation": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-operation/-/bus-query-operation-2.10.1.tgz", + "integrity": "sha512-PoUSJeKaMZtZu+ZtB+5ABjPOiW1YjxOdLE1N5znxX2oiDKCQHmAXVaVkbVx1jPDLGYFNcOlOSzpRMqLQ/L4JIw==", "requires": { "@comunica/bindings-factory": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -21568,6 +25971,8 @@ }, "@comunica/bus-query-parse": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-parse/-/bus-query-parse-2.10.0.tgz", + "integrity": "sha512-1LynxACgCYTuBH/JMRG/IGaWtTVwr2O8wxOosCId2W3BDW9nf2DSCyOdnxnCSMSKfnLFWiaVuKybn24OLXW2dQ==", "requires": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*", @@ -21576,6 +25981,8 @@ }, "@comunica/bus-query-result-serialize": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-query-result-serialize/-/bus-query-result-serialize-2.10.0.tgz", + "integrity": "sha512-9P5KUzmXvjtLbd44UVxYNB0yqAHx7molBUc7aysUQ3pbIcP/A57GXzAfiKueeiZ9cVRRG/BGsVoDGVj59tGWNg==", "requires": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21584,6 +25991,8 @@ }, "@comunica/bus-rdf-join": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join/-/bus-rdf-join-2.10.1.tgz", + "integrity": "sha512-pPFoJVHY5p931jIKt+9sqRCGiuuf8yFqrlOOAd3un72cwuyhwNHvn52xwvcPlNUAySz/kDmW+U0syflqI6VdAw==", "requires": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join-selectivity": "^2.10.0", @@ -21599,6 +26008,8 @@ }, "@comunica/bus-rdf-join-entries-sort": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-entries-sort/-/bus-rdf-join-entries-sort-2.10.0.tgz", + "integrity": "sha512-17FQrdYtzjY84OI/ZvipJKD0ei3IySmsWwaGC9sIJn+1W4LBVKudTu5S0tzGTKTb0URhS4mrCliUBzyINtIZMQ==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -21606,6 +26017,8 @@ }, "@comunica/bus-rdf-join-selectivity": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-selectivity/-/bus-rdf-join-selectivity-2.10.0.tgz", + "integrity": "sha512-YjoygSiH6r4SAYqz6gpvUql2vnznPVE62IsWqYnjFWeH1kBsxO5yEOO01s2FfN3jLcfsytTyG7VNTCN788YbaA==", "requires": { "@comunica/core": "^2.10.0", "@comunica/mediatortype-accuracy": "^2.10.0", @@ -21614,6 +26027,8 @@ }, "@comunica/bus-rdf-metadata": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata/-/bus-rdf-metadata-2.10.0.tgz", + "integrity": "sha512-LRUnHVqIzyUlmPKPNAYOusCF53iN8KEX7l/VinlA7NH3XBLhTkFoth26MVqIVtjtdH0hVfUVpkwy2kFEJpGldw==", "requires": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -21621,6 +26036,8 @@ }, "@comunica/bus-rdf-metadata-accumulate": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-accumulate/-/bus-rdf-metadata-accumulate-2.10.0.tgz", + "integrity": "sha512-XG/3s4a3yGpYt4H+sn9T2zTaUxLG+37dmhRhXv2cBmR4gaCXkglERPaOrQygHldEF+4ITF3RmXHCgANsQ1AwQg==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -21628,6 +26045,8 @@ }, "@comunica/bus-rdf-metadata-extract": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-extract/-/bus-rdf-metadata-extract-2.10.0.tgz", + "integrity": "sha512-KcMZh+7kHjdCIMkLFki99tQH1arVp/evVnk0BGXfWd+ca3eCLrr42tb1tGfN2JkaCSxgtzWO4DRZcSzJ4sI2dQ==", "requires": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -21635,6 +26054,8 @@ }, "@comunica/bus-rdf-parse": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-2.10.0.tgz", + "integrity": "sha512-EgCMZACfTG/+mayQpExWt0HoBT32BBVC1aS1lC43fXKBTxJ8kYrSrorVUuMACoh4dQVGTb+7j1j4K0hGNVzXGA==", "requires": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/actor-abstract-parse": "^2.10.0", @@ -21644,6 +26065,8 @@ }, "@comunica/bus-rdf-parse-html": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-2.10.0.tgz", + "integrity": "sha512-RZliz4TtKP63QggoohGuIkGb6lq0BoYJ4aztKtGldWtPAVP/pdEvlDpiZWLB/j19g7S2aDLNY/lJtZ5efM1tHQ==", "requires": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -21651,6 +26074,8 @@ }, "@comunica/bus-rdf-resolve-hypermedia": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia/-/bus-rdf-resolve-hypermedia-2.10.0.tgz", + "integrity": "sha512-DjCoAg62pPzEOH5gKM9gaL4CVUmhBsmyOzao0tRu20G7L6RnTIFtRaOwMN2z+2uC7AkJRHZY12bPUb+yM8V0UQ==", "requires": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21659,6 +26084,8 @@ }, "@comunica/bus-rdf-resolve-hypermedia-links": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links/-/bus-rdf-resolve-hypermedia-links-2.10.0.tgz", + "integrity": "sha512-Mcz6bUdZySLK2om0cMt86n5TOThZOTpEFq2M42n7YAE3LL2KMnMDdhkaOC6SyY4tS0HGAuhce21Uq+Gz8Veq2g==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21667,6 +26094,8 @@ }, "@comunica/bus-rdf-resolve-hypermedia-links-queue": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links-queue/-/bus-rdf-resolve-hypermedia-links-queue-2.10.0.tgz", + "integrity": "sha512-f9amJk7ikktRfOoRnwag1KMTuo9v+PiDEVQA0dijl+jhcispKdjG6XK0MdZ1KSEmtUWejjS6nMRGvfJdM37eog==", "requires": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/core": "^2.10.0" @@ -21674,6 +26103,8 @@ }, "@comunica/bus-rdf-resolve-quad-pattern": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-quad-pattern/-/bus-rdf-resolve-quad-pattern-2.10.0.tgz", + "integrity": "sha512-JEI4DqSprGmrbfmiIwc8PbS+HCoxXwmMtp7gDpoB1HyYKIHzzu9DOIiwmYEDRO5dwV+uTwaYKZz/mUPm2U6EEg==", "requires": { "@comunica/context-entries": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21685,6 +26116,8 @@ }, "@comunica/bus-rdf-serialize": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-serialize/-/bus-rdf-serialize-2.10.0.tgz", + "integrity": "sha512-AmbN9MUgw6B6AfrIqR1u7PWHZFgbJz+j1SFJVtnHQ51hEpG+Ig9nNG2IWjHOsFK0xBBQ/wXgNmt/cufEMRM1SQ==", "requires": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21693,6 +26126,8 @@ }, "@comunica/bus-rdf-update-hypermedia": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-hypermedia/-/bus-rdf-update-hypermedia-2.10.2.tgz", + "integrity": "sha512-GbRMxXN4kx+4UPsnGxWjyn770m675yy2gWK/xy/5qQIxxRTcuGk4wm/994FZQXpwLX1E0xJ+YKxMgXTIlEWmQA==", "requires": { "@comunica/bus-rdf-update-quads": "^2.10.2", "@comunica/core": "^2.10.0" @@ -21700,6 +26135,8 @@ }, "@comunica/bus-rdf-update-quads": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-quads/-/bus-rdf-update-quads-2.10.2.tgz", + "integrity": "sha512-+iVpAHps8ytGq8AZF4xTZbLyskS40JPn64MO+OAuYovqXLlezp6vh9eJ5qETuP9NP+BpZDk3nOU3Ky3fb0QCUw==", "requires": { "@comunica/actor-rdf-resolve-quad-pattern-federated": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -21712,10 +26149,14 @@ } }, "@comunica/config-query-sparql": { - "version": "2.7.0" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-2.7.0.tgz", + "integrity": "sha512-rMnFgT7cz9+0z7wV4OzIMY5qM9/Z0mTGrR8y2JokoHyyTcBGOSajFmy61XCSLMCsLLG8qDXsJ4ClCCky3TGfqA==" }, "@comunica/context-entries": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-2.10.0.tgz", + "integrity": "sha512-lmCYCcXxW8C6ecFH2whZCt31NT1ejb0P/sbytK7f4ctyA06Q8iYFEcYE4eWOXMdpfkwkcnz31x9XL77OGeSC2Q==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -21726,6 +26167,8 @@ }, "@comunica/core": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/core/-/core-2.10.0.tgz", + "integrity": "sha512-onsGs2iKHUPRxxMOdx42vdxslk8q9FQZdRjQtHJ6SGiCpJwIL9ciBgPIOl2RL2YfzXHemr/0umeNOppRDcWhJA==", "requires": { "@comunica/types": "^2.10.0", "immutable": "^4.1.0" @@ -21733,12 +26176,16 @@ }, "@comunica/data-factory": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@comunica/data-factory/-/data-factory-2.7.0.tgz", + "integrity": "sha512-dSTzrR1w9SzAWx70ZXKXHUC8f0leUolLZ9TOhGjFhhsBMJ9Pbo0g6vHV8txX5FViShngrg9QNKhsHeQnMk5z6Q==", "requires": { "@rdfjs/types": "*" } }, "@comunica/expression-evaluator": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/expression-evaluator/-/expression-evaluator-2.10.0.tgz", + "integrity": "sha512-gSfiVSAE+SaxpXq3jT5OnyZd+sD9KFaWtTiKT1tDDs8lD7Jj68aRP7VoEhvKwPwRlUx0aoaXUL2MYtV6JsXRbg==", "requires": { "@rdfjs/types": "*", "@types/spark-md5": "^3.0.2", @@ -21755,12 +26202,16 @@ }, "dependencies": { "uuid": { - "version": "9.0.1" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" } } }, "@comunica/logger-pretty": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/logger-pretty/-/logger-pretty-2.10.0.tgz", + "integrity": "sha512-JXkeM5HnbyTPnQTf5/ugRPL9R+vXT7b/hRVYzYmhAGCjkCNL7NJPTBbIgxmZHqZ+UGxprotrvmDQtwHmVA+Ddw==", "requires": { "@comunica/types": "^2.10.0", "object-inspect": "^1.12.2", @@ -21769,18 +26220,24 @@ }, "@comunica/logger-void": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/logger-void/-/logger-void-2.10.0.tgz", + "integrity": "sha512-GFJh9hV8rIC9yXAuLGGKjQRVs8IOQOINBbaTNO+FJUWWWHlo5pDEKAoGYuysz5TBGoT3Lexz8bMfdkuHMa3uIQ==", "requires": { "@comunica/types": "^2.10.0" } }, "@comunica/mediator-all": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-all/-/mediator-all-2.10.0.tgz", + "integrity": "sha512-y1+A+sIW462G8iPzi6BSPIb4I9iy08ZruM2Thf1or6sytwLKro7E2RYjS6IdupwfFYafXXCeT85+lrJgTKERhQ==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/mediator-combine-pipeline": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-2.10.0.tgz", + "integrity": "sha512-j7+/oUlbhKB4Rq6g9oNKU+e9cQL8U9z8tAUNhoXUSHajcr4huj0t1+riaOD109/DRWhV793ILhBDzgiZbHd7DA==", "requires": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -21788,12 +26245,16 @@ }, "@comunica/mediator-combine-union": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-2.10.0.tgz", + "integrity": "sha512-QbP4zP1i6nMDZ8teC0RoTz5E8pOpxDhWPBr1ylb2jzPUjPpMgrnbHYTondlN0Oau3SMEehItojg/LYDtPOP/GQ==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/mediator-join-coefficients-fixed": { "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/mediator-join-coefficients-fixed/-/mediator-join-coefficients-fixed-2.10.1.tgz", + "integrity": "sha512-HRvc0e8QDnR3sbRMMCyx9ILFA6KiUxHEqDOpt7BV3kFMWWIpBavFDwPUjLBG6sRA8o0CFu1+oVVh5fAFYZIxzQ==", "requires": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -21804,30 +26265,40 @@ }, "@comunica/mediator-number": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-2.10.0.tgz", + "integrity": "sha512-0T8D1HGTu5Sd8iKb2dBjc6VRc/U4A15TAN6m561ra9pFlP+w31kby0ZYP6WWBHBobbUsX1LCvnbRQaAC4uWwVw==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/mediator-race": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-2.10.0.tgz", + "integrity": "sha512-JiEtOLMkPnbjSLabVpE4VqDbu2ZKKnkUdATGBeWX+o+MjPw6c0hhw01RG4WY2rQhDyNl++nLQe3EowQh8xW9TA==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/mediatortype-accuracy": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-accuracy/-/mediatortype-accuracy-2.10.0.tgz", + "integrity": "sha512-u9Noai4yGACaBRGOoRZ65XoQhazKNx5QaFOX5nJ/p84Qq4g50woC2rpsncuyrXhW1j/rIc2WvIUGUfy/g6CDiw==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/mediatortype-httprequests": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-httprequests/-/mediatortype-httprequests-2.10.0.tgz", + "integrity": "sha512-uPjs/NdngHZZWomjZor6W29UeOlxganupIOa3Z6H3qdUnsSpxeoS9URXy7BICAX+4PmgebperSn18BRA+PWiSw==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/mediatortype-join-coefficients": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-join-coefficients/-/mediatortype-join-coefficients-2.10.0.tgz", + "integrity": "sha512-EPipAV5PDNeEVXbsd+8NsqNKu5ztCAoEJ3azcFAmD9di9ppArNJWU/mxy5yUzcBgMUX4wRp6jCa5rIF5sRHG7g==", "requires": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -21835,18 +26306,24 @@ }, "@comunica/mediatortype-time": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-2.10.0.tgz", + "integrity": "sha512-nBz1exxrja1Tj8KSlSevG4Hw2u09tTh6gtNfVjI76i/e7muu4RUWVhi9b8PcwBNAfuUqRl+5OgOSa2X4W+6QlA==", "requires": { "@comunica/core": "^2.10.0" } }, "@comunica/metadata": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/metadata/-/metadata-2.10.0.tgz", + "integrity": "sha512-PF7TKhuDIO4GE9tzuAkTxarQV5cmwXZ64hp0qm8Ql/V+dVHu/3xLL9v/Q67ZX26GF9hOyr7cdpNI08M7DHc86g==", "requires": { "@comunica/types": "^2.10.0" } }, "@comunica/query-sparql": { "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@comunica/query-sparql/-/query-sparql-2.10.2.tgz", + "integrity": "sha512-bgjQ8N5/vP3Iy71AgDKQc06mXmEBvh7dsenw2VPbvk11iXywec4XCq8TzX+GozL+Zxxl5XyYlBw+nRjvORTGHg==", "requires": { "@comunica/actor-context-preprocess-source-to-destination": "^2.10.0", "@comunica/actor-dereference-fallback": "^2.10.0", @@ -21984,6 +26461,8 @@ }, "@comunica/runner": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/runner/-/runner-2.10.0.tgz", + "integrity": "sha512-v/oEKT+IwjO6Y74bCCzlR+ZMI6oykpfz7GQrQbl1oTWQsvBbTdf0omPkoYnk1esEAsFnsJD+NGwAiRiFKeBo0A==", "requires": { "@comunica/bus-init": "^2.10.0", "@comunica/core": "^2.10.0", @@ -21993,6 +26472,8 @@ }, "@comunica/runner-cli": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/runner-cli/-/runner-cli-2.10.0.tgz", + "integrity": "sha512-16QI0rWFHURCy5waVFcZ/fhKI/hyzNx5YyCGPaEaUX8MKyamvCCXHSWvPLLbjJbsjGZ9wXrC9dwwhRmbfmidpw==", "requires": { "@comunica/core": "^2.10.0", "@comunica/runner": "^2.10.0", @@ -22002,6 +26483,8 @@ }, "@comunica/types": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@comunica/types/-/types-2.10.0.tgz", + "integrity": "sha512-1UjPGbZcYrapBjMGUZedrIGcn9rOLpEOlJo1ZkWddFUGTwndVg9d4BZnQw+UnQzXMcLJcdKt94Zns8iEmBqARw==", "requires": { "@rdfjs/types": "*", "@types/yargs": "^17.0.24", @@ -22011,12 +26494,16 @@ }, "@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "requires": { "@jridgewell/trace-mapping": "0.3.9" }, "dependencies": { "@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -22026,10 +26513,14 @@ }, "@cucumber/ci-environment": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@cucumber/ci-environment/-/ci-environment-9.1.0.tgz", + "integrity": "sha512-jdnF6APXP3GawMue8kdMxhu6TBhyRUO4KDRxTowf06NtclLjIw2Ybpo9IcIOMvE8kHukvJyM00uxWX+CfS7JgQ==", "dev": true }, "@cucumber/cucumber": { "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-8.11.1.tgz", + "integrity": "sha512-C+wdypoSzHA48GCRorJCAZYuxXo1RSESukAmoz/JhGV7KB4pIlg9Y2aWeZKx6bJQkq8yq4+S4jg9f8FGCdc3jQ==", "dev": true, "requires": { "@cucumber/ci-environment": "9.1.0", @@ -22075,6 +26566,8 @@ "dependencies": { "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, "requires": { "yallist": "^4.0.0" @@ -22082,6 +26575,8 @@ }, "semver": { "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -22089,12 +26584,16 @@ }, "yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@cucumber/cucumber-expressions": { "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber-expressions/-/cucumber-expressions-16.1.1.tgz", + "integrity": "sha512-Ugsb9qxfgrgfUKsGvbx0awVk+69NIFjWfxNT+dnm62YrF2gdTHYxAOzOLuPgvE0yqYTh+3otrFLDDfkHGThM1g==", "dev": true, "requires": { "regexp-match-indices": "1.0.2" @@ -22102,6 +26601,8 @@ }, "@cucumber/gherkin": { "version": "26.0.3", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-26.0.3.tgz", + "integrity": "sha512-xwJHi//bLFEU1drIyw2yswwUHnnVWO4XcyVBbCTDs6DkSh262GkogFI/IWwChZqJfOXnPglzLGxR1DibcZsILA==", "dev": true, "requires": { "@cucumber/messages": "19.1.4 - 21" @@ -22109,6 +26610,8 @@ }, "@cucumber/gherkin-streams": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-streams/-/gherkin-streams-5.0.1.tgz", + "integrity": "sha512-/7VkIE/ASxIP/jd4Crlp4JHXqdNFxPGQokqWqsaCCiqBiu5qHoKMxcWNlp9njVL/n9yN4S08OmY3ZR8uC5x74Q==", "dev": true, "requires": { "commander": "9.1.0", @@ -22117,12 +26620,16 @@ "dependencies": { "commander": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", + "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", "dev": true } } }, "@cucumber/gherkin-utils": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-utils/-/gherkin-utils-8.0.2.tgz", + "integrity": "sha512-aQlziN3r3cTwprEDbLEcFoMRQajb9DTOu2OZZp5xkuNz6bjSTowSY90lHUD2pWT7jhEEckZRIREnk7MAwC2d1A==", "dev": true, "requires": { "@cucumber/gherkin": "^25.0.0", @@ -22134,6 +26641,8 @@ "dependencies": { "@cucumber/gherkin": { "version": "25.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-25.0.2.tgz", + "integrity": "sha512-EdsrR33Y5GjuOoe2Kq5Y9DYwgNRtUD32H4y2hCrT6+AWo7ibUQu7H+oiWTgfVhwbkHsZmksxHSxXz/AwqqyCRQ==", "dev": true, "requires": { "@cucumber/messages": "^19.1.4" @@ -22141,6 +26650,8 @@ }, "@cucumber/messages": { "version": "19.1.4", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-19.1.4.tgz", + "integrity": "sha512-Pksl0pnDz2l1+L5Ug85NlG6LWrrklN9qkMxN5Mv+1XZ3T6u580dnE6mVaxjJRdcOq4tR17Pc0RqIDZMyVY1FlA==", "dev": true, "requires": { "@types/uuid": "8.3.4", @@ -22151,30 +26662,42 @@ }, "@types/uuid": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, "commander": { "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true }, "uuid": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true } } }, "@cucumber/html-formatter": { "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-20.2.1.tgz", + "integrity": "sha512-bwwyr1WjlOJ5dEFOLGbtYWbUprloB2eymqXBmmTC10s0xapZXkFn4VfHgMshaH91XiCIY/MoabWNAau3AeMHkQ==", "dev": true, "requires": {} }, "@cucumber/message-streams": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/message-streams/-/message-streams-4.0.1.tgz", + "integrity": "sha512-Kxap9uP5jD8tHUZVjTWgzxemi/0uOsbGjd4LBOSxcJoOCRbESFwemUzilJuzNTB8pcTQUh8D5oudUyxfkJOKmA==", "dev": true, "requires": {} }, "@cucumber/messages": { "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-21.0.1.tgz", + "integrity": "sha512-pGR7iURM4SF9Qp1IIpNiVQ77J9kfxMkPOEbyy+zRmGABnWWCsqMpJdfHeh9Mb3VskemVw85++e15JT0PYdcR3g==", "dev": true, "requires": { "@types/uuid": "8.3.4", @@ -22185,20 +26708,28 @@ "dependencies": { "@types/uuid": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, "uuid": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true } } }, "@cucumber/tag-expressions": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/tag-expressions/-/tag-expressions-5.0.1.tgz", + "integrity": "sha512-N43uWud8ZXuVjza423T9ZCIJsaZhFekmakt7S9bvogTxqdVGbRobjR663s0+uW0Rz9e+Pa8I6jUuWtoBLQD2Mw==", "dev": true }, "@dabh/diagnostics": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "requires": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -22207,6 +26738,8 @@ }, "@digitalbazaar/http-client": { "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", "requires": { "ky": "^0.33.3", "ky-universal": "^0.11.0", @@ -22215,15 +26748,21 @@ }, "@eslint-community/eslint-utils": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "requires": { "eslint-visitor-keys": "^3.4.3" } }, "@eslint-community/regexpp": { - "version": "4.12.1" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==" }, "@eslint/eslintrc": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -22237,10 +26776,14 @@ } }, "@eslint/js": { - "version": "8.57.1" + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==" }, "@ethereumjs/common": { "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", "dev": true, "requires": { "crc-32": "^1.2.0", @@ -22249,6 +26792,8 @@ "dependencies": { "ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", @@ -22270,6 +26815,8 @@ }, "ethereumjs-util": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, "requires": { "@types/bn.js": "^5.1.0", @@ -22282,10 +26829,14 @@ } }, "@ethereumjs/rlp": { - "version": "4.0.1" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" }, "@ethereumjs/tx": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", "dev": true, "requires": { "@ethereumjs/common": "^2.6.4", @@ -22294,6 +26845,8 @@ "dependencies": { "ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", @@ -22315,6 +26868,8 @@ }, "ethereumjs-util": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, "requires": { "@types/bn.js": "^5.1.0", @@ -22328,6 +26883,8 @@ }, "@ethereumjs/util": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "requires": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", @@ -22335,13 +26892,19 @@ }, "dependencies": { "@noble/hashes": { - "version": "1.4.0" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" }, "@scure/base": { - "version": "1.1.9" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==" }, "@scure/bip32": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "requires": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -22350,6 +26913,8 @@ }, "@scure/bip39": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "requires": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -22357,6 +26922,8 @@ }, "ethereum-cryptography": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "requires": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -22368,6 +26935,8 @@ }, "@ethersproject/abi": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "requires": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -22382,6 +26951,8 @@ }, "@ethersproject/abstract-provider": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -22394,6 +26965,8 @@ }, "@ethersproject/abstract-signer": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -22404,6 +26977,8 @@ }, "@ethersproject/address": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -22414,12 +26989,16 @@ }, "@ethersproject/base64": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "requires": { "@ethersproject/bytes": "^5.7.0" } }, "@ethersproject/basex": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/properties": "^5.7.0" @@ -22427,6 +27006,8 @@ }, "@ethersproject/bignumber": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -22435,18 +27016,24 @@ }, "@ethersproject/bytes": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "requires": { "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/constants": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "requires": { "@ethersproject/bignumber": "^5.7.0" } }, "@ethersproject/contracts": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", "requires": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -22462,6 +27049,8 @@ }, "@ethersproject/hash": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "requires": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -22476,6 +27065,8 @@ }, "@ethersproject/hdnode": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", "requires": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/basex": "^5.7.0", @@ -22493,6 +27084,8 @@ }, "@ethersproject/json-wallets": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", "requires": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -22511,22 +27104,30 @@ }, "@ethersproject/keccak256": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "requires": { "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" } }, "@ethersproject/logger": { - "version": "5.7.0" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, "@ethersproject/networks": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "requires": { "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/pbkdf2": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/sha2": "^5.7.0" @@ -22534,12 +27135,16 @@ }, "@ethersproject/properties": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", "requires": { "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/providers": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -22565,12 +27170,16 @@ "dependencies": { "ws": { "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} } } }, "@ethersproject/random": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -22578,6 +27187,8 @@ }, "@ethersproject/rlp": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -22585,6 +27196,8 @@ }, "@ethersproject/sha2": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -22593,6 +27206,8 @@ }, "@ethersproject/signing-key": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -22604,6 +27219,8 @@ }, "@ethersproject/solidity": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -22615,6 +27232,8 @@ }, "@ethersproject/strings": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -22623,6 +27242,8 @@ }, "@ethersproject/transactions": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "requires": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -22637,6 +27258,8 @@ }, "@ethersproject/units": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -22645,6 +27268,8 @@ }, "@ethersproject/wallet": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -22665,6 +27290,8 @@ }, "@ethersproject/web": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "requires": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -22675,6 +27302,8 @@ }, "@ethersproject/wordlists": { "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", @@ -22684,10 +27313,20 @@ } }, "@fastify/busboy": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==" + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true }, "@humanwhocodes/config-array": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "requires": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -22695,13 +27334,19 @@ } }, "@humanwhocodes/module-importer": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" }, "@humanwhocodes/object-schema": { - "version": "2.0.3" + "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==" }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -22713,6 +27358,8 @@ "dependencies": { "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -22720,10 +27367,14 @@ }, "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "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, "requires": { "locate-path": "^5.0.0", @@ -22732,6 +27383,8 @@ }, "js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -22740,6 +27393,8 @@ }, "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, "requires": { "p-locate": "^4.1.0" @@ -22747,6 +27402,8 @@ }, "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, "requires": { "p-try": "^2.0.0" @@ -22754,6 +27411,8 @@ }, "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, "requires": { "p-limit": "^2.2.0" @@ -22761,20 +27420,28 @@ }, "resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true } } }, "@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jeswr/prefixcc": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jeswr/prefixcc/-/prefixcc-1.2.1.tgz", + "integrity": "sha512-kBBXbqsaeh3Irp416h/RbelqJgIOp6X/OJJlYmLyr/9qlBYKTKSCuEv5/xjZ0Yf8Yec+QFRYBaOQ2JkMBSH7KA==", "requires": { "cross-fetch": "^3.1.5", "fsevents": "^2.3.2" @@ -22782,24 +27449,34 @@ "dependencies": { "cross-fetch": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "requires": { "node-fetch": "^2.6.12" } }, "node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } }, "tr46": { - "version": "0.0.3" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "webidl-conversions": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -22808,7 +27485,9 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.5", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "requires": { "@jridgewell/set-array": "^1.2.1", @@ -22817,17 +27496,25 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.1.2" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" }, "@jridgewell/set-array": { "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 }, "@jridgewell/sourcemap-codec": { - "version": "1.5.0" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "@jridgewell/trace-mapping": { "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, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -22836,6 +27523,8 @@ }, "@metamask/eth-sig-util": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", "requires": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -22846,6 +27535,8 @@ }, "@motrix/nat-api": { "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@motrix/nat-api/-/nat-api-0.3.4.tgz", + "integrity": "sha512-RIH5sSP329Xn8TjDcAHYHn82VTajhdu2Ee4PTLA+9jCAi5x0D219D1XYW7nCK22ptcLrC+qzBXlWG/j16iuoLQ==", "requires": { "async": "^3.2.4", "debug": "^4.3.4", @@ -22857,18 +27548,26 @@ "dependencies": { "node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } }, "tr46": { - "version": "0.0.3" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "webidl-conversions": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -22878,33 +27577,47 @@ }, "@noble/curves": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "requires": { "@noble/hashes": "1.4.0" }, "dependencies": { "@noble/hashes": { - "version": "1.4.0" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" } } }, "@noble/hashes": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" }, "@noble/secp256k1": { - "version": "1.7.1" + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" }, "@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -22912,6 +27625,8 @@ }, "@nomicfoundation/edr": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.5.tgz", + "integrity": "sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng==", "requires": { "@nomicfoundation/edr-darwin-arm64": "0.6.5", "@nomicfoundation/edr-darwin-x64": "0.6.5", @@ -22923,37 +27638,57 @@ } }, "@nomicfoundation/edr-darwin-arm64": { - "version": "0.6.5" + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz", + "integrity": "sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw==" }, "@nomicfoundation/edr-darwin-x64": { - "version": "0.6.5" + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz", + "integrity": "sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==" }, "@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.6.5" + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz", + "integrity": "sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==" }, "@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.6.5" + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz", + "integrity": "sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==" }, "@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.6.5" + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz", + "integrity": "sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==" }, "@nomicfoundation/edr-linux-x64-musl": { - "version": "0.6.5" + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz", + "integrity": "sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==" }, "@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.6.5" + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz", + "integrity": "sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==" }, "@nomicfoundation/ethereumjs-common": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", "requires": { "@nomicfoundation/ethereumjs-util": "9.0.4" } }, "@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==" }, "@nomicfoundation/ethereumjs-tx": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", "requires": { "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-rlp": "5.0.4", @@ -22963,6 +27698,8 @@ "dependencies": { "ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -22985,6 +27722,8 @@ }, "@nomicfoundation/ethereumjs-util": { "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", "requires": { "@nomicfoundation/ethereumjs-rlp": "5.0.4", "ethereum-cryptography": "0.1.3" @@ -22992,6 +27731,8 @@ "dependencies": { "ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -23014,6 +27755,8 @@ }, "@nomicfoundation/solidity-analyzer": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "requires": { "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", @@ -23026,45 +27769,98 @@ }, "@nomicfoundation/solidity-analyzer-darwin-arm64": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "optional": true }, "@nomicfoundation/solidity-analyzer-darwin-x64": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", "optional": true }, "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "optional": true }, "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "optional": true }, "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "optional": true }, "@nomicfoundation/solidity-analyzer-linux-x64-musl": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "optional": true }, "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "optional": true }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "optional": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + } + } + }, "@openzeppelin/contracts": { - "version": "4.9.6" + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", + "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", + "dev": true }, "@polkadot-api/json-rpc-provider": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", "optional": true }, "@polkadot-api/json-rpc-provider-proxy": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1.tgz", + "integrity": "sha512-gmVDUP8LpCH0BXewbzqXF2sdHddq1H1q+XrAW2of+KZj4woQkIGBRGTJHeBEVHe30EB+UejR1N2dT4PO/RvDdg==", + "dev": true, "optional": true }, "@polkadot-api/metadata-builders": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1.tgz", + "integrity": "sha512-GCI78BHDzXAF/L2pZD6Aod/yl82adqQ7ftNmKg51ixRL02JpWUA+SpUKTJE5MY1p8kiJJIo09P2um24SiJHxNA==", + "dev": true, "optional": true, "requires": { "@polkadot-api/substrate-bindings": "0.0.1", @@ -23073,6 +27869,9 @@ }, "@polkadot-api/observable-client": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.1.0.tgz", + "integrity": "sha512-GBCGDRztKorTLna/unjl/9SWZcRmvV58o9jwU2Y038VuPXZcr01jcw/1O3x+yeAuwyGzbucI/mLTDa1QoEml3A==", + "dev": true, "optional": true, "requires": { "@polkadot-api/metadata-builders": "0.0.1", @@ -23083,6 +27882,9 @@ }, "@polkadot-api/substrate-bindings": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1.tgz", + "integrity": "sha512-bAe7a5bOPnuFVmpv7y4BBMRpNTnMmE0jtTqRUw/+D8ZlEHNVEJQGr4wu3QQCl7k1GnSV1wfv3mzIbYjErEBocg==", + "dev": true, "optional": true, "requires": { "@noble/hashes": "^1.3.1", @@ -23093,20 +27895,31 @@ "dependencies": { "@noble/hashes": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "dev": true, "optional": true } } }, "@polkadot-api/substrate-client": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.0.1.tgz", + "integrity": "sha512-9Bg9SGc3AwE+wXONQoW8GC00N3v6lCZLW74HQzqB6ROdcm5VAHM4CB/xRzWSUF9CXL78ugiwtHx3wBcpx4H4Wg==", + "dev": true, "optional": true }, "@polkadot-api/utils": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.0.1.tgz", + "integrity": "sha512-3j+pRmlF9SgiYDabSdZsBSsN5XHbpXOAce1lWj56IEEaFZVjsiCaxDOA7C9nCcgfVXuvnbxqqEGQvnY+QfBAUw==", + "dev": true, "optional": true }, "@polkadot/api": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-9.14.2.tgz", + "integrity": "sha512-R3eYFj2JgY1zRb+OCYQxNlJXCs2FA+AU4uIEiVcXnVLmR3M55tkRNEwYAZmiFxx0pQmegGgPMc33q7TWGdw24A==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/api-augment": "9.14.2", @@ -23129,6 +27942,8 @@ }, "@polkadot/api-augment": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-9.14.2.tgz", + "integrity": "sha512-19MmW8AHEcLkdcUIo3LLk0eCQgREWqNSxkUyOeWn7UiNMY1AhDOOwMStUBNCvrIDK6VL6GGc1sY7rkPCLMuKSw==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/api-base": "9.14.2", @@ -23141,6 +27956,8 @@ }, "@polkadot/api-base": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-9.14.2.tgz", + "integrity": "sha512-ky9fmzG1Tnrjr/SBZ0aBB21l0TFr+CIyQenQczoUyVgiuxVaI/2Bp6R2SFrHhG28P+PW2/RcYhn2oIAR2Z2fZQ==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/rpc-core": "9.14.2", @@ -23151,6 +27968,8 @@ }, "@polkadot/api-derive": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-9.14.2.tgz", + "integrity": "sha512-yw9OXucmeggmFqBTMgza0uZwhNjPxS7MaT7lSCUIRKckl1GejdV+qMhL3XFxPFeYzXwzFpdPG11zWf+qJlalqw==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/api": "9.14.2", @@ -23166,6 +27985,8 @@ }, "@polkadot/keyring": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", + "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/util": "10.4.2", @@ -23174,6 +27995,8 @@ }, "@polkadot/networks": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", + "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/util": "10.4.2", @@ -23182,6 +28005,8 @@ }, "@polkadot/rpc-augment": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-9.14.2.tgz", + "integrity": "sha512-mOubRm3qbKZTbP9H01XRrfTk7k5it9WyzaWAg72DJBQBYdgPUUkGSgpPD/Srkk5/5GAQTWVWL1I2UIBKJ4TJjQ==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/rpc-core": "9.14.2", @@ -23192,6 +28017,8 @@ }, "@polkadot/rpc-core": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-9.14.2.tgz", + "integrity": "sha512-krA/mtQ5t9nUQEsEVC1sjkttLuzN6z6gyJxK2IlpMS3S5ncy/R6w4FOpy+Q0H18Dn83JBo0p7ZtY7Y6XkK48Kw==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/rpc-augment": "9.14.2", @@ -23203,6 +28030,8 @@ }, "@polkadot/rpc-provider": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-9.14.2.tgz", + "integrity": "sha512-YTSywjD5PF01V47Ru5tln2LlpUwJiSOdz6rlJXPpMaY53hUp7+xMU01FVAQ1bllSBNisSD1Msv/mYHq84Oai2g==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/keyring": "^10.4.2", @@ -23221,6 +28050,8 @@ }, "@polkadot/types": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-9.14.2.tgz", + "integrity": "sha512-hGLddTiJbvowhhUZJ3k+olmmBc1KAjWIQxujIUIYASih8FQ3/YJDKxaofGOzh0VygOKW3jxQBN2VZPofyDP9KQ==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/keyring": "^10.4.2", @@ -23234,6 +28065,8 @@ }, "@polkadot/types-augment": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-9.14.2.tgz", + "integrity": "sha512-WO9d7RJufUeY3iFgt2Wz762kOu1tjEiGBR5TT4AHtpEchVHUeosVTrN9eycC+BhleqYu52CocKz6u3qCT/jKLg==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/types": "9.14.2", @@ -23243,6 +28076,8 @@ }, "@polkadot/types-codec": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-9.14.2.tgz", + "integrity": "sha512-AJ4XF7W1no4PENLBRU955V6gDxJw0h++EN3YoDgThozZ0sj3OxyFupKgNBZcZb2V23H8JxQozzIad8k+nJbO1w==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/util": "^10.4.2", @@ -23251,6 +28086,8 @@ }, "@polkadot/types-create": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-9.14.2.tgz", + "integrity": "sha512-nSnKpBierlmGBQT8r6/SHf6uamBIzk4WmdMsAsR4uJKJF1PtbIqx2W5PY91xWSiMSNMzjkbCppHkwaDAMwLGaw==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/types-codec": "9.14.2", @@ -23259,6 +28096,8 @@ }, "@polkadot/types-known": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-9.14.2.tgz", + "integrity": "sha512-iM8WOCgguzJ3TLMqlm4K1gKQEwWm2zxEKT1HZZ1irs/lAbBk9MquDWDvebryiw3XsLB8xgrp3RTIBn2Q4FjB2A==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/networks": "^10.4.2", @@ -23270,6 +28109,8 @@ }, "@polkadot/types-support": { "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-9.14.2.tgz", + "integrity": "sha512-VWCOPgXDK3XtXT7wMLyIWeNDZxUbNcw/8Pn6n6vMogs7o/n4h6WGbGMeTIQhPWyn831/RmkVs5+2DUC+2LlOhw==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/util": "^10.4.2" @@ -23277,6 +28118,8 @@ }, "@polkadot/util": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", + "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/x-bigint": "10.4.2", @@ -23289,6 +28132,8 @@ }, "@polkadot/util-crypto": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", + "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", "requires": { "@babel/runtime": "^7.20.13", "@noble/hashes": "1.2.0", @@ -23305,12 +28150,16 @@ }, "@polkadot/wasm-bridge": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.4.1.tgz", + "integrity": "sha512-QZDvz6dsUlbYsaMV5biZgZWkYH9BC5AfhT0f0/knv8+LrbAoQdP3Asbvddw8vyU9sbpuCHXrd4bDLBwUCRfrBQ==", "requires": { "@babel/runtime": "^7.20.6" } }, "@polkadot/wasm-crypto": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", + "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", "requires": { "@babel/runtime": "^7.20.6", "@polkadot/wasm-bridge": "6.4.1", @@ -23322,12 +28171,16 @@ }, "@polkadot/wasm-crypto-asmjs": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", + "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", "requires": { "@babel/runtime": "^7.20.6" } }, "@polkadot/wasm-crypto-init": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.4.1.tgz", + "integrity": "sha512-1ALagSi/nfkyFaH6JDYfy/QbicVbSn99K8PV9rctDUfxc7P06R7CoqbjGQ4OMPX6w1WYVPU7B4jPHGLYBlVuMw==", "requires": { "@babel/runtime": "^7.20.6", "@polkadot/wasm-bridge": "6.4.1", @@ -23337,6 +28190,8 @@ }, "@polkadot/wasm-crypto-wasm": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", + "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", "requires": { "@babel/runtime": "^7.20.6", "@polkadot/wasm-util": "6.4.1" @@ -23344,12 +28199,16 @@ }, "@polkadot/wasm-util": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.4.1.tgz", + "integrity": "sha512-Uwo+WpEsDmFExWC5kTNvsVhvqXMZEKf4gUHXFn4c6Xz4lmieRT5g+1bO1KJ21pl4msuIgdV3Bksfs/oiqMFqlw==", "requires": { "@babel/runtime": "^7.20.6" } }, "@polkadot/x-bigint": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", + "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -23357,6 +28216,8 @@ }, "@polkadot/x-fetch": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", + "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2", @@ -23366,12 +28227,16 @@ }, "@polkadot/x-global": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", + "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", "requires": { "@babel/runtime": "^7.20.13" } }, "@polkadot/x-randomvalues": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", + "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -23379,6 +28244,8 @@ }, "@polkadot/x-textdecoder": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", + "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -23386,6 +28253,8 @@ }, "@polkadot/x-textencoder": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", + "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2" @@ -23393,6 +28262,8 @@ }, "@polkadot/x-ws": { "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", + "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", "requires": { "@babel/runtime": "^7.20.13", "@polkadot/x-global": "10.4.2", @@ -23402,6 +28273,9 @@ }, "@prb/math": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@prb/math/-/math-2.5.0.tgz", + "integrity": "sha512-iSNQd4L3HaYuAIhJliLVa7WGsyjFiQHGpomrFgdj7FhYGHT6Yo8bBwbmwAPF1bHD3LN8gdg+ssKrRUPNaNPEVw==", + "dev": true, "requires": { "@ethersproject/bignumber": "^5.5.0", "decimal.js": "^10.3.1", @@ -23410,58 +28284,91 @@ } }, "@protobufjs/aspromise": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "@protobufjs/base64": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "@protobufjs/codegen": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, "@protobufjs/eventemitter": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "@protobufjs/fetch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "@protobufjs/inquire": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "@protobufjs/path": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "@protobufjs/pool": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "@protobufjs/utf8": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@questdb/nodejs-client": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@questdb/nodejs-client/-/nodejs-client-3.0.0.tgz", + "integrity": "sha512-lBKd732rRpS/pqyWgCJFVXi9N1YoWDAUZzp6BngBVxH92As/NDXigZmCYKQVKpAEGYx14606CH5AoJ23qf3oqA==" }, "@rdfjs/types": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", "requires": { "@types/node": "*" } }, "@rtsao/scc": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "peer": true }, "@rubensworks/saxes": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@rubensworks/saxes/-/saxes-6.0.1.tgz", + "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", "requires": { "xmlchars": "^2.2.0" } }, "@rushstack/node-core-library": { "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.10.0.tgz", + "integrity": "sha512-2pPLCuS/3x7DCd7liZkqOewGM0OzLyCacdvOe8j6Yrx9LkETGnxul1t7603bIaB8nUAooORcct9fFDOQMbWAgw==", "requires": { "ajv": "~8.13.0", "ajv-draft-04": "~1.0.0", @@ -23475,6 +28382,8 @@ "dependencies": { "ajv": { "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "requires": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -23484,10 +28393,14 @@ }, "ajv-draft-04": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", "requires": {} }, "fs-extra": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -23495,36 +28408,50 @@ } }, "json-schema-traverse": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "requires": { "graceful-fs": "^4.1.6" } }, "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==", "requires": { "yallist": "^4.0.0" } }, "semver": { "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } }, "universalify": { - "version": "0.1.2" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "yallist": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "@rushstack/terminal": { "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.3.tgz", + "integrity": "sha512-csXbZsAdab/v8DbU1sz7WC2aNaKArcdS/FPmXMOXEj/JBBZMvDK0+1b4Qao0kkG0ciB1Qe86/Mb68GjH6/TnMw==", "requires": { "@rushstack/node-core-library": "5.10.0", "supports-color": "~8.1.1" @@ -23532,6 +28459,8 @@ }, "@rushstack/ts-command-line": { "version": "4.23.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.1.tgz", + "integrity": "sha512-40jTmYoiu/xlIpkkRsVfENtBq4CW3R4azbL0Vmda+fMwHWqss6wwf/Cy/UJmMqIzpfYc2OTnjYP1ZLD3CmyeCA==", "requires": { "@rushstack/terminal": "0.14.3", "@types/argparse": "1.0.38", @@ -23541,20 +28470,28 @@ "dependencies": { "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { "sprintf-js": "~1.0.2" } }, "sprintf-js": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" } } }, "@scure/base": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" }, "@scure/bip32": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "requires": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", @@ -23563,6 +28500,8 @@ }, "@scure/bip39": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", "requires": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" @@ -23570,6 +28509,8 @@ }, "@sentry/core": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "requires": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -23579,12 +28520,16 @@ }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@sentry/hub": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "requires": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -23592,12 +28537,16 @@ }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@sentry/minimal": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "requires": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -23605,12 +28554,16 @@ }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@sentry/node": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "requires": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -23624,15 +28577,21 @@ }, "dependencies": { "cookie": { - "version": "0.4.2" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@sentry/tracing": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "requires": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -23642,31 +28601,43 @@ }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@sentry/types": { - "version": "5.30.0" + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" }, "@sentry/utils": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "requires": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@sindresorhus/is": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, "@sinonjs/commons": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -23674,12 +28645,16 @@ "dependencies": { "type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true } } }, "@sinonjs/fake-timers": { "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -23687,6 +28662,8 @@ "dependencies": { "@sinonjs/commons": { "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -23694,12 +28671,16 @@ }, "type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true } } }, "@sinonjs/samsam": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz", + "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==", "dev": true, "requires": { "@sinonjs/commons": "^2.0.0", @@ -23709,29 +28690,41 @@ }, "@sinonjs/text-encoding": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, "@smessie/readable-web-to-node-stream": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smessie/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.3.tgz", + "integrity": "sha512-8FFE7psRtRWQT31/duqbmgnSf2++QLR2YH9kj5iwsHhnoqSvHdOY3SAN5e7dhc+60p2cNk7rv3HYOiXOapTEXQ==", "requires": { "process": "^0.11.10", "readable-stream": "^4.5.1" } }, "@stablelib/aead": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==" }, "@stablelib/binary": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", "requires": { "@stablelib/int": "^1.0.1" } }, "@stablelib/bytes": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" }, "@stablelib/chacha": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", "requires": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -23739,6 +28732,8 @@ }, "@stablelib/chacha20poly1305": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", + "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", "requires": { "@stablelib/aead": "^1.0.1", "@stablelib/binary": "^1.0.1", @@ -23749,13 +28744,19 @@ } }, "@stablelib/constant-time": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" }, "@stablelib/hash": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" }, "@stablelib/hkdf": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hkdf/-/hkdf-1.0.1.tgz", + "integrity": "sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==", "requires": { "@stablelib/hash": "^1.0.1", "@stablelib/hmac": "^1.0.1", @@ -23764,6 +28765,8 @@ }, "@stablelib/hmac": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", + "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", "requires": { "@stablelib/constant-time": "^1.0.1", "@stablelib/hash": "^1.0.1", @@ -23771,16 +28774,22 @@ } }, "@stablelib/int": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" }, "@stablelib/keyagreement": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", "requires": { "@stablelib/bytes": "^1.0.1" } }, "@stablelib/poly1305": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", "requires": { "@stablelib/constant-time": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -23788,6 +28797,8 @@ }, "@stablelib/random": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", "requires": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -23795,6 +28806,8 @@ }, "@stablelib/sha256": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", "requires": { "@stablelib/binary": "^1.0.1", "@stablelib/hash": "^1.0.1", @@ -23802,10 +28815,14 @@ } }, "@stablelib/wipe": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" }, "@stablelib/x25519": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", + "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", "requires": { "@stablelib/keyagreement": "^1.0.1", "@stablelib/random": "^1.0.2", @@ -23814,6 +28831,8 @@ }, "@substrate/connect": { "version": "0.7.19", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.19.tgz", + "integrity": "sha512-+DDRadc466gCmDU71sHrYOt1HcI2Cbhm7zdCFjZfFVHXhC/E8tOdrVSglAH2HDEHR0x2SiHRxtxOGC7ak2Zjog==", "optional": true, "requires": { "@substrate/connect-extension-protocol": "^1.0.1", @@ -23823,20 +28842,29 @@ "dependencies": { "eventemitter3": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "optional": true } } }, "@substrate/connect-extension-protocol": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz", + "integrity": "sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==", "optional": true }, "@substrate/connect-known-chains": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.8.0.tgz", + "integrity": "sha512-sl7WfeDgnZuPvUl5Xw0XIziOTe8rEBJ3uugyDETGnafxEbjYMv5aJL0ilq5djhnQ7l9OuMJCN3Ckved2yINeeQ==", "optional": true }, "@substrate/light-client-extension-helpers": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.6.tgz", + "integrity": "sha512-girltEuxQ1BvkJWmc8JJlk4ZxnlGXc/wkLcNguhY+UoDEMBK0LsdtfzQKIfrIehi4QdeSBlFEFBoI4RqPmsZzA==", + "dev": true, "optional": true, "requires": { "@polkadot-api/json-rpc-provider": "0.0.1", @@ -23850,12 +28878,17 @@ "dependencies": { "@substrate/connect-extension-protocol": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.1.tgz", + "integrity": "sha512-GoafTgm/Jey9E4Xlj4Z5ZBt/H4drH2CNq8VrAro80rtoznrXnFDNVivLQzZN0Xaj2g8YXSn9pC9Oc9IovYZJXw==", + "dev": true, "optional": true } } }, "@substrate/smoldot-light": { "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.7.9.tgz", + "integrity": "sha512-HP8iP7sFYlpSgjjbo0lqHyU+gu9lL2hbDNce6dWk5/10mFFF9jKIFGfui4zCecUY808o/Go9pan/31kMJoLbug==", "optional": true, "requires": { "pako": "^2.0.4", @@ -23863,10 +28896,14 @@ } }, "@substrate/ss58-registry": { - "version": "1.51.0" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==" }, "@szmarczak/http-timer": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "requires": { "defer-to-connect": "^2.0.1" @@ -23874,35 +28911,53 @@ }, "@teppeis/multimaps": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@teppeis/multimaps/-/multimaps-2.0.0.tgz", + "integrity": "sha512-TL1adzq1HdxUf9WYduLcQ/DNGYiz71U31QRgbnr0Ef1cPyOUOsBojxHVWpFeOSUucB6Lrs0LxFRA14ntgtkc9w==", "dev": true }, "@tootallnate/once": { "version": "1.1.2", - "dev": true + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "devOptional": true }, "@tsconfig/node10": { - "version": "1.0.11" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "@tsconfig/node12": { - "version": "1.0.11" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" }, "@tsconfig/node14": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" }, "@tsconfig/node16": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "@types/argparse": { - "version": "1.0.38" + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==" }, "@types/bn.js": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", "requires": { "@types/node": "*" } }, "@types/cacheable-request": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "requires": { "@types/http-cache-semantics": "*", @@ -23913,27 +28968,37 @@ }, "@types/debug": { "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "requires": { "@types/ms": "*" } }, "@types/http-cache-semantics": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true }, "@types/http-link-header": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", + "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", "requires": { "@types/node": "*" } }, "@types/json5": { "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 }, "@types/keyv": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "requires": { "@types/node": "*" @@ -23941,38 +29006,56 @@ }, "@types/lodash": { "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", "dev": true }, "@types/long": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/lru-cache": { - "version": "5.1.1" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, "@types/minimatch": { - "version": "3.0.5" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "@types/minimist": { - "version": "1.2.5" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" }, "@types/ms": { - "version": "0.7.34" + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "@types/n3": { "version": "1.21.1", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.21.1.tgz", + "integrity": "sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw==", "requires": { "@rdfjs/types": "^1.1.0", "@types/node": "*" } }, "@types/node": { - "version": "22.10.1", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "requires": { "undici-types": "~6.20.0" } }, "@types/node-fetch": { "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", "requires": { "@types/node": "*", "form-data": "^4.0.0" @@ -23980,118 +29063,176 @@ }, "@types/pbkdf2": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "requires": { "@types/node": "*" } }, "@types/qs": { - "version": "6.9.17" + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==" }, "@types/readable-stream": { "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", "requires": { "@types/node": "*", "safe-buffer": "~5.1.1" }, "dependencies": { "safe-buffer": { - "version": "5.1.2" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "@types/responselike": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, "requires": { "@types/node": "*" } }, "@types/retry": { - "version": "0.12.0" + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "@types/secp256k1": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", "requires": { "@types/node": "*" } }, "@types/semver": { - "version": "7.5.8" + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" }, "@types/spark-md5": { - "version": "3.0.5" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/spark-md5/-/spark-md5-3.0.5.tgz", + "integrity": "sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==" }, "@types/sparqljs": { "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", + "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", "requires": { "@rdfjs/types": ">=1.0.0" } }, "@types/triple-beam": { - "version": "1.3.5" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, "@types/uritemplate": { - "version": "0.3.6" + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@types/uritemplate/-/uritemplate-0.3.6.tgz", + "integrity": "sha512-31BMGZ8GgLxgXxLnqg4KbbyYJjU1flhTTD2+PVQStVUPXSk0IIpK0zt+tH3eLT7ZRwLnzQw6JhYx69qza3U0wg==" }, "@types/uuid": { - "version": "9.0.8" + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" }, "@types/validator": { - "version": "13.12.2" + "version": "13.12.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz", + "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==" }, "@types/websocket": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.10.tgz", + "integrity": "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==", "requires": { "@types/node": "*" } }, "@types/yargs": { "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "21.0.3" + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "@ungap/structured-clone": { - "version": "1.2.0" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==" }, "@vascosantos/moving-average": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz", + "integrity": "sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w==" }, "abab": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, "abort-controller": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "requires": { "event-target-shim": "^5.0.0" } }, "abortable-iterator": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-3.0.2.tgz", + "integrity": "sha512-qVP8HFfTpUQI2F+f1tpTriKDIZ4XrmwCrBCrQeRKO7DKWF3kgoT6NXiNDv2krrGcHxPwmI63eGQiec81sEaWIw==", "requires": { "get-iterator": "^1.0.2" } }, "abortcontroller-polyfill": { - "version": "1.7.6", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz", + "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==", "dev": true }, "accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "acorn": { - "version": "8.14.0" + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" }, "acorn-globals": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { "acorn": "^7.1.1", @@ -24100,32 +29241,55 @@ "dependencies": { "acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true } } }, "acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "requires": {} }, "acorn-walk": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "adm-zip": { - "version": "0.4.16" + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" }, "aes-js": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, "agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" } }, + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, "aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -24133,6 +29297,8 @@ }, "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -24142,12 +29308,16 @@ }, "ajv-formats": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "requires": { "ajv": "^8.0.0" }, "dependencies": { "ajv": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -24156,46 +29326,64 @@ } }, "json-schema-traverse": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" } } }, "ansi-align": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { "string-width": "^4.1.0" } }, "ansi-colors": { - "version": "4.1.3" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" }, "ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.21.3" + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, "ansi-regex": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "any-promise": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, "any-signal": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-2.1.2.tgz", + "integrity": "sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==", "requires": { "abort-controller": "^3.0.0", "native-abort-controller": "^1.0.3" @@ -24203,38 +29391,83 @@ }, "anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "app-root-path": { - "version": "3.1.0" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==" }, "append-transform": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "requires": { "default-require-extensions": "^3.0.0" } }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, "archy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "arg": { - "version": "4.1.3" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "argparse": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "aria-query": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "peer": true }, "array-buffer-byte-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "peer": true, "requires": { @@ -24243,10 +29476,14 @@ } }, "array-flatten": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "array-includes": { "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, "requires": { @@ -24260,6 +29497,8 @@ }, "array.prototype.findlast": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "peer": true, "requires": { @@ -24273,6 +29512,8 @@ }, "array.prototype.findlastindex": { "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, "requires": { @@ -24286,6 +29527,8 @@ }, "array.prototype.flat": { "version": "1.3.2", + "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, "requires": { @@ -24297,6 +29540,8 @@ }, "array.prototype.flatmap": { "version": "1.3.2", + "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, "requires": { @@ -24308,6 +29553,8 @@ }, "array.prototype.tosorted": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "peer": true, "requires": { @@ -24320,6 +29567,8 @@ }, "arraybuffer.prototype.slice": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "peer": true, "requires": { @@ -24334,10 +29583,14 @@ } }, "arrayify-stream": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.1.tgz", + "integrity": "sha512-z8fB6PtmnewQpFB53piS2d1KlUi3BPMICH2h7leCOUXpQcwvZ4GbHHSpdKoUrgLMR6b4Qan/uDe1St3Ao3yIHg==" }, "asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -24345,6 +29598,8 @@ }, "asn1.js": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -24353,20 +29608,28 @@ }, "dependencies": { "bn.js": { - "version": "4.12.1" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" } } }, "assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true }, "assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "assertion-error-formatter": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", + "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", "dev": true, "requires": { "diff": "^4.0.1", @@ -24375,50 +29638,71 @@ } }, "assertion-tools": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-2.2.1.tgz", - "integrity": "sha512-JlA1S16Ox93PnYb45HvxNcax/Ii4gqTO8HLGa/ykj/ddp8EEHlokn6inJR2yMiz173WSFkCc0ciLJzGeaYBANw==", + "version": "8.0.0-gamma.1", + "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-8.0.0-gamma.1.tgz", + "integrity": "sha512-I4IHIiylrVFUoLy07qPxCbwwUk0Qpqfo0qL1cPBKcSY0e9b4+AHQoBLuSZkaE9rUy1wC+7vqBMikn4d/DW3FAw==", "requires": { "ethers": "^5.7.2", "jsonld": "^8.1.0", - "merkletreejs": "^0.3.2" + "merkletreejs": "^0.3.2", + "n3": "^1.23.1", + "rdf-canonize": "^4.0.1", + "uuid": "^8.3.2" } }, "ast-types-flow": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, "peer": true }, "async": { - "version": "3.2.6" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "async-limiter": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "async-mutex": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", + "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", "requires": { "tslib": "^2.3.1" } }, "asynciterator": { - "version": "3.9.0" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.9.0.tgz", + "integrity": "sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g==" }, "asyncjoin": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/asyncjoin/-/asyncjoin-1.2.4.tgz", + "integrity": "sha512-7/1g5uV2/iTDQteJ/pxqZq6qkO5406V+vNyOCYtHJ+mo6bmvvQHHrZgd7AtU/rx+cnz08NPWlwk8daW61thnlA==", "requires": { "asynciterator": "^3.9.0" } }, "asynckit": { - "version": "0.4.0" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "atomic-sleep": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" }, "available-typed-arrays": { "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, "requires": { "possible-typed-array-names": "^1.0.0" @@ -24426,6 +29710,8 @@ }, "awilix": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/awilix/-/awilix-7.0.3.tgz", + "integrity": "sha512-4Nmjyh9qloDwXfDK0DBuWd8WyFApyknoaKbE3leQflGLgNfNsBHy2/VYrlyy/mzMobjJ3J8XtNpbjzG3KRkIFQ==", "requires": { "camel-case": "^4.1.2", "fast-glob": "^3.2.11" @@ -24433,22 +29719,32 @@ }, "aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true }, "aws-ssl-profiles": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==" }, "aws4": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "dev": true }, "axe-core": { "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "dev": true, "peer": true }, "axios": { "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -24457,23 +29753,33 @@ }, "axobject-query": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "peer": true }, "b4a": { "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", "dev": true }, "balanced-match": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "bare-events": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "dev": true, "optional": true }, "bare-fs": { "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", "dev": true, "optional": true, "requires": { @@ -24484,11 +29790,15 @@ }, "bare-os": { "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", "dev": true, "optional": true }, "bare-path": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", "dev": true, "optional": true, "requires": { @@ -24496,27 +29806,37 @@ } }, "bare-stream": { - "version": "2.4.2", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz", + "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==", "dev": true, "optional": true, "requires": { - "streamx": "^2.20.0" + "streamx": "^2.21.0" } }, "base-x": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", "requires": { "safe-buffer": "^5.0.1" } }, "base64-js": { - "version": "1.5.1" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64url": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" }, "bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "requires": { "tweetnacl": "^0.14.3" @@ -24524,37 +29844,53 @@ "dependencies": { "tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true } } }, "bech32": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "big-integer": { - "version": "1.6.52" + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==" }, "bignumber.js": { - "version": "9.1.2" + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" }, "binary": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", "requires": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" } }, "binary-extensions": { - "version": "2.3.0" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" }, "bindings": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "requires": { "file-uri-to-path": "1.0.0" } }, "bl": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "requires": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -24563,6 +29899,8 @@ "dependencies": { "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -24572,16 +29910,24 @@ } }, "blakejs": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" }, "bluebird": { - "version": "3.4.7" + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" }, "bn.js": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -24599,23 +29945,31 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "boxen": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "requires": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -24629,6 +29983,8 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -24636,22 +29992,32 @@ }, "braces": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { "fill-range": "^7.1.1" } }, "brorand": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browser-process-hrtime": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "browser-stdout": { - "version": "1.3.1" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browserify-aes": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -24663,6 +30029,8 @@ }, "browserslist": { "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001669", @@ -24673,12 +30041,16 @@ }, "bs58": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "requires": { "base-x": "^3.0.2" } }, "bs58check": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "requires": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -24687,54 +30059,185 @@ }, "buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "buffer-equal-constant-time": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "buffer-from": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-indexof-polyfill": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" }, "buffer-reverse": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==" }, "buffer-to-arraybuffer": { "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", "dev": true }, "buffer-xor": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "buffers": { - "version": "0.1.1" + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" }, "bufferutil": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "requires": { "node-gyp-build": "^4.3.0" } }, "busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "requires": { "streamsearch": "^1.1.0" } }, "bytes": { - "version": "3.1.2" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "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==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true + } + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } }, "cacheable-lookup": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", "dev": true }, "cacheable-request": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "requires": { "clone-response": "^1.0.2", @@ -24748,6 +30251,8 @@ "dependencies": { "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -24755,12 +30260,16 @@ }, "lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true } } }, "caching-transform": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "requires": { "hasha": "^5.0.0", @@ -24771,6 +30280,8 @@ }, "call-bind": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "requires": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -24779,34 +30290,57 @@ } }, "call-bind-apply-helpers": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "requires": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, + "call-bound": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "requires": { + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" + } + }, "callsites": { - "version": "3.1.0" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camel-case": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "requires": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "camelcase": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "caniuse-lite": { - "version": "1.0.30001687", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "dev": true }, "canonicalize": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" }, "capital-case": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, "requires": { "no-case": "^3.0.4", @@ -24816,10 +30350,14 @@ }, "caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, "chai": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -24833,12 +30371,16 @@ }, "chainsaw": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", "requires": { "traverse": ">=0.3.0 <0.4" } }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24846,6 +30388,8 @@ "dependencies": { "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==", "requires": { "has-flag": "^4.0.0" } @@ -24854,6 +30398,8 @@ }, "check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "requires": { "get-func-name": "^2.0.2" @@ -24861,19 +30407,26 @@ }, "chokidar": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "requires": { "readdirp": "^4.0.1" } }, "chownr": { "version": "1.1.4", - "dev": true + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "ci-info": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "cids": { "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", "dev": true, "requires": { "buffer": "^5.5.0", @@ -24885,6 +30438,8 @@ "dependencies": { "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", @@ -24893,6 +30448,8 @@ }, "multicodec": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", "dev": true, "requires": { "buffer": "^5.6.0", @@ -24901,32 +30458,46 @@ }, "varint": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", "dev": true } } }, "cipher-base": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "requires": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" } }, "class-is": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" }, "class-transformer": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", "dev": true }, "clean-stack": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-boxes": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, "cli-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "requires": { "restore-cursor": "^4.0.0" @@ -24934,6 +30505,8 @@ }, "cli-table3": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -24942,6 +30515,8 @@ }, "cli-truncate": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { "slice-ansi": "^5.0.0", @@ -24950,10 +30525,14 @@ "dependencies": { "ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, "string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", @@ -24963,6 +30542,8 @@ }, "strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" @@ -24972,6 +30553,8 @@ }, "cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -24980,6 +30563,8 @@ }, "clone-response": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -24987,12 +30572,16 @@ "dependencies": { "mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true } } }, "color": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, "requires": { "color-convert": "^2.0.1", @@ -25001,25 +30590,41 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true + }, "colorette": { - "version": "2.0.20" + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "colorspace": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "requires": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -25027,6 +30632,8 @@ "dependencies": { "color": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -25034,37 +30641,54 @@ }, "color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.3" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" } } }, "combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } }, "command-exists": { - "version": "1.2.9" + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "commander": { "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true }, "commondir": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "complex.js": { - "version": "2.4.2" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.2.tgz", + "integrity": "sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g==", + "dev": true }, "componentsjs": { "version": "5.5.1", + "resolved": "https://registry.npmjs.org/componentsjs/-/componentsjs-5.5.1.tgz", + "integrity": "sha512-hmqq+ZUa98t9CoeWPGwE14I18aXQFAt66HRd8DaZCNggcSr82vhlyrjeXX0JAUMgr2MyQzwKstkv4INRAREguA==", "requires": { "@rdfjs/types": "*", "@types/minimist": "^1.2.0", @@ -25083,31 +30707,49 @@ }, "dependencies": { "@types/node": { - "version": "18.19.67", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "requires": { "undici-types": "~5.26.4" } }, "undici-types": { - "version": "5.26.5" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" } } }, "concat-map": { - "version": "0.0.1" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "confusing-browser-globals": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, "content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { "safe-buffer": "5.2.1" } }, "content-hash": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", "dev": true, "requires": { "cids": "^0.7.1", @@ -25116,23 +30758,35 @@ } }, "content-type": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "convert-source-map": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, "cookie": { - "version": "0.7.1" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { - "version": "1.0.6" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "core-util-is": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "cors": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "requires": { "object-assign": "^4", "vary": "^1" @@ -25140,10 +30794,14 @@ }, "crc-32": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true }, "create-hash": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -25154,6 +30812,8 @@ }, "create-hmac": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -25164,28 +30824,40 @@ } }, "create-require": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "cross-fetch": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "requires": { "node-fetch": "^2.6.12" }, "dependencies": { "node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } }, "tr46": { - "version": "0.0.3" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "webidl-conversions": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -25195,6 +30867,8 @@ }, "cross-spawn": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -25202,14 +30876,20 @@ } }, "crypto-js": { - "version": "4.2.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, "cssom": { "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "cssstyle": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { "cssom": "~0.3.6" @@ -25217,12 +30897,16 @@ "dependencies": { "cssom": { "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true } } }, "d": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "requires": { "es5-ext": "^0.10.64", "type": "^2.7.2" @@ -25230,6 +30914,8 @@ }, "d3": { "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", "dev": true, "requires": { "d3-array": "3", @@ -25266,6 +30952,8 @@ }, "d3-array": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", "dev": true, "requires": { "internmap": "1 - 2" @@ -25273,10 +30961,14 @@ }, "d3-axis": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", "dev": true }, "d3-brush": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dev": true, "requires": { "d3-dispatch": "1 - 3", @@ -25288,6 +30980,8 @@ }, "d3-chord": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", "dev": true, "requires": { "d3-path": "1 - 3" @@ -25295,14 +30989,20 @@ }, "d3-collection": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", "dev": true }, "d3-color": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", "dev": true }, "d3-contour": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dev": true, "requires": { "d3-array": "^3.2.0" @@ -25310,6 +31010,8 @@ }, "d3-delaunay": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", "dev": true, "requires": { "delaunator": "5" @@ -25317,10 +31019,14 @@ }, "d3-dispatch": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", "dev": true }, "d3-drag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dev": true, "requires": { "d3-dispatch": "1 - 3", @@ -25329,6 +31035,8 @@ }, "d3-dsv": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", "dev": true, "requires": { "commander": "7", @@ -25338,16 +31046,22 @@ "dependencies": { "commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true } } }, "d3-ease": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", "dev": true }, "d3-fetch": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "dev": true, "requires": { "d3-dsv": "1 - 3" @@ -25355,6 +31069,8 @@ }, "d3-force": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "dev": true, "requires": { "d3-dispatch": "1 - 3", @@ -25364,10 +31080,14 @@ }, "d3-format": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", "dev": true }, "d3-geo": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", "dev": true, "requires": { "d3-array": "2.5.0 - 3" @@ -25375,10 +31095,14 @@ }, "d3-hierarchy": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", "dev": true }, "d3-interpolate": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dev": true, "requires": { "d3-color": "1 - 3" @@ -25386,6 +31110,8 @@ }, "d3-node": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-node/-/d3-node-3.0.0.tgz", + "integrity": "sha512-JuuBToljSQBo+KHSuPVOEdKawsxuLDlrB8TZY8AkPkpvyKaGgX+g0ksgjRg+Mgat9fB77qFQrk09j72cD0yk7w==", "dev": true, "requires": { "d3": "^5.16.0", @@ -25394,10 +31120,14 @@ "dependencies": { "commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "d3": { "version": "5.16.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", "dev": true, "requires": { "d3-array": "1", @@ -25435,14 +31165,20 @@ }, "d3-array": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", "dev": true }, "d3-axis": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", "dev": true }, "d3-brush": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", + "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", "dev": true, "requires": { "d3-dispatch": "1", @@ -25454,6 +31190,8 @@ }, "d3-chord": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", "dev": true, "requires": { "d3-array": "1", @@ -25462,10 +31200,14 @@ }, "d3-color": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", "dev": true }, "d3-contour": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", "dev": true, "requires": { "d3-array": "^1.1.1" @@ -25473,10 +31215,14 @@ }, "d3-dispatch": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", "dev": true }, "d3-drag": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "dev": true, "requires": { "d3-dispatch": "1", @@ -25485,6 +31231,8 @@ }, "d3-dsv": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", "dev": true, "requires": { "commander": "2", @@ -25494,10 +31242,14 @@ }, "d3-ease": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", "dev": true }, "d3-fetch": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", "dev": true, "requires": { "d3-dsv": "1" @@ -25505,6 +31257,8 @@ }, "d3-force": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", "dev": true, "requires": { "d3-collection": "1", @@ -25515,10 +31269,14 @@ }, "d3-format": { "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", "dev": true }, "d3-geo": { "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", "dev": true, "requires": { "d3-array": "1" @@ -25526,10 +31284,14 @@ }, "d3-hierarchy": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", "dev": true }, "d3-interpolate": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", "dev": true, "requires": { "d3-color": "1" @@ -25537,22 +31299,32 @@ }, "d3-path": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", "dev": true }, "d3-polygon": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", "dev": true }, "d3-quadtree": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", "dev": true }, "d3-random": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", "dev": true }, "d3-scale": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", "dev": true, "requires": { "d3-array": "^1.2.0", @@ -25565,6 +31337,8 @@ }, "d3-scale-chromatic": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", "dev": true, "requires": { "d3-color": "1", @@ -25573,10 +31347,14 @@ }, "d3-selection": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", "dev": true }, "d3-shape": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "dev": true, "requires": { "d3-path": "1" @@ -25584,10 +31362,14 @@ }, "d3-time": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", "dev": true }, "d3-time-format": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", "dev": true, "requires": { "d3-time": "1" @@ -25595,10 +31377,14 @@ }, "d3-timer": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", "dev": true }, "d3-transition": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", "dev": true, "requires": { "d3-color": "1", @@ -25611,6 +31397,8 @@ }, "d3-zoom": { "version": "1.8.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", "dev": true, "requires": { "d3-dispatch": "1", @@ -25622,6 +31410,8 @@ }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -25631,22 +31421,32 @@ }, "d3-path": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", "dev": true }, "d3-polygon": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", "dev": true }, "d3-quadtree": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", "dev": true }, "d3-random": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", "dev": true }, "d3-scale": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", "dev": true, "requires": { "d3-array": "2.10.0 - 3", @@ -25658,6 +31458,8 @@ }, "d3-scale-chromatic": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", "dev": true, "requires": { "d3-color": "1 - 3", @@ -25666,10 +31468,14 @@ }, "d3-selection": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true }, "d3-shape": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", "dev": true, "requires": { "d3-path": "^3.1.0" @@ -25677,6 +31483,8 @@ }, "d3-time": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", "dev": true, "requires": { "d3-array": "2 - 3" @@ -25684,6 +31492,8 @@ }, "d3-time-format": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", "dev": true, "requires": { "d3-time": "1 - 3" @@ -25691,10 +31501,14 @@ }, "d3-timer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", "dev": true }, "d3-transition": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dev": true, "requires": { "d3-color": "1 - 3", @@ -25706,10 +31520,14 @@ }, "d3-voronoi": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", "dev": true }, "d3-zoom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", "dev": true, "requires": { "d3-dispatch": "1 - 3", @@ -25721,21 +31539,29 @@ }, "damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "peer": true }, "dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "data-uri-to-buffer": { - "version": "4.0.1" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" }, "data-urls": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "requires": { "abab": "^2.0.3", @@ -25745,6 +31571,8 @@ }, "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, "peer": true, "requires": { @@ -25755,6 +31583,8 @@ }, "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, "peer": true, "requires": { @@ -25765,6 +31595,8 @@ }, "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, "peer": true, "requires": { @@ -25774,53 +31606,75 @@ } }, "dateformat": { - "version": "4.6.3" + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" }, "debug": { - "version": "4.3.7", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "requires": { "ms": "^2.1.3" } }, "decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "decimal.js": { - "version": "10.4.3" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true }, "decode-uri-component": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, "decompress-response": { "version": "6.0.0", - "dev": true, + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { "mimic-response": "^3.1.0" } }, "deep-eql": { "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, "requires": { "type-detect": "^4.0.0" } }, "deep-extend": { - "version": "0.6.0" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { - "version": "0.1.4" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "default-gateway": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "requires": { "execa": "^5.0.0" } }, "default-require-extensions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "requires": { "strip-bom": "^4.0.0" @@ -25828,10 +31682,14 @@ }, "defer-to-connect": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, "define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "requires": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -25840,6 +31698,8 @@ }, "define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { "define-data-property": "^1.0.1", @@ -25849,54 +31709,763 @@ }, "delaunator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", "dev": true, "requires": { "robust-predicates": "^3.0.2" } }, "delayed-stream": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true }, "denque": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" }, "depd": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-libc": { "version": "2.0.3", - "dev": true + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" }, "diff": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, "dkg-evm-module": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-4.4.0.tgz", - "integrity": "sha512-2hBZI/KnbbOEiKr3mU7Nknz3Wis8hLWGvyCifevG4/fUO8v+oVdrshLvQJ6izAfDHeua2PHcW8Z3hn6eIdUVxA==", - "requires": { - "@openzeppelin/contracts": "^4.9.3", - "@polkadot/api": "^11.0.3", - "@polkadot/keyring": "^12.6.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "@prb/math": "^2.5.0", - "dotenv": "^16.0.3", - "hardhat": "^2.22.5", - "hardhat-deploy": "^0.11.25", - "hardhat-deploy-ethers": "^0.3.0-beta.13", + "version": "8.0.0-sigma.3", + "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-8.0.0-sigma.3.tgz", + "integrity": "sha512-32vhPrSwzSZt2cG3j5nf3y0Cu3QhMhanc7DeoXQ2e5VGKLVlA3yuNGw5e1zm0z3kQputYzNJaeznBFu13tDRwQ==", + "requires": { + "@openzeppelin/contracts": "^5.1.0", + "@polkadot/api": "^15.0.2", + "@polkadot/keyring": "^13.2.3", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "@prb/math": "^4.1.0", + "dotenv": "^16.4.7", + "hardhat": "^2.22.17", + "hardhat-deploy": "^0.12.4", + "hardhat-deploy-ethers": "^0.4.2", + "solady": "^0.0.285", "ts-node": "^10.9.1", - "typescript": "^4.9.4" + "typescript": "^5.7.2" }, "dependencies": { "@noble/hashes": { - "version": "1.6.1" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==" + }, + "@nomicfoundation/hardhat-ethers": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", + "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", + "peer": true, + "requires": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + } + }, + "@openzeppelin/contracts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz", + "integrity": "sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==" + }, + "@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "requires": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "requires": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "requires": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "requires": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, + "@polkadot/api": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-15.0.2.tgz", + "integrity": "sha512-CA8Pq2Gsz2MJvpkpIVNzaBs2eJGCr0sEodAb0vTOZW/ZlIDHcBWyWq3KXE+lBMWVzYBEC4Vz6MafNgq6Bsshlw==", + "requires": { + "@polkadot/api-augment": "15.0.2", + "@polkadot/api-base": "15.0.2", + "@polkadot/api-derive": "15.0.2", + "@polkadot/keyring": "^13.2.3", + "@polkadot/rpc-augment": "15.0.2", + "@polkadot/rpc-core": "15.0.2", + "@polkadot/rpc-provider": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-augment": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/types-create": "15.0.2", + "@polkadot/types-known": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + } + }, + "@polkadot/api-augment": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-15.0.2.tgz", + "integrity": "sha512-7qtfTihLKS7cT2kEsd8Y1+MJ+2n4Sl0y9BHuPhdNfKcDbGwCxIB7JzXNujww4Is4bF7w1lXcM2U0E/XwJi1BbQ==", + "requires": { + "@polkadot/api-base": "15.0.2", + "@polkadot/rpc-augment": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-augment": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/api-base": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-15.0.2.tgz", + "integrity": "sha512-5++EjpuCxzmrL2JJj511RrPK+IovuIQa8DJhyOp62VDMXPkqS/O6Df5wjYzQh/ftT1ZysftXqJAUA/LSUsH+2g==", + "requires": { + "@polkadot/rpc-core": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/util": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + } + }, + "@polkadot/api-derive": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-15.0.2.tgz", + "integrity": "sha512-nD8hXZxEv2/wuhjMmVP09lTAYd8inNgrLpLGUR+7hBQeVEQQTdNatkqMKpNIOk2MO46mtUK35NepvDBK9DWZzA==", + "requires": { + "@polkadot/api": "15.0.2", + "@polkadot/api-augment": "15.0.2", + "@polkadot/api-base": "15.0.2", + "@polkadot/rpc-core": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + } + }, + "@polkadot/keyring": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.2.3.tgz", + "integrity": "sha512-pgTo6DXNXub0wGD+MnVHYhKxf80Jl+QMOCb818ioGdXz++Uw4mTueFAwtB+N7TGo0HafhChUiNJDxFdlDkcAng==", + "requires": { + "@polkadot/util": "13.2.3", + "@polkadot/util-crypto": "13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/networks": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.2.3.tgz", + "integrity": "sha512-mG+zkXg/33AyPrkv2xBbAo3LBUwOwBn6qznBU/4jxiZPnVvCwMaxE7xHM22B5riItbNJ169FXv3wy0v6ZmkFbw==", + "requires": { + "@polkadot/util": "13.2.3", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + } + }, + "@polkadot/rpc-augment": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-15.0.2.tgz", + "integrity": "sha512-of88GdzsOs15HP+Gowh4G/iKKFkCNIeF0Wes8LiONfn+j2TmWt8blbyGhrIZZeApzbFUDFjnxUPGT40uWJcMpw==", + "requires": { + "@polkadot/rpc-core": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/rpc-core": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-15.0.2.tgz", + "integrity": "sha512-KOUnfXOAFCN0N23sEbS+FzXhX88JCvJst/nKzO9+q67NgYBEqgcaoG4tqt/VVedgkNi0kA7WAA3wyjt5UYMnrg==", + "requires": { + "@polkadot/rpc-augment": "15.0.2", + "@polkadot/rpc-provider": "15.0.2", + "@polkadot/types": "15.0.2", + "@polkadot/util": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + } + }, + "@polkadot/rpc-provider": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-15.0.2.tgz", + "integrity": "sha512-BwLP8gNskzqtQ2kMk+EX6WK4d9TU0XJ/nJg0TKC2dX5sSTpTF2JQIYp1wuOik4rKNXIU/1hKaDSSylMJj7AHeQ==", + "requires": { + "@polkadot/keyring": "^13.2.3", + "@polkadot/types": "15.0.2", + "@polkadot/types-support": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "@polkadot/x-fetch": "^13.2.3", + "@polkadot/x-global": "^13.2.3", + "@polkadot/x-ws": "^13.2.3", + "@substrate/connect": "0.8.11", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.0" + } + }, + "@polkadot/types": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-15.0.2.tgz", + "integrity": "sha512-6gZBnuXU58hQAXWI2daED2OaQwFMxbQdkE8HVGMovMobEf0PxPfIqf+GdnVmWbe09EU9mv2gCWBcdnvHSRBlQg==", + "requires": { + "@polkadot/keyring": "^13.2.3", + "@polkadot/types-augment": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/types-create": "15.0.2", + "@polkadot/util": "^13.2.3", + "@polkadot/util-crypto": "^13.2.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.0" + } + }, + "@polkadot/types-augment": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-15.0.2.tgz", + "integrity": "sha512-UiFJVEYML30+V9GdFAHPbA3s4MVQTL1CevsZMnX0+ApvlgEHJMZnVFfYF7jL2bl9BcUYM/zoxEAhj2MpqFFfxw==", + "requires": { + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/types-codec": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-15.0.2.tgz", + "integrity": "sha512-44Q40p1rl0t7Bl1QUamewqXNVPway9xgqByyifv6ODSGhtt+lFoarb3U4JzqRUuuK0PP57ePB0L8q81Totxeew==", + "requires": { + "@polkadot/util": "^13.2.3", + "@polkadot/x-bigint": "^13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/types-create": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-15.0.2.tgz", + "integrity": "sha512-YhpcqbH3oI87PkgrV6Fez9jWDqFIep0KcS1YWQcwc9gsBNnuour80t2AAK41/tqAYwOZi6tpJwIevnEhVkxFYA==", + "requires": { + "@polkadot/types-codec": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/types-known": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-15.0.2.tgz", + "integrity": "sha512-SyBo4xBoesHYiEfdW/nOgaftKgM7+puBWqQXq1Euz0MM5LDLjxBw22Srgk9ulGM6l9MsekIwCyX8geJ6/6J3Cg==", + "requires": { + "@polkadot/networks": "^13.2.3", + "@polkadot/types": "15.0.2", + "@polkadot/types-codec": "15.0.2", + "@polkadot/types-create": "15.0.2", + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/types-support": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-15.0.2.tgz", + "integrity": "sha512-I7Im/4K2/XDZ1LfeQeeNyvIkfvozIPQs8K1/nsICDOmBbvIsjxSeKWHOcFDMJ8AlPEer6bqNQavOyZA/pg9R/Q==", + "requires": { + "@polkadot/util": "^13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/util": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.2.3.tgz", + "integrity": "sha512-pioNnsig3qHXrfOKMe4Yqos8B8N3/EZUpS+WfTpWnn1VjYban/0GrTXeavPlAwggnY27b8fS6rBzQBhnVYDw8g==", + "requires": { + "@polkadot/x-bigint": "13.2.3", + "@polkadot/x-global": "13.2.3", + "@polkadot/x-textdecoder": "13.2.3", + "@polkadot/x-textencoder": "13.2.3", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + } + }, + "@polkadot/util-crypto": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.2.3.tgz", + "integrity": "sha512-5sbggmLbn5eiuVMyPROPlT5roHRqdKHOfSpioNbGvGIZ1qIWVoC1RfsK0NWJOVGDzy6DpQe0KYT/kgcU5Xsrzw==", + "requires": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.2.3", + "@polkadot/util": "13.2.3", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.2.3", + "@polkadot/x-randomvalues": "13.2.3", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + } + }, + "@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "requires": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + } + }, + "@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "requires": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + } + }, + "@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "requires": { + "tslib": "^2.7.0" + } + }, + "@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "requires": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "requires": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + } + }, + "@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "requires": { + "tslib": "^2.7.0" + } + }, + "@polkadot/x-bigint": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.2.3.tgz", + "integrity": "sha512-VKgEAh0LsxTd/Hg517Tt5ZU4CySjBwMpaojbkjgv3fOdg1cN7t4eFEUxpyj7mlO0cp22SzDh7nmy4TO98qhLQA==", + "requires": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/x-fetch": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.2.3.tgz", + "integrity": "sha512-7Nmk+8ieEGzz43nc1rX6nH3rQo6rhGmAaIXJWnXY9gOHY0k1me1bJYbP+xDdh8vcLh8eY3D1sESUwG6QYZW2lg==", + "requires": { + "@polkadot/x-global": "13.2.3", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + } + }, + "@polkadot/x-global": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.2.3.tgz", + "integrity": "sha512-7MYQIAEwBkRcNrgqac5PbB0kNPlI6ISJEy6/Nb+crj8BFjQ8rf11PF49fq0QsvDeuYM1aNLigrvYZNptQs4lbw==", + "requires": { + "tslib": "^2.8.0" + } + }, + "@polkadot/x-randomvalues": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.2.3.tgz", + "integrity": "sha512-Zf0GTfLmVk+VzPUmcQSpXjjmFzMTjPhXoLuIoE7xIu73T+vQ+TX9j7DvorN6bIRsnZ9l1SyTZsSf/NTjNZKIZg==", + "requires": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/x-textdecoder": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.2.3.tgz", + "integrity": "sha512-i8hRXPtGknmdm3FYv6/94I52VXHJZa5sgYNw1+Hqb4Jqmq4awUjea35CKXd/+aw70Qn8Ngg31l2GoiH494fa+Q==", + "requires": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/x-textencoder": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.2.3.tgz", + "integrity": "sha512-wJI3Bb/dC4zyBXJFm5+ZhyBXWoI5wvP8k8qX0/ZC0PQsgSAqs7LVhiofk4Wd94n0P41W5re58LrGXLyziSAshw==", + "requires": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0" + } + }, + "@polkadot/x-ws": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.2.3.tgz", + "integrity": "sha512-Y6MTAWgcnrnx/LkBx65X3ZyoJH5EFj3tXtflRoKg1+PLHSLuNBV7Wi5mLcE70z4e5c+4hgBbLq+8SqCqzFtSPw==", + "requires": { + "@polkadot/x-global": "13.2.3", + "tslib": "^2.8.0", + "ws": "^8.18.0" + } + }, + "@prb/math": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@prb/math/-/math-4.1.0.tgz", + "integrity": "sha512-ef5Xrlh3BeX4xT5/Wi810dpEPq2bYPndRxgFIaKSU1F/Op/s8af03kyom+mfU7gEpvfIZ46xu8W0duiHplbBMg==" + }, + "@scure/base": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", + "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==" + }, + "@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "optional": true, + "requires": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "@substrate/connect-extension-protocol": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.1.tgz", + "integrity": "sha512-GoafTgm/Jey9E4Xlj4Z5ZBt/H4drH2CNq8VrAro80rtoznrXnFDNVivLQzZN0Xaj2g8YXSn9pC9Oc9IovYZJXw==", + "optional": true + }, + "@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "requires": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + } + }, + "@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "peer": true, + "requires": { + "undici-types": "~6.19.2" + } + }, + "aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "peer": true + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ethers": { + "version": "6.13.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", + "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", + "peer": true, + "requires": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "dependencies": { + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "peer": true, + "requires": { + "@noble/hashes": "1.3.2" + } + }, + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "peer": true + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "peer": true + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "peer": true, + "requires": {} + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "hardhat-deploy": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.12.4.tgz", + "integrity": "sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-ethers": "^5.0.0" + }, + "dependencies": { + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } + } + }, + "hardhat-deploy-ethers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.4.2.tgz", + "integrity": "sha512-AskNH/XRYYYqPT94MvO5s1yMi+/QvoNjS4oU5VcVqfDU99kgpGETl+uIYHIrSXtH5sy7J6gyVjpRMf4x0tjLSQ==", + "requires": {} + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "requires": { + "ws": "^8.8.1" + } + }, + "typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==" + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "peer": true + } + } + }, + "dkg.js": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/dkg.js/-/dkg.js-6.5.5.tgz", + "integrity": "sha512-MSVbGYAZkWtTPCdDG+PLAsy/lGff5IKvCnk0QEdZ6P6ieV6Hbq4HMJHIxpFVXlw7OIdwNaEEt5S+jtTfkVuqmg==", + "dev": true, + "requires": { + "assertion-tools": "^2.2.1", + "axios": "^0.27.2", + "dkg-evm-module": "^4.4.0", + "ethers": "^6.1.0", + "jsonld": "^8.1.0", + "web3": "^1.7.3" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "dev": true }, "@polkadot/api": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-11.3.1.tgz", + "integrity": "sha512-q4kFIIHTLvKxM24b0Eo8hJevsPMme+aITJGrDML9BgdZYTRN14+cu5nXiCsQvaEamdyYj+uCXWe2OV9X7pPxsA==", + "dev": true, "requires": { "@polkadot/api-augment": "11.3.1", "@polkadot/api-base": "11.3.1", @@ -25919,6 +32488,9 @@ }, "@polkadot/api-augment": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-11.3.1.tgz", + "integrity": "sha512-Yj+6rb6h0WwY3yJ+UGhjGW+tyMRFUMsKQuGw+eFsXdjiNU9UoXsAqA2dG7Q1F+oeX/g+y2gLGBezNoCwbl6HfA==", + "dev": true, "requires": { "@polkadot/api-base": "11.3.1", "@polkadot/rpc-augment": "11.3.1", @@ -25931,6 +32503,9 @@ }, "@polkadot/api-base": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-11.3.1.tgz", + "integrity": "sha512-b8UkNL00NN7+3QaLCwL5cKg+7YchHoKCAhwKusWHNBZkkO6Oo2BWilu0dZkPJOyqV9P389Kbd9+oH+SKs9u2VQ==", + "dev": true, "requires": { "@polkadot/rpc-core": "11.3.1", "@polkadot/types": "11.3.1", @@ -25941,6 +32516,9 @@ }, "@polkadot/api-derive": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-11.3.1.tgz", + "integrity": "sha512-9dopzrh4cRuft1nANmBvMY/hEhFDu0VICMTOGxQLOl8NMfcOFPTLAN0JhSBUoicGZhV+c4vpv01NBx/7/IL1HA==", + "dev": true, "requires": { "@polkadot/api": "11.3.1", "@polkadot/api-augment": "11.3.1", @@ -25956,6 +32534,9 @@ }, "@polkadot/keyring": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", + "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", + "dev": true, "requires": { "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", @@ -25964,6 +32545,9 @@ }, "@polkadot/networks": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-12.6.2.tgz", + "integrity": "sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==", + "dev": true, "requires": { "@polkadot/util": "12.6.2", "@substrate/ss58-registry": "^1.44.0", @@ -25972,6 +32556,9 @@ }, "@polkadot/rpc-augment": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-11.3.1.tgz", + "integrity": "sha512-2PaDcKNju4QYQpxwVkWbRU3M0t340nMX9cMo+8awgvgL1LliV/fUDZueMKLuSS910JJMTPQ7y2pK4eQgMt08gQ==", + "dev": true, "requires": { "@polkadot/rpc-core": "11.3.1", "@polkadot/types": "11.3.1", @@ -25982,6 +32569,9 @@ }, "@polkadot/rpc-core": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-11.3.1.tgz", + "integrity": "sha512-KKNepsDd/mpmXcA6v/h14eFFPEzLGd7nrvx2UUXUxoZ0Fq2MH1hplP3s93k1oduNY/vOXJR2K9S4dKManA6GVQ==", + "dev": true, "requires": { "@polkadot/rpc-augment": "11.3.1", "@polkadot/rpc-provider": "11.3.1", @@ -25993,6 +32583,9 @@ }, "@polkadot/rpc-provider": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-11.3.1.tgz", + "integrity": "sha512-pqERChoHo45hd3WAgW8UuzarRF+G/o/eXEbl0PXLubiayw4X4qCmIzmtntUcKYgxGNcYGZaG87ZU8OjN97m6UA==", + "dev": true, "requires": { "@polkadot/keyring": "^12.6.2", "@polkadot/types": "11.3.1", @@ -26011,6 +32604,9 @@ }, "@polkadot/types": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-11.3.1.tgz", + "integrity": "sha512-5c7uRFXQTT11Awi6T0yFIdAfD6xGDAOz06Kp7M5S9OGNZY28wSPk5x6BYfNphWPaIBmHHewYJB5qmnrdYQAWKQ==", + "dev": true, "requires": { "@polkadot/keyring": "^12.6.2", "@polkadot/types-augment": "11.3.1", @@ -26024,6 +32620,9 @@ }, "@polkadot/types-augment": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-11.3.1.tgz", + "integrity": "sha512-eR3HVpvUmB3v7q2jTWVmVfAVfb1/kuNn7ij94Zqadg/fuUq0pKqIOKwkUj3OxRM3A/5BnW3MbgparjKD3r+fyw==", + "dev": true, "requires": { "@polkadot/types": "11.3.1", "@polkadot/types-codec": "11.3.1", @@ -26033,6 +32632,9 @@ }, "@polkadot/types-codec": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-11.3.1.tgz", + "integrity": "sha512-i7IiiuuL+Z/jFoKTA9xeh4wGQnhnNNjMT0+1ohvlOvnFsoKZKFQQOaDPPntGJVL1JDCV+KjkN2uQKZSeW8tguQ==", + "dev": true, "requires": { "@polkadot/util": "^12.6.2", "@polkadot/x-bigint": "^12.6.2", @@ -26041,6 +32643,9 @@ }, "@polkadot/types-create": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-11.3.1.tgz", + "integrity": "sha512-pBXtpz5FehcRJ6j5MzFUIUN8ZWM7z6HbqK1GxBmYbJVRElcGcOg7a/rL2pQVphU0Rx1E8bSO4thzGf4wUxSX7w==", + "dev": true, "requires": { "@polkadot/types-codec": "11.3.1", "@polkadot/util": "^12.6.2", @@ -26049,6 +32654,9 @@ }, "@polkadot/types-known": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-11.3.1.tgz", + "integrity": "sha512-3BIof7u6tn9bk3ZCIxA07iNoQ3uj4+vn3DTOjCKECozkRlt6V+kWRvqh16Hc0SHMg/QjcMb2fIu/WZhka1McUQ==", + "dev": true, "requires": { "@polkadot/networks": "^12.6.2", "@polkadot/types": "11.3.1", @@ -26060,6 +32668,9 @@ }, "@polkadot/types-support": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-11.3.1.tgz", + "integrity": "sha512-jTFz1GKyF7nI29yIOq4v0NiWTOf5yX4HahJNeFD8TcxoLhF+6tH/XXqrUXJEfbaTlSrRWiW1LZYlb+snctqKHA==", + "dev": true, "requires": { "@polkadot/util": "^12.6.2", "tslib": "^2.6.2" @@ -26067,6 +32678,9 @@ }, "@polkadot/util": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", + "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", + "dev": true, "requires": { "@polkadot/x-bigint": "12.6.2", "@polkadot/x-global": "12.6.2", @@ -26079,6 +32693,9 @@ }, "@polkadot/util-crypto": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", + "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", + "dev": true, "requires": { "@noble/curves": "^1.3.0", "@noble/hashes": "^1.3.3", @@ -26094,6 +32711,9 @@ }, "@polkadot/wasm-bridge": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dev": true, "requires": { "@polkadot/wasm-util": "7.4.1", "tslib": "^2.7.0" @@ -26101,6 +32721,9 @@ }, "@polkadot/wasm-crypto": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dev": true, "requires": { "@polkadot/wasm-bridge": "7.4.1", "@polkadot/wasm-crypto-asmjs": "7.4.1", @@ -26112,12 +32735,18 @@ }, "@polkadot/wasm-crypto-asmjs": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dev": true, "requires": { "tslib": "^2.7.0" } }, "@polkadot/wasm-crypto-init": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dev": true, "requires": { "@polkadot/wasm-bridge": "7.4.1", "@polkadot/wasm-crypto-asmjs": "7.4.1", @@ -26128,6 +32757,9 @@ }, "@polkadot/wasm-crypto-wasm": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dev": true, "requires": { "@polkadot/wasm-util": "7.4.1", "tslib": "^2.7.0" @@ -26135,12 +32767,18 @@ }, "@polkadot/wasm-util": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dev": true, "requires": { "tslib": "^2.7.0" } }, "@polkadot/x-bigint": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz", + "integrity": "sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==", + "dev": true, "requires": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -26148,6 +32786,9 @@ }, "@polkadot/x-fetch": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz", + "integrity": "sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==", + "dev": true, "requires": { "@polkadot/x-global": "12.6.2", "node-fetch": "^3.3.2", @@ -26156,12 +32797,18 @@ }, "@polkadot/x-global": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.6.2.tgz", + "integrity": "sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==", + "dev": true, "requires": { "tslib": "^2.6.2" } }, "@polkadot/x-randomvalues": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", + "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", + "dev": true, "requires": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -26169,6 +32816,9 @@ }, "@polkadot/x-textdecoder": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", + "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", + "dev": true, "requires": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -26176,6 +32826,9 @@ }, "@polkadot/x-textencoder": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", + "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", + "dev": true, "requires": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2" @@ -26183,6 +32836,9 @@ }, "@polkadot/x-ws": { "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.6.2.tgz", + "integrity": "sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==", + "dev": true, "requires": { "@polkadot/x-global": "12.6.2", "tslib": "^2.6.2", @@ -26190,10 +32846,16 @@ } }, "@scure/base": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", + "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", + "dev": true }, "@substrate/connect": { "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.10.tgz", + "integrity": "sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w==", + "dev": true, "optional": true, "requires": { "@substrate/connect-extension-protocol": "^2.0.0", @@ -26204,24 +32866,15 @@ }, "@substrate/connect-extension-protocol": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.1.tgz", + "integrity": "sha512-GoafTgm/Jey9E4Xlj4Z5ZBt/H4drH2CNq8VrAro80rtoznrXnFDNVivLQzZN0Xaj2g8YXSn9pC9Oc9IovYZJXw==", + "dev": true, "optional": true - } - } - }, - "dkg.js": { - "version": "6.5.4", - "dev": true, - "requires": { - "assertion-tools": "^2.2.1", - "axios": "^0.27.2", - "dkg-evm-module": "^4.4.0", - "ethers": "^6.1.0", - "jsonld": "^8.1.0", - "web3": "^1.7.3" - }, - "dependencies": { + }, "@types/node": { "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "dev": true, "requires": { "undici-types": "~6.19.2" @@ -26229,18 +32882,95 @@ }, "aes-js": { "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", "dev": true }, + "assertion-tools": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-2.2.1.tgz", + "integrity": "sha512-JlA1S16Ox93PnYb45HvxNcax/Ii4gqTO8HLGa/ykj/ddp8EEHlokn6inJR2yMiz173WSFkCc0ciLJzGeaYBANw==", + "dev": true, + "requires": { + "ethers": "^5.7.2", + "jsonld": "^8.1.0", + "merkletreejs": "^0.3.2" + }, + "dependencies": { + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + } + } + }, "axios": { "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "dev": true, "requires": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" } }, + "dkg-evm-module": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-4.4.0.tgz", + "integrity": "sha512-2hBZI/KnbbOEiKr3mU7Nknz3Wis8hLWGvyCifevG4/fUO8v+oVdrshLvQJ6izAfDHeua2PHcW8Z3hn6eIdUVxA==", + "dev": true, + "requires": { + "@openzeppelin/contracts": "^4.9.3", + "@polkadot/api": "^11.0.3", + "@polkadot/keyring": "^12.6.2", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "@prb/math": "^2.5.0", + "dotenv": "^16.0.3", + "hardhat": "^2.22.5", + "hardhat-deploy": "^0.11.25", + "hardhat-deploy-ethers": "^0.3.0-beta.13", + "ts-node": "^10.9.1", + "typescript": "^4.9.4" + } + }, "ethers": { "version": "6.13.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", + "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", "dev": true, "requires": { "@adraffy/ens-normalize": "1.10.1", @@ -26254,6 +32984,8 @@ "dependencies": { "@noble/curves": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, "requires": { "@noble/hashes": "1.3.2" @@ -26261,20 +32993,28 @@ }, "@noble/hashes": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true } } }, "tslib": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "undici-types": { "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, "ws": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "requires": {} } @@ -26282,6 +33022,8 @@ }, "dns-over-http-resolver": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz", + "integrity": "sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==", "requires": { "debug": "^4.3.1", "native-fetch": "^3.0.0", @@ -26290,12 +33032,16 @@ }, "doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "requires": { "esutils": "^2.0.2" } }, "dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "requires": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -26304,13 +33050,19 @@ }, "dom-walk": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, "domelementtype": { - "version": "2.3.0" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domexception": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "requires": { "webidl-conversions": "^5.0.0" @@ -26318,18 +33070,24 @@ "dependencies": { "webidl-conversions": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true } } }, "domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "requires": { "domelementtype": "^2.3.0" } }, "domutils": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "requires": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -26337,22 +33095,42 @@ } }, "dotenv": { - "version": "16.4.7" + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==" }, "dottie": { - "version": "2.0.6" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" + }, + "dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } }, "duplexer2": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "requires": { "readable-stream": "^2.0.2" }, "dependencies": { "isarray": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -26364,10 +33142,14 @@ } }, "safe-buffer": { - "version": "5.1.2" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -26376,10 +33158,14 @@ }, "eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "requires": { "jsbn": "~0.1.0", @@ -26388,37 +33174,51 @@ "dependencies": { "jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true } } }, "ecdsa-sig-formatter": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { "safe-buffer": "^5.0.1" } }, "ed2curve": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ed2curve/-/ed2curve-0.3.0.tgz", + "integrity": "sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==", "requires": { "tweetnacl": "1.x.x" } }, "ee-first": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-fetch": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz", + "integrity": "sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==", "requires": { "encoding": "^0.1.13" } }, "electron-to-chromium": { - "version": "1.5.71", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "dev": true }, "elliptic": { "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -26430,56 +33230,82 @@ }, "dependencies": { "bn.js": { - "version": "4.12.1" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" } } }, "emittery": { - "version": "0.13.1" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" }, "emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "enabled": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "encode-utf8": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, "encodeurl": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "requires": { "iconv-lite": "^0.6.2" } }, "end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } }, "enquirer": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "requires": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "entities": { - "version": "4.5.0" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" }, "env-paths": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "err-code": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" }, "error-stack-parser": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, "requires": { "stackframe": "^1.3.4" @@ -26487,6 +33313,8 @@ }, "es-abstract": { "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, "peer": true, "requires": { @@ -26539,16 +33367,19 @@ } }, "es-define-property": { - "version": "1.0.0", - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, "es-errors": { - "version": "1.3.0" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, "es-iterator-helpers": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dev": true, "peer": true, "requires": { @@ -26571,13 +33402,16 @@ }, "es-object-atoms": { "version": "1.0.0", - "dev": true, + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "requires": { "es-errors": "^1.3.0" } }, "es-set-tostringtag": { "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, "peer": true, "requires": { @@ -26588,6 +33422,8 @@ }, "es-shim-unscopables": { "version": "1.0.2", + "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, "requires": { @@ -26596,6 +33432,8 @@ }, "es-to-primitive": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "peer": true, "requires": { @@ -26606,6 +33444,8 @@ }, "es5-ext": { "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -26615,10 +33455,14 @@ }, "es6-error": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "es6-iterator": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -26627,32 +33471,49 @@ }, "es6-promise": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "es6-promisify": { - "version": "7.0.0" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", + "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==" }, "es6-symbol": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "requires": { "d": "^1.0.2", "ext": "^1.7.0" } }, "escalade": { - "version": "3.2.0" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, "escape-html": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-latex": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", + "dev": true }, "escape-string-regexp": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "requires": { "esprima": "^4.0.1", @@ -26663,6 +33524,8 @@ }, "eslint": { "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -26706,6 +33569,8 @@ }, "eslint-config-airbnb": { "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, "requires": { "eslint-config-airbnb-base": "^15.0.0", @@ -26715,6 +33580,8 @@ }, "eslint-config-airbnb-base": { "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.10", @@ -26725,21 +33592,29 @@ "dependencies": { "semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "eslint-config-google": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.13.0.tgz", + "integrity": "sha512-ELgMdOIpn0CFdsQS+FuxO+Ttu4p+aLaXHv9wA9yVnzqlUGV7oN/eRRnJekk7TCur6Cu2FXX0fqfIXRBaM14lpQ==", "requires": {} }, "eslint-config-prettier": { "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.9", + "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, "requires": { @@ -26750,6 +33625,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "peer": true, "requires": { @@ -26760,6 +33637,8 @@ }, "eslint-module-utils": { "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "peer": true, "requires": { @@ -26768,6 +33647,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "peer": true, "requires": { @@ -26778,6 +33659,8 @@ }, "eslint-plugin-import": { "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "peer": true, "requires": { @@ -26804,6 +33687,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "peer": true, "requires": { @@ -26812,6 +33697,8 @@ }, "doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "peer": true, "requires": { @@ -26820,6 +33707,8 @@ }, "semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "peer": true } @@ -26827,6 +33716,8 @@ }, "eslint-plugin-jsx-a11y": { "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "peer": true, "requires": { @@ -26849,6 +33740,8 @@ }, "eslint-plugin-react": { "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, "peer": true, "requires": { @@ -26874,6 +33767,8 @@ "dependencies": { "doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "peer": true, "requires": { @@ -26882,6 +33777,8 @@ }, "resolve": { "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "peer": true, "requires": { @@ -26892,6 +33789,8 @@ }, "semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "peer": true } @@ -26899,22 +33798,30 @@ }, "eslint-plugin-react-hooks": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "peer": true, "requires": {} }, "eslint-scope": { "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "eslint-visitor-keys": { - "version": "3.4.3" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" }, "esniff": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", "requires": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -26924,6 +33831,8 @@ }, "espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "requires": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -26932,31 +33841,45 @@ }, "esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "requires": { "estraverse": "^5.1.0" } }, "esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { "estraverse": "^5.2.0" } }, "estraverse": { - "version": "5.3.0" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { - "version": "2.0.3" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { - "version": "1.8.1" + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "eth-ens-namehash": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", "dev": true, "requires": { "idna-uts46-hx": "^2.3.1", @@ -26965,12 +33888,16 @@ "dependencies": { "js-sha3": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", "dev": true } } }, "eth-lib": { "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", "dev": true, "requires": { "bn.js": "^4.11.6", @@ -26983,14 +33910,20 @@ "dependencies": { "bn.js": { "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true }, "safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "ws": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { "async-limiter": "~1.0.0", @@ -27002,17 +33935,23 @@ }, "ethereum-bloom-filters": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", "requires": { "@noble/hashes": "^1.4.0" }, "dependencies": { "@noble/hashes": { - "version": "1.6.1" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==" } } }, "ethereum-cryptography": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "requires": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -27022,18 +33961,24 @@ }, "ethereumjs-abi": { "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", "requires": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" }, "dependencies": { "bn.js": { - "version": "4.12.1" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" } } }, "ethereumjs-util": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -27046,15 +33991,21 @@ "dependencies": { "@types/bn.js": { "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "requires": { "@types/node": "*" } }, "bn.js": { - "version": "4.12.1" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -27077,6 +34028,8 @@ }, "ethers": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "requires": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -27112,18 +34065,24 @@ }, "ethjs-unit": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "requires": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" }, "dependencies": { "bn.js": { - "version": "4.11.6" + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, "ethjs-util": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "requires": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -27131,22 +34090,33 @@ }, "event-emitter": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "requires": { "d": "1", "es5-ext": "~0.10.14" } }, "event-target-shim": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "eventemitter3": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "events": { - "version": "3.3.0" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "evm-bn": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/evm-bn/-/evm-bn-1.1.2.tgz", + "integrity": "sha512-Lq8CT1EAjSeN+Yk0h1hpSwnZyMA4Xir6fQD4vlStljAuW2xr7qLOEGDLGsTa9sU2e40EYIumA4wYhMC/e+lyKw==", + "dev": true, "requires": { "@ethersproject/bignumber": "^5.5.0", "from-exponential": "^1.1.1" @@ -27154,6 +34124,8 @@ }, "evp_bytestokey": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -27161,6 +34133,8 @@ }, "execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -27175,10 +34149,13 @@ }, "expand-template": { "version": "2.0.3", - "dev": true + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" }, "express": { "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -27215,50 +34192,72 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "express-fileupload": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.5.1.tgz", + "integrity": "sha512-LsYG1ALXEB7vlmjuSw8ABeOctMp8a31aUC5ZF55zuz7O2jLFnmJYrCv10py357ky48aEoBQ/9bVXgFynjvaPmA==", "requires": { "busboy": "^1.6.0" } }, "express-rate-limit": { "version": "6.11.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.11.2.tgz", + "integrity": "sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==", "requires": {} }, "ext": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "requires": { "type": "^2.7.2" } }, "extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extsprintf": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", "dev": true }, "fast-copy": { - "version": "3.0.2" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" }, "fast-deep-equal": { - "version": "3.1.3" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-fifo": { - "version": "1.3.2" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "fast-glob": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -27269,6 +34268,8 @@ "dependencies": { "glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } @@ -27276,31 +34277,47 @@ } }, "fast-json-stable-stringify": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { - "version": "2.0.6" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fast-redact": { - "version": "3.5.0" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==" }, "fast-safe-stringify": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fast-uri": { - "version": "3.0.3" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" }, "fastq": { "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "requires": { "reusify": "^1.0.4" } }, "fecha": { - "version": "4.2.3" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "fetch-blob": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -27308,6 +34325,8 @@ }, "fetch-sparql-endpoint": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-4.2.1.tgz", + "integrity": "sha512-nRaexc3QCO95bjESf4ngNQ1J+qNtVzxFGlPUopqOIVHm/j6IDhWg996kk7fBM98Mmo0uM9b6uiTbXmJHOrnqYA==", "requires": { "@rdfjs/types": "*", "@smessie/readable-web-to-node-stream": "^3.0.3", @@ -27327,24 +34346,34 @@ "dependencies": { "cross-fetch": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "requires": { "node-fetch": "^2.6.12" } }, "node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } }, "tr46": { - "version": "0.0.3" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "webidl-conversions": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -27354,6 +34383,8 @@ }, "figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -27361,27 +34392,37 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true } } }, "file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "requires": { "flat-cache": "^3.0.4" } }, "file-uri-to-path": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "fill-range": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -27394,17 +34435,23 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "find-cache-dir": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -27414,16 +34461,22 @@ }, "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==", "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "flat": { - "version": "5.0.2" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" }, "flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "requires": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -27431,25 +34484,37 @@ } }, "flatstr": { - "version": "1.0.12" + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" }, "flatted": { - "version": "3.3.2" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" }, "fmix": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", "requires": { "imul": "^1.0.0" } }, "fn.name": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.15.9" + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" }, "for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { "is-callable": "^1.1.3" @@ -27457,6 +34522,8 @@ }, "foreground-child": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -27465,10 +34532,14 @@ }, "forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true }, "form-data": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -27477,39 +34548,60 @@ }, "form-data-encoder": { "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", "dev": true }, "formdata-polyfill": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "requires": { "fetch-blob": "^3.1.2" } }, "forwarded": { - "version": "0.2.0" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fp-ts": { - "version": "1.19.3" + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, "fraction.js": { - "version": "4.3.7" + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true }, "fresh": { - "version": "0.5.2" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "from-exponential": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/from-exponential/-/from-exponential-1.1.1.tgz", + "integrity": "sha512-VBE7f5OVnYwdgB3LHa+Qo29h8qVpxhVO9Trlc+AWm+/XNAgks1tAwMFHb33mjeiof77GglsJzeYF7OqXrROP/A==", + "dev": true }, "fromentries": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, "fs-constants": { "version": "1.0.0", - "dev": true + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -27518,20 +34610,28 @@ }, "fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "requires": { "minipass": "^2.6.0" } }, "fs.realpath": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, "fstream": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -27541,6 +34641,8 @@ "dependencies": { "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -27548,10 +34650,14 @@ } }, "function-bind": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "peer": true, "requires": { @@ -27563,48 +34669,89 @@ }, "functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "peer": true }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, "generate-function": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "requires": { "is-property": "^1.0.2" } }, "gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true }, "get-intrinsic": { - "version": "1.2.4", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "requires": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" } }, "get-iterator": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" }, "get-package-type": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, "get-stream": { - "version": "6.0.1" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "get-symbol-description": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "peer": true, "requires": { @@ -27615,6 +34762,8 @@ }, "getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -27622,10 +34771,13 @@ }, "github-from-package": { "version": "0.0.0", - "dev": true + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -27637,12 +34789,16 @@ }, "glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "requires": { "is-glob": "^4.0.3" } }, "global": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, "requires": { "min-document": "^2.19.0", @@ -27651,6 +34807,8 @@ }, "global-dirs": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "requires": { "ini": "2.0.0" @@ -27658,12 +34816,16 @@ }, "globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "requires": { "type-fest": "^0.20.2" } }, "globalthis": { "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, "peer": true, "requires": { @@ -27672,10 +34834,14 @@ } }, "gopd": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, "got": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", "dev": true, "requires": { "@sindresorhus/is": "^4.6.0", @@ -27695,15 +34861,21 @@ "dependencies": { "p-cancelable": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true } } }, "graceful-fs": { - "version": "4.2.11" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graphdb": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/graphdb/-/graphdb-2.0.2.tgz", + "integrity": "sha512-ORbS7yw/kTUdKXyeO7QaXx1I3fxigej3KQQdrVSpu0ZQ1W7OVQHDAd/Gu+x2clpwm6sela94Uh/+YKkQGbZqmA==", "requires": { "axios": "^0.21.4", "base64url": "^3.0.1", @@ -27719,22 +34891,32 @@ }, "dependencies": { "@types/node": { - "version": "13.13.52" + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" }, "axios": { "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "requires": { "follow-redirects": "^1.14.0" } }, "canonicalize": { - "version": "1.0.8" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "fast-redact": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.1.0.tgz", + "integrity": "sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==" }, "jsonld-streaming-parser": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", + "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", "requires": { "@rdfjs/types": "*", "@types/http-link-header": "^1.0.1", @@ -27747,6 +34929,8 @@ }, "pino": { "version": "5.17.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-5.17.0.tgz", + "integrity": "sha512-LqrqmRcJz8etUjyV0ddqB6OTUutCgQULPFg2b4dtijRHUsucaAdBgSUW58vY6RFSX+NT8963F+q0tM6lNwGShA==", "requires": { "fast-redact": "^2.0.0", "fast-safe-stringify": "^2.0.7", @@ -27757,13 +34941,19 @@ } }, "pino-std-serializers": { - "version": "2.5.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==" }, "quick-format-unescaped": { - "version": "3.0.3" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz", + "integrity": "sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ==" }, "rdfxml-streaming-parser": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz", + "integrity": "sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ==", "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0", @@ -27773,6 +34963,8 @@ }, "sonic-boom": { "version": "0.7.7", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.7.tgz", + "integrity": "sha512-Ei5YOo5J64GKClHIL/5evJPgASXFVpfVYbJV9PILZQytTK6/LCwHvsZJW2Ig4p9FMC2OrBrMnXKgRN/OEoAWfg==", "requires": { "atomic-sleep": "^1.0.0", "flatstr": "^1.0.12" @@ -27780,6 +34972,8 @@ }, "sparqljson-parse": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-1.7.0.tgz", + "integrity": "sha512-/88g7aK1QZ42YvMx+nStNeZsiVJhmg/OC4RNnQk+ybItvEkQiTOpnYDmST5FnzOIsSmp5RxAZDCIDdMK1h7Ynw==", "requires": { "@rdfjs/types": "*", "@types/node": "^13.1.0", @@ -27789,6 +34983,8 @@ }, "sparqlxml-parse": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-1.5.0.tgz", + "integrity": "sha512-+0DCekgO3G6ugeVntrZS6+Fj60MsHR0q51WoRAdVzARb5V3jhX3dZJbwSaeydsOsXrtts4XSMc/z+kbqy5/VUQ==", "requires": { "@rdfjs/types": "*", "@types/node": "^13.1.0", @@ -27797,18 +34993,26 @@ } }, "uuid": { - "version": "3.4.0" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, "graphemer": { - "version": "1.4.0" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "graphql": { - "version": "15.9.0" + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.9.0.tgz", + "integrity": "sha512-GCOQdvm7XxV1S4U4CGrsdlEN37245eC8P9zaYCMr6K1BG0IPGy5lUwmJsEOGyl1GD6HXjOtl2keCP9asRBwNvA==" }, "graphql-to-sparql": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/graphql-to-sparql/-/graphql-to-sparql-3.0.1.tgz", + "integrity": "sha512-A+RwB99o66CUj+XuqtP/u3P7fGS/qF6P+/jhNl1BE/JZ2SCnkrODvV0LADuJeCDmPh45fDhq+GTDVoN1ZQHYFw==", "requires": { "@rdfjs/types": "*", "graphql": "^15.5.2", @@ -27820,10 +35024,14 @@ }, "har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true }, "har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { "ajv": "^6.12.3", @@ -27832,6 +35040,8 @@ }, "hardhat": { "version": "2.22.17", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.17.tgz", + "integrity": "sha512-tDlI475ccz4d/dajnADUTRc1OJ3H8fpP9sWhXhBPpYsQOg8JHq5xrDimo53UhWPl7KJmAeDCm1bFG74xvpGRpg==", "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -27881,6 +35091,8 @@ "dependencies": { "fs-extra": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -27889,30 +35101,43 @@ }, "jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "requires": { "graceful-fs": "^4.1.6" } }, "resolve": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } }, "semver": { - "version": "6.3.1" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "universalify": { - "version": "0.1.2" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "ws": { "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "requires": {} } } }, "hardhat-deploy": { "version": "0.11.45", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", + "dev": true, "requires": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -27942,12 +35167,18 @@ "dependencies": { "axios": { "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, "requires": { "follow-redirects": "^1.14.0" } }, "chokidar": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -27961,12 +35192,18 @@ }, "glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } }, "readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -27975,10 +35212,15 @@ }, "hardhat-deploy-ethers": { "version": "0.3.0-beta.13", + "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz", + "integrity": "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==", + "dev": true, "requires": {} }, "has-ansi": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-4.0.1.tgz", + "integrity": "sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -27986,36 +35228,58 @@ }, "has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "peer": true }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "requires": { "es-define-property": "^1.0.0" } }, "has-proto": { - "version": "1.1.0", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "peer": true, "requires": { - "call-bind": "^1.0.7" + "dunder-proto": "^1.0.0" } }, "has-symbols": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, "has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { "has-symbols": "^1.0.3" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, "hash-base": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -28024,6 +35288,8 @@ "dependencies": { "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -28034,6 +35300,8 @@ }, "hash.js": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -28041,6 +35309,8 @@ }, "hasha": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { "is-stream": "^2.0.0", @@ -28049,27 +35319,39 @@ "dependencies": { "type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } }, "hashlru": { - "version": "2.3.0" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", + "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==" }, "hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "requires": { "function-bind": "^1.1.2" } }, "he": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "heap": { - "version": "0.2.7" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "help-me": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", "requires": { "glob": "^8.0.0", "readable-stream": "^3.6.0" @@ -28077,12 +35359,16 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { "balanced-match": "^1.0.0" } }, "glob": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -28093,12 +35379,16 @@ }, "minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "requires": { "brace-expansion": "^2.0.1" } }, "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -28109,6 +35399,8 @@ }, "hmac-drbg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -28117,6 +35409,8 @@ }, "html-encoding-sniffer": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "requires": { "whatwg-encoding": "^1.0.5" @@ -28124,10 +35418,14 @@ }, "html-escaper": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "htmlparser2": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", "requires": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -28137,10 +35435,14 @@ }, "http-cache-semantics": { "version": "4.1.1", - "dev": true + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "devOptional": true }, "http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { "depd": "2.0.0", "inherits": "2.0.4", @@ -28151,14 +35453,20 @@ }, "http-https": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", "dev": true }, "http-link-header": { - "version": "1.1.3" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==" }, "http-proxy-agent": { "version": "4.0.1", - "dev": true, + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "devOptional": true, "requires": { "@tootallnate/once": "1", "agent-base": "6", @@ -28167,6 +35475,8 @@ }, "http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -28176,6 +35486,8 @@ }, "http2-wrapper": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "requires": { "quick-lru": "^5.1.1", @@ -28184,26 +35496,45 @@ }, "https-proxy-agent": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" } }, "human-signals": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "requires": { + "ms": "^2.0.0" + } }, "husky": { "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true }, "iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "idna-uts46-hx": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", "dev": true, "requires": { "punycode": "2.1.0" @@ -28211,57 +35542,91 @@ "dependencies": { "punycode": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", "dev": true } } }, "ieee754": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.3.2" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" }, "immutable": { - "version": "4.3.7" + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" }, "import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "import-lazy": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" }, "imul": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==" }, "imurmurhash": { - "version": "0.1.4" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true }, "inflection": { - "version": "1.13.4" + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==" }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, "interface-datastore": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-5.2.0.tgz", + "integrity": "sha512-nthO4C4BMJM2j9x/mT2KFa/g/sbcY8yf9j/kOBgli3u5mq9ZdPvQyDxi0OhKzr4JmoM81OYh5xcFjyebquqwvA==", "requires": { "err-code": "^3.0.1", "interface-store": "^1.0.2", @@ -28275,10 +35640,14 @@ } }, "interface-store": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-1.0.2.tgz", + "integrity": "sha512-rUBLYsgoWwxuUpnQoSUr+DR/3dH3reVeIu5aOHFZK31lAexmb++kR6ZECNRgrx6WvoaM3Akdo0A7TDrqgCzZaQ==" }, "internal-slot": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "peer": true, "requires": { @@ -28289,32 +35658,46 @@ }, "internmap": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", "dev": true }, "io-ts": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "requires": { "fp-ts": "^1.0.0" } }, "ip": { - "version": "1.1.9" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" }, "ip-address": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-8.1.0.tgz", + "integrity": "sha512-Wz91gZKpNKoXtqvY8ScarKYwhXoK4r/b5QuT+uywe/azv0/nUCo7Bh0IRRI7F9DHR06kJNWtzMGLIbXavngbKA==", "requires": { "jsbn": "1.1.0", "sprintf-js": "1.1.2" } }, "ip-regex": { - "version": "4.3.0" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==" }, "ipaddr.js": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==" }, "ipfs-utils": { "version": "8.1.6", + "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-8.1.6.tgz", + "integrity": "sha512-V/cwb6113DrDhrjDTWImA6+zmJbpdbUkxdxmEQO7it8ykV76bBmzU1ZXSM0QR0qxGy9VW8dkUlPAC2K10VgSmw==", "requires": { "abort-controller": "^3.0.0", "any-signal": "^2.1.0", @@ -28341,15 +35724,19 @@ } }, "is-arguments": { - "version": "1.1.1", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-array-buffer": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "peer": true, "requires": { @@ -28358,10 +35745,14 @@ } }, "is-arrayish": { - "version": "0.3.2" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-async-function": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "peer": true, "requires": { @@ -28370,6 +35761,8 @@ }, "is-bigint": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "peer": true, "requires": { @@ -28378,56 +35771,79 @@ }, "is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { "binary-extensions": "^2.0.0" } }, "is-boolean-object": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "is-buffer": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-core-module": { "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "requires": { "hasown": "^2.0.2" } }, "is-data-view": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "peer": true, "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "is-date-object": { - "version": "1.0.5", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "peer": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-electron": { - "version": "2.2.2" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" }, "is-extglob": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-finalizationregistry": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dev": true, "peer": true, "requires": { @@ -28436,14 +35852,20 @@ }, "is-fullwidth-code-point": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true }, "is-function": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", "dev": true }, "is-generator-function": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -28451,15 +35873,21 @@ }, "is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-hex-prefixed": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" }, "is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { "global-dirs": "^3.0.0", @@ -28468,28 +35896,46 @@ }, "is-ip": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", "requires": { "ip-regex": "^4.0.0" } }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, "is-loopback-addr": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-1.0.1.tgz", + "integrity": "sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw==" }, "is-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "peer": true }, "is-negative-zero": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "peer": true }, "is-number": { - "version": "7.0.0" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz", + "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==", "dev": true, "peer": true, "requires": { @@ -28498,36 +35944,50 @@ } }, "is-path-inside": { - "version": "3.0.3" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-plain-obj": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, "is-potential-custom-element-name": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "is-property": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" }, "is-regex": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", - "gopd": "^1.1.0", + "call-bound": "^1.0.2", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "is-set": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "peer": true }, "is-shared-array-buffer": { "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, "peer": true, "requires": { @@ -28535,10 +35995,14 @@ } }, "is-stream": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz", + "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==", "dev": true, "peer": true, "requires": { @@ -28547,35 +36011,47 @@ } }, "is-symbol": { - "version": "1.1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", - "has-symbols": "^1.0.3", - "safe-regex-test": "^1.0.3" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" } }, "is-typed-array": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "requires": { "which-typed-array": "^1.1.14" } }, "is-typedarray": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-unicode-supported": { - "version": "0.1.0" + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-weakmap": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "peer": true }, "is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "peer": true, "requires": { @@ -28584,6 +36060,8 @@ }, "is-weakset": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "peer": true, "requires": { @@ -28593,18 +36071,26 @@ }, "is-windows": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "peer": true }, "isexe": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "iso-random-stream": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", + "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", "requires": { "events": "^3.3.0", "readable-stream": "^3.4.0" @@ -28612,6 +36098,8 @@ "dependencies": { "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -28621,18 +36109,26 @@ } }, "iso-url": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" }, "isstream": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, "istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true }, "istanbul-lib-hook": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { "append-transform": "^2.0.0" @@ -28640,6 +36136,8 @@ }, "istanbul-lib-instrument": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { "@babel/core": "^7.7.5", @@ -28650,12 +36148,16 @@ "dependencies": { "semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "istanbul-lib-processinfo": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "requires": { "archy": "^1.0.0", @@ -28668,6 +36170,8 @@ "dependencies": { "p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" @@ -28677,6 +36181,8 @@ }, "istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", @@ -28686,6 +36192,8 @@ "dependencies": { "make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "requires": { "semver": "^7.5.3" @@ -28693,6 +36201,8 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -28702,6 +36212,8 @@ }, "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", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -28711,6 +36223,8 @@ }, "istanbul-reports": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -28718,26 +36232,38 @@ } }, "it-all": { - "version": "1.0.6" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", + "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" }, "it-buffer": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/it-buffer/-/it-buffer-0.1.3.tgz", + "integrity": "sha512-9a2/9SYVwG7bcn3tpRDR4bXbtuMLXnDK48KVC+GXiQg97ZOOdWz2nIITBsOQ19b+gj01Rw8RNwtiLDLI8P8oiQ==", "requires": { "bl": "^5.0.0", "buffer": "^6.0.3" } }, "it-drain": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-1.0.5.tgz", + "integrity": "sha512-r/GjkiW1bZswC04TNmUnLxa6uovme7KKwPhc+cb1hHU65E3AByypHH6Pm91WHuvqfFsm+9ws0kPtDBV3/8vmIg==" }, "it-filter": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-1.0.3.tgz", + "integrity": "sha512-EI3HpzUrKjTH01miLHWmhNWy3Xpbx4OXMXltgrNprL5lDpF3giVpHIouFpr5l+evXw6aOfxhnt01BIB+4VQA+w==" }, "it-first": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-1.0.7.tgz", + "integrity": "sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g==" }, "it-glob": { "version": "0.0.14", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", + "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", "requires": { "@types/minimatch": "^3.0.4", "minimatch": "^3.0.4" @@ -28745,6 +36271,8 @@ }, "it-handshake": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-2.0.0.tgz", + "integrity": "sha512-K4q+mz8aLlCK3vTjtgNdHC9c/JbuOATsfogarjMsLcBZC5vYfKbX3Gq3AWcCdjIsIrPqzTlhPKSxl64LJkrt2w==", "requires": { "it-pushable": "^1.4.0", "it-reader": "^3.0.0", @@ -28752,10 +36280,14 @@ } }, "it-length": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/it-length/-/it-length-1.0.4.tgz", + "integrity": "sha512-KN4jXzp77/GQ4fxUGMbsJx3ALUZ6SP3E79tzs2weGghtImDLFZzua/l3fOK0LN/hMH0M330HJRZWwYZfDNuCIA==" }, "it-length-prefixed": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-5.0.3.tgz", + "integrity": "sha512-b+jDHLcnOnPDQN79ronmzF5jeBjdJsy0ce2O6i6X4J5tnaO8Fd146ZA/tMbzaLlKnTpXa0eKtofpYhumXGENeg==", "requires": { "bl": "^5.0.0", "buffer": "^6.0.3", @@ -28763,22 +36295,30 @@ } }, "it-map": { - "version": "1.0.6" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-1.0.6.tgz", + "integrity": "sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ==" }, "it-merge": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-1.0.4.tgz", + "integrity": "sha512-DcL6GksTD2HQ7+5/q3JznXaLNfwjyG3/bObaF98da+oHfUiPmdo64oJlT9J8R8G5sJRU7thwaY5zxoAKCn7FJw==", "requires": { "it-pushable": "^1.4.0" } }, "it-pair": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-1.0.0.tgz", + "integrity": "sha512-9raOiDu5OAuDOahtMtapKQDrQTxBfzlzrNcB6o7JARHkt+7Bb1dMkW/TpYdAjBJE77KH3e2zGzwpGUP9tXbLww==", "requires": { "get-iterator": "^1.0.2" } }, "it-pb-rpc": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/it-pb-rpc/-/it-pb-rpc-0.1.13.tgz", + "integrity": "sha512-aZ4FNJsDgNepVVTmYXgXbQabIiOQyqYWUhdfovaHDcPSM5KjegwJihJEWMJjMyj+oLSKcZl0vmHgHxXWJ9/ufw==", "requires": { "is-buffer": "^2.0.5", "it-handshake": "^2.0.0", @@ -28786,25 +36326,35 @@ } }, "it-pipe": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-1.1.0.tgz", + "integrity": "sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==" }, "it-pushable": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-1.4.2.tgz", + "integrity": "sha512-vVPu0CGRsTI8eCfhMknA7KIBqqGFolbRx+1mbQ6XuZ7YCz995Qj7L4XUviwClFunisDq96FdxzF5FnAbw15afg==", "requires": { "fast-fifo": "^1.0.0" } }, "it-reader": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-3.0.0.tgz", + "integrity": "sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==", "requires": { "bl": "^5.0.0" } }, "it-take": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-1.0.2.tgz", + "integrity": "sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw==" }, "it-to-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", + "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", "requires": { "buffer": "^6.0.3", "fast-fifo": "^1.0.0", @@ -28816,6 +36366,8 @@ "dependencies": { "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -28825,44 +36377,64 @@ } }, "iterator.prototype": { - "version": "1.1.3", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "peer": true, "requires": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" } }, "javascript-natural-sort": { - "version": "0.7.1" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true }, "jju": { - "version": "1.4.0" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" }, "joycon": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==" }, "js-sha3": { - "version": "0.8.0" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { "argparse": "^2.0.1" } }, "jsbn": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, "jsdom": { "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { "abab": "^2.0.5", @@ -28896,6 +36468,8 @@ "dependencies": { "form-data": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -28905,40 +36479,60 @@ }, "ws": { "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "requires": {} } } }, "jsesc": { - "version": "3.0.2", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true }, "json-buffer": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "json-schema": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { - "version": "0.4.1" + "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==" }, "json-stable-stringify-without-jsonify": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json-stream-stringify": { - "version": "3.1.6" + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==" }, "json-stringify-safe": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -28946,6 +36540,8 @@ }, "jsonld": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz", + "integrity": "sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA==", "requires": { "@digitalbazaar/http-client": "^3.4.1", "canonicalize": "^1.0.1", @@ -28954,27 +36550,37 @@ }, "dependencies": { "canonicalize": { - "version": "1.0.8" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "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==", "requires": { "yallist": "^4.0.0" } }, "rdf-canonize": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", "requires": { "setimmediate": "^1.0.5" } }, "yallist": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "jsonld-context-parser": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", "requires": { "@types/http-link-header": "^1.0.1", "@types/node": "^18.0.0", @@ -28984,34 +36590,48 @@ }, "dependencies": { "@types/node": { - "version": "18.19.67", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "requires": { "undici-types": "~5.26.4" } }, "cross-fetch": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "requires": { "node-fetch": "^2.6.12" } }, "node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } }, "tr46": { - "version": "0.0.3" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "undici-types": { - "version": "5.26.5" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "webidl-conversions": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -29021,6 +36641,8 @@ }, "jsonld-streaming-parser": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.4.0.tgz", + "integrity": "sha512-897CloyQgQidfkB04dLM5XaAXVX/cN9A2hvgHJo4y4jRhIpvg3KLMBBfcrswepV2N3T8c/Rp2JeFdWfVsbVZ7g==", "requires": { "@bergos/jsonparse": "^1.4.0", "@rdfjs/types": "*", @@ -29035,12 +36657,16 @@ }, "dependencies": { "canonicalize": { - "version": "1.0.8" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" } } }, "jsonld-streaming-serializer": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-2.1.0.tgz", + "integrity": "sha512-COHdLoeMTnrqHMoFhN3PoAwqnrKrpPC7/ACb0WbELYvt+HSOIFN3v4IJP7fOtLNQ4GeaeYkvbeWJ7Jo4EjxMDw==", "requires": { "@rdfjs/types": "*", "@types/readable-stream": "^2.3.13", @@ -29050,13 +36676,19 @@ } }, "jsonparse": { - "version": "1.3.1" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" }, "jsonschema": { - "version": "1.4.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==" }, "JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -29064,6 +36696,8 @@ }, "jsonwebtoken": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -29079,6 +36713,8 @@ }, "jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -29089,10 +36725,14 @@ "dependencies": { "extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true }, "verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -29104,6 +36744,8 @@ }, "jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "peer": true, "requires": { @@ -29115,10 +36757,14 @@ }, "just-extend": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", "dev": true }, "jwa": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -29127,6 +36773,8 @@ }, "jws": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -29134,12 +36782,16 @@ }, "k-bucket": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", + "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", "requires": { "randombytes": "^2.1.0" } }, "keccak": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -29148,6 +36800,8 @@ "dependencies": { "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -29157,29 +36811,41 @@ } }, "keypair": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", + "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" }, "keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "requires": { "json-buffer": "3.0.1" } }, "knuth-shuffle-seeded": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", "dev": true, "requires": { "seed-random": "~2.2.0" } }, "kuler": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "ky": { - "version": "0.33.3" + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==" }, "ky-universal": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", "requires": { "abort-controller": "^3.0.0", "node-fetch": "^3.2.10" @@ -29187,11 +36853,15 @@ }, "language-subtag-registry": { "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "peer": true }, "language-tags": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "peer": true, "requires": { @@ -29200,6 +36870,8 @@ }, "levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -29207,6 +36879,8 @@ }, "libp2p": { "version": "0.32.5", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.32.5.tgz", + "integrity": "sha512-G21yQUdq4LaGDvjMi3ySmcx1cESl8ZsTG1BAfjzjx65DsZJKQ5GPZlamcv+Rwppk3OIplWoRnCu6gam/fI//bw==", "requires": { "@motrix/nat-api": "^0.3.1", "@vascosantos/moving-average": "^1.1.0", @@ -29263,13 +36937,17 @@ "dependencies": { "timeout-abort-controller": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-1.1.1.tgz", + "integrity": "sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==", "requires": { "abort-controller": "^3.0.0", "retimer": "^2.0.0" }, "dependencies": { "retimer": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/retimer/-/retimer-2.0.0.tgz", + "integrity": "sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==" } } } @@ -29277,6 +36955,8 @@ }, "libp2p-bootstrap": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/libp2p-bootstrap/-/libp2p-bootstrap-0.13.0.tgz", + "integrity": "sha512-8sXEZrikY+chKvMorkvOi9E/v9GvwsYr9DAEfzQZrOKQZByqhan1aXQKWrSpc4AxEv5/UopRzu1P47bkOi8wdw==", "requires": { "debug": "^4.3.1", "mafmt": "^10.0.0", @@ -29286,6 +36966,8 @@ }, "libp2p-crypto": { "version": "0.19.7", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.7.tgz", + "integrity": "sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==", "requires": { "err-code": "^3.0.1", "is-typedarray": "^1.0.0", @@ -29302,6 +36984,8 @@ }, "libp2p-interfaces": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-1.3.1.tgz", + "integrity": "sha512-Bh991Nv2KT/jZ7DjPd/zqhk8cCtkHl6OWw8lyK7wBX7Aj3/ezGwjoDABJzKgt1lbvcgCeQIbzPiIbaKj4DUI4w==", "requires": { "abort-controller": "^3.0.0", "abortable-iterator": "^3.0.0", @@ -29321,6 +37005,8 @@ "dependencies": { "libp2p-crypto": { "version": "0.20.0", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", + "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", "requires": { "err-code": "^3.0.1", "iso-random-stream": "^2.0.0", @@ -29339,6 +37025,8 @@ }, "libp2p-kad-dht": { "version": "0.24.2", + "resolved": "https://registry.npmjs.org/libp2p-kad-dht/-/libp2p-kad-dht-0.24.2.tgz", + "integrity": "sha512-fBIwmta7LnoQ77giJRVqhnj9QKcws0SvzPWAsOy5AP3ByuxhcmqrHXTDI1iBnkvtCCegOuL41JkJOvaafu1XnA==", "requires": { "debug": "^4.3.1", "err-code": "^3.0.0", @@ -29367,6 +37055,8 @@ }, "libp2p-mplex": { "version": "0.10.7", + "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.7.tgz", + "integrity": "sha512-21VV0DZWuOsHgitWy1GZD1M/kki3a/hVoAJ5QC48p01JNSK5W8gxRiZtq7cCGJ/xNpbQxvMlMtS5eq8CFRlysg==", "requires": { "abortable-iterator": "^3.0.2", "bl": "^5.0.0", @@ -29379,6 +37069,8 @@ }, "libp2p-noise": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/libp2p-noise/-/libp2p-noise-4.0.0.tgz", + "integrity": "sha512-DCXRKh9Y4pkw4HEWKPpZbeoROilZA1nrQMHIVrJ4JDEMUKVRucJc9GZTFNzo4yJUZ+ayQAlrfbUARiPPFbpfng==", "requires": { "@stablelib/chacha20poly1305": "^1.0.1", "@stablelib/hkdf": "^1.0.1", @@ -29398,6 +37090,8 @@ "dependencies": { "uint8arrays": { "version": "2.1.10", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", + "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", "requires": { "multiformats": "^9.4.2" } @@ -29406,6 +37100,8 @@ }, "libp2p-record": { "version": "0.10.6", + "resolved": "https://registry.npmjs.org/libp2p-record/-/libp2p-record-0.10.6.tgz", + "integrity": "sha512-CbdO2P9DQn/DKll6R/J4nIw6Qt8xbUTfxYgJjpP9oz3izHKkpGQo0mPTe0NyuFTGIQ4OprrxqWqG5v8ZCGBqqw==", "requires": { "err-code": "^3.0.1", "multiformats": "^9.4.5", @@ -29415,6 +37111,8 @@ }, "libp2p-tcp": { "version": "0.17.2", + "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.17.2.tgz", + "integrity": "sha512-SAdgDB4Rm0olPbyvanKP5JBaiRwbIOo0Nt++WYe1U2B6akg2uatsDOtulfpnc1gsL1B5vamnOpOzKaDj4kkt8g==", "requires": { "abortable-iterator": "^3.0.0", "class-is": "^1.1.0", @@ -29428,6 +37126,8 @@ }, "libp2p-utils": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.4.1.tgz", + "integrity": "sha512-kq/US2unamiyY+YwP47dO1uqpAdcbdYI2Fzi9JIEhjfPBaD1MR/uyQ/YP7ABthl3EaxAjIQYd1TVp85d6QKAtQ==", "requires": { "abortable-iterator": "^3.0.0", "debug": "^4.3.0", @@ -29440,10 +37140,14 @@ }, "lilconfig": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true }, "lint-staged": { "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", "dev": true, "requires": { "chalk": "5.3.0", @@ -29460,14 +37164,20 @@ "dependencies": { "chalk": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true }, "commander": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true }, "debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -29475,6 +37185,8 @@ }, "execa": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -29490,14 +37202,20 @@ }, "human-signals": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true }, "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 }, "micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { "braces": "^3.0.2", @@ -29506,14 +37224,20 @@ }, "mimic-fn": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true }, "ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "npm-run-path": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "requires": { "path-key": "^4.0.0" @@ -29521,6 +37245,8 @@ }, "onetime": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "requires": { "mimic-fn": "^4.0.0" @@ -29528,23 +37254,33 @@ }, "path-key": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true }, "strip-final-newline": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true }, "yaml": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true } } }, "listenercount": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" }, "listr2": { "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -29557,14 +37293,20 @@ "dependencies": { "ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, "ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", @@ -29574,6 +37316,8 @@ }, "strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" @@ -29581,6 +37325,8 @@ }, "wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "requires": { "ansi-styles": "^6.1.0", @@ -29592,55 +37338,91 @@ }, "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==", "requires": { "p-locate": "^5.0.0" } }, "lodash": { - "version": "4.17.21" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash-es": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "dev": true }, "lodash.flattendeep": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, "lodash.get": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, "lodash.includes": { - "version": "4.3.0" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, "lodash.isboolean": { - "version": "3.0.3" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "peer": true }, "lodash.isinteger": { - "version": "4.0.4" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, "lodash.isnumber": { - "version": "3.0.3" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, "lodash.isplainobject": { - "version": "4.0.6" + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "lodash.isstring": { - "version": "4.0.1" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "lodash.merge": { - "version": "4.6.2" + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "lodash.mergewith": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true }, "lodash.once": { - "version": "4.1.1" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -29648,6 +37430,8 @@ }, "log-update": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, "requires": { "ansi-escapes": "^5.0.0", @@ -29659,6 +37443,8 @@ "dependencies": { "ansi-escapes": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "requires": { "type-fest": "^1.0.2" @@ -29666,14 +37452,20 @@ }, "ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, "ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", @@ -29683,6 +37475,8 @@ }, "strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" @@ -29690,10 +37484,14 @@ }, "type-fest": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true }, "wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "requires": { "ansi-styles": "^6.1.0", @@ -29705,6 +37503,8 @@ }, "logform": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", "requires": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -29715,15 +37515,21 @@ }, "dependencies": { "@colors/colors": { - "version": "1.6.0" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" } } }, "long": { - "version": "5.2.3" + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "peer": true, "requires": { @@ -29732,6 +37538,8 @@ }, "loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "requires": { "get-func-name": "^2.0.1" @@ -29739,35 +37547,51 @@ }, "lower-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "requires": { "tslib": "^2.0.3" } }, "lowercase-keys": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true }, "lru_map": { - "version": "0.3.3" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" }, "lru-cache": { - "version": "10.4.3" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "lru.min": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz", + "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==" }, "luxon": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz", + "integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==", "dev": true }, "mafmt": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-10.0.0.tgz", + "integrity": "sha512-K1bziJOXcnepfztu+2Xy9FLKVLaFMDuspmiyJIYRxnO0WOxFSV7XKSdMxMrVZxcvg1+YjlTIvSGTImUHU2k4Aw==", "requires": { "multiaddr": "^10.0.0" } }, "make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -29775,18 +37599,82 @@ "dependencies": { "semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "make-error": { - "version": "1.3.6" + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "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==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } }, "match-all": { - "version": "1.2.6" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" + }, + "math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==" }, "mathjs": { "version": "10.6.4", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", + "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", + "dev": true, "requires": { "@babel/runtime": "^7.18.6", "complex.js": "^2.1.1", @@ -29799,8 +37687,33 @@ "typed-function": "^2.1.0" } }, + "mcl-wasm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.7.0.tgz", + "integrity": "sha512-ok9uE7ekFh5+orI0dFT19KeY/y5P6ONp0dks8oo/KniyNK6mJ0zloL3+s6LiEQXW8VxQHwsfZslitL/R7MM9ew==", + "requires": { + "@types/node": "^20.2.5" + }, + "dependencies": { + "@types/node": { + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "requires": { + "undici-types": "~6.19.2" + } + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + } + } + }, "md5.js": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -29808,28 +37721,42 @@ } }, "media-typer": { - "version": "0.3.0" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "memorystream": { - "version": "0.3.1" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" }, "merge-descriptors": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge-options": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "requires": { "is-plain-obj": "^2.1.0" } }, "merge-stream": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.4.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "merkletreejs": { "version": "0.3.11", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", + "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", "requires": { "bignumber.js": "^9.0.1", "buffer-reverse": "^1.0.1", @@ -29839,13 +37766,19 @@ } }, "methods": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micro-ftch": { - "version": "0.3.1" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" }, "microdata-rdf-streaming-parser": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-2.0.1.tgz", + "integrity": "sha512-oEEYP3OwPGOtoE4eIyJvX1eJXI7VkGR4gKYqpEufaRXc2ele/Tkid/KMU3Los13wGrOq6woSxLEGOYSHzpRvwA==", "requires": { "@rdfjs/types": "*", "htmlparser2": "^8.0.0", @@ -29856,6 +37789,8 @@ "dependencies": { "htmlparser2": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "requires": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -29867,6 +37802,8 @@ }, "micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "requires": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -29874,67 +37811,237 @@ }, "microtime": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.1.1.tgz", + "integrity": "sha512-to1r7o24cDsud9IhN6/8wGmMx5R2kT0w2Xwm5okbYI3d1dk6Xv0m+Z+jg2vS9pt+ocgQHTCtgs/YuyJhySzxNg==", "requires": { "node-addon-api": "^5.0.0", "node-gyp-build": "^4.4.0" }, "dependencies": { "node-addon-api": { - "version": "5.1.0" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" } } }, "mime": { - "version": "1.6.0" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.52.0" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { "mime-db": "1.52.0" } }, "mimic-fn": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mimic-response": { "version": "3.1.0", - "dev": true + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" }, "min-document": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dev": true, "requires": { "dom-walk": "^0.1.0" } }, "minimalistic-assert": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.8" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, "minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "requires": { "minipass": "^2.9.0" @@ -29942,16 +38049,21 @@ }, "mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { "minimist": "^1.2.6" } }, "mkdirp-classic": { "version": "0.5.3", - "dev": true + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "mkdirp-promise": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", "dev": true, "requires": { "mkdirp": "*" @@ -29959,12 +38071,16 @@ }, "mnemonist": { "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "requires": { "obliterator": "^2.0.0" } }, "mocha": { "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "requires": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -29990,12 +38106,16 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { "balanced-match": "^1.0.0" } }, "chokidar": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -30009,6 +38129,8 @@ }, "cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -30016,10 +38138,14 @@ } }, "diff": { - "version": "5.2.0" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" }, "glob": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -30030,24 +38156,32 @@ }, "glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } }, "minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "requires": { "brace-expansion": "^2.0.1" } }, "readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } }, "yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -30062,25 +38196,37 @@ }, "mock-fs": { "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", "dev": true }, "mock-socket": { - "version": "9.3.1" + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==" }, "moment": { - "version": "2.30.1" + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" }, "moment-timezone": { "version": "0.5.46", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", "requires": { "moment": "^2.29.4" } }, "ms": { - "version": "2.1.3" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "multiaddr": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-10.0.1.tgz", + "integrity": "sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==", "requires": { "dns-over-http-resolver": "^1.2.3", "err-code": "^3.0.1", @@ -30092,6 +38238,8 @@ }, "multibase": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", "dev": true, "requires": { "base-x": "^3.0.8", @@ -30100,6 +38248,8 @@ "dependencies": { "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", @@ -30110,6 +38260,8 @@ }, "multicodec": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", "dev": true, "requires": { "varint": "^5.0.0" @@ -30117,15 +38269,21 @@ "dependencies": { "varint": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", "dev": true } } }, "multiformats": { - "version": "9.9.0" + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" }, "multihashes": { "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", "dev": true, "requires": { "buffer": "^5.5.0", @@ -30135,6 +38293,8 @@ "dependencies": { "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", @@ -30143,6 +38303,8 @@ }, "multibase": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", "dev": true, "requires": { "base-x": "^3.0.8", @@ -30151,12 +38313,16 @@ }, "varint": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", "dev": true } } }, "multistream-select": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-2.0.1.tgz", + "integrity": "sha512-ziVNT/vux0uUElP4OKNMVr0afU/X6PciAmT2UJNolhzhSLXIwFAaYfmLajD8NoZ+DsBQ1bp0zZ2nMVPF+FhClA==", "requires": { "bl": "^5.0.0", "debug": "^4.1.1", @@ -30172,6 +38338,8 @@ }, "murmur-128": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", "requires": { "encode-utf8": "^1.0.2", "fmix": "^0.1.0", @@ -30179,10 +38347,14 @@ } }, "mutable-proxy": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mutable-proxy/-/mutable-proxy-1.0.0.tgz", + "integrity": "sha512-4OvNRr1DJpy2QuDUV74m+BWZ//n4gG4bmd21MzDSPqHEidIDWqwyOjcadU1LBMO3vXYGurVKjfBrxrSQIHFu9A==" }, "mysql2": { "version": "3.11.5", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.5.tgz", + "integrity": "sha512-0XFu8rUmFN9vC0ME36iBvCUObftiMHItrYFhlCRvFWbLgpNqtC4Br/NmZX1HNCszxT0GGy5QtP+k3Q3eCJPaYA==", "requires": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", @@ -30197,6 +38369,8 @@ }, "mz": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, "requires": { "any-promise": "^1.0.0", @@ -30206,6 +38380,8 @@ }, "n3": { "version": "1.23.1", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.23.1.tgz", + "integrity": "sha512-3f0IYJo+6+lXypothmlwPzm3wJNffsxUwnfONeFv2QqWq7RjTvyCMtkRXDUXW6XrZoOzaQX8xTTSYNlGjXcGtw==", "requires": { "buffer": "^6.0.3", "queue-microtask": "^1.1.2", @@ -30214,58 +38390,87 @@ }, "named-placeholders": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", "requires": { "lru-cache": "^7.14.1" }, "dependencies": { "lru-cache": { - "version": "7.18.3" + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" } } }, "nan": { - "version": "2.22.0" + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==" }, "nano-json-stream-parser": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", "dev": true }, "nanoclone": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==", "dev": true }, "nanoid": { - "version": "3.3.8" + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==" }, "napi-build-utils": { "version": "1.0.2", - "dev": true + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "native-abort-controller": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", + "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==", "requires": {} }, "native-fetch": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", + "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==", "requires": {} }, "natural-compare": { - "version": "1.4.0" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "negotiate": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/negotiate/-/negotiate-1.0.1.tgz", + "integrity": "sha512-KBCIM4dAIT9j/pSXLHHQbZG74NmKNXTtxU2zHN0HG6uzzuFE01m1UdGoUmVHmACiBuCAOL7KwfqSW1oUQBj/vg==" }, "negotiator": { - "version": "0.6.3" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "netmask": { - "version": "2.0.2" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, "next-tick": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "nise": { "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.0", @@ -30277,6 +38482,8 @@ "dependencies": { "@sinonjs/commons": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -30284,6 +38491,8 @@ }, "@sinonjs/fake-timers": { "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", + "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.1" @@ -30291,29 +38500,41 @@ }, "path-to-regexp": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true }, "type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true } } }, "no-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "requires": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "noble-ed25519": { - "version": "1.2.6" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.6.tgz", + "integrity": "sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==" }, "noble-secp256k1": { - "version": "1.2.14" + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", + "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==" }, "nock": { "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", "requires": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", @@ -30322,19 +38543,26 @@ }, "node-abi": { "version": "3.71.0", - "dev": true, + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", "requires": { "semver": "^7.3.5" } }, "node-addon-api": { - "version": "2.0.2" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node-domexception": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" }, "node-fetch": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -30342,53 +38570,195 @@ } }, "node-forge": { - "version": "0.10.0" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } }, "node-gyp-build": { - "version": "4.8.4" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==" }, "node-preload": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "requires": { "process-on-spawn": "^1.0.0" } }, "node-releases": { - "version": "2.0.18", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "requires": { + "abbrev": "1" + } + }, "normalize-path": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, "npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "requires": { "path-key": "^3.0.0" } }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, "number-to-bn": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "requires": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" }, "dependencies": { "bn.js": { - "version": "4.11.6" + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, "nwsapi": { "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", "dev": true }, "nyc": { "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "requires": { "@istanbuljs/load-nyc-config": "^1.0.0", @@ -30422,10 +38792,14 @@ "dependencies": { "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -30435,6 +38809,8 @@ }, "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, "requires": { "locate-path": "^5.0.0", @@ -30443,6 +38819,8 @@ }, "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, "requires": { "p-locate": "^4.1.0" @@ -30450,6 +38828,8 @@ }, "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, "requires": { "p-try": "^2.0.0" @@ -30457,6 +38837,8 @@ }, "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, "requires": { "p-limit": "^2.2.0" @@ -30464,6 +38846,8 @@ }, "p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" @@ -30471,10 +38855,14 @@ }, "resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -30484,10 +38872,14 @@ }, "y18n": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -30505,6 +38897,8 @@ }, "yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -30515,20 +38909,30 @@ }, "oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { - "version": "4.1.1" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.13.3" + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==" }, "object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "requires": { "call-bind": "^1.0.5", @@ -30539,6 +38943,8 @@ }, "object.entries": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "requires": { "call-bind": "^1.0.7", @@ -30548,6 +38954,8 @@ }, "object.fromentries": { "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, "requires": { @@ -30559,6 +38967,8 @@ }, "object.groupby": { "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, "requires": { @@ -30569,6 +38979,8 @@ }, "object.values": { "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, "requires": { @@ -30578,44 +38990,60 @@ } }, "obliterator": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" }, "oboe": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "dev": true, "requires": { "http-https": "^1.0.0" } }, "on-exit-leak-free": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==" }, "on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } }, "one-time": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "requires": { "fn.name": "1.x.x" } }, "onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" } }, "optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -30626,61 +39054,85 @@ } }, "os-tmpdir": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-any": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", + "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", "requires": { "p-cancelable": "^2.0.0", "p-some": "^5.0.0" } }, "p-cancelable": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "p-defer": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" }, "p-fifo": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", + "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", "requires": { "fast-fifo": "^1.0.0", "p-defer": "^3.0.0" } }, "p-finally": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" }, "p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { "yocto-queue": "^0.1.0" } }, "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==", "requires": { "p-limit": "^3.0.2" } }, "p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "requires": { "aggregate-error": "^3.0.0" } }, "p-queue": { "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "requires": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" }, "dependencies": { "eventemitter3": { - "version": "4.0.7" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { "p-finally": "^1.0.0" } @@ -30688,10 +39140,14 @@ } }, "p-reflect": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", + "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==" }, "p-retry": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "requires": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -30699,6 +39155,8 @@ }, "p-settle": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", + "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", "requires": { "p-limit": "^2.2.2", "p-reflect": "^2.1.0" @@ -30706,6 +39164,8 @@ "dependencies": { "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } @@ -30714,19 +39174,27 @@ }, "p-some": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", + "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", "requires": { "aggregate-error": "^3.0.0", "p-cancelable": "^2.0.0" } }, "p-timeout": { - "version": "4.1.0" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", + "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==" }, "p-try": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "package-hash": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "requires": { "graceful-fs": "^4.1.15", @@ -30737,6 +39205,8 @@ }, "pad-right": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", "dev": true, "requires": { "repeat-string": "^1.5.2" @@ -30744,53 +39214,79 @@ }, "pako": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", "optional": true }, "parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { "callsites": "^3.0.0" } }, "parse-headers": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", "dev": true }, "parse5": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "parseurl": { - "version": "1.3.3" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascal-case": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "path-exists": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { - "version": "0.1.12" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pbkdf2": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -30801,6 +39297,8 @@ }, "peer-id": { "version": "0.15.4", + "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.15.4.tgz", + "integrity": "sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==", "requires": { "class-is": "^1.1.0", "libp2p-crypto": "^0.20.0", @@ -30812,6 +39310,8 @@ "dependencies": { "libp2p-crypto": { "version": "0.20.0", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", + "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", "requires": { "err-code": "^3.0.1", "iso-random-stream": "^2.0.0", @@ -30830,29 +39330,43 @@ }, "pem-jwk": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", + "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", "requires": { "asn1.js": "^5.0.1" } }, "performance-now": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, "pg-connection-string": { - "version": "2.7.0" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" }, "picocolors": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { - "version": "2.3.1" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true }, "pino": { "version": "8.21.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", "requires": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", @@ -30869,6 +39383,8 @@ }, "pino-abstract-transport": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", "requires": { "readable-stream": "^4.0.0", "split2": "^4.0.0" @@ -30876,6 +39392,8 @@ }, "pino-pretty": { "version": "9.4.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-9.4.1.tgz", + "integrity": "sha512-loWr5SNawVycvY//hamIzyz3Fh5OSpvkcO13MwdDW+eKIGylobPLqnVGTDwDXkdmpJd1BhEG+qhDw09h6SqJiQ==", "requires": { "colorette": "^2.0.7", "dateformat": "^4.6.3", @@ -30894,10 +39412,14 @@ } }, "pino-std-serializers": { - "version": "6.2.2" + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" }, "pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { "find-up": "^4.0.0" @@ -30905,6 +39427,8 @@ "dependencies": { "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, "requires": { "locate-path": "^5.0.0", @@ -30913,6 +39437,8 @@ }, "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, "requires": { "p-locate": "^4.1.0" @@ -30920,6 +39446,8 @@ }, "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, "requires": { "p-try": "^2.0.0" @@ -30927,6 +39455,8 @@ }, "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, "requires": { "p-limit": "^2.2.0" @@ -30935,15 +39465,20 @@ } }, "pony-cause": { - "version": "2.1.11" + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", + "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==" }, "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 }, "prebuild-install": { "version": "7.1.2", - "dev": true, + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "requires": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -30961,7 +39496,8 @@ "dependencies": { "bl": { "version": "4.1.0", - "dev": true, + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -30970,7 +39506,8 @@ }, "buffer": { "version": "5.7.1", - "dev": true, + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -30978,7 +39515,8 @@ }, "readable-stream": { "version": "3.6.2", - "dev": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -30987,7 +39525,8 @@ }, "tar-fs": { "version": "2.1.1", - "dev": true, + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -30997,7 +39536,8 @@ }, "tar-stream": { "version": "2.2.0", - "dev": true, + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -31009,14 +39549,20 @@ } }, "prelude-ls": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, "private-ip": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.3.4.tgz", + "integrity": "sha512-ts/YFVwfBeLq61f9+KsOhXW6RH0wvY0gU50R6QZYzgFhggyyLK6WDFeYdjfi/HMnBm2hecLvsR3PB3JcRxDk+A==", "requires": { "ip-regex": "^4.3.0", "ipaddr.js": "^2.0.1", @@ -31025,30 +39571,74 @@ } }, "process": { - "version": "0.11.10" + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, "process-nextick-args": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "process-on-spawn": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "requires": { "fromentries": "^1.2.0" } }, "process-warning": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" }, "progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, "promise-polyfill": { - "version": "1.1.6" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", + "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==" + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "dependencies": { + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true + } + } }, "prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "peer": true, "requires": { @@ -31058,14 +39648,20 @@ } }, "propagate": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" }, "property-expr": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", "dev": true }, "protobufjs": { "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -31083,27 +39679,37 @@ }, "dependencies": { "long": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" } } }, "proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "dependencies": { "ipaddr.js": { - "version": "1.9.1" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" } } }, "proxy-from-env": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "psl": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, "requires": { "punycode": "^2.3.1" @@ -31111,22 +39717,30 @@ }, "pump": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "punycode": { - "version": "2.3.1" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "qs": { "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { "side-channel": "^1.0.6" } }, "query-string": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, "requires": { "decode-uri-component": "^0.2.0", @@ -31136,33 +39750,49 @@ }, "querystringify": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, "queue-microtask": { - "version": "1.2.3" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "queue-tick": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true }, "quick-format-unescaped": { - "version": "4.0.4" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" }, "quick-lru": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, "randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" } }, "range-parser": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -31172,6 +39802,8 @@ "dependencies": { "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -31180,6 +39812,8 @@ }, "rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -31188,21 +39822,37 @@ }, "dependencies": { "ini": { - "version": "1.3.8" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "strip-json-comments": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" } } }, + "rdf-canonize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "requires": { + "setimmediate": "^1.0.5" + } + }, "rdf-data-factory": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.2.tgz", + "integrity": "sha512-TfQD63Lokabd09ES1jAtKK8AA6rkr9rwyUBGo6olOt1CE0Um36CUQIqytyf0am2ouBPR0l7SaHxCiMcPGHkt1A==", "requires": { "@rdfjs/types": "*" } }, "rdf-isomorphic": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", + "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", "requires": { "@rdfjs/types": "*", "hash.js": "^1.1.7", @@ -31212,6 +39862,8 @@ }, "rdf-literal": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", + "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -31219,6 +39871,8 @@ }, "rdf-object": { "version": "1.14.0", + "resolved": "https://registry.npmjs.org/rdf-object/-/rdf-object-1.14.0.tgz", + "integrity": "sha512-/KSUWr7onDtL7d81kOpcUzJ2vHYOYJc2KU9WzBZRYydBhK0Sksh5Hg4VCQNaxUEvYEgdrrTuq9SLpOOCmag0rQ==", "requires": { "@rdfjs/types": "*", "jsonld-context-parser": "^2.0.2", @@ -31229,6 +39883,8 @@ }, "rdf-parse": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-2.3.3.tgz", + "integrity": "sha512-N5XEHm+ajFzwo/vVNzB4tDtvqMwBosbVJmZl5DlzplQM9ejlJBlN/43i0ImAb/NMtJJgQPC3jYnkCKGA7wdo/w==", "requires": { "@comunica/actor-http-fetch": "^2.0.1", "@comunica/actor-http-proxy": "^2.0.1", @@ -31258,6 +39914,8 @@ }, "rdf-quad": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdf-quad/-/rdf-quad-1.5.0.tgz", + "integrity": "sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA==", "requires": { "rdf-data-factory": "^1.0.1", "rdf-literal": "^1.2.0", @@ -31266,6 +39924,8 @@ }, "rdf-store-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-store-stream/-/rdf-store-stream-2.0.1.tgz", + "integrity": "sha512-znGaibHLvbRE0BrDcXHRleRcLKlHYP6ADr1RFJ3yA28QBmhOjxxgbBFTvCMzgsxvBIqdaFS8Vd2FG4NefJL4Mg==", "requires": { "@rdfjs/types": "*", "rdf-stores": "^1.0.0" @@ -31273,6 +39933,8 @@ }, "rdf-stores": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rdf-stores/-/rdf-stores-1.0.0.tgz", + "integrity": "sha512-wqp7M5409rbhpWQE0C1vyVysbz++aD2vEkZ6yueSxhDtyLvznS41R3cKiuUpm3ikc/yTpaCZwPo4iyKEaAwBIg==", "requires": { "@rdfjs/types": "*", "asynciterator": "^3.8.0", @@ -31283,6 +39945,8 @@ }, "rdf-streaming-store": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rdf-streaming-store/-/rdf-streaming-store-1.1.5.tgz", + "integrity": "sha512-Rfd3qo1otF/Jfau/lAFX8J1ZPorN0eaHoIkAlenIIcdZjq9AoIP85rEa4Sn+yMZOqNU1Kc4cCPUv5CFHhpAT2Q==", "requires": { "@rdfjs/types": "*", "@types/n3": "^1.10.4", @@ -31295,18 +39959,24 @@ "dependencies": { "@types/readable-stream": { "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", "requires": { "@types/node": "*", "safe-buffer": "~5.1.1" } }, "safe-buffer": { - "version": "5.1.2" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "rdf-string": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", + "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -31314,6 +39984,8 @@ }, "rdf-string-ttl": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rdf-string-ttl/-/rdf-string-ttl-1.3.2.tgz", + "integrity": "sha512-yqolaVoUvTaSC5aaQuMcB4BL54G/pCGsV4jQH87f0TvAx8zHZG0koh7XWrjva/IPGcVb1QTtaeEdfda5mcddJg==", "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -31321,6 +39993,8 @@ }, "rdf-terms": { "version": "1.11.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", + "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", "requires": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0", @@ -31329,6 +40003,8 @@ }, "rdfa-streaming-parser": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-2.0.1.tgz", + "integrity": "sha512-7Yyaj030LO7iQ38Wh/RNLVeYrVFJeyx3dpCK7C1nvX55eIN/gE4HWfbg4BYI9X7Bd+eUIUMVeiKYLmYjV6apow==", "requires": { "@rdfjs/types": "*", "htmlparser2": "^8.0.0", @@ -31339,6 +40015,8 @@ "dependencies": { "htmlparser2": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "requires": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -31350,6 +40028,8 @@ }, "rdfxml-streaming-parser": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.4.0.tgz", + "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", "requires": { "@rdfjs/types": "*", "@rubensworks/saxes": "^6.0.1", @@ -31363,17 +40043,23 @@ }, "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "peer": true }, "react-native-fetch-api": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", + "integrity": "sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==", "requires": { "p-defer": "^3.0.0" } }, "readable-stream": { "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "requires": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -31383,43 +40069,60 @@ } }, "readable-stream-node-to-web": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", + "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==" }, "readdirp": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==" }, "real-require": { - "version": "0.2.0" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==" }, "receptacle": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", + "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", "requires": { "ms": "^2.1.1" } }, "reflect-metadata": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, "reflect.getprototypeof": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", + "dunder-proto": "^1.0.0", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" } }, "regenerator-runtime": { - "version": "0.14.1" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regexp-match-indices": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz", + "integrity": "sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ==", "dev": true, "requires": { "regexp-tree": "^0.1.11" @@ -31427,10 +40130,14 @@ }, "regexp-tree": { "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true }, "regexp.prototype.flags": { "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "peer": true, "requires": { @@ -31441,10 +40148,14 @@ } }, "relative-to-absolute-iri": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", + "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==" }, "release-zalgo": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "requires": { "es6-error": "^4.0.1" @@ -31452,10 +40163,14 @@ }, "repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true }, "request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -31482,6 +40197,8 @@ "dependencies": { "form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -31491,10 +40208,14 @@ }, "qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { "psl": "^1.1.28", @@ -31503,26 +40224,38 @@ }, "uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "require-directory": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { - "version": "2.0.2" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requires-port": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -31531,13 +40264,19 @@ }, "resolve-alpn": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "resolve-from": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "resolve-pkg": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", + "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", "dev": true, "requires": { "resolve-from": "^5.0.0" @@ -31545,12 +40284,16 @@ "dependencies": { "resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, "responselike": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "requires": { "lowercase-keys": "^2.0.0" @@ -31558,12 +40301,16 @@ "dependencies": { "lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true } } }, "restore-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "requires": { "onetime": "^5.1.0", @@ -31571,29 +40318,43 @@ } }, "retimer": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz", + "integrity": "sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==" }, "retry": { - "version": "0.13.1" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" }, "retry-as-promised": { - "version": "7.0.4" + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" }, "reusify": { - "version": "1.0.4" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rfdc": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } }, "ripemd160": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -31601,16 +40362,22 @@ }, "rlp": { "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "requires": { "bn.js": "^5.2.0" } }, "robust-predicates": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", "dev": true }, "rolling-rate-limiter": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/rolling-rate-limiter/-/rolling-rate-limiter-0.2.13.tgz", + "integrity": "sha512-fF5XeJn7t22cC9LIh77BDfs7Mg0jon03qezMfPige0vehzhmNyQ6U+eSYbaL1l80sX9z+22+6x4pQ8xHT0LrVw==", "requires": { "microtime": "^3.0.0", "uuid": "^8.3.0" @@ -31618,61 +40385,84 @@ }, "run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "requires": { "queue-microtask": "^1.2.2" } }, "rw": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", "dev": true }, "rxjs": { "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "requires": { "tslib": "^2.1.0" } }, "safe-array-concat": { - "version": "1.1.2", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-regex-test": { - "version": "1.0.3", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" } }, "safe-stable-stringify": { - "version": "2.5.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" }, "safer-buffer": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize-filename": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "requires": { "truncate-utf8-bytes": "^1.0.0" } }, "sax": { - "version": "1.4.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "sax-stream": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax-stream/-/sax-stream-1.3.0.tgz", + "integrity": "sha512-tcfsAAICAkyNNe4uiKtKmLKxx3C7qPAej13UUoN+7OLYq/P5kHGahZtJhhMVM3fIMndA6TlYHWFlFEzFkv1VGg==", "requires": { "debug": "~2", "sax": "~1" @@ -31680,17 +40470,23 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "saxes": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { "xmlchars": "^2.2.0" @@ -31698,13 +40494,19 @@ }, "scale-ts": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", "optional": true }, "scrypt-js": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "secp256k1": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "requires": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", @@ -31712,20 +40514,31 @@ } }, "secure-json-parse": { - "version": "2.7.0" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" }, "seed-random": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", "dev": true }, "seedrandom": { - "version": "3.0.5" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "dev": true }, "semver": { - "version": "7.6.3" + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "send": { "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -31744,25 +40557,35 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" }, "dependencies": { "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "encodeurl": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" } } }, "seq-queue": { - "version": "0.0.5" + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "sequelize": { "version": "6.37.5", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.5.tgz", + "integrity": "sha512-10WA4poUb3XWnUROThqL2Apq9C2NhyV1xHPMZuybNMCucDsbbFuKg51jhmyvvAUyUqCiimwTZamc3AHhMoBr2Q==", "requires": { "@types/debug": "^4.1.8", "@types/validator": "^13.7.17", @@ -31783,16 +40606,22 @@ } }, "sequelize-pool": { - "version": "7.1.0" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" }, "serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "requires": { "randombytes": "^2.1.0" } }, "serve-static": { "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -31802,6 +40631,8 @@ }, "servify": { "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "dev": true, "requires": { "body-parser": "^1.16.0", @@ -31813,13 +40644,19 @@ }, "set-blocking": { "version": "2.0.0", - "dev": true + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "devOptional": true }, "set-delayed-interval": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz", + "integrity": "sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw==" }, "set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "requires": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -31831,6 +40668,8 @@ }, "set-function-name": { "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, "peer": true, "requires": { @@ -31841,13 +40680,19 @@ } }, "setimmediate": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sha.js": { "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -31855,6 +40700,8 @@ }, "shaclc-parse": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/shaclc-parse/-/shaclc-parse-1.4.0.tgz", + "integrity": "sha512-zyxjIYQH2ghg/wtMvOp+4Nr6aK8j9bqFiVT3w47K8WHPYN+S3Zgnh2ybT+dGgMwo9KjiOoywxhjC7d8Z6GCmfA==", "requires": { "@rdfjs/types": "^1.1.0", "n3": "^1.16.3" @@ -31862,6 +40709,8 @@ }, "shaclc-write": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/shaclc-write/-/shaclc-write-1.4.3.tgz", + "integrity": "sha512-dtJ6LokIluzQuHRWCFvNnmGyh07FxBK2L4utkOQn/wYD9eNamUUCt7sDBcuFDyD3jAGv0Ipmv0EitTyKcM1f/w==", "requires": { "@jeswr/prefixcc": "^1.2.1", "n3": "^1.16.3", @@ -31870,6 +40719,8 @@ }, "sharp": { "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "dev": true, "requires": { "color": "^4.2.3", @@ -31884,38 +40735,83 @@ "dependencies": { "node-addon-api": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", "dev": true } } }, "shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "side-channel": { - "version": "1.0.6", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "requires": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { - "version": "3.0.7" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-concat": { "version": "1.0.1", - "dev": true + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, "simple-get": { "version": "4.0.1", - "dev": true, + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "requires": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -31924,12 +40820,16 @@ }, "simple-swizzle": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "requires": { "is-arrayish": "^0.3.1" } }, "sinon": { "version": "14.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", + "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", "dev": true, "requires": { "@sinonjs/commons": "^2.0.0", @@ -31942,10 +40842,14 @@ "dependencies": { "diff": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -31955,6 +40859,8 @@ }, "slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { "ansi-styles": "^6.0.0", @@ -31963,23 +40869,82 @@ "dependencies": { "ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true } } }, "slugify": { "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", "dev": true }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true + }, "smoldot": { "version": "2.0.22", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.22.tgz", + "integrity": "sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==", + "dev": true, "optional": true, "requires": { "ws": "^8.8.1" } }, + "socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "optional": true, + "requires": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "dependencies": { + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "optional": true, + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + } + }, + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "optional": true + } + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "solady": { + "version": "0.0.285", + "resolved": "https://registry.npmjs.org/solady/-/solady-0.0.285.tgz", + "integrity": "sha512-MkY9KFFuhMeTkWU+4wIzBoEkGr1DXdMR98/zGB8S7efg9Wph9Z4d98RRu7c8pRpmRfrSPAYuMKkvauMCpWXStg==" + }, "solc": { "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "requires": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -31991,13 +40956,19 @@ }, "dependencies": { "commander": { - "version": "8.3.0" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, "semver": { - "version": "5.7.2" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" } @@ -32006,25 +40977,35 @@ }, "sonic-boom": { "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", "requires": { "atomic-sleep": "^1.0.0" } }, "source-map": { - "version": "0.6.1" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "spark-md5": { - "version": "3.0.2" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" }, "sparqlalgebrajs": { "version": "4.3.8", + "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-4.3.8.tgz", + "integrity": "sha512-Xo1/5icRtVk2N38BrY9NXN8N/ZPjULlns7sDHv0nlcGOsOediBLWVy8LmV+Q90RHvb3atZZbrFy3VqrM4iXciA==", "requires": { "@rdfjs/types": "*", "@types/sparqljs": "^3.1.3", @@ -32039,12 +41020,16 @@ }, "sparqljs": { "version": "3.7.3", + "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", + "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", "requires": { "rdf-data-factory": "^1.1.2" } }, "sparqljson-parse": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", "requires": { "@bergos/jsonparse": "^1.4.1", "@rdfjs/types": "*", @@ -32055,6 +41040,8 @@ }, "sparqljson-to-tree": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sparqljson-to-tree/-/sparqljson-to-tree-3.0.2.tgz", + "integrity": "sha512-8h/ZEPPBhBlMbgMX1TOumJQku2mLYYdwd/octsDa/bdqdNcMeAcB7S2Qh4SEZ+0pPNed9CBk1d5TEUpwJlcdmw==", "requires": { "@rdfjs/types": "*", "rdf-literal": "^1.3.2", @@ -32063,6 +41050,8 @@ }, "sparqlxml-parse": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", + "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", "requires": { "@rdfjs/types": "*", "@rubensworks/saxes": "^6.0.1", @@ -32074,6 +41063,8 @@ }, "spawn-wrap": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { "foreground-child": "^2.0.0", @@ -32085,16 +41076,118 @@ } }, "split2": { - "version": "4.2.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" }, "sprintf-js": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "sqlite": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-5.1.1.tgz", + "integrity": "sha512-oBkezXa2hnkfuJwUo44Hl9hS3er+YFtueifoajrgidvqsJRQFpc5fKoAkAor1O5ZnLoa28GBScfHXs8j0K358Q==" + }, + "sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "node-gyp": "8.x", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } }, "sqlstring": { - "version": "2.3.3" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" }, "sshpk": { "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -32110,61 +41203,115 @@ "dependencies": { "jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, "tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true } } }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "requires": { + "minipass": "^3.1.1" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } + } + }, "stack-trace": { - "version": "0.0.10" + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" }, "stackframe": { "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "dev": true }, "stacktrace-parser": { "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "requires": { "type-fest": "^0.7.1" }, "dependencies": { "type-fest": { - "version": "0.7.1" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" } } }, "statuses": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "stream-to-it": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", + "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", "requires": { "get-iterator": "^1.0.2" } }, "stream-to-string": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", + "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", "requires": { "promise-polyfill": "^1.1.6" } }, "streamify-array": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/streamify-array/-/streamify-array-1.0.1.tgz", + "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==" }, "streamify-string": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", + "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==" }, "streaming-iterables": { - "version": "6.2.0" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-6.2.0.tgz", + "integrity": "sha512-3AYC8oB60WyD1ic7uHmN/vm2oRGzRnQ3XFBl/bFMDi1q1+nc5/vjMmiE4vroIya3jG59t87VpyAj/iXYxyw9AA==" }, "streamsearch": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, "streamx": { - "version": "2.21.0", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "dev": true, "requires": { "bare-events": "^2.2.0", @@ -32175,19 +41322,27 @@ }, "strict-uri-encode": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "dev": true }, "string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" } }, "string-argv": { - "version": "0.3.2" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==" }, "string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -32195,15 +41350,21 @@ }, "dependencies": { "emoji-regex": { - "version": "8.0.0" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "is-fullwidth-code-point": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" } } }, "string.prototype.includes": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "peer": true, "requires": { @@ -32214,6 +41375,8 @@ }, "string.prototype.matchall": { "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "peer": true, "requires": { @@ -32233,6 +41396,8 @@ }, "string.prototype.repeat": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "peer": true, "requires": { @@ -32241,28 +41406,38 @@ } }, "string.prototype.trim": { - "version": "1.2.9", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" } }, "string.prototype.trimend": { - "version": "1.0.8", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { "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, "peer": true, "requires": { @@ -32273,42 +41448,60 @@ }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" }, "dependencies": { "ansi-regex": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" } } }, "strip-bom": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, "strip-final-newline": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-hex-prefix": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "requires": { "is-hex-prefixed": "1.0.0" } }, "strip-json-comments": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "requires": { "has-flag": "^4.0.0" } }, "supports-preserve-symlinks-flag": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "swarm-js": { "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", "dev": true, "requires": { "bluebird": "^3.5.0", @@ -32326,6 +41519,8 @@ "dependencies": { "@szmarczak/http-timer": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "requires": { "defer-to-connect": "^2.0.0" @@ -32333,10 +41528,14 @@ }, "bluebird": { "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", @@ -32345,10 +41544,14 @@ }, "cacheable-lookup": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true }, "fs-extra": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -32358,6 +41561,8 @@ }, "got": { "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, "requires": { "@sindresorhus/is": "^4.0.0", @@ -32375,6 +41580,8 @@ }, "http2-wrapper": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "requires": { "quick-lru": "^5.1.1", @@ -32383,6 +41590,8 @@ }, "jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -32390,20 +41599,28 @@ }, "lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true }, "universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true } } }, "symbol-tree": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, "tar": { "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dev": true, "requires": { "chownr": "^1.1.4", @@ -32417,6 +41634,8 @@ }, "tar-fs": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "dev": true, "requires": { "bare-fs": "^2.1.1", @@ -32427,6 +41646,8 @@ }, "tar-stream": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "requires": { "b4a": "^1.6.4", @@ -32436,6 +41657,8 @@ }, "test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", @@ -32445,19 +41668,27 @@ }, "text-decoder": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.2.tgz", + "integrity": "sha512-/MDslo7ZyWTA2vnk1j7XoDVfXsGk3tp+zFEJHJGm0UjIlQifonVFwlVbQDFh8KJzTBnT8ie115TYqir6bclddA==", "dev": true, "requires": { "b4a": "^1.6.4" } }, "text-hex": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, "text-table": { - "version": "0.2.0" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "thenify": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "requires": { "any-promise": "^1.0.0" @@ -32465,6 +41696,8 @@ }, "thenify-all": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, "requires": { "thenify": ">= 3.1.0 < 4" @@ -32472,28 +41705,41 @@ }, "thread-stream": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", "requires": { "real-require": "^0.2.0" } }, "through": { - "version": "2.3.8" + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true }, "timeout-abort-controller": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", + "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", "requires": { "retimer": "^3.0.0" } }, "tiny-emitter": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "dev": true }, "tinyglobby": { "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", "requires": { "fdir": "^6.4.2", "picomatch": "^4.0.2" @@ -32501,38 +41747,56 @@ "dependencies": { "fdir": { "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", "requires": {} }, "picomatch": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" } } }, "tmp": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { "is-number": "^7.0.0" } }, "toidentifier": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "toobusy-js": { - "version": "0.5.1" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/toobusy-js/-/toobusy-js-0.5.1.tgz", + "integrity": "sha512-GiCux/c8G2TV0FTDgtxnXOxmSAndaI/9b1YxT14CqyeBDtTZAcJLx9KlXT3qECi8D0XCc78T4sN/7gWtjRyCaA==" }, "toposort": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", "dev": true }, "toposort-class": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, "tough-cookie": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, "requires": { "psl": "^1.1.33", @@ -32543,34 +41807,48 @@ "dependencies": { "universalify": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true } } }, "tr46": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { "punycode": "^2.1.1" } }, "traverse": { - "version": "0.3.9" + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" }, "treeify": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" }, "triple-beam": { - "version": "1.4.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" }, "truncate-utf8-bytes": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "requires": { "utf8-byte-length": "^1.0.1" } }, "ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -32589,6 +41867,8 @@ "dependencies": { "acorn-walk": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "requires": { "acorn": "^8.11.0" } @@ -32597,6 +41877,8 @@ }, "tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "peer": true, "requires": { @@ -32608,6 +41890,8 @@ "dependencies": { "json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "peer": true, "requires": { @@ -32616,48 +41900,69 @@ }, "strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "peer": true } } }, "tslib": { - "version": "2.8.1" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tsort": { - "version": "0.0.1" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" }, "tunnel-agent": { "version": "0.6.0", - "dev": true, + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "requires": { "safe-buffer": "^5.0.1" } }, "tweetnacl": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "tweetnacl-util": { - "version": "0.15.1" + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, "type": { - "version": "2.7.3" + "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==" }, "type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "requires": { "prelude-ls": "^1.2.1" } }, "type-detect": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true }, "type-fest": { - "version": "0.20.2" + "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==" }, "type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -32665,6 +41970,8 @@ }, "typed-array-buffer": { "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, "peer": true, "requires": { @@ -32675,6 +41982,8 @@ }, "typed-array-byte-length": { "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, "peer": true, "requires": { @@ -32687,6 +41996,8 @@ }, "typed-array-byte-offset": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, "peer": true, "requires": { @@ -32701,6 +42012,8 @@ }, "typed-array-length": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "peer": true, "requires": { @@ -32713,29 +42026,42 @@ } }, "typed-function": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", + "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==", + "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { - "version": "4.9.5" + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, "uint8arrays": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", "requires": { "multiformats": "^9.4.2" } }, "ultron": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, "umzug": { "version": "3.8.2", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-3.8.2.tgz", + "integrity": "sha512-BEWEF8OJjTYVC56GjELeHl/1XjFejrD7aHzn+HldRJTx+pL1siBrKHZC8n4K/xL3bEzVA9o++qD1tK2CpZu4KA==", "requires": { "@rushstack/ts-command-line": "^4.12.2", "emittery": "^0.13.0", @@ -32745,12 +42071,16 @@ }, "dependencies": { "type-fest": { - "version": "4.30.0" + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.1.tgz", + "integrity": "sha512-ojFL7eDMX2NF0xMbDwPZJ8sb7ckqtlAi1GsmgsFXvErT9kFTk1r0DuQKvrCh73M6D4nngeHJmvogF9OluXs7Hw==" } } }, "unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "peer": true, "requires": { @@ -32762,24 +42092,54 @@ }, "undici": { "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", "requires": { "@fastify/busboy": "^2.0.0" } }, "undici-types": { - "version": "6.20.0" + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4" + } }, "universalify": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" }, "unordered-array-remove": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", + "integrity": "sha512-45YsfD6svkgaCBNyvD+dFHm4qFX9g3wRSIVgWVPtm2OCnphvPxzJoe20ATsiNpNJrmzHifnxm+BN5F7gFT/4gw==" }, "unpipe": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "unzipper": { "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", "requires": { "big-integer": "^1.6.17", "binary": "~0.3.0", @@ -32794,10 +42154,14 @@ }, "dependencies": { "isarray": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -32809,10 +42173,14 @@ } }, "safe-buffer": { - "version": "5.1.2" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -32821,6 +42189,8 @@ }, "update-browserslist-db": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "requires": { "escalade": "^3.2.0", @@ -32829,6 +42199,8 @@ }, "upper-case-first": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, "requires": { "tslib": "^2.0.3" @@ -32836,15 +42208,21 @@ }, "uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } }, "uritemplate": { - "version": "0.3.4" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/uritemplate/-/uritemplate-0.3.4.tgz", + "integrity": "sha512-enADBvHfhjrwxFMTVWeIIYz51SZ91uC6o2MR/NQTVljJB6HTZ8eQL3Q7JBj3RxNISA14MOwJaU3vpf5R6dyxHA==" }, "url-parse": { "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -32853,10 +42231,14 @@ }, "url-set-query": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", "dev": true }, "ursa-optional": { "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", + "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", "requires": { "bindings": "^1.5.0", "nan": "^2.14.2" @@ -32864,18 +42246,26 @@ }, "utf-8-validate": { "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "requires": { "node-gyp-build": "^4.3.0" } }, "utf8": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, "utf8-byte-length": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==" }, "util": { "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -32887,34 +42277,54 @@ }, "util-arity": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", + "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==", "dev": true }, "util-deprecate": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utils-merge": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "8.3.2" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache-lib": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "validate-iri": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz", + "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==" }, "validator": { - "version": "13.12.0" + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==" }, "varint": { - "version": "6.0.0" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" }, "vary": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "verror": { "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -32924,6 +42334,8 @@ }, "w3c-hr-time": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "requires": { "browser-process-hrtime": "^1.0.0" @@ -32931,19 +42343,27 @@ }, "w3c-xmlserializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "requires": { "xml-name-validator": "^3.0.0" } }, "web-streams-polyfill": { - "version": "3.3.3" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" }, "web-streams-ponyfill": { - "version": "1.4.2" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", + "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==" }, "web3": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.4.tgz", + "integrity": "sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==", "dev": true, "requires": { "web3-bzz": "1.10.4", @@ -32957,6 +42377,8 @@ }, "web3-bzz": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.4.tgz", + "integrity": "sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==", "dev": true, "requires": { "@types/node": "^12.12.6", @@ -32966,12 +42388,16 @@ "dependencies": { "@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true } } }, "web3-core": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz", + "integrity": "sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==", "dev": true, "requires": { "@types/bn.js": "^5.1.1", @@ -32985,12 +42411,16 @@ "dependencies": { "@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true } } }, "web3-core-helpers": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz", + "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==", "dev": true, "requires": { "web3-eth-iban": "1.10.4", @@ -32999,6 +42429,8 @@ }, "web3-core-method": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz", + "integrity": "sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==", "dev": true, "requires": { "@ethersproject/transactions": "^5.6.2", @@ -33010,6 +42442,8 @@ }, "web3-core-promievent": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz", + "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==", "dev": true, "requires": { "eventemitter3": "4.0.4" @@ -33017,12 +42451,16 @@ "dependencies": { "eventemitter3": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", "dev": true } } }, "web3-core-requestmanager": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz", + "integrity": "sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==", "dev": true, "requires": { "util": "^0.12.5", @@ -33034,6 +42472,8 @@ }, "web3-core-subscriptions": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz", + "integrity": "sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==", "dev": true, "requires": { "eventemitter3": "4.0.4", @@ -33042,12 +42482,16 @@ "dependencies": { "eventemitter3": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", "dev": true } } }, "web3-eth": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.4.tgz", + "integrity": "sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==", "dev": true, "requires": { "web3-core": "1.10.4", @@ -33066,6 +42510,8 @@ }, "web3-eth-abi": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz", + "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.6.3", @@ -33074,6 +42520,8 @@ }, "web3-eth-accounts": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz", + "integrity": "sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==", "dev": true, "requires": { "@ethereumjs/common": "2.6.5", @@ -33090,10 +42538,14 @@ "dependencies": { "bn.js": { "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true }, "eth-lib": { "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "dev": true, "requires": { "bn.js": "^4.11.6", @@ -33103,12 +42555,16 @@ }, "uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true } } }, "web3-eth-contract": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz", + "integrity": "sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==", "dev": true, "requires": { "@types/bn.js": "^5.1.1", @@ -33123,6 +42579,8 @@ }, "web3-eth-ens": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz", + "integrity": "sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==", "dev": true, "requires": { "content-hash": "^2.5.2", @@ -33137,6 +42595,8 @@ }, "web3-eth-iban": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz", + "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -33145,6 +42605,8 @@ }, "web3-eth-personal": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz", + "integrity": "sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==", "dev": true, "requires": { "@types/node": "^12.12.6", @@ -33157,12 +42619,16 @@ "dependencies": { "@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true } } }, "web3-net": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.4.tgz", + "integrity": "sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==", "dev": true, "requires": { "web3-core": "1.10.4", @@ -33172,6 +42638,8 @@ }, "web3-providers-http": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz", + "integrity": "sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==", "dev": true, "requires": { "abortcontroller-polyfill": "^1.7.5", @@ -33182,6 +42650,8 @@ }, "web3-providers-ipc": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz", + "integrity": "sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==", "dev": true, "requires": { "oboe": "2.1.5", @@ -33190,6 +42660,8 @@ }, "web3-providers-ws": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz", + "integrity": "sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==", "dev": true, "requires": { "eventemitter3": "4.0.4", @@ -33199,12 +42671,16 @@ "dependencies": { "eventemitter3": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", "dev": true } } }, "web3-shh": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.4.tgz", + "integrity": "sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==", "dev": true, "requires": { "web3-core": "1.10.4", @@ -33215,6 +42691,8 @@ }, "web3-utils": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", "requires": { "@ethereumjs/util": "^8.1.0", "bn.js": "^5.2.1", @@ -33227,13 +42705,19 @@ }, "dependencies": { "@noble/hashes": { - "version": "1.4.0" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" }, "@scure/base": { - "version": "1.1.9" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==" }, "@scure/bip32": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "requires": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -33242,6 +42726,8 @@ }, "@scure/bip39": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "requires": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -33249,6 +42735,8 @@ }, "ethereum-cryptography": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "requires": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -33260,10 +42748,14 @@ }, "webidl-conversions": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, "websocket": { "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", "requires": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -33275,17 +42767,23 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "whatwg-encoding": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "requires": { "iconv-lite": "0.4.24" @@ -33293,6 +42791,8 @@ "dependencies": { "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -33302,10 +42802,14 @@ }, "whatwg-mimetype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "whatwg-url": { "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { "lodash": "^4.7.0", @@ -33315,18 +42819,24 @@ }, "wherearewe": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-1.0.2.tgz", + "integrity": "sha512-HyLZ7n1Yox+w1qWaFEgP/sMs5D7ka2UXmoVNaY0XzbEHLGljo4ScBchYm6cWRYNO33tmFX3Mgg4BiZkDOjihyw==", "requires": { "is-electron": "^2.2.0" } }, "which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz", + "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==", "dev": true, "peer": true, "requires": { @@ -33338,27 +42848,31 @@ } }, "which-builtin-type": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" } }, "which-collection": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "peer": true, "requires": { @@ -33370,10 +42884,14 @@ }, "which-module": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, "which-typed-array": { "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", @@ -33383,14 +42901,27 @@ "has-tostringtag": "^1.0.2" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "widest-line": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { "string-width": "^4.0.0" } }, "winston": { "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", "requires": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", @@ -33406,10 +42937,14 @@ }, "dependencies": { "@colors/colors": { - "version": "1.6.0" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" }, "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -33420,6 +42955,8 @@ }, "winston-transport": { "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", "requires": { "logform": "^2.7.0", "readable-stream": "^3.6.2", @@ -33428,6 +42965,8 @@ "dependencies": { "readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -33438,18 +42977,26 @@ }, "wkx": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", "requires": { "@types/node": "*" } }, "word-wrap": { - "version": "1.2.5" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" }, "workerpool": { - "version": "6.5.1" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==" }, "wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -33457,10 +43004,14 @@ } }, "wrappy": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -33471,10 +43022,14 @@ }, "ws": { "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "requires": {} }, "xhr": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "dev": true, "requires": { "global": "~4.4.0", @@ -33485,6 +43040,8 @@ }, "xhr-request": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "dev": true, "requires": { "buffer-to-arraybuffer": "^0.0.5", @@ -33498,6 +43055,8 @@ "dependencies": { "decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -33505,10 +43064,14 @@ }, "mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, "simple-get": { "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", "dev": true, "requires": { "decompress-response": "^3.3.0", @@ -33520,6 +43083,8 @@ }, "xhr-request-promise": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", "dev": true, "requires": { "xhr-request": "^1.1.0" @@ -33527,50 +43092,74 @@ }, "xml-name-validator": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, "xml2js": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" }, "dependencies": { "xmlbuilder": { - "version": "11.0.1" + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" } } }, "xmlbuilder": { "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "dev": true }, "xmlchars": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "xsalsa20": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", + "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" }, "xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { - "version": "5.0.8" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yaeti": { - "version": "0.0.6" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" }, "yallist": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -33582,15 +43171,21 @@ }, "dependencies": { "yargs-parser": { - "version": "21.1.1" + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } } }, "yargs-parser": { - "version": "20.2.9" + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -33599,18 +43194,26 @@ }, "dependencies": { "decamelize": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" } } }, "yn": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" }, "yocto-queue": { - "version": "0.1.0" + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, "yup": { "version": "0.32.11", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", + "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", "dev": true, "requires": { "@babel/runtime": "^7.15.4", @@ -33622,8 +43225,19 @@ "toposort": "^2.0.2" } }, + "zksync-ethers": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.10.0.tgz", + "integrity": "sha512-OAjTGAHF9wbdkRGkj7XZuF/a1Sk/FVbwH4pmLjAKlR7mJ7sQtQhBhrPU2dCc67xLaNvEESPfwil19ES5wooYFg==", + "requires": { + "ethers": "~5.7.0" + } + }, "zksync-web3": { "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "dev": true, "requires": {} } } diff --git a/package.json b/package.json index b8615d65ca..8e3cd5e0a6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "origintrail_node", - "version": "6.5.1+hotfix.3", - "description": "OTNode V6", + "version": "8.0.0-sigma.17", + "description": "OTNode V8", "main": "index.js", "type": "module", "scripts": { @@ -33,7 +33,7 @@ }, "keywords": [ "ot-node", - "v6" + "v8" ], "author": "TraceLabs", "license": "ISC", @@ -72,15 +72,16 @@ "@polkadot/keyring": "^10.1.7", "@polkadot/util": "^10.1.7", "@polkadot/util-crypto": "^10.1.7", + "@questdb/nodejs-client": "^3.0.0", "app-root-path": "^3.1.0", - "assertion-tools": "^2.0.2", + "assertion-tools": "^8.0.0-gamma.0", "async": "^3.2.4", "async-mutex": "^0.3.2", "awilix": "^7.0.3", "axios": "^1.6.0", "cors": "^2.8.5", "deep-extend": "^0.6.0", - "dkg-evm-module": "^4.3.3", + "dkg-evm-module": "^8.0.0-sigma.3", "dotenv": "^16.0.1", "ethers": "^5.7.2", "express": "^4.18.1", @@ -101,6 +102,7 @@ "libp2p-mplex": "^0.10.7", "libp2p-noise": "^4.0.0", "libp2p-tcp": "^0.17.2", + "mcl-wasm": "^1.7.0", "minimist": "^1.2.7", "ms": "^2.1.3", "mysql2": "^3.3.0", @@ -111,6 +113,8 @@ "rolling-rate-limiter": "^0.2.13", "semver": "^7.5.2", "sequelize": "^6.29.0", + "sqlite": "^5.1.1", + "sqlite3": "^5.1.7", "timeout-abort-controller": "^3.0.0", "toobusy-js": "^0.5.1", "uint8arrays": "^3.1.0", diff --git a/scripts/copy-assertions.js b/scripts/copy-assertions.js index a107f6a88b..867655c111 100644 --- a/scripts/copy-assertions.js +++ b/scripts/copy-assertions.js @@ -109,7 +109,7 @@ const copyAssertion = async (g) => { } try { - await tripleStoreModuleManager.insertAssertion( + await tripleStoreModuleManager.insertKnowledgeCollection( toImplementation, toRepository, g.substring('assertion:'.length), diff --git a/scripts/set-ask.js b/scripts/set-ask.js index bb2b8734d6..c93b107717 100644 --- a/scripts/set-ask.js +++ b/scripts/set-ask.js @@ -3,7 +3,6 @@ import { ethers } from 'ethers'; import axios from 'axios'; import { createRequire } from 'module'; import { - NODE_ENVIRONMENTS, TRANSACTION_POLLING_TIMEOUT_MILLIS, TRANSACTION_CONFIRMATIONS, } from '../src/constants/constants.js'; @@ -17,21 +16,10 @@ const argv = require('minimist')(process.argv.slice(1), { string: ['ask', 'privateKey', 'hubContractAddress', 'gasPriceOracleLink'], }); -const devEnvironment = - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST; - async function getGasPrice(gasPriceOracleLink, hubContractAddress, provider) { try { if (!gasPriceOracleLink) { - if ( - hubContractAddress === '0x6C861Cb69300C34DfeF674F7C00E734e840C29C0' || - hubContractAddress === '0x144eDa5cbf8926327cb2cceef168A121F0E4A299' || - hubContractAddress === '0xaBfcf2ad1718828E7D3ec20435b0d0b5EAfbDf2c' - ) { - return provider.getGasPrice(); - } - return devEnvironment ? undefined : 8; + return provider.getGasPrice(); } let gasPrice; const response = await axios.get(gasPriceOracleLink); @@ -72,7 +60,7 @@ async function setAsk(rpcEndpoint, ask, walletPrivateKey, hubContractAddress, ga const gasPrice = await getGasPrice(gasPriceOracleLink, hubContractAddress, provider); const tx = await profile.setAsk(identityId, askWei, { - gasPrice, + gasPrice: gasPrice ?? 8, gasLimit: 500_000, }); await provider.waitForTransaction( diff --git a/scripts/set-stake.js b/scripts/set-stake.js index cfc4a235d0..c1816b0b9a 100644 --- a/scripts/set-stake.js +++ b/scripts/set-stake.js @@ -100,7 +100,7 @@ async function setStake( TRANSACTION_POLLING_TIMEOUT_MILLIS, ); // TODO: Add ABI instead of hard-coded function definition - tx = await stakingContract['addStake(uint72,uint96)'](identityId, stakeWei, { + tx = await stakingContract['stake(uint72,uint96)'](identityId, stakeWei, { gasPrice: gasPrice ? gasPrice * 100 : undefined, gasLimit: 3_000_000, }); diff --git a/src/commands/blockchain-event-listener/blockchain-event-listener-command.js b/src/commands/blockchain-event-listener/blockchain-event-listener-command.js new file mode 100644 index 0000000000..1b38097f50 --- /dev/null +++ b/src/commands/blockchain-event-listener/blockchain-event-listener-command.js @@ -0,0 +1,557 @@ +import Command from '../command.js'; +import { + CONTRACTS, + MONITORED_CONTRACT_EVENTS, + CONTRACT_INDEPENDENT_EVENTS, + ERROR_TYPE, + OPERATION_ID_STATUS, + MONITORED_CONTRACTS, + MONITORED_EVENTS, + RETRY_DELAY_READ_CACHED_PUBLISH_DATA, + MAX_RETRIES_READ_CACHED_PUBLISH_DATA, +} from '../../constants/constants.js'; + +class BlockchainEventListenerCommand extends Command { + constructor(ctx) { + super(ctx); + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.ualService = ctx.ualService; + this.blockchainEventsService = ctx.blockchainEventsService; + this.fileService = ctx.fileService; + this.operationIdService = ctx.operationIdService; + this.commandExecutor = ctx.commandExecutor; + + this.invalidatedContracts = new Set(); + + this.errorType = ERROR_TYPE.BLOCKCHAIN_EVENT_LISTENER_ERROR; + } + + async execute(command) { + const { blockchainId } = command.data; + + const repositoryTransaction = await this.repositoryModuleManager.transaction(); + + try { + await this.fetchAndHandleBlockchainEvents(blockchainId, repositoryTransaction); + await repositoryTransaction.commit(); + } catch (e) { + this.logger.error( + `Failed to fetch and process blockchain events for blockchain: ${blockchainId}. Error: ${e}`, + ); + await repositoryTransaction.rollback(); + + return Command.repeat(); + } + + await this.repositoryModuleManager.markAllBlockchainEventsAsProcessed(blockchainId); + + return Command.empty(); + } + + async fetchAndHandleBlockchainEvents(blockchainId, repositoryTransaction) { + this.currentBlock = (await this.blockchainEventsService.getBlock(blockchainId)).number - 2; + const lastCheckedBlockRecord = await this.repositoryModuleManager.getLastCheckedBlock( + blockchainId, + { transaction: repositoryTransaction }, + ); + + const { events: newEvents, eventsMissed } = + await this.blockchainEventsService.getPastEvents( + blockchainId, + MONITORED_CONTRACTS, + MONITORED_EVENTS, + lastCheckedBlockRecord?.lastCheckedBlock ?? 0, + this.currentBlock, + ); + + if (eventsMissed) { + // TODO: Add some logic for missed events in the future + } + + if (newEvents.length !== 0) { + this.logger.trace( + `Storing ${newEvents.length} new events for blockchain ${blockchainId} in the database.`, + ); + await this.repositoryModuleManager.insertBlockchainEvents(newEvents, { + transaction: repositoryTransaction, + }); + } + + await this.repositoryModuleManager.updateLastCheckedBlock( + blockchainId, + this.currentBlock, + Date.now(), + { transaction: repositoryTransaction }, + ); + + const unprocessedEvents = + await this.repositoryModuleManager.getAllUnprocessedBlockchainEvents( + blockchainId, + MONITORED_EVENTS, + { transaction: repositoryTransaction }, + ); + + if (unprocessedEvents.length > 0) { + this.logger.trace( + `Handling ${unprocessedEvents.length} unprocessed blockchain events.`, + ); + } + + this.independentEvents = []; + this.dependentEvents = []; + for (const event of unprocessedEvents) { + if (this.isIndependentEvent(event.contract, event.event)) { + this.independentEvents.push(event); + } else { + this.dependentEvents.push(event); + } + } + + this.dependentEvents.sort((a, b) => { + if (a.blockNumber !== b.blockNumber) { + return a.blockNumber - b.blockNumber; + } + if (a.transactionIndex !== b.transactionIndex) { + return a.transactionIndex - b.transactionIndex; + } + return a.logIndex - b.logIndex; + }); + + await Promise.all([ + this.processIndependentEvents(repositoryTransaction), + this.processDependentEvents(repositoryTransaction), + ]); + } + + isIndependentEvent(contractName, eventName) { + const contractIndependentEvents = CONTRACT_INDEPENDENT_EVENTS[contractName] || []; + return contractIndependentEvents.includes(eventName); + } + + async processIndependentEvents(repositoryTransaction) { + await Promise.all( + this.independentEvents.map((event) => this.processEvent(event, repositoryTransaction)), + ); + } + + async processDependentEvents(repositoryTransaction) { + let index = 0; + + while (index < this.dependentEvents.length) { + const event = this.dependentEvents[index]; + + // Step 1: Handle invalidated contracts + if (this.invalidatedContracts.has(event.contractAddress)) { + this.logger.info( + `Skipping event ${event.event} for blockchain: ${event.blockchain}, ` + + `invalidated contract: ${event.contract} (${event.contractAddress})`, + ); + + this.dependentEvents.splice(index, 1); // Remove the invalidated event + continue; // Restart the loop with the updated array + } + + // Step 2: Handle new dependent events + if (this.newDependentEvents?.length > 0) { + this.logger.info( + `Adding ${this.newDependentEvents.length} new dependent events before processing.`, + ); + + // Merge new events into the unprocessed part of the array + const combinedEvents = [ + ...this.dependentEvents.slice(index), // Unprocessed events + ...this.newDependentEvents, // New events + ].sort((a, b) => { + if (a.blockNumber !== b.blockNumber) { + return a.blockNumber - b.blockNumber; + } + if (a.transactionIndex !== b.transactionIndex) { + return a.transactionIndex - b.transactionIndex; + } + return a.logIndex - b.logIndex; + }); + + // Update dependentEvents: add back processed events + sorted combined events + this.dependentEvents = [...this.dependentEvents.slice(0, index), ...combinedEvents]; + + // Reset the new events buffer + this.newDependentEvents = []; + } + + // Step 3: Process the current event + // eslint-disable-next-line no-await-in-loop + await this.processEvent(event, repositoryTransaction); + + index += 1; // Move to the next event + } + + // Clear invalidated contracts after processing + this.invalidatedContracts.clear(); + } + + async processEvent(event, repositoryTransaction) { + const handlerFunctionName = `handle${event.event}Event`; + + if (typeof this[handlerFunctionName] !== 'function') { + this.logger.warn(`No handler for event type: ${event.event}`); + return; + } + + this.logger.trace(`Processing event ${event.event} in block ${event.blockNumber}.`); + try { + await this[handlerFunctionName](event, repositoryTransaction); + } catch (error) { + this.logger.error( + `Error processing event ${event.event} in block ${event.blockNumber}: ${error.message}`, + ); + } + } + + async handleParameterChangedEvent(event) { + const { blockchainId, contract, data } = event; + const { parameterName, parameterValue } = JSON.parse(data); + switch (contract) { + case CONTRACTS.PARAMETERS_STORAGE: + this.blockchainModuleManager.setContractCallCache( + blockchainId, + CONTRACTS.PARAMETERS_STORAGE, + parameterName, + parameterValue, + ); + break; + default: + this.logger.warn( + `Unable to handle parameter changed event. Unknown contract name ${event.contract}`, + ); + } + } + + async handleNewContractEvent(event, repositoryTransaction) { + const { contractName, newContractAddress } = JSON.parse(event.data); + + const blockchchainModuleContractAddress = this.blockchainModuleManager.getContractAddress( + event.blockchain, + contractName, + ); + + if (newContractAddress !== blockchchainModuleContractAddress) { + this.blockchainModuleManager.initializeContract( + event.blockchain, + contractName, + newContractAddress, + ); + } + + const blockchainEventsServiceContractAddress = + this.blockchainEventsService.getContractAddress(event.blockchain, contractName); + + if ( + blockchainEventsServiceContractAddress && + newContractAddress !== blockchainEventsServiceContractAddress + ) { + this.blockchainEventsService.updateContractAddress( + event.blockchain, + contractName, + newContractAddress, + ); + + this.invalidatedContracts.add(blockchainEventsServiceContractAddress); + + await this.repositoryModuleManager.removeContractEventsAfterBlock( + event.blockchain, + contractName, + event.contractAddress, + event.blockNumber, + event.transactionIndex, + { transaction: repositoryTransaction }, + ); + + const { events: newEvents } = await this.blockchainEventsService.getPastEvents( + event.blockchain, + [contractName], + MONITORED_CONTRACT_EVENTS[contractName], + event.blockNumber, + this.currentBlock, + ); + + if (newEvents.length !== 0) { + this.logger.trace( + `Storing ${newEvents.length} new events for blockchain ${event.blockchain} in the database.`, + ); + await this.repositoryModuleManager.insertBlockchainEvents(newEvents, { + transaction: repositoryTransaction, + }); + + this.newDependentEvents = newEvents; + } + } + } + + async handleContractChangedEvent(event, repositoryTransaction) { + const { contractName, newContractAddress } = JSON.parse(event.data); + + const blockchchainModuleContractAddress = this.blockchainModuleManager.getContractAddress( + event.blockchain, + contractName, + ); + + if (newContractAddress !== blockchchainModuleContractAddress) { + this.blockchainModuleManager.initializeContract( + event.blockchain, + contractName, + newContractAddress, + ); + } + + const blockchainEventsServiceContractAddress = + this.blockchainEventsService.getContractAddress(event.blockchain, contractName); + + if ( + blockchainEventsServiceContractAddress && + newContractAddress !== blockchainEventsServiceContractAddress + ) { + this.blockchainEventsService.updateContractAddress( + event.blockchain, + contractName, + newContractAddress, + ); + + this.invalidatedContracts.add(blockchainEventsServiceContractAddress); + + await this.repositoryModuleManager.removeContractEventsAfterBlock( + event.blockchain, + contractName, + event.contractAddress, + event.blockNumber, + event.transactionIndex, + { transaction: repositoryTransaction }, + ); + + const { events: newEvents } = await this.blockchainEventsService.getPastEvents( + event.blockchain, + [contractName], + MONITORED_CONTRACT_EVENTS[contractName], + event.blockNumber, + this.currentBlock, + ); + + if (newEvents.length !== 0) { + this.logger.trace( + `Storing ${newEvents.length} new events for blockchain ${event.blockchain} in the database.`, + ); + await this.repositoryModuleManager.insertBlockchainEvents(newEvents, { + transaction: repositoryTransaction, + }); + + this.newDependentEvents = newEvents; + } + } + } + + async handleNewAssetStorageEvent(event, repositoryTransaction) { + const { contractName, newContractAddress } = JSON.parse(event.data); + + const blockchchainModuleContractAddress = this.blockchainModuleManager.getContractAddress( + event.blockchain, + contractName, + ); + + if (newContractAddress !== blockchchainModuleContractAddress) { + this.blockchainModuleManager.initializeAssetStorageContract( + event.blockchain, + newContractAddress, + ); + } + + const blockchainEventsServiceContractAddress = + this.blockchainEventsService.getContractAddress(event.blockchain, contractName); + + if ( + blockchainEventsServiceContractAddress && + newContractAddress !== blockchainEventsServiceContractAddress + ) { + this.blockchainEventsService.updateContractAddress( + event.blockchain, + contractName, + newContractAddress, + ); + + this.invalidatedContracts.add(blockchainEventsServiceContractAddress); + + await this.repositoryModuleManager.removeContractEventsAfterBlock( + event.blockchain, + contractName, + event.contractAddress, + event.blockNumber, + event.transactionIndex, + { transaction: repositoryTransaction }, + ); + + const { events: newEvents } = await this.blockchainEventsService.getPastEvents( + event.blockchain, + [contractName], + MONITORED_CONTRACT_EVENTS[contractName], + event.blockNumber, + this.currentBlock, + ); + + if (newEvents.length !== 0) { + this.logger.trace( + `Storing ${newEvents.length} new events for blockchain ${event.blockchain} in the database.`, + ); + await this.repositoryModuleManager.insertBlockchainEvents(newEvents, { + transaction: repositoryTransaction, + }); + + this.newDependentEvents = newEvents; + } + } + } + + async handleAssetStorageChangedEvent(event, repositoryTransaction) { + const { contractName, newContractAddress } = JSON.parse(event.data); + + const blockchchainModuleContractAddress = this.blockchainModuleManager.getContractAddress( + event.blockchain, + contractName, + ); + + if (newContractAddress !== blockchchainModuleContractAddress) { + this.blockchainModuleManager.initializeAssetStorageContract( + event.blockchain, + newContractAddress, + ); + } + + const blockchainEventsServiceContractAddress = + this.blockchainEventsService.getContractAddress(event.blockchain, contractName); + + if ( + blockchainEventsServiceContractAddress && + newContractAddress !== blockchainEventsServiceContractAddress + ) { + this.blockchainEventsService.updateContractAddress( + event.blockchain, + contractName, + newContractAddress, + ); + + this.invalidatedContracts.add(blockchainEventsServiceContractAddress); + + await this.repositoryModuleManager.removeContractEventsAfterBlock( + event.blockchain, + contractName, + event.contractAddress, + event.blockNumber, + event.transactionIndex, + { transaction: repositoryTransaction }, + ); + + const { events: newEvents } = await this.blockchainEventsService.getPastEvents( + event.blockchain, + [contractName], + MONITORED_CONTRACT_EVENTS[contractName], + event.blockNumber, + this.currentBlock, + ); + + if (newEvents.length !== 0) { + this.logger.trace( + `Storing ${newEvents.length} new events for blockchain ${event.blockchain} in the database.`, + ); + await this.repositoryModuleManager.insertBlockchainEvents(newEvents, { + transaction: repositoryTransaction, + }); + + this.newDependentEvents = newEvents; + } + } + } + + async handleKnowledgeCollectionCreatedEvent(event) { + const sequence = ['validateAssertionMetadataCommand', 'storeAssertionCommand']; + + await this.commandExecutor.add({ + name: 'readCachedPublishDataCommand', + sequence, + delay: RETRY_DELAY_READ_CACHED_PUBLISH_DATA, + retries: MAX_RETRIES_READ_CACHED_PUBLISH_DATA, + data: { + event, + }, + transactional: false, + }); + } + + // TODO: Adjust after new contracts are released + async handleAssetUpdatedEvent(event) { + const eventData = JSON.parse(event.data); + + // TODO: Add correct name for assetStateIndex from event currently it's placeholder + const { assetContract, tokenId, state, updateOperationId, assetStateIndex } = eventData; + const { blockchain } = event; + + const operationId = await this.operationIdService.generateOperationId( + OPERATION_ID_STATUS.UPDATE_FINALIZATION.UPDATE_FINALIZATION_START, + ); + + let datasetPath; + let cachedData; + try { + datasetPath = this.fileService.getPendingStorageDocumentPath(updateOperationId); + cachedData = await this.fileService.readFile(datasetPath, true); + } catch (error) { + this.operationIdService.markOperationAsFailed( + operationId, + blockchain, + `Unable to read cached data from ${datasetPath}, error: ${error.message}`, + ERROR_TYPE.PUBLISH_FINALIZATION.PUBLISH_FINALIZATION_NO_CACHED_DATA, + ); + } + const ual = this.ualService.deriveUAL(blockchain, assetContract, tokenId); + + await this.commandExecutor.add({ + name: 'updateValidateAssertionMetadataCommand', + sequence: ['updateAssertionCommand'], + delay: 0, + data: { + operationId, + ual, + blockchain, + contract: assetContract, + tokenId, + assetStateIndex, + merkleRoot: state, + assertion: cachedData.assertion, + cachedMerkleRoot: cachedData.merkleRoot, + }, + transactional: false, + }); + } + + /** + * Recover system from failure + * @param error + */ + async recover() { + return Command.repeat(); + } + + /** + * Builds default BlockchainEventListenerCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'blockchainEventListenerCommand', + data: {}, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default BlockchainEventListenerCommand; diff --git a/src/commands/blockchain-event-listener/event-listener-command.js b/src/commands/blockchain-event-listener/event-listener-command.js new file mode 100644 index 0000000000..ddd0408cdd --- /dev/null +++ b/src/commands/blockchain-event-listener/event-listener-command.js @@ -0,0 +1,85 @@ +import Command from '../command.js'; +import { + CONTRACT_EVENT_FETCH_INTERVALS, + NODE_ENVIRONMENTS, + ERROR_TYPE, + COMMAND_PRIORITY, + MAXIMUM_FETCH_EVENTS_FAILED_COUNT, +} from '../../constants/constants.js'; + +class EventListenerCommand extends Command { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.blockchainModuleManager = ctx.blockchainModuleManager; + + this.errorType = ERROR_TYPE.EVENT_LISTENER_ERROR; + } + + calculateCommandPeriod() { + const isDevEnvironment = [NODE_ENVIRONMENTS.DEVELOPMENT, NODE_ENVIRONMENTS.TEST].includes( + process.env.NODE_ENV, + ); + + return isDevEnvironment + ? CONTRACT_EVENT_FETCH_INTERVALS.DEVELOPMENT + : CONTRACT_EVENT_FETCH_INTERVALS.MAINNET; + } + + async execute() { + this.logger.info('Event Listener: Starting event listener command.'); + + await Promise.all( + this.blockchainModuleManager.getImplementationNames().map(async (blockchainId) => { + const commandData = { blockchainId }; + + return this.commandExecutor.add({ + name: 'blockchainEventListenerCommand', + data: commandData, + retries: MAXIMUM_FETCH_EVENTS_FAILED_COUNT, + priority: COMMAND_PRIORITY.HIGHEST, + isBlocking: true, + transactional: false, + }); + }), + ); + + if (!this.blockchainModuleManager.getImplementationNames().length) { + this.logger.error(`No blockchain implementations. OT-node shutting down...`); + process.exit(1); + } + + return Command.repeat(); + } + + /** + * Recover system from failure + * @param command + * @param error + */ + async recover(command) { + this.logger.warn(`Failed to execute ${command.name}. Error: ${command.message}`); + + return Command.repeat(); + } + + /** + * Builds default eventListenerCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'eventListenerCommand', + delay: 0, + data: {}, + transactional: false, + period: this.calculateCommandPeriod(), + priority: COMMAND_PRIORITY.HIGHEST, + }; + Object.assign(command, map); + return command; + } +} + +export default EventListenerCommand; diff --git a/src/commands/cleaners/ask-cleaner-command.js b/src/commands/cleaners/ask-cleaner-command.js new file mode 100644 index 0000000000..74667c524d --- /dev/null +++ b/src/commands/cleaners/ask-cleaner-command.js @@ -0,0 +1,44 @@ +import CleanerCommand from './cleaner-command.js'; +import { + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + OPERATIONS, + ASK_CLEANUP_TIME_DELAY, + ASK_CLEANUP_TIME_MILLS, + ARCHIVE_ASK_FOLDER, +} from '../../constants/constants.js'; + +class AskCleanerCommand extends CleanerCommand { + async findRowsForRemoval(nowTimestamp) { + return this.repositoryModuleManager.findProcessedOperations( + OPERATIONS.ASK, + nowTimestamp - ASK_CLEANUP_TIME_DELAY, + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + ); + } + + getArchiveFolderName() { + return ARCHIVE_ASK_FOLDER; + } + + async deleteRows(ids) { + return this.repositoryModuleManager.removeOperationRecords(OPERATIONS.ASK, ids); + } + + /** + * Builds default command + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'askCleanerCommand', + data: {}, + period: ASK_CLEANUP_TIME_MILLS, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default AskCleanerCommand; diff --git a/src/commands/cleaners/ask-response-cleaner-command.js b/src/commands/cleaners/ask-response-cleaner-command.js new file mode 100644 index 0000000000..ad31345b0a --- /dev/null +++ b/src/commands/cleaners/ask-response-cleaner-command.js @@ -0,0 +1,44 @@ +import CleanerCommand from './cleaner-command.js'; +import { + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + OPERATIONS, + ASK_RESPONSE_CLEANUP_TIME_DELAY, + ASK_RESPONSE_CLEANUP_TIME_MILLS, + ARCHIVE_ASK_RESPONSES_FOLDER, +} from '../../constants/constants.js'; + +class AskResponseCleanerCommand extends CleanerCommand { + async findRowsForRemoval(nowTimestamp) { + return this.repositoryModuleManager.findProcessedOperationResponse( + nowTimestamp - ASK_RESPONSE_CLEANUP_TIME_DELAY, + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + OPERATIONS.ASK, + ); + } + + getArchiveFolderName() { + return ARCHIVE_ASK_RESPONSES_FOLDER; + } + + async deleteRows(ids) { + return this.repositoryModuleManager.removeOperationResponse(ids, OPERATIONS.ASK); + } + + /** + * Builds default command + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'askResponseCleanerCommand', + data: {}, + period: ASK_RESPONSE_CLEANUP_TIME_MILLS, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default AskResponseCleanerCommand; diff --git a/src/commands/cleaners/finality-cleaner-command.js b/src/commands/cleaners/finality-cleaner-command.js new file mode 100644 index 0000000000..462a01bfd9 --- /dev/null +++ b/src/commands/cleaners/finality-cleaner-command.js @@ -0,0 +1,44 @@ +import CleanerCommand from './cleaner-command.js'; +import { + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + OPERATIONS, + FINALITY_CLEANUP_TIME_DELAY, + FINALITY_CLEANUP_TIME_MILLS, + ARCHIVE_FINALITY_FOLDER, +} from '../../constants/constants.js'; + +class FinalityCleanerCommand extends CleanerCommand { + async findRowsForRemoval(nowTimestamp) { + return this.repositoryModuleManager.findProcessedOperations( + OPERATIONS.FINALITY, + nowTimestamp - FINALITY_CLEANUP_TIME_DELAY, + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + ); + } + + getArchiveFolderName() { + return ARCHIVE_FINALITY_FOLDER; + } + + async deleteRows(ids) { + return this.repositoryModuleManager.removeOperationRecords(OPERATIONS.FINALITY, ids); + } + + /** + * Builds default command + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'finalityCleanerCommand', + data: {}, + period: FINALITY_CLEANUP_TIME_MILLS, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default FinalityCleanerCommand; diff --git a/src/commands/cleaners/finality-response-cleaner-command.js b/src/commands/cleaners/finality-response-cleaner-command.js new file mode 100644 index 0000000000..41dba8c8fb --- /dev/null +++ b/src/commands/cleaners/finality-response-cleaner-command.js @@ -0,0 +1,44 @@ +import CleanerCommand from './cleaner-command.js'; +import { + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + OPERATIONS, + FINALITY_RESPONSE_CLEANUP_TIME_DELAY, + FINALITY_RESPONSE_CLEANUP_TIME_MILLS, + ARCHIVE_FINALITY_RESPONSES_FOLDER, +} from '../../constants/constants.js'; + +class FinalityResponseCleanerCommand extends CleanerCommand { + async findRowsForRemoval(nowTimestamp) { + return this.repositoryModuleManager.findProcessedOperationResponse( + nowTimestamp - FINALITY_RESPONSE_CLEANUP_TIME_DELAY, + REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER, + OPERATIONS.FINALITY, + ); + } + + getArchiveFolderName() { + return ARCHIVE_FINALITY_RESPONSES_FOLDER; + } + + async deleteRows(ids) { + return this.repositoryModuleManager.removeOperationResponse(ids, OPERATIONS.FINALITY); + } + + /** + * Builds default command + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'finalityResponseCleanerCommand', + data: {}, + period: FINALITY_RESPONSE_CLEANUP_TIME_MILLS, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default FinalityResponseCleanerCommand; diff --git a/src/commands/cleaners/pending-storage-cleaner-command.js b/src/commands/cleaners/pending-storage-cleaner-command.js new file mode 100644 index 0000000000..df9dfd4431 --- /dev/null +++ b/src/commands/cleaners/pending-storage-cleaner-command.js @@ -0,0 +1,63 @@ +import Command from '../command.js'; +import { + PUBLISH_STORAGE_MEMORY_CLEANUP_COMMAND_CLEANUP_TIME_MILLS, + PUBLISH_STORAGE_FILE_CLEANUP_COMMAND_CLEANUP_TIME_MILLS, + PENDING_STORAGE_FILES_FOR_REMOVAL_MAX_NUMBER, +} from '../../constants/constants.js'; + +/** + * Cleans memory cache in the pending storage service + */ +class PendingStorageCleanerCommand extends Command { + constructor(ctx) { + super(ctx); + this.logger = ctx.logger; + this.pendingStorageService = ctx.pendingStorageService; + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute() { + this.logger.debug('Starting command for removal of expired pending storage entries'); + + const removed = await this.pendingStorageService.removeExpiredFileCache( + PUBLISH_STORAGE_FILE_CLEANUP_COMMAND_CLEANUP_TIME_MILLS, + PENDING_STORAGE_FILES_FOR_REMOVAL_MAX_NUMBER, + ); + if (removed) { + this.logger.debug(`Successfully removed ${removed} expired cached operation files`); + } + + return Command.repeat(); + } + + /** + * Recover system from failure + * @param command + * @param error + */ + async recover(command) { + this.logger.warn(`Failed to clean pending storage: error: ${command.message}`); + return Command.repeat(); + } + + /** + * Builds default command + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'pendingStorageCleanerCommand', + period: PUBLISH_STORAGE_MEMORY_CLEANUP_COMMAND_CLEANUP_TIME_MILLS, + data: {}, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default PendingStorageCleanerCommand; diff --git a/src/commands/command-executor.js b/src/commands/command-executor.js index e61b90ded3..1ba07d9934 100644 --- a/src/commands/command-executor.js +++ b/src/commands/command-executor.js @@ -7,6 +7,7 @@ import { COMMAND_STATUS, DEFAULT_COMMAND_DELAY_IN_MILLS, COMMAND_QUEUE_PARALLELISM, + DEFAULT_COMMAND_PRIORITY, } from '../constants/constants.js'; /** @@ -20,7 +21,7 @@ class CommandExecutor { this.repositoryModuleManager = ctx.repositoryModuleManager; this.verboseLoggingEnabled = ctx.config.commandExecutorVerboseLoggingEnabled; - this.queue = async.queue((command, callback = () => {}) => { + this.queue = async.priorityQueue((command, callback = () => {}) => { this._execute(command) .then((result) => { callback(result); @@ -73,24 +74,42 @@ class CommandExecutor { async _execute(executeCommand) { const command = executeCommand; const now = Date.now(); + await this._update(command, { startedAt: now, }); + const commandContext = { + commandId: command.id, + commandName: command.name, + }; + if (command.data?.operationId) { + commandContext.operationId = command.data.operationId; + } + const loggerWithContext = this.logger.child(commandContext); + if (this.verboseLoggingEnabled) { - this.logger.trace(`Command ${command.name} and ID ${command.id} started.`); + loggerWithContext.trace('Command started.'); } const handler = this.commandResolver.resolve(command.name); + handler.logger = loggerWithContext; + + for (const key in handler) { + if (key.endsWith('Service') || key.endsWith('ModuleManager')) { + handler[key].logger = loggerWithContext; + } + } + if (!handler) { - this.logger.warn(`Command '${command.name}' will not be executed.`); + loggerWithContext.warn('Command will not be executed.'); await this._update(command, { status: COMMAND_STATUS.UNKNOWN, }); return; } if (command.deadlineAt && now > command.deadlineAt) { - this.logger.warn(`Command ${command.name} and ID ${command.id} is too late...`); + loggerWithContext.warn('Command is too late...'); await this._update(command, { status: COMMAND_STATUS.EXPIRED, }); @@ -100,9 +119,7 @@ class CommandExecutor { await Promise.all(result.commands.map((c) => this.add(c, c.delay, true))); } } catch (e) { - this.logger.warn( - `Failed to handle expired callback for command ${command.name} and ID ${command.id}`, - ); + loggerWithContext.warn('Failed to handle expired callback'); } return; } @@ -110,9 +127,7 @@ class CommandExecutor { const waitMs = command.readyAt + command.delay - now; if (waitMs > 0) { if (this.verboseLoggingEnabled) { - this.logger.trace( - `Command ${command.name} with ID ${command.id} should be delayed`, - ); + loggerWithContext.trace('Command should be delayed'); } await this.add(command, Math.min(waitMs, MAX_COMMAND_DELAY_IN_MILLS), false); return; @@ -129,6 +144,7 @@ class CommandExecutor { ); command.data = handler.unpack(command.data); + let result = await handler.execute(command, transaction); if (result.repeat) { await this._update( @@ -174,7 +190,7 @@ class CommandExecutor { if (!processResult.repeat && !processResult.retry) { if (this.verboseLoggingEnabled) { - this.logger.trace(`Command ${command.name} and ID ${command.id} processed.`); + loggerWithContext.trace(`Command processed.`); } const addPromises = []; processResult.children.forEach((e) => @@ -184,9 +200,7 @@ class CommandExecutor { } } catch (e) { if (this.verboseLoggingEnabled) { - this.logger.trace( - `Failed to process command ${command.name} and ID ${command.id}. ${e}.\n${e.stack}`, - ); + loggerWithContext.trace(`Failed to process command. ${e}.\n${e.stack}`); } try { @@ -205,9 +219,7 @@ class CommandExecutor { return Command.repeat(); } } catch (error) { - this.logger.warn( - `Failed to handle error callback for command ${command.name} and ID ${command.id}, error: ${error.message}`, - ); + loggerWithContext.warn(`Failed to handle error callback, error: ${error.message}`); } } } @@ -234,14 +246,34 @@ class CommandExecutor { */ async _addDefaultCommand(name) { await this.delete(name); + + const commandContext = { + commandName: name, + }; + const loggerWithContext = this.logger.child(commandContext); + const handler = this.commandResolver.resolve(name); + handler.logger = loggerWithContext; + + for (const key in handler) { + if (key.endsWith('Service') || key.endsWith('ModuleManager')) { + handler[key].logger = loggerWithContext; + } + } + if (!handler) { - this.logger.warn(`Command '${name}' will not be executed.`); + handler.logger.warn(`Command will not be executed.`); return; } - await this.add(handler.default(), DEFAULT_COMMAND_DELAY_IN_MILLS, true); + + if (['eventListenerCommand', 'shardingTableCheckCommand'].includes(name)) { + await this.add(handler.default(), 0, true); + } else { + await this.add(handler.default(), DEFAULT_COMMAND_DELAY_IN_MILLS, true); + } + if (this.verboseLoggingEnabled) { - this.logger.trace(`Permanent command ${name} created.`); + handler.logger.trace(`Permanent command created.`); } } @@ -253,10 +285,33 @@ class CommandExecutor { */ async add(addCommand, addDelay, insert = true) { let command = addCommand; + + if (command.isBlocking) { + // Check the db to see if there are unfinalized instances of the same command + const unfinalizedBlockingCommands = + await this.repositoryModuleManager.findUnfinalizedCommandsByName(command.name); + + for (const unfinalizedCommand of unfinalizedBlockingCommands) { + if (command.id && command.id === unfinalizedCommand.id) { + if (insert) { + this.logger.warn(`Inserting duplicate of command ${command.id}!`); + } + continue; + } + + if (JSON.stringify(unfinalizedCommand.data) === JSON.stringify(command.data)) { + this.logger.info( + `Skipping blocking command: ${command.name} because of unfinalized instance of this command with id: ${unfinalizedCommand.id}`, + ); + return; + } + } + } + let delay = addDelay ?? 0; if (delay > MAX_COMMAND_DELAY_IN_MILLS) { - if (command.readyAt == null) { + if (!command.readyAt) { command.readyAt = Date.now(); } command.readyAt += delay; @@ -266,16 +321,19 @@ class CommandExecutor { if (insert) { command = await this._insert(command); } + + const commandPriority = command.priority ?? DEFAULT_COMMAND_PRIORITY; + if (delay) { setTimeout( (timeoutCommand) => { - this.queue.push(timeoutCommand); + this.queue.push(timeoutCommand, commandPriority); }, delay, command, ); } else { - this.queue.push(command); + this.queue.push(command, commandPriority); } } @@ -287,7 +345,7 @@ class CommandExecutor { */ async _handleRetry(retryCommand, handler) { const command = retryCommand; - if (command.retries > 1) { + if (command.retries && command.retries > 1) { command.data = handler.pack(command.data); await this._update(command, { status: COMMAND_STATUS.PENDING, @@ -313,7 +371,7 @@ class CommandExecutor { * @private */ async _handleError(command, handler, error) { - if (command.retries > 0) { + if (command.retries && command.retries > 0) { await this._update(command, { retries: command.retries - 1, }); @@ -326,10 +384,12 @@ class CommandExecutor { status: COMMAND_STATUS.FAILED, message: error.message, }); - this.logger.warn(`Error in command: ${command.name}, error: ${error.message}`); + handler.logger.warn(`Error in command: ${command.name}, error: ${error.message}`); return await handler.recover(command); } catch (e) { - this.logger.warn(`Failed to recover command ${command.name} and ID ${command.id}`); + handler.logger.warn( + `Failed to recover command ${command.name} and ID ${command.id}`, + ); } } } @@ -347,28 +407,27 @@ class CommandExecutor { [command.name] = command.sequence; command.sequence = command.sequence.slice(1); } - if (!command.readyAt) { - command.readyAt = Date.now(); // take current time - } - if (command.delay == null) { - command.delay = 0; - } - if (!command.transactional) { - command.transactional = 0; - } + + command.readyAt = command.readyAt || Date.now(); + command.delay = command.delay ?? 0; + command.transactional = command.transactional ?? 0; + command.priority = command.priority ?? DEFAULT_COMMAND_PRIORITY; + command.isBlocking = command.isBlocking ?? false; + command.status = COMMAND_STATUS.PENDING; + if (!command.data) { const commandInstance = this.commandResolver.resolve(command.name); if (commandInstance) { command.data = commandInstance.pack(command.data); } } - command.status = COMMAND_STATUS.PENDING; - const opts = {}; - if (transaction != null) { - opts.transaction = transaction; - } + + const opts = transaction ? { transaction } : {}; + const model = await this.repositoryModuleManager.createCommand(command, opts); + command.id = model.id; + return command; } @@ -416,6 +475,11 @@ class CommandExecutor { const commands = []; for (const command of pendingCommands) { + if (command?.isBlocking) { + commands.push(command); + continue; + } + if (!command?.parentId) { continue; } @@ -436,6 +500,8 @@ class CommandExecutor { id: commandModel.id, name: commandModel.name, data: commandModel.data, + priority: commandModel.priority ?? DEFAULT_COMMAND_PRIORITY, + isBlocking: commandModel.isBlocking ?? false, readyAt: commandModel.readyAt, delay: commandModel.delay, startedAt: commandModel.startedAt, diff --git a/src/commands/common/get-latest-service-agreement/blockchain-get-latest-service-agreement.js b/src/commands/common/get-latest-service-agreement/blockchain-get-latest-service-agreement.js deleted file mode 100644 index d91171a826..0000000000 --- a/src/commands/common/get-latest-service-agreement/blockchain-get-latest-service-agreement.js +++ /dev/null @@ -1,244 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import { setTimeout as sleep } from 'timers/promises'; -import Command from '../../command.js'; -import { - CONTENT_ASSET_HASH_FUNCTION_ID, - EXPECTED_TRANSACTION_ERRORS, - GET_ASSERTION_IDS_MAX_RETRY_COUNT, - GET_ASSERTION_IDS_RETRY_DELAY_IN_SECONDS, - GET_LATEST_SERVICE_AGREEMENT_BATCH_SIZE, - GET_LATEST_SERVICE_AGREEMENT_EXCLUDE_LATEST_TOKEN_ID, - GET_LATEST_SERVICE_AGREEMENT_FREQUENCY_MILLS, - SERVICE_AGREEMENT_SOURCES, -} from '../../../constants/constants.js'; - -class BlockchainGetLatestServiceAgreement extends Command { - constructor(ctx) { - super(ctx); - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.serviceAgreementService = ctx.serviceAgreementService; - this.ualService = ctx.ualService; - } - - /** - * Executes command and produces one or more events - * @param command - */ - async execute(command) { - const { blockchain } = command.data; - - const assetStorageContractAddresses = - this.blockchainModuleManager.getAssetStorageContractAddresses(blockchain); - - const results = await Promise.all( - assetStorageContractAddresses.map((contract) => - this.updateAgreementDataForAssetContract( - contract, - blockchain, - command.data[contract], - ), - ), - ); - - results.forEach((result) => { - if (result) { - // eslint-disable-next-line no-param-reassign - command.data[result.contract] = result.lastProcessedTokenId; - this.logger.debug( - `Get latest service agreement: updating last processed token id: ${result.lastProcessedTokenId} for blockchain ${blockchain}`, - ); - } - }); - - return Command.repeat(); - } - - async updateAgreementDataForAssetContract(contract, blockchain, lastProcessedTokenId) { - this.logger.info( - `Get latest service agreement: Starting get latest service agreement command, last processed token id: ${lastProcessedTokenId} for blockchain: ${blockchain}`, - ); - let latestBlockchainTokenId; - try { - latestBlockchainTokenId = - Number(await this.blockchainModuleManager.getLatestTokenId(blockchain, contract)) - - GET_LATEST_SERVICE_AGREEMENT_EXCLUDE_LATEST_TOKEN_ID; - } catch (error) { - if (error.message.includes(EXPECTED_TRANSACTION_ERRORS.NO_MINTED_ASSETS)) { - this.logger.info( - `Get latest service agreement: No minted assets on blockchain: ${blockchain}`, - ); - return; - } - this.logger.error( - `Unable to process agreement data for asset contract ${contract}. Error: ${error}`, - ); - return; - } - - const latestDbTokenId = - lastProcessedTokenId ?? - (await this.repositoryModuleManager.getLatestServiceAgreementTokenId(blockchain)) ?? - latestBlockchainTokenId; - - if (latestBlockchainTokenId < latestDbTokenId) { - this.logger.debug( - `Get latest service agreement: No new agreements found on blockchain: ${blockchain}.`, - ); - return { - contract, - lastProcessedTokenId: latestDbTokenId, - }; - } - - if (latestBlockchainTokenId < latestDbTokenId) { - this.logger.debug( - `Get latest service agreement: No new agreements found on blockchain: ${blockchain}.`, - ); - return; - } - - this.logger.debug( - `Get latest service agreement: Latest token id on chain: ${latestBlockchainTokenId}, latest token id in database: ${latestDbTokenId} on blockchain: ${blockchain}`, - ); - - let tokenIdDifference = latestBlockchainTokenId - latestDbTokenId; - let getAgreementDataPromise = []; - for ( - let tokenIdToBeFetched = latestDbTokenId + 1; - tokenIdToBeFetched <= latestBlockchainTokenId; - tokenIdToBeFetched += 1 - ) { - getAgreementDataPromise.push( - this.getAgreementDataForToken(tokenIdToBeFetched, blockchain, contract), - ); - if ( - getAgreementDataPromise.length === tokenIdDifference || - getAgreementDataPromise.length === GET_LATEST_SERVICE_AGREEMENT_BATCH_SIZE - ) { - const missingAgreements = await Promise.all(getAgreementDataPromise); - - await this.repositoryModuleManager.bulkCreateServiceAgreementRecords( - missingAgreements.filter((agreement) => agreement != null), - ); - getAgreementDataPromise = []; - tokenIdDifference -= GET_LATEST_SERVICE_AGREEMENT_BATCH_SIZE; - } - } - if (latestBlockchainTokenId - latestDbTokenId > 0) { - this.logger.debug( - `Get latest service agreement: Successfully fetched ${ - latestBlockchainTokenId - latestDbTokenId - } on blockchain: ${blockchain}`, - ); - } - return { - contract, - lastProcessedTokenId: latestBlockchainTokenId, - }; - } - - async getAgreementDataForToken( - tokenId, - blockchain, - contract, - hashFunctionId = CONTENT_ASSET_HASH_FUNCTION_ID, - ) { - try { - this.logger.debug( - `Get latest service agreement: Getting agreement data for token id: ${tokenId} on blockchain: ${blockchain}`, - ); - let assertionIds = []; - let retryCount = 0; - - while (assertionIds.length === 0) { - if (retryCount === GET_ASSERTION_IDS_MAX_RETRY_COUNT) { - throw Error( - `Get latest service agreement: Unable to get assertion ids for token id: ${tokenId} on blockchain: ${blockchain}`, - ); - } - this.logger.debug( - `Get latest service agreement: getting assertion ids retry ${retryCount} for token id: ${tokenId} on blockchain: ${blockchain}`, - ); - assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - retryCount += 1; - await sleep(GET_ASSERTION_IDS_RETRY_DELAY_IN_SECONDS * 1000); - } - - const keyword = await this.ualService.calculateLocationKeyword( - blockchain, - contract, - tokenId, - assertionIds[0], - ); - const agreementId = await this.serviceAgreementService.generateId( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - ); - const agreementData = await this.blockchainModuleManager.getAgreementData( - blockchain, - agreementId, - ); - - if (!agreementData) { - throw Error( - `Get latest service agreement: Unable to fetch agreement data while processing asset created event for agreement id: ${agreementId}, blockchain id: ${blockchain}`, - ); - } - - const latestStateIndex = assertionIds.length - 1; - - return { - blockchainId: blockchain, - assetStorageContractAddress: contract, - tokenId, - agreementId, - startTime: agreementData.startTime, - epochsNumber: agreementData.epochsNumber, - epochLength: agreementData.epochLength, - scoreFunctionId: agreementData.scoreFunctionId, - stateIndex: latestStateIndex, - assertionId: assertionIds[latestStateIndex], - hashFunctionId, - keyword, - proofWindowOffsetPerc: agreementData.proofWindowOffsetPerc, - dataSource: SERVICE_AGREEMENT_SOURCES.NODE, - }; - } catch (error) { - this.logger.error(error.message); - } - } - - /** - * Recover system from failure - * @param error - */ - async recover() { - return Command.repeat(); - } - - /** - * Builds default command - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'blockchainGetLatestServiceAgreement', - data: {}, - period: GET_LATEST_SERVICE_AGREEMENT_FREQUENCY_MILLS, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default BlockchainGetLatestServiceAgreement; diff --git a/src/commands/common/get-latest-service-agreement/get-latest-service-agreement.js b/src/commands/common/get-latest-service-agreement/get-latest-service-agreement.js deleted file mode 100644 index c951534637..0000000000 --- a/src/commands/common/get-latest-service-agreement/get-latest-service-agreement.js +++ /dev/null @@ -1,71 +0,0 @@ -import Command from '../../command.js'; -import { GET_LATEST_SERVICE_AGREEMENT_FREQUENCY_MILLS } from '../../../constants/constants.js'; - -class GetLatestServiceAgreement extends Command { - constructor(ctx) { - super(ctx); - this.commandExecutor = ctx.commandExecutor; - this.shardingTableService = ctx.shardingTableService; - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.blockchainModuleManager = ctx.blockchainModuleManager; - } - - /** - * Executes command and produces one or more events - * @param command - */ - async execute() { - const operationId = this.operationIdService.generateId(); - - this.logger.info( - `Get latest service agreement: Starting get latest service agreement command for operation id: ${operationId}`, - ); - - await this.commandExecutor.delete('blockchainGetLatestServiceAgreement'); - - await Promise.all( - this.blockchainModuleManager.getImplementationNames().map(async (blockchain) => { - const commandData = { - blockchain, - operationId, - }; - - return this.commandExecutor.add({ - name: 'blockchainGetLatestServiceAgreement', - data: commandData, - period: GET_LATEST_SERVICE_AGREEMENT_FREQUENCY_MILLS, - }); - }), - ); - - return Command.empty(); - } - - /** - * Recover system from failure - * @param command - * @param error - */ - async recover(command) { - this.logger.warn(`Failed to execute ${command.name}. Error: ${command.message}`); - - return Command.repeat(); - } - - /** - * Builds default command - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'getLatestServiceAgreement', - data: {}, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default GetLatestServiceAgreement; diff --git a/src/commands/common/send-telemetry-command.js b/src/commands/common/send-telemetry-command.js index ceebb8a99b..c5af10af59 100644 --- a/src/commands/common/send-telemetry-command.js +++ b/src/commands/common/send-telemetry-command.js @@ -24,7 +24,7 @@ class SendTelemetryCommand extends Command { async execute() { if ( !this.config.modules.telemetry.enabled || - !this.telemetryModuleManager.getModuleConfiguration().sendTelemetryData + !this.telemetryModuleManager.getModuleConfiguration().sendToSignalingService ) { return Command.empty(); } diff --git a/src/commands/common/send-transaction-command.js b/src/commands/common/send-transaction-command.js index 12694d731e..d675ce71b1 100644 --- a/src/commands/common/send-transaction-command.js +++ b/src/commands/common/send-transaction-command.js @@ -13,8 +13,6 @@ class SendTransactionCommand extends Command { rightNeighborhoodEdge, contract, tokenId, - keyword, - hashFunctionId, stateIndex, txGasPrice, } = data; @@ -35,7 +33,7 @@ class SendTransactionCommand extends Command { this.logger.warn( `Failed to execute ${command.name}, Error Message: ${error.message} for the Service Agreement ` + `with the ID: ${agreementId}, Blockchain: ${blockchain}, Contract: ${contract}, ` + - `Token ID: ${tokenId}, Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, ` + + `Token ID: ${tokenId},` + `Epoch: ${epoch}, State Index: ${stateIndex}, Operation ID: ${operationId}, ` + `Closest Node: ${closestNode}, Left neighborhood edge: ${leftNeighborhoodEdge}, ` + `Right neighborhood edge: ${rightNeighborhoodEdge}, ` + @@ -127,7 +125,7 @@ class SendTransactionCommand extends Command { this.logger.trace( `${msgBase} ${command.name} for the Service Agreement with the ID: ${agreementId}, ` + `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + + `Epoch: ${epoch}, ` + `State Index: ${stateIndex}, Operation ID: ${operationId}, ` + `Closest Node: ${closestNode}, Left neighborhood edge: ${leftNeighborhoodEdge}, ` + `Right neighborhood edge: ${rightNeighborhoodEdge}, ` + diff --git a/src/commands/common/sharding-table-check-command.js b/src/commands/common/sharding-table-check-command.js index 1a3a02e274..049b1d439d 100644 --- a/src/commands/common/sharding-table-check-command.js +++ b/src/commands/common/sharding-table-check-command.js @@ -1,5 +1,8 @@ import Command from '../command.js'; -import { SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MINUTES } from '../../constants/constants.js'; +import { + COMMAND_PRIORITY, + SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MILLS, +} from '../../constants/constants.js'; class ShardingTableCheckCommand extends Command { constructor(ctx) { @@ -8,7 +11,7 @@ class ShardingTableCheckCommand extends Command { this.config = ctx.config; this.blockchainModuleManager = ctx.blockchainModuleManager; this.repositoryModuleManager = ctx.repositoryModuleManager; - this.hashingService = ctx.hashingService; + this.shardingTableService = ctx.shardingTableService; } /** @@ -17,6 +20,8 @@ class ShardingTableCheckCommand extends Command { * @param command */ async execute() { + const repositoryTransaction = await this.repositoryModuleManager.transaction(); + try { const promises = this.blockchainModuleManager .getImplementationNames() @@ -31,82 +36,17 @@ class ShardingTableCheckCommand extends Command { ); if (shardingTableLength !== totalNodesNumber) { - this.logger.debug( - `Sharding table check for blockchain ${blockchainId} - difference between local sharding table - (${totalNodesNumber} nodes) and blockchain sharding table (${shardingTableLength} nodes).`, - ); - this.logger.debug( - `Removing nodes from local sharding table for blockchain ${blockchainId}.`, - ); - await this.repositoryModuleManager.removeShardingTablePeerRecords( + return this.shardingTableService.pullBlockchainShardingTable( blockchainId, - ); - - let startingIdentityId = - await this.blockchainModuleManager.getShardingTableHead(blockchainId); - const pageSize = 10; - const shardingTable = []; - - this.logger.debug( - `Started pulling ${shardingTableLength} nodes from blockchain sharding table.`, - ); - - let sliceIndex = 0; - - while (shardingTable.length < shardingTableLength) { - // eslint-disable-next-line no-await-in-loop - const nodes = await this.blockchainModuleManager.getShardingTablePage( - blockchainId, - startingIdentityId, - pageSize, - ); - shardingTable.push( - ...nodes.slice(sliceIndex).filter((node) => node.nodeId !== '0x'), - ); - sliceIndex = 1; - startingIdentityId = nodes[nodes.length - 1].identityId; - } - - this.logger.debug( - `Finished pulling ${shardingTable.length} nodes from blockchain sharding table.`, - ); - - await this.repositoryModuleManager.createManyPeerRecords( - await Promise.all( - shardingTable.map(async (peer) => { - const nodeId = this.blockchainModuleManager.convertHexToAscii( - blockchainId, - peer.nodeId, - ); - - const sha256 = await this.hashingService.callHashFunction( - 1, - nodeId, - ); - - return { - peerId: nodeId, - blockchainId, - ask: this.blockchainModuleManager.convertFromWei( - blockchainId, - peer.ask, - 'ether', - ), - stake: this.blockchainModuleManager.convertFromWei( - blockchainId, - peer.stake, - 'ether', - ), - sha256, - }; - }), - ), + repositoryTransaction, ); } }); await Promise.all(promises); + await repositoryTransaction.commit(); } catch (error) { + await repositoryTransaction.rollback(); await this.handleError(error.message); } return Command.repeat(); @@ -132,7 +72,9 @@ class ShardingTableCheckCommand extends Command { name: 'shardingTableCheckCommand', delay: 0, data: {}, - period: SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MINUTES * 60 * 1000, + period: SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MILLS, + priority: COMMAND_PRIORITY.HIGHEST, + isBlocking: true, transactional: false, }; Object.assign(command, map); diff --git a/src/commands/common/validate-asset-command.js b/src/commands/common/validate-asset-command.js index ec25cd8c01..d18179797d 100644 --- a/src/commands/common/validate-asset-command.js +++ b/src/commands/common/validate-asset-command.js @@ -3,7 +3,7 @@ import { ERROR_TYPE, OPERATION_ID_STATUS, LOCAL_STORE_TYPES, - ZERO_BYTES32, + PARANET_ACCESS_POLICY, } from '../../constants/constants.js'; class ValidateAssetCommand extends Command { @@ -13,6 +13,7 @@ class ValidateAssetCommand extends Command { this.ualService = ctx.ualService; this.dataService = ctx.dataService; this.validationService = ctx.validationService; + this.paranetService = ctx.paranetService; this.errorType = ERROR_TYPE.VALIDATE_ASSET_ERROR; } @@ -28,6 +29,7 @@ class ValidateAssetCommand extends Command { contract, tokenId, storeType = LOCAL_STORE_TYPES.TRIPLE, + paranetUAL, } = command.data; await this.operationIdService.updateOperationIdStatus( @@ -36,51 +38,22 @@ class ValidateAssetCommand extends Command { OPERATION_ID_STATUS.VALIDATE_ASSET_START, ); - let blockchainAssertionId; - if (storeType === LOCAL_STORE_TYPES.TRIPLE) { - blockchainAssertionId = await this.blockchainModuleManager.getLatestAssertionId( - blockchain, - contract, - tokenId, - ); - } else { - blockchainAssertionId = await this.blockchainModuleManager.getUnfinalizedAssertionId( - blockchain, - tokenId, - ); - } - if (!blockchainAssertionId || blockchainAssertionId === ZERO_BYTES32) { - return Command.retry(); - } + // TODO: Validate number of triplets and other stuff we did before so it matches like we did it in v6 const cachedData = await this.operationIdService.getCachedOperationIdData(operationId); const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - this.logger.info( - `Validating asset's public assertion with id: ${cachedData.public.assertionId} ual: ${ual}`, - ); - if (blockchainAssertionId !== cachedData.public.assertionId) { - await this.handleError( - operationId, - blockchain, - `Invalid assertion id for asset ${ual}. Received value from blockchain: ${blockchainAssertionId}, received value from request: ${cachedData.public.assertionId}`, - this.errorType, - true, - ); - return Command.empty(); - } - await this.validationService.validateAssertion( - cachedData.public.assertionId, - blockchain, - cachedData.public.assertion, - ); + // backwards compatibility + const cachedAssertion = cachedData.datasetRoot || cachedData.public.assertionId; + const cachedDataset = cachedData.dataset || cachedData.public.assertion; + // V0 backwards compatibility if (cachedData.private?.assertionId && cachedData.private?.assertion) { this.logger.info( `Validating asset's private assertion with id: ${cachedData.private.assertionId} ual: ${ual}`, ); try { - this.validationService.validateAssertionId( + await this.validationService.validateDatasetRoot( cachedData.private.assertion, cachedData.private.assertionId, ); @@ -96,13 +69,83 @@ class ValidateAssetCommand extends Command { } } + await this.validationService.validateDatasetRoot(cachedDataset, cachedAssertion); + + let paranetId; + if (storeType === LOCAL_STORE_TYPES.TRIPLE_PARANET) { + try { + const { + blockchain: paranetBlockchain, + contract: paranetContract, + tokenId: paranetTokenId, + } = this.ualService.resolveUAL(paranetUAL); + + paranetId = this.paranetService.constructParanetId(paranetContract, paranetTokenId); + const paranetExists = await this.blockchainModuleManager.paranetExists( + paranetBlockchain, + paranetId, + ); + if (!paranetExists) { + await this.handleError( + operationId, + blockchain, + `Paranet: ${paranetId} doesn't exist.`, + this.errorType, + true, + ); + return Command.empty(); + } + + const nodesAccessPolicy = await this.blockchainModuleManager.getNodesAccessPolicy( + blockchain, + paranetId, + ); + if (nodesAccessPolicy === PARANET_ACCESS_POLICY.CURATED) { + const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); + const isCuratedNode = await this.blockchainModuleManager.isCuratedNode( + blockchain, + paranetId, + identityId, + ); + if (!isCuratedNode) { + await this.handleError( + operationId, + blockchain, + `Node is not part of curated paranet ${paranetId} because node with id ${identityId} is not a curated node.`, + this.errorType, + true, + ); + return Command.empty(); + } + } else { + await this.handleError( + operationId, + blockchain, + `Paranet ${paranetId} is not curated paranet.`, + this.errorType, + true, + ); + return Command.empty(); + } + } catch (error) { + await this.handleError( + operationId, + blockchain, + error.message, + this.errorType, + true, + ); + return Command.empty(); + } + } + await this.operationIdService.updateOperationIdStatus( operationId, blockchain, OPERATION_ID_STATUS.VALIDATE_ASSET_END, ); return this.continueSequence( - { ...command.data, retry: undefined, period: undefined }, + { ...command.data, paranetId, retry: undefined, period: undefined }, command.sequence, ); } diff --git a/src/commands/local-store/local-store-command.js b/src/commands/local-store/local-store-command.js index 4a0aa82b31..37f2bd2a1d 100644 --- a/src/commands/local-store/local-store-command.js +++ b/src/commands/local-store/local-store-command.js @@ -2,8 +2,10 @@ import { OPERATION_ID_STATUS, ERROR_TYPE, LOCAL_STORE_TYPES, - PENDING_STORAGE_REPOSITORIES, - TRIPLE_STORE_REPOSITORIES, + OPERATION_REQUEST_STATUS, + NETWORK_MESSAGE_TYPES, + NETWORK_SIGNATURES_FOLDER, + PUBLISHER_NODE_SIGNATURES_FOLDER, } from '../../constants/constants.js'; import Command from '../command.js'; @@ -11,13 +13,17 @@ class LocalStoreCommand extends Command { constructor(ctx) { super(ctx); this.tripleStoreService = ctx.tripleStoreService; + this.paranetService = ctx.paranetService; this.pendingStorageService = ctx.pendingStorageService; this.operationIdService = ctx.operationIdService; + this.operationService = ctx.publishService; this.dataService = ctx.dataService; this.ualService = ctx.ualService; - this.serviceAgreementService = ctx.serviceAgreementService; this.blockchainModuleManager = ctx.blockchainModuleManager; this.commandExecutor = ctx.commandExecutor; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.signatureService = ctx.signatureService; + this.cryptoService = ctx.cryptoService; this.errorType = ERROR_TYPE.LOCAL_STORE.LOCAL_STORE_ERROR; } @@ -26,9 +32,14 @@ class LocalStoreCommand extends Command { const { operationId, blockchain, + storeType = LOCAL_STORE_TYPES.TRIPLE, + paranetId, + datasetRoot, + isOperationV0, contract, tokenId, - storeType = LOCAL_STORE_TYPES.TRIPLE, + minimumNumberOfNodeReplications, + batchSize, } = command.data; try { @@ -38,69 +49,131 @@ class LocalStoreCommand extends Command { OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_START, ); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_GET_CACHED_OPERATION_ID_DATA_START, + operationId, + blockchain, + ); const cachedData = await this.operationIdService.getCachedOperationIdData(operationId); - - const keyword = await this.ualService.calculateLocationKeyword( + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_GET_CACHED_OPERATION_ID_DATA_END, + operationId, blockchain, - contract, - tokenId, ); if (storeType === LOCAL_STORE_TYPES.TRIPLE) { const storePromises = []; - if (cachedData.public.assertion && cachedData.public.assertionId) { - storePromises.push( - this.tripleStoreService.localStoreAsset( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - cachedData.public.assertionId, - cachedData.public.assertion, - blockchain, - contract, - tokenId, - keyword, - ), - ); - } - if (cachedData.private.assertion && cachedData.private.assertionId) { - storePromises.push( - this.tripleStoreService.localStoreAsset( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - cachedData.private.assertionId, - cachedData.private.assertion, - blockchain, - contract, - tokenId, - keyword, - ), - ); + + if (isOperationV0) { + if (cachedData.public?.assertion && cachedData.public?.assertionId) { + const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + + storePromises.push( + this.tripleStoreService.createV6KnowledgeCollection( + cachedData.public.assertion, + ual, + cachedData.private.assertion, + ), + ); + } } + await Promise.all(storePromises); - } else { - await this.pendingStorageService.cacheAssertion( - PENDING_STORAGE_REPOSITORIES.PRIVATE, + } else if (storeType === LOCAL_STORE_TYPES.TRIPLE_PARANET) { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_GET_PARANET_METADATA_START, + operationId, + blockchain, + ); + const paranetMetadata = await this.blockchainModuleManager.getParanetMetadata( + blockchain, + paranetId, + ); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_GET_PARANET_METADATA_END, + operationId, + blockchain, + ); + + const paranetUAL = this.ualService.deriveUAL( + blockchain, + paranetMetadata.paranetKAStorageContract, + paranetMetadata.paranetKATokenId, + ); + const paranetRepository = this.paranetService.getParanetRepositoryName(paranetUAL); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_INITIALIZE_PARANET_REPOSITORY_START, + operationId, + blockchain, + ); + await this.tripleStoreModuleManager.initializeParanetRepository(paranetRepository); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_INITIALIZE_PARANET_REPOSITORY_END, + operationId, + blockchain, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_INITIALIZE_PARANET_RECORD_START, + operationId, blockchain, - contract, - tokenId, - cachedData.public.assertionId, - { - ...cachedData, - keyword, - }, + ); + await this.paranetService.initializeParanetRecord(blockchain, paranetId); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_INITIALIZE_PARANET_RECORD_END, operationId, + blockchain, ); - const updateCommitWindowDuration = - await this.blockchainModuleManager.getUpdateCommitWindowDuration(blockchain); - await this.commandExecutor.add({ - name: 'deletePendingStateCommand', - sequence: [], - delay: (updateCommitWindowDuration + 60) * 1000, - data: { - ...command.data, - assertionId: cachedData.public.assertionId, - }, - transactional: false, - }); + if (isOperationV0 && cachedData && cachedData.datasetRoot) { + // await this.tripleStoreService.localStoreAsset( + // paranetRepository, + // cachedData.public.assertionId, + // cachedData.public.assertion, + // blockchain, + // contract, + // tokenId, + // keyword, + // LOCAL_INSERT_FOR_CURATED_PARANET_MAX_ATTEMPTS, + // LOCAL_INSERT_FOR_CURATED_PARANET_RETRY_DELAY, + // ); + } + if (isOperationV0 && cachedData && cachedData.datasetRoot) { + // await this.tripleStoreService.localStoreAsset( + // paranetRepository, + // cachedData.private.assertionId, + // cachedData.private.assertion, + // blockchain, + // contract, + // tokenId, + // keyword, + // LOCAL_INSERT_FOR_CURATED_PARANET_MAX_ATTEMPTS, + // LOCAL_INSERT_FOR_CURATED_PARANET_RETRY_DELAY, + // ); + } + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_INCREMENT_PARANET_KA_COUNT_START, + operationId, + blockchain, + ); + await this.repositoryModuleManager.incrementParanetKaCount(paranetId, blockchain); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_INCREMENT_PARANET_KA_COUNT_END, + operationId, + blockchain, + ); + // await this.repositoryModuleManager.createParanetSyncedAssetRecord( + // blockchain, + // this.ualService.deriveUAL(blockchain, contract, tokenId), + // paranetUAL, + // cachedData.public.datasetRoot, + // cachedData.private?.assertionId, + // cachedData.sender, + // cachedData.txHash, + // PARANET_SYNC_SOURCES.LOCAL_STORE, + // ); } await this.operationIdService.updateOperationIdStatus( @@ -109,17 +182,79 @@ class LocalStoreCommand extends Command { OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_END, ); - await this.operationIdService.updateOperationIdStatus( + if (isOperationV0) { + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.COMPLETED, + ); + + return Command.empty(); + } + + const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); + const { v, r, s, vs } = await this.signatureService.signMessage( + blockchain, + datasetRoot, + ); + await this.signatureService.addSignatureToStorage( + NETWORK_SIGNATURES_FOLDER, operationId, + identityId, + v, + r, + s, + vs, + ); + + const { + v: publisherNodeV, + r: publisherNodeR, + s: publisherNodeS, + vs: publisherNodeVS, + } = await this.signatureService.signMessage( blockchain, - OPERATION_ID_STATUS.COMPLETED, + this.cryptoService.keccak256EncodePacked( + ['uint72', 'bytes32'], + [identityId, datasetRoot], + ), + ); + await this.signatureService.addSignatureToStorage( + PUBLISHER_NODE_SIGNATURES_FOLDER, + operationId, + identityId, + publisherNodeV, + publisherNodeR, + publisherNodeS, + publisherNodeVS, + ); + + const batchSizePar = this.operationService.getBatchSize(batchSize); + const minAckResponses = this.operationService.getMinAckResponses( + minimumNumberOfNodeReplications, + ); + + const updatedData = { + ...command.data, + batchSize: batchSizePar, + minAckResponses, + }; + + await this.operationService.processResponse( + { ...command, data: updatedData }, + OPERATION_REQUEST_STATUS.COMPLETED, + { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, + messageData: { identityId, v, r, s, vs }, + }, + null, ); } catch (e) { await this.handleError(operationId, blockchain, e.message, this.errorType, true); return Command.empty(); } - return this.continueSequence(command.data, command.sequence); + return Command.empty(); } /** diff --git a/src/commands/paranet/paranet-sync-command.js b/src/commands/paranet/paranet-sync-command.js index 0ba3b1809d..07d619de47 100644 --- a/src/commands/paranet/paranet-sync-command.js +++ b/src/commands/paranet/paranet-sync-command.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ /* eslint-disable no-await-in-loop */ import { setTimeout } from 'timers/promises'; import Command from '../command.js'; @@ -6,11 +5,16 @@ import { ERROR_TYPE, PARANET_SYNC_FREQUENCY_MILLS, OPERATION_ID_STATUS, - CONTENT_ASSET_HASH_FUNCTION_ID, - SIMPLE_ASSET_SYNC_PARAMETERS, - TRIPLE_STORE_REPOSITORIES, + PARANET_SYNC_PARAMETERS, PARANET_SYNC_KA_COUNT, + PARANET_SYNC_RETRIES_LIMIT, + PARANET_SYNC_RETRY_DELAY_MS, OPERATION_STATUS, + PARANET_NODES_ACCESS_POLICIES, + PARANET_SYNC_SOURCES, + TRIPLE_STORE_REPOSITORIES, + LOCAL_INSERT_FOR_CURATED_PARANET_MAX_ATTEMPTS, + LOCAL_INSERT_FOR_CURATED_PARANET_RETRY_DELAY, } from '../../constants/constants.js'; class ParanetSyncCommand extends Command { @@ -28,344 +32,218 @@ class ParanetSyncCommand extends Command { } async execute(command) { - const { operationId, paranetUAL } = command.data; + const { blockchain, operationId, paranetUAL, paranetId, paranetMetadata } = command.data; - const { blockchain, contract, tokenId } = this.ualService.resolveUAL(paranetUAL); - const paranetId = this.paranetService.constructParanetId(blockchain, contract, tokenId); + const paranetNodesAccessPolicy = + PARANET_NODES_ACCESS_POLICIES[paranetMetadata.nodesAccessPolicy]; this.logger.info( - `Paranet sync: Starting paranet sync for paranet: ${paranetUAL}, operation ID: ${operationId}`, - ); - - let contractKaCount = await this.blockchainModuleManager.getParanetKnowledgeAssetsCount( - blockchain, - paranetId, + `Paranet sync: Starting paranet sync for paranet: ${paranetUAL} (${paranetId}), operation ID: ${operationId}`, ); - contractKaCount = contractKaCount.toNumber(); - const cachedKaCount = ( - await this.repositoryModuleManager.getParanetKnowledgeAssetsCount(paranetId, blockchain) - )[0].dataValues.ka_count; + // Fetch counts from blockchain and database + const contractKaCount = ( + await this.blockchainModuleManager.getParanetKnowledgeCollectionCount( + blockchain, + paranetId, + ) + ).toNumber(); + + const syncedAssetsCount = + await this.repositoryModuleManager.getParanetSyncedAssetRecordsCountByDataSource( + paranetUAL, + PARANET_SYNC_SOURCES.SYNC, + ); + const localStoredAssetsCount = + await this.repositoryModuleManager.getParanetSyncedAssetRecordsCountByDataSource( + paranetUAL, + PARANET_SYNC_SOURCES.LOCAL_STORE, + ); - const cachedMissedKaCount = + const totalMissedAssetsCount = await this.repositoryModuleManager.getCountOfMissedAssetsOfParanet(paranetUAL); + const missedAssetsCount = + await this.repositoryModuleManager.getFilteredCountOfMissedAssetsOfParanet( + paranetUAL, + PARANET_SYNC_RETRIES_LIMIT, + PARANET_SYNC_RETRY_DELAY_MS, + ); + + const paranetRepository = this.paranetService.getParanetRepositoryName(paranetUAL); - if (cachedKaCount + cachedMissedKaCount >= contractKaCount) { + this.logger.info( + `Paranet sync: Paranet: ${paranetUAL} (${paranetId}) Total count of Paranet KAs in the contract: ${contractKaCount}; Synced KAs count: ${syncedAssetsCount}; Local Stored KAs count: ${localStoredAssetsCount}; Total count of missed KAs: ${totalMissedAssetsCount}`, + ); + + // First, attempt to sync missed KAs if any exist + if (missedAssetsCount > 0) { this.logger.info( - `Paranet sync: KA count from contract and in DB is the same, nothing new to sync, for paranet: ${paranetUAL}, operation ID: ${operationId}!`, + `Paranet sync: Attempting to sync ${missedAssetsCount} missed assets for paranet: ${paranetUAL} (${paranetId}), operation ID: ${operationId}!`, ); - if (cachedMissedKaCount > 0) { - this.logger.info( - `Paranet sync: Missed KA count is ${cachedMissedKaCount} syncing ${ - cachedMissedKaCount > PARANET_SYNC_KA_COUNT - ? PARANET_SYNC_KA_COUNT - : cachedMissedKaCount - } assets, for paranet: ${paranetUAL}, operation ID: ${operationId}!`, - ); - const missedParanetAssets = - await this.repositoryModuleManager.getMissedParanetAssetsRecords( - paranetUAL, - PARANET_SYNC_KA_COUNT, - ); - - const promises = []; - // It's array of keywords not tokenId - // .map((ka) => ka.tokenId) - missedParanetAssets.forEach((missedParanetAsset) => { - promises.push( - (async () => { - const { knowledgeAssetId } = missedParanetAsset; - this.logger.info( - `Paranet sync: Syncing missed token id: ${knowledgeAssetId} for ${paranetUAL} with operation id: ${operationId}`, - ); - - const { knowledgeAssetStorageContract, tokenId: kaTokenId } = - await this.blockchainModuleManager.getParanetKnowledgeAssetLocator( - blockchain, - knowledgeAssetId, - ); - - const assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - knowledgeAssetStorageContract, - kaTokenId, - ); - - let isSuccessful = true; - for ( - let stateIndex = assertionIds.length - 2; - stateIndex >= 0; - stateIndex -= 1 - ) { - isSuccessful = - isSuccessful && - (await this.syncAsset( - blockchain, - knowledgeAssetStorageContract, - kaTokenId, - assertionIds, - stateIndex, - paranetId, - tokenId, - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - false, - // It should never delete as it never was in storage - // But maybe will because this is unfinalized - stateIndex === assertionIds.length - 2, - paranetUAL, - knowledgeAssetId, - )); - } - // Then sync the last one, but put it in the current repo - isSuccessful = - isSuccessful && - (await this.syncAsset( - blockchain, - knowledgeAssetStorageContract, - kaTokenId, - assertionIds, - assertionIds.length - 1, - paranetId, - tokenId, - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - true, - false, - paranetUAL, - knowledgeAssetId, - )); - - if (isSuccessful) { - const ual = this.ualService.deriveUAL( - blockchain, - knowledgeAssetStorageContract, - kaTokenId, - ); - await this.repositoryModuleManager.removeMissedParanetAssetRecord( - ual, - ); - } - - return isSuccessful; - })(), - ); // Immediately invoke the async function - }); - const promisesResolution = await Promise.all(promises); + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PARANET.PARANET_SYNC_MISSED_KAS_SYNC_START, + ); - const successfulCount = promisesResolution.reduce((count, value) => { - if (value) { - return count + 1; - } - return count; - }, 0); + const [successulMissedSyncsCount, failedMissedSyncsCount] = await this.syncMissedKAs( + paranetUAL, + paranetId, + paranetNodesAccessPolicy, + paranetRepository, + operationId, + ); - await this.repositoryModuleManager.updateParanetKaCount( - paranetId, - blockchain, - cachedKaCount + successfulCount, - ); - return Command.repeat(); - } - return Command.repeat(); - } + this.logger.info( + `Paranet sync: Successful missed assets syncs: ${successulMissedSyncsCount}; ` + + `Failed missed assets syncs: ${failedMissedSyncsCount} for paranet: ${paranetUAL} ` + + `(${paranetId}), operation ID: ${operationId}!`, + ); - this.logger.info( - `Paranet sync: Syncing ${ - contractKaCount + cachedMissedKaCount - cachedKaCount - } new assets for paranet: ${paranetUAL}, operation ID: ${operationId}`, - ); - // TODO: Rename i, should it be cachedKaCount + 1 as cachedKaCount is already in, but count is index - const kaToUpdate = []; - for ( - let i = cachedKaCount + cachedMissedKaCount; - i <= contractKaCount; - i += PARANET_SYNC_KA_COUNT - ) { - const nextKaArray = - await this.blockchainModuleManager.getParanetKnowledgeAssetsWithPagination( - blockchain, - paranetId, - i, - PARANET_SYNC_KA_COUNT, - ); - if (!nextKaArray.length) break; - kaToUpdate.push(...nextKaArray); + await this.operationIdService.updateOperationIdStatusWithValues( + operationId, + blockchain, + OPERATION_ID_STATUS.PARANET.PARANET_SYNC_MISSED_KAS_SYNC_END, + successulMissedSyncsCount, + failedMissedSyncsCount, + ); } - const promises = []; - // It's array of keywords not tokenId - // .map((ka) => ka.tokenId) - kaToUpdate.forEach((knowledgeAssetId) => { - promises.push( - (async () => { - this.logger.info( - `Paranet sync: Syncing token id: ${knowledgeAssetId} for ${paranetUAL} with operation id: ${operationId}`, - ); - - const { knowledgeAssetStorageContract, tokenId: kaTokenId } = - await this.blockchainModuleManager.getParanetKnowledgeAssetLocator( - blockchain, - knowledgeAssetId, - ); + // Then, check for new KAs on the blockchain + if (syncedAssetsCount + localStoredAssetsCount + totalMissedAssetsCount < contractKaCount) { + this.logger.info( + `Paranet sync: Syncing ${ + contractKaCount - + (syncedAssetsCount + localStoredAssetsCount + totalMissedAssetsCount) + } new assets for paranet: ${paranetUAL} (${paranetId}), operation ID: ${operationId}`, + ); - const assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - knowledgeAssetStorageContract, - kaTokenId, - ); + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PARANET.PARANET_SYNC_NEW_KAS_SYNC_START, + ); - let isSuccessful = true; - for ( - let stateIndex = assertionIds.length - 2; - stateIndex >= 0; - stateIndex -= 1 - ) { - isSuccessful = - isSuccessful && - (await this.syncAsset( - blockchain, - knowledgeAssetStorageContract, - kaTokenId, - assertionIds, - stateIndex, - paranetId, - tokenId, - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - false, - // It should never delete as it never was in storage - // But maybe will because this is not finalized - stateIndex === assertionIds.length - 2, - paranetUAL, - knowledgeAssetId, - )); - } - - // Then sync the last one, but put it in the current repo - isSuccessful = - isSuccessful && - (await this.syncAsset( - blockchain, - knowledgeAssetStorageContract, - kaTokenId, - assertionIds, - assertionIds.length - 1, - paranetId, - tokenId, - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - true, - false, - paranetUAL, - knowledgeAssetId, - )); + const [successulNewSyncsCount, failedNewSyncsCount] = await this.syncNewKAs( + blockchain, + syncedAssetsCount + missedAssetsCount, + contractKaCount, + paranetUAL, + paranetId, + paranetNodesAccessPolicy, + paranetRepository, + operationId, + ); - return isSuccessful; - })(), - ); // Immediately invoke the async function - }); + this.logger.info( + `Paranet sync: Successful new assets syncs: ${successulNewSyncsCount}; ` + + `Failed new assets syncs: ${failedNewSyncsCount} for paranet: ${paranetUAL} ` + + `(${paranetId}), operation ID: ${operationId}!`, + ); - const promisesResolution = await Promise.all(promises); + await this.operationIdService.updateOperationIdStatusWithValues( + operationId, + blockchain, + OPERATION_ID_STATUS.PARANET.PARANET_SYNC_NEW_KAS_SYNC_END, + successulNewSyncsCount, + failedNewSyncsCount, + ); - const successfulCount = promisesResolution.reduce((count, value) => { - if (value) { - return count + 1; - } - return count; - }, 0); + await this.operationIdService.updateOperationIdStatusWithValues( + operationId, + blockchain, + OPERATION_ID_STATUS.COMPLETED, + successulNewSyncsCount, + failedNewSyncsCount, + ); + } else { + this.logger.info( + `Paranet sync: No new assets to sync for paranet: ${paranetUAL} (${paranetId}), operation ID: ${operationId}!`, + ); + } - await this.repositoryModuleManager.updateParanetKaCount( - paranetId, - blockchain, - cachedKaCount + successfulCount, - ); return Command.repeat(); } - async syncAsset( + async syncAssetState( + ual, blockchain, contract, tokenId, assertionIds, stateIndex, paranetId, - paranetTokenId, - paranetRepository, - latestAsset, - deleteFromEarlier, + latestState, paranetUAL, - knowledgeAssetId, + paranetNodesAccessPolicy, + paranetRepository, ) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - try { - const statePresentInParanetRepository = - await this.tripleStoreService.paranetAssetExists( - blockchain, - contract, - tokenId, - contract, - paranetTokenId, - ); - - if (statePresentInParanetRepository) { - this.logger.trace( - `Paranet sync: StateIndex: ${stateIndex} for tokenId: ${tokenId} found in triple store blockchain: ${blockchain}`, - ); - return true; - } + const assertionId = assertionIds[stateIndex]; - this.logger.debug( - `Paranet sync: Fetching state index: ${stateIndex + 1} of ${ - assertionIds.length - } for asset with ual: ${ual}. blockchain: ${blockchain}`, - ); - const assertionId = assertionIds[stateIndex]; + this.logger.debug( + `Paranet sync: Fetching state: ${assertionId} index: ${stateIndex + 1} of ${ + assertionIds.length + } for asset with ual: ${ual}.`, + ); - const operationId = await this.operationIdService.generateOperationId( + try { + const getOperationId = await this.operationIdService.generateOperationId( OPERATION_ID_STATUS.GET.GET_START, ); - - await Promise.all([ - this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.GET.GET_INIT_START, - ), - this.repositoryModuleManager.createOperationRecord( - this.getService.getOperationName(), - operationId, - OPERATION_STATUS.IN_PROGRESS, - ), - ]); - - const hashFunctionId = CONTENT_ASSET_HASH_FUNCTION_ID; - + this.operationIdService.updateOperationIdStatus( + getOperationId, + blockchain, + OPERATION_ID_STATUS.GET.GET_INIT_START, + ); + this.repositoryModuleManager.createOperationRecord( + this.getService.getOperationName(), + getOperationId, + OPERATION_STATUS.IN_PROGRESS, + ); this.logger.debug( - `Paranet sync: Get for ${ual} with operation id ${operationId} initiated. blockchain: ${blockchain}`, + `Paranet sync: Get for ${ual} with operation id ${getOperationId} initiated.`, ); - - await this.commandExecutor.add({ - name: 'networkGetCommand', - sequence: [], - delay: 0, - data: { - operationId, - id: ual, - blockchain, - contract, - tokenId, - state: assertionId, - hashFunctionId, - assertionId, - assetSync: true, - stateIndex, - paranetSync: true, - paranetTokenId, - paranetLatestAsset: latestAsset, - }, - transactional: false, - }); + if (paranetNodesAccessPolicy === 'OPEN') { + await this.commandExecutor.add({ + name: 'networkGetCommand', + sequence: [], + delay: 0, + data: { + operationId: getOperationId, + id: ual, + blockchain, + contract, + tokenId, + state: assertionId, + assertionId, + paranetId, + paranetUAL, + }, + transactional: false, + }); + } else if (paranetNodesAccessPolicy === 'CURATED') { + await this.commandExecutor.add({ + name: 'curatedParanetNetworkGetCommand', + sequence: [], + delay: 0, + data: { + operationId: getOperationId, + id: ual, + blockchain, + contract, + tokenId, + state: assertionId, + assertionId, + paranetId, + paranetUAL, + }, + transactional: false, + }); + } await this.operationIdService.updateOperationIdStatus( - operationId, + getOperationId, blockchain, OPERATION_ID_STATUS.GET.GET_INIT_END, ); @@ -373,42 +251,308 @@ class ParanetSyncCommand extends Command { let attempt = 0; let getResult; do { - await setTimeout(SIMPLE_ASSET_SYNC_PARAMETERS.GET_RESULT_POLLING_INTERVAL_MILLIS); - getResult = await this.operationIdService.getOperationIdRecord(operationId); + await setTimeout(PARANET_SYNC_PARAMETERS.GET_RESULT_POLLING_INTERVAL_MILLIS); + getResult = await this.operationIdService.getOperationIdRecord(getOperationId); attempt += 1; } while ( - attempt < SIMPLE_ASSET_SYNC_PARAMETERS.GET_RESULT_POLLING_MAX_ATTEMPTS && + attempt < PARANET_SYNC_PARAMETERS.GET_RESULT_POLLING_MAX_ATTEMPTS && getResult?.status !== OPERATION_ID_STATUS.FAILED && getResult?.status !== OPERATION_ID_STATUS.COMPLETED ); - const getOperationCachedData = await this.operationIdService.getCachedOperationIdData( - operationId, - ); - if (getOperationCachedData?.message === 'Unable to find assertion on the network!') { + if (getResult?.status !== OPERATION_ID_STATUS.COMPLETED) { + this.logger.warn( + `Paranet sync: Unable to sync tokenId: ${tokenId}, for contract: ${contract} state index: ${stateIndex} blockchain: ${blockchain}, GET result: ${JSON.stringify( + getResult, + )}`, + ); + await this.repositoryModuleManager.createMissedParanetAssetRecord({ blockchainId: blockchain, ual, paranetUal: paranetUAL, - knowledgeAssetId, }); + return false; } + + const data = await this.operationIdService.getCachedOperationIdData(getOperationId); + this.logger.debug( + `Paranet sync: ${data.assertion.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, + ); + + let repository; + if (latestState) { + repository = paranetRepository; + } else if (paranetNodesAccessPolicy === 'OPEN') { + repository = TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY; + } else if (paranetNodesAccessPolicy === 'CURATED') { + repository = TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY; + } else { + throw new Error('Unsupported access policy'); + } + + await this.tripleStoreService.localStoreAsset( + repository, + assertionId, + data.assertion, + blockchain, + contract, + tokenId, + LOCAL_INSERT_FOR_CURATED_PARANET_MAX_ATTEMPTS, + LOCAL_INSERT_FOR_CURATED_PARANET_RETRY_DELAY, + ); + if (paranetNodesAccessPolicy === 'CURATED' && data.privateAssertion) { + await this.tripleStoreService.localStoreAsset( + repository, + data.syncedAssetRecord.privateAssertionId, + data.privateAssertion, + blockchain, + contract, + tokenId, + ); + } + const privateAssertionId = + paranetNodesAccessPolicy === 'CURATED' + ? data.syncedAssetRecord?.privateAssertionId + : null; + + await this.repositoryModuleManager.incrementParanetKaCount(paranetId, blockchain); + await this.repositoryModuleManager.createParanetSyncedAssetRecord( + blockchain, + ual, + paranetUAL, + assertionId, + privateAssertionId, + data.syncedAssetRecord?.sender, + data.syncedAssetRecord?.transactionHash, + PARANET_SYNC_SOURCES.SYNC, + ); + + return true; } catch (error) { this.logger.warn( `Paranet sync: Unable to sync tokenId: ${tokenId}, for contract: ${contract} state index: ${stateIndex} blockchain: ${blockchain}, error: ${error}`, ); + await this.repositoryModuleManager.createMissedParanetAssetRecord({ blockchainId: blockchain, ual, paranetUal: paranetUAL, - knowledgeAssetId, }); return false; } + } + + async syncAsset( + ual, + blockchain, + contract, + tokenId, + paranetUAL, + paranetId, + paranetNodesAccessPolicy, + paranetRepository, + operationId, + removeMissingAssetRecord = false, + ) { + try { + this.logger.info( + `Paranet sync: Syncing asset: ${ual} for paranet: ${paranetId}, operation ID: ${operationId}`, + ); + + const assertionIds = + await this.blockchainModuleManager.getKnowledgeCollectionMerkleRoots( + blockchain, + contract, + tokenId, + ); + + let isSuccessful = true; + for (let stateIndex = 0; stateIndex < assertionIds.length; stateIndex += 1) { + isSuccessful = + isSuccessful && + (await this.syncAssetState( + ual, + blockchain, + contract, + tokenId, + assertionIds, + stateIndex, + paranetId, + stateIndex === assertionIds.length - 1, + paranetUAL, + paranetNodesAccessPolicy, + paranetRepository, + )); + } + + if (isSuccessful && removeMissingAssetRecord) { + await this.repositoryModuleManager.removeMissedParanetAssetRecordsByUAL(ual); + } + + return isSuccessful; + } catch (error) { + this.logger.warn( + `Paranet sync: Failed to sync asset: ${ual} for paranet: ${paranetId}, error: ${error}`, + ); + await this.repositoryModuleManager.createMissedParanetAssetRecord({ + blockchain, + ual, + paranetUAL, + }); + + return false; + } + } + + async syncMissedKAs( + paranetUAL, + paranetId, + paranetNodesAccessPolicy, + paranetRepository, + operationId, + ) { + const missedParanetAssets = + await this.repositoryModuleManager.getMissedParanetAssetsRecordsWithRetryCount( + paranetUAL, + PARANET_SYNC_RETRIES_LIMIT, + PARANET_SYNC_RETRY_DELAY_MS, + ); + + const results = []; + + // Loop through missedParanetAssets in batches + for (let i = 0; i < missedParanetAssets.length; i += PARANET_SYNC_KA_COUNT) { + // Get the current batch + const batch = missedParanetAssets.slice(i, i + PARANET_SYNC_KA_COUNT); + + // Map the batch to an array of promises + const promises = batch.map((missedParanetAsset) => { + const { + blockchain: knowledgeAssetBlockchain, + contract: knowledgeAssetStorageContract, + tokenId: knowledgeAssetTokenId, + } = this.ualService.resolveUAL(missedParanetAsset.ual); + + return this.syncAsset( + missedParanetAsset.ual, + knowledgeAssetBlockchain, + knowledgeAssetStorageContract, + knowledgeAssetTokenId, + paranetUAL, + paranetId, + paranetNodesAccessPolicy, + paranetRepository, + operationId, + true, // removeMissingAssetRecord + ); + }); + + // Await the promises in the current batch + const batchResults = await Promise.all(promises); + + // Accumulate the results + results.push(...batchResults); + } + + const successfulCount = results.filter(Boolean).length; + + return [successfulCount, results.length - successfulCount]; + } + + async syncNewKAs( + blockchain, + startIndex, + contractKaCount, + paranetUAL, + paranetId, + paranetNodesAccessPolicy, + paranetRepository, + operationId, + ) { + let i = Number(startIndex); + + const results = []; + while (i <= contractKaCount) { + const nextKaArray = + await this.blockchainModuleManager.getParanetKnowledgeCollectionsWithPagination( + blockchain, + paranetId, + i, + PARANET_SYNC_KA_COUNT, + ); + + if (nextKaArray.length === 0) { + break; + } + + i += nextKaArray.length; + + const filteredKAs = []; + // NOTE: This could also be processed in parallel if needed + for (const knowledgeAssetId of nextKaArray) { + const { knowledgeAssetStorageContract, tokenId: knowledgeAssetTokenId } = + await this.blockchainModuleManager.getParanetKnowledgeCollectionLocator( + blockchain, + knowledgeAssetId, + ); + + const ual = this.ualService.deriveUAL( + blockchain, + knowledgeAssetStorageContract, + knowledgeAssetTokenId, + ); + + const isAlreadySynced = + await this.repositoryModuleManager.paranetSyncedAssetRecordExists(ual); + + // Skip already synced KAs + if (isAlreadySynced) { + continue; + } + + const isMissedAsset = + await this.repositoryModuleManager.missedParanetAssetRecordExists(ual); + + // Skip missed KAs as they are synced in the other function + if (isMissedAsset) { + continue; + } + + filteredKAs.push([ + ual, + blockchain, + knowledgeAssetStorageContract, + knowledgeAssetTokenId, + ]); + } + + if (filteredKAs.length > 0) { + const promises = filteredKAs.map( + ([syncKAUal, syncKABlockchain, syncKAContract, syncKATokenId]) => + this.syncAsset( + syncKAUal, + syncKABlockchain, + syncKAContract, + syncKATokenId, + paranetUAL, + paranetId, + paranetNodesAccessPolicy, + paranetRepository, + operationId, + false, // removeMissingAssetRecord + ), + ); + + const batchResults = await Promise.all(promises); + results.push(...batchResults); + } + } - return true; + const successfulCount = results.filter(Boolean).length; + return [successfulCount, results.length - successfulCount]; } /** diff --git a/src/commands/paranet/start-paranet-sync-commands.js b/src/commands/paranet/start-paranet-sync-commands.js index 4a5ba78321..eeabe6a70d 100644 --- a/src/commands/paranet/start-paranet-sync-commands.js +++ b/src/commands/paranet/start-paranet-sync-commands.js @@ -1,5 +1,9 @@ import Command from '../command.js'; -import { ERROR_TYPE, PARANET_SYNC_FREQUENCY_MILLS } from '../../constants/constants.js'; +import { + ERROR_TYPE, + PARANET_SYNC_FREQUENCY_MILLS, + OPERATION_ID_STATUS, +} from '../../constants/constants.js'; class StartParanetSyncCommands extends Command { constructor(ctx) { @@ -8,23 +12,35 @@ class StartParanetSyncCommands extends Command { this.ualService = ctx.ualService; this.blockchainModuleManager = ctx.blockchainModuleManager; this.repositoryModuleManager = ctx.repositoryModuleManager; + this.paranetService = ctx.paranetService; this.errorType = ERROR_TYPE.PARANET.START_PARANET_SYNC_ERROR; } async execute() { - const operationId = this.operationIdService.generateId(); - - this.logger.info( - `Paranet sync: Starting Paranet sync command for operation id: ${operationId}`, - ); - await this.commandExecutor.delete('paranetSyncCommand'); const promises = []; this.config.assetSync?.syncParanets.forEach(async (paranetUAL) => { + const operationId = this.operationIdService.generateId( + OPERATION_ID_STATUS.PARANET.PARANET_SYNC_START, + ); + + const { blockchain, contract, tokenId } = this.ualService.resolveUAL(paranetUAL); + const paranetId = this.paranetService.constructParanetId(contract, tokenId); + + const paranetMetadata = await this.blockchainModuleManager.getParanetMetadata( + blockchain, + paranetId, + ); + const commandData = { + blockchain, + contract, + tokenId, paranetUAL, + paranetId, + paranetMetadata, operationId, }; diff --git a/src/commands/protocols/ask/receiver/v1.0.0/v1-0-0-handle-ask-request-command.js b/src/commands/protocols/ask/receiver/v1.0.0/v1-0-0-handle-ask-request-command.js new file mode 100644 index 0000000000..052a17f336 --- /dev/null +++ b/src/commands/protocols/ask/receiver/v1.0.0/v1-0-0-handle-ask-request-command.js @@ -0,0 +1,86 @@ +import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js'; +import { + ERROR_TYPE, + NETWORK_MESSAGE_TYPES, + OPERATION_ID_STATUS, +} from '../../../../../constants/constants.js'; + +class HandleAskRequestCommand extends HandleProtocolMessageCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.askService; + this.tripleStoreService = ctx.tripleStoreService; + this.pendingStorageService = ctx.pendingStorageService; + this.paranetService = ctx.paranetService; + + this.errorType = ERROR_TYPE.ASK.ASK_REQUEST_REMOTE_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.ASK.ASK_REMOTE_START; + this.operationEndEvent = OPERATION_ID_STATUS.ASK.ASK_REMOTE_END; + this.prepareMessageStartEvent = OPERATION_ID_STATUS.ASK.ASK_REMOTE_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = OPERATION_ID_STATUS.ASK.ASK_REMOTE_PREPARE_MESSAGE_END; + this.sendMessageResponseStartEvent = OPERATION_ID_STATUS.ASK.ASK_REMOTE_SEND_MESSAGE_START; + this.sendMessageResponseEndEvent = OPERATION_ID_STATUS.ASK.ASK_REMOTE_SEND_MESSAGE_END; + this.removeCachedSessionStartEvent = + OPERATION_ID_STATUS.ASK.ASK_REMOTE_REMOVE_CACHED_SESSION_START; + this.removeCachedSessionEndEvent = + OPERATION_ID_STATUS.ASK.ASK_REMOTE_REMOVE_CACHED_SESSION_END; + } + + async prepareMessage(commandData) { + const { ual, operationId, blockchain } = commandData; + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.ASK.ASK_REMOTE_START, + ); + + const knowledgeCollectionExistsInUnifiedGraph = + await this.tripleStoreService.checkIfKnowledgeCollectionExistsInUnifiedGraph(ual); + if (knowledgeCollectionExistsInUnifiedGraph) { + await this.operationService.markOperationAsCompleted( + operationId, + blockchain, + knowledgeCollectionExistsInUnifiedGraph, + [ + OPERATION_ID_STATUS.ASK.ASK_FETCH_FROM_NODES_END, + OPERATION_ID_STATUS.ASK.ASK_END, + OPERATION_ID_STATUS.COMPLETED, + ], + ); + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.ASK.ASK_REMOTE_END, + ); + + return knowledgeCollectionExistsInUnifiedGraph + ? { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, + messageData: { knowledgeCollectionExistsInUnifiedGraph }, + } + : { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, + messageData: { errorMessage: `Unable to find knowledge collection ${ual}` }, + }; + } + + /** + * Builds default handleAskRequestCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'v1_0_0HandleAskRequestCommand', + delay: 0, + transactional: false, + errorType: ERROR_TYPE.ASK.ASK_REQUEST_REMOTE_ERROR, + }; + Object.assign(command, map); + return command; + } +} + +export default HandleAskRequestCommand; diff --git a/src/commands/protocols/ask/sender/ask-find-shard-command.js b/src/commands/protocols/ask/sender/ask-find-shard-command.js new file mode 100644 index 0000000000..e87fcfccca --- /dev/null +++ b/src/commands/protocols/ask/sender/ask-find-shard-command.js @@ -0,0 +1,42 @@ +import FindShardCommand from '../../common/find-shard-command.js'; +import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../constants/constants.js'; + +class AskFindShardCommand extends FindShardCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.askService; + + this.errorType = ERROR_TYPE.FIND_SHARD.ASK_FIND_SHARD_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.ASK.ASK_FIND_NODES_START; + this.operationEndEvent = OPERATION_ID_STATUS.ASK.ASK_FIND_NODES_END; + this.findShardNodesStartEvent = + OPERATION_ID_STATUS.ASK.ASK_FIND_NODES_FIND_SHARD_NODES_START; + this.findShardNodesEndEvent = OPERATION_ID_STATUS.ASK.ASK_FIND_NODES_FIND_SHARD_NODES_END; + this.processFoundNodesStartEvent = + OPERATION_ID_STATUS.ASK.ASK_FIND_NODES_PROCESS_FOUND_NODES_START; + this.processFoundNodesEndEvent = + OPERATION_ID_STATUS.ASK.ASK_FIND_NODES_PROCESS_FOUND_NODES_END; + } + + // eslint-disable-next-line no-unused-vars + getOperationCommandSequence(nodePartOfShard, commandData) { + return []; + } + + /** + * Builds default askFindShardCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'askFindShardCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default AskFindShardCommand; diff --git a/src/commands/protocols/ask/sender/ask-schedule-messages-command.js b/src/commands/protocols/ask/sender/ask-schedule-messages-command.js new file mode 100644 index 0000000000..23f0457f6d --- /dev/null +++ b/src/commands/protocols/ask/sender/ask-schedule-messages-command.js @@ -0,0 +1,39 @@ +import ProtocolScheduleMessagesCommand from '../../common/protocol-schedule-messages-command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../../constants/constants.js'; + +class AskScheduleMessagesCommand extends ProtocolScheduleMessagesCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.askService; + + this.errorType = ERROR_TYPE.ASK.ASK_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.ASK.ASK_FETCH_FROM_NODES_START; + this.operationEndEvent = OPERATION_ID_STATUS.ASK.ASK_FETCH_FROM_NODES_END; + } + + getNextCommandData(command) { + return { + ...super.getNextCommandData(command), + ual: command.data.ual, + operationId: command.data.operationId, + minimumNumberOfNodeReplications: command.data.minimumNumberOfNodeReplications, + }; + } + + /** + * Builds default askScheduleMessagesCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'askScheduleMessagesCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default AskScheduleMessagesCommand; diff --git a/src/commands/protocols/ask/sender/network-ask-command.js b/src/commands/protocols/ask/sender/network-ask-command.js new file mode 100644 index 0000000000..e4be39743b --- /dev/null +++ b/src/commands/protocols/ask/sender/network-ask-command.js @@ -0,0 +1,31 @@ +import NetworkProtocolCommand from '../../common/network-protocol-command.js'; +import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../constants/constants.js'; + +class NetworkAskCommand extends NetworkProtocolCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.askService; + this.ualService = ctx.ualService; + + this.errorType = ERROR_TYPE.ASK.ASK_NETWORK_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.ASK.ASK_NETWORK_START; + this.operationEndEvent = OPERATION_ID_STATUS.ASK.ASK_NETWORK_END; + } + + /** + * Builds default networkGetCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'networkAskCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default NetworkAskCommand; diff --git a/src/commands/protocols/ask/sender/v1.0.0/v1-0-0-ask-request-command.js b/src/commands/protocols/ask/sender/v1.0.0/v1-0-0-ask-request-command.js new file mode 100644 index 0000000000..88f6c7f720 --- /dev/null +++ b/src/commands/protocols/ask/sender/v1.0.0/v1-0-0-ask-request-command.js @@ -0,0 +1,86 @@ +import ProtocolRequestCommand from '../../../common/protocol-request-command.js'; +import { + NETWORK_MESSAGE_TIMEOUT_MILLS, + ERROR_TYPE, + OPERATION_REQUEST_STATUS, + OPERATION_STATUS, + OPERATION_ID_STATUS, +} from '../../../../../constants/constants.js'; + +class AskRequestCommand extends ProtocolRequestCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.askService; + this.operationIdService = ctx.operationIdService; + + this.errorType = ERROR_TYPE.ASK.ASK_REQUEST_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.ASK.ASK_REQUEST_START; + this.operationEndEvent = OPERATION_ID_STATUS.ASK.ASK_REQUEST_END; + this.prepareMessageStartEvent = OPERATION_ID_STATUS.ASK.ASK_REQUEST_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = OPERATION_ID_STATUS.ASK.ASK_REQUEST_PREPARE_MESSAGE_END; + this.sendMessageStartEvent = OPERATION_ID_STATUS.ASK.ASK_REQUEST_SEND_MESSAGE_START; + this.sendMessageEndEvent = OPERATION_ID_STATUS.ASK.ASK_REQUEST_SEND_MESSAGE_END; + } + + async shouldSendMessage(command) { + const { operationId } = command.data; + + const { status } = await this.operationService.getOperationStatus(operationId); + + if (status === OPERATION_STATUS.IN_PROGRESS) { + return true; + } + this.logger.trace( + `${command.name} skipped for operationId: ${operationId} with status ${status}`, + ); + + return false; + } + + async prepareMessage(command) { + const { ual, operationId, numberOfFoundNodes, blockchain } = command.data; + + return { + ual, + operationId, + numberOfFoundNodes, + blockchain, + }; + } + + messageTimeout() { + return NETWORK_MESSAGE_TIMEOUT_MILLS.ASK.REQUEST; + } + + async handleAck(command, responseData) { + if (responseData?.knowledgeCollectionExistsInUnifiedGraph) { + await this.operationService.processResponse( + command, + OPERATION_REQUEST_STATUS.COMPLETED, + responseData, + ); + + return ProtocolRequestCommand.empty(); + } + + return this.handleNack(command, responseData); + } + + /** + * Builds default askRequestCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'v1_0_0AskRequestCommand', + delay: 0, + retries: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default AskRequestCommand; diff --git a/src/commands/protocols/common/epoch-check/blockchain-epoch-check-command.js b/src/commands/protocols/common/epoch-check/blockchain-epoch-check-command.js deleted file mode 100644 index 7932f684c7..0000000000 --- a/src/commands/protocols/common/epoch-check/blockchain-epoch-check-command.js +++ /dev/null @@ -1,523 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import Command from '../../../command.js'; -import { - COMMAND_QUEUE_PARALLELISM, - COMMAND_RETRIES, - TRANSACTION_CONFIRMATIONS, - OPERATION_ID_STATUS, - ERROR_TYPE, - TRIPLE_STORE_REPOSITORIES, - SERVICE_AGREEMENT_START_TIME_DELAY_FOR_COMMITS_SECONDS, - SERVICE_AGREEMENT_SOURCES, -} from '../../../../constants/constants.js'; - -class BlockchainEpochCheckCommand extends Command { - constructor(ctx) { - super(ctx); - this.commandExecutor = ctx.commandExecutor; - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.networkModuleManager = ctx.networkModuleManager; - this.shardingTableService = ctx.shardingTableService; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.serviceAgreementService = ctx.serviceAgreementService; - this.fileService = ctx.fileService; - this.proximityScoringService = ctx.proximityScoringService; - this.hashingService = ctx.hashingService; - this.tripleStoreService = ctx.tripleStoreService; - - this.errorType = ERROR_TYPE.COMMIT_PROOF.BLOCKCHAIN_EPOCH_CHECK_ERROR; - } - - async execute(command) { - const { operationId, blockchain } = command.data; - this.logger.info( - `Epoch check: Starting blockchain epoch check command for ${blockchain} with operation id: ${operationId}`, - ); - - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.COMMIT_PROOF.EPOCH_CHECK_START, - operationId, - blockchain, - ); - - const commitWindowDurationPerc = - await this.blockchainModuleManager.getCommitWindowDurationPerc(blockchain); - const proofWindowDurationPerc = - await this.blockchainModuleManager.getProofWindowDurationPerc(blockchain); - let totalTransactions = await this.calculateTotalTransactions( - blockchain, - commitWindowDurationPerc, - proofWindowDurationPerc, - command.period, - ); - - const numberOfBlockchains = this.blockchainModuleManager.getImplementationNames().length; - - // We don't expect to have this many transactions in one epoch check window. - // This is just to make sure we don't schedule too many commands and block the queue - // TODO: find general solution for all commands scheduling blockchain transactions - totalTransactions = Math.min( - totalTransactions, - Math.floor(COMMAND_QUEUE_PARALLELISM / numberOfBlockchains), - ); - - const transactionQueueLength = - this.blockchainModuleManager.getTotalTransactionQueueLength(blockchain); - if (transactionQueueLength >= totalTransactions) { - this.logger.debug( - `Epoch check: Current transaction queue length is ${transactionQueueLength}, ` + - `exceeding the maximum total transactions: ${totalTransactions} for ${blockchain}` + - `with operation id: ${operationId}`, - ); - return Command.repeat(); - } - - totalTransactions -= transactionQueueLength; - - const [r0, r2, totalNodesNumber, minStake, maxStake] = await Promise.all([ - this.blockchainModuleManager.getR0(blockchain), - this.blockchainModuleManager.getR2(blockchain), - this.repositoryModuleManager.getPeersCount(blockchain), - this.blockchainModuleManager.getMinimumStake(blockchain), - this.blockchainModuleManager.getMaximumStake(blockchain), - ]); - - await Promise.all([ - this.scheduleSubmitCommitCommands( - blockchain, - Math.floor(totalTransactions / 2), - commitWindowDurationPerc, - r0, - r2, - totalNodesNumber, - minStake, - maxStake, - ), - this.scheduleCalculateProofsCommands( - blockchain, - Math.ceil(totalTransactions / 2), - proofWindowDurationPerc, - r0, - ), - ]); - - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.COMMIT_PROOF.EPOCH_CHECK_END, - operationId, - blockchain, - ); - - return Command.repeat(); - } - - async scheduleSubmitCommitCommands( - blockchain, - maxTransactions, - commitWindowDurationPerc, - r0, - r2, - totalNodesNumber, - minStake, - maxStake, - ) { - const peerRecord = await this.repositoryModuleManager.getPeerRecord( - this.networkModuleManager.getPeerId().toB58String(), - blockchain, - ); - - if (peerRecord == null) return; - - const ask = this.blockchainModuleManager.convertToWei(blockchain, peerRecord.ask); - - const timestamp = await this.blockchainModuleManager.getBlockchainTimestamp(blockchain); - const eligibleAgreementForSubmitCommit = - await this.repositoryModuleManager.getEligibleAgreementsForSubmitCommit( - timestamp, - blockchain, - commitWindowDurationPerc, - SERVICE_AGREEMENT_START_TIME_DELAY_FOR_COMMITS_SECONDS[process.env.NODE_ENV], - ); - this.logger.info( - `Epoch check: Found ${eligibleAgreementForSubmitCommit.length} eligible agreements for submit commit for blockchain: ${blockchain}`, - ); - const scheduleSubmitCommitCommands = []; - const updateServiceAgreementsLastCommitEpoch = []; - for (const serviceAgreement of eligibleAgreementForSubmitCommit) { - try { - if (scheduleSubmitCommitCommands.length >= maxTransactions) { - this.logger.warn( - `Epoch check: not scheduling new commits. Submit commit command length: ${scheduleSubmitCommitCommands.length}, max number of transactions: ${maxTransactions} for blockchain: ${blockchain}`, - ); - break; - } - - if (serviceAgreement.scoreFunctionId === 0) { - // corrupted service agreement data fetch new and store - const blockchainAgreementData = - await this.blockchainModuleManager.getAgreementData( - blockchain, - serviceAgreement.agreementId, - ); - if (!blockchainAgreementData) { - this.logger.warn( - `Epoch check: Unable to fetch agreement data for agreement id: ${serviceAgreement.agreementId}, blockchain id: ${blockchain}. Agreement will be retried in next epoch check command.`, - ); - continue; - } - await this.repositoryModuleManager.updateServiceAgreementRecord( - blockchain, - serviceAgreement.assetStorageContractAddress, - serviceAgreement.tokenId, - serviceAgreement.agreementId, - blockchainAgreementData.startTime, - serviceAgreement.epochsNumber, - serviceAgreement.epochLength, - blockchainAgreementData.scoreFunctionId, - blockchainAgreementData.proofWindowOffsetPerc, - serviceAgreement.hashFunctionId, - serviceAgreement.keyword, - serviceAgreement.assertionId, - serviceAgreement.stateIndex, - SERVICE_AGREEMENT_SOURCES.BLOCKCHAIN, - serviceAgreement.lastCommitEpoch, - serviceAgreement.lastProofEpoch, - ); - serviceAgreement.startTime = blockchainAgreementData.startTime; - serviceAgreement.scoreFunctionId = blockchainAgreementData.scoreFunctionId; - serviceAgreement.proofWindowOffsetPerc = - blockchainAgreementData.proofWindowOffsetPerc; - } - - const neighbourhood = await this.shardingTableService.findNeighbourhood( - blockchain, - serviceAgreement.keyword, - r2, - serviceAgreement.hashFunctionId, - serviceAgreement.scoreFunctionId, - ); - - let neighbourhoodEdges = null; - if (serviceAgreement.scoreFunctionId === 2) { - neighbourhoodEdges = await this.shardingTableService.getNeighboorhoodEdgeNodes( - neighbourhood, - blockchain, - serviceAgreement.hashFunctionId, - serviceAgreement.scoreFunctionId, - serviceAgreement.keyword, - ); - } - - if (!neighbourhoodEdges && serviceAgreement.scoreFunctionId === 2) { - this.logger.warn( - `Epoch check: unable to find neighbourhood edges for agreement id: ${serviceAgreement.agreementId} for blockchain: ${blockchain}`, - ); - continue; - } - - const rank = await this.serviceAgreementService.calculateRank( - blockchain, - serviceAgreement.keyword, - serviceAgreement.hashFunctionId, - serviceAgreement.scoreFunctionId, - r2, - neighbourhood, - neighbourhoodEdges, - totalNodesNumber, - minStake, - maxStake, - ); - - updateServiceAgreementsLastCommitEpoch.push( - this.repositoryModuleManager.updateServiceAgreementLastCommitEpoch( - serviceAgreement.agreementId, - serviceAgreement.currentEpoch, - ), - ); - - if (rank == null) { - this.logger.trace( - `Epoch check: Node not in R2: ${r2} for the Service Agreement with the ID: ${serviceAgreement.agreementId}. Skipping scheduling submitCommitCommand for blockchain: ${blockchain}`, - ); - continue; - } - - if (rank >= r0) { - this.logger.trace( - `Epoch check: Calculated rank: ${ - rank + 1 - }. Node not in R0: ${r0} for the Service Agreement with the ID: ${ - serviceAgreement.agreementId - }. Skipping scheduling submitCommitCommand for blockchain: ${blockchain}`, - ); - continue; - } - - // If proof was ever sent = data is present in the Triple Store - let isAssetSynced = Boolean(serviceAgreement.lastProofEpoch); - if (!isAssetSynced) { - // Else: check Public Current Repository - isAssetSynced = await this.tripleStoreService.assertionExists( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - serviceAgreement.assertionId, - ); - } - - // If data is not in the Triple Store, check if ask satisfied - if (!isAssetSynced) { - const agreementData = await this.blockchainModuleManager.getAgreementData( - blockchain, - serviceAgreement.agreementId, - ); - if (!agreementData) { - this.logger.warn( - `Unable to fetch agreement data in blockchain epoch check command for agreement id: ${serviceAgreement.agreementId}. Skipping scheduling submit commit command for blockchain: ${blockchain}`, - ); - continue; - } - const blockchainAssertionSize = - await this.blockchainModuleManager.getAssertionSize( - blockchain, - serviceAgreement.assertionId, - ); - - const serviceAgreementBid = await this.serviceAgreementService.calculateBid( - blockchain, - blockchainAssertionSize, - agreementData, - r0, - ); - - if (serviceAgreementBid.lt(ask)) { - this.logger.trace( - `Epoch check: Ask (${ask.toString()} wei) isn't satisfied by the bid (${serviceAgreementBid.toString()} wei) for the Service Agreement with the ID: ${ - serviceAgreement.agreementId - }. Skipping scheduling submitCommitCommand for blockchain: ${blockchain}`, - ); - continue; - } - } - - this.logger.trace( - `Epoch check: Calculated rank: ${ - rank + 1 - }. Node in R0: ${r0} for the Service Agreement with the ID: ${ - serviceAgreement.agreementId - }. Scheduling submitCommitCommand for blockchain: ${blockchain}`, - ); - const closestNode = neighbourhood[0]; - scheduleSubmitCommitCommands.push( - this.scheduleSubmitCommitCommand( - serviceAgreement, - neighbourhoodEdges, - closestNode, - isAssetSynced, - ), - ); - } catch (error) { - this.logger.warn( - `Epoch check: Failed to schedule submitCommitCommand for the Service Agreement with the ID: ${serviceAgreement.agreementId} for blockchain: ${blockchain}. Error message: ${error.message}.`, - ); - continue; - } - } - await Promise.all([ - ...scheduleSubmitCommitCommands, - ...updateServiceAgreementsLastCommitEpoch, - ]); - } - - async scheduleCalculateProofsCommands( - blockchain, - maxTransactions, - proofWindowDurationPerc, - r0, - ) { - const timestamp = await this.blockchainModuleManager.getBlockchainTimestamp(blockchain); - const eligibleAgreementsForSubmitProofs = - await this.repositoryModuleManager.getEligibleAgreementsForSubmitProof( - timestamp, - blockchain, - proofWindowDurationPerc, - ); - this.logger.info( - `Epoch check: Found ${eligibleAgreementsForSubmitProofs.length} eligible agreements for submit proof for blockchain: ${blockchain}`, - ); - const scheduleSubmitProofCommands = []; - const updateServiceAgreementsLastProofEpoch = []; - for (const serviceAgreement of eligibleAgreementsForSubmitProofs) { - if (scheduleSubmitProofCommands.length >= maxTransactions) { - this.logger.warn( - `Epoch check: not scheduling new proofs. Submit proofs command length: ${scheduleSubmitProofCommands.length}, max number of transactions: ${maxTransactions} for blockchain: ${blockchain}`, - ); - break; - } - - try { - const eligibleForReward = await this.isEligibleForRewards( - blockchain, - serviceAgreement.agreementId, - serviceAgreement.currentEpoch, - serviceAgreement.stateIndex, - r0, - ); - if (eligibleForReward) { - this.logger.trace( - `Epoch check: Node is eligible for rewards for the Service Agreement with the ID: ${serviceAgreement.agreementId} for blockchain: ${blockchain}. Scheduling submitProofsCommand.`, - ); - - scheduleSubmitProofCommands.push( - this.scheduleSubmitProofsCommand(serviceAgreement), - ); - } else { - this.logger.trace( - `Epoch check: Node is not eligible for rewards for the Service Agreement with the ID: ${serviceAgreement.agreementId}. Skipping scheduling submitProofsCommand for blockchain: ${blockchain}`, - ); - } - updateServiceAgreementsLastProofEpoch.push( - this.repositoryModuleManager.updateServiceAgreementLastProofEpoch( - serviceAgreement.agreementId, - serviceAgreement.currentEpoch, - ), - ); - } catch (error) { - this.logger.warn( - `Epoch check: Failed to schedule submitProofsCommand for the Service Agreement with the ID: ${serviceAgreement.agreementId} for blockchain: ${blockchain}. Error message: ${error.message}.`, - ); - continue; - } - } - await Promise.all([ - ...scheduleSubmitProofCommands, - ...updateServiceAgreementsLastProofEpoch, - ]); - } - - async isEligibleForRewards(blockchain, agreementId, epoch, stateIndex, r0) { - const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); - const commits = await this.blockchainModuleManager.getTopCommitSubmissions( - blockchain, - agreementId, - epoch, - stateIndex, - ); - - for (const commit of commits.slice(0, r0)) { - if (Number(commit.identityId) === identityId && Number(commit.score) !== 0) { - return true; - } - } - - return false; - } - - async scheduleSubmitCommitCommand(agreement, neighbourhoodEdges, closestNode, isAssetSynced) { - const commandData = { - operationId: this.operationIdService.generateId(), - blockchain: agreement.blockchainId, - contract: agreement.assetStorageContractAddress, - tokenId: agreement.tokenId, - keyword: agreement.keyword, - hashFunctionId: agreement.hashFunctionId, - epoch: agreement.currentEpoch, - agreementId: agreement.agreementId, - assertionId: agreement.assertionId, - stateIndex: agreement.stateIndex, - closestNode: closestNode.index, - leftNeighborhoodEdge: neighbourhoodEdges?.leftEdge.index, - rightNeighborhoodEdge: neighbourhoodEdges?.rightEdge.index, - }; - - if (isAssetSynced) { - await this.commandExecutor.add({ - name: 'submitCommitCommand', - sequence: [], - retries: COMMAND_RETRIES.SUBMIT_COMMIT, - data: commandData, - transactional: false, - }); - } else { - await this.commandExecutor.add({ - name: 'simpleAssetSyncCommand', - sequence: ['submitCommitCommand'], - retries: COMMAND_RETRIES.SIMPLE_ASSET_SYNC, - data: commandData, - transactional: false, - }); - } - } - - async scheduleSubmitProofsCommand(agreement) { - const commandData = { - operationId: this.operationIdService.generateId(), - blockchain: agreement.blockchainId, - contract: agreement.assetStorageContractAddress, - tokenId: agreement.tokenId, - keyword: agreement.keyword, - hashFunctionId: agreement.hashFunctionId, - epoch: agreement.currentEpoch, - agreementId: agreement.agreementId, - assertionId: agreement.assertionId, - stateIndex: agreement.stateIndex, - }; - - return this.commandExecutor.add({ - name: 'submitProofsCommand', - sequence: [], - data: commandData, - retries: COMMAND_RETRIES.SUBMIT_PROOFS, - transactional: false, - }); - } - - async calculateTotalTransactions( - blockchain, - commitWindowDurationPerc, - proofWindowDurationPerc, - commandPeriod, - ) { - const epochLength = await this.blockchainModuleManager.getEpochLength(blockchain); - - const commitWindowDuration = (epochLength * commitWindowDurationPerc) / 100; - const proofWindowDuration = (epochLength * proofWindowDurationPerc) / 100; - - const totalTransactionTime = Math.min(commitWindowDuration, proofWindowDuration); - - const blockTime = this.blockchainModuleManager.getBlockTimeMillis(blockchain) / 1000; - const timePerTransaction = blockTime * TRANSACTION_CONFIRMATIONS; - - const totalTransactions = Math.floor(totalTransactionTime / timePerTransaction); - - const epochChecksInWindow = Math.floor(totalTransactionTime / (commandPeriod / 1000)); - - const transactionsPerEpochCheck = Math.floor(totalTransactions / epochChecksInWindow); - - const numberOfWallets = this.blockchainModuleManager.getPublicKeys().length; - - return transactionsPerEpochCheck * numberOfWallets; - } - - /** - * Recover system from failure - * @param error - */ - async recover() { - return Command.repeat(); - } - - /** - * Builds default epochCheckCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'blockchainEpochCheckCommand', - data: {}, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default BlockchainEpochCheckCommand; diff --git a/src/commands/protocols/common/epoch-check/epoch-check-command.js b/src/commands/protocols/common/epoch-check/epoch-check-command.js deleted file mode 100644 index ef9cb82087..0000000000 --- a/src/commands/protocols/common/epoch-check/epoch-check-command.js +++ /dev/null @@ -1,75 +0,0 @@ -import Command from '../../../command.js'; -import { ERROR_TYPE } from '../../../../constants/constants.js'; - -class EpochCheckCommand extends Command { - constructor(ctx) { - super(ctx); - this.commandExecutor = ctx.commandExecutor; - this.blockchainModuleManager = ctx.blockchainModuleManager; - - this.errorType = ERROR_TYPE.COMMIT_PROOF.EPOCH_CHECK_ERROR; - } - - calculateCommandPeriod() { - const devEnvironment = - process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test'; - - return devEnvironment ? 30_000 : 120_000; - } - - async execute() { - const operationId = this.operationIdService.generateId(); - - this.logger.info( - `Epoch check: Starting epoch check command for operation id: ${operationId}`, - ); - - await this.commandExecutor.delete('blockchainEpochCheckCommand'); - - await Promise.all( - this.blockchainModuleManager.getImplementationNames().map(async (blockchain) => { - const commandData = { - blockchain, - operationId, - }; - - return this.commandExecutor.add({ - name: 'blockchainEpochCheckCommand', - data: commandData, - period: this.calculateCommandPeriod(), - }); - }), - ); - - return Command.empty(); - } - - /** - * Recover system from failure - * @param command - * @param error - */ - async recover(command) { - this.logger.warn(`Failed to execute ${command.name}. Error: ${command.message}`); - - return Command.repeat(); - } - - /** - * Builds default epochCheckCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'epochCheckCommand', - data: {}, - transactional: false, - period: this.calculateCommandPeriod(), - }; - Object.assign(command, map); - return command; - } -} - -export default EpochCheckCommand; diff --git a/src/commands/protocols/common/find-curated-paranet-nodes-command.js b/src/commands/protocols/common/find-curated-paranet-nodes-command.js new file mode 100644 index 0000000000..6b2ceb65b4 --- /dev/null +++ b/src/commands/protocols/common/find-curated-paranet-nodes-command.js @@ -0,0 +1,124 @@ +import Command from '../../command.js'; +import { OPERATION_ID_STATUS } from '../../../constants/constants.js'; + +class FindCuratedParanetNodesCommand extends Command { + constructor(ctx) { + super(ctx); + this.operationService = ctx.getService; + this.networkModuleManager = ctx.networkModuleManager; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.shardingTableService = ctx.shardingTableService; + this.cryptoService = ctx.cryptoService; + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { operationId, blockchain, errorType, networkProtocols, paranetId, minAckResponses } = + command.data; + + this.errorType = errorType; + this.logger.debug( + `Searching for paranet (${paranetId}) node(s) for operationId: ${operationId}`, + ); + + // TODO: protocol selection + const paranetNodes = []; + const foundNodes = await this.findNodes(blockchain, operationId, paranetId); + for (const node of foundNodes) { + if (node.id !== this.networkModuleManager.getPeerId().toB58String()) { + paranetNodes.push({ id: node.id, protocol: networkProtocols[0] }); + } + } + + this.logger.debug( + `Found ${paranetNodes.length} paranet (${paranetId}) node(s) for operationId: ${operationId}`, + ); + this.logger.trace( + `Found paranet (${paranetId}) nodes: ${JSON.stringify( + paranetNodes.map((node) => node.id), + null, + 2, + )}`, + ); + + if (paranetNodes.length < minAckResponses) { + await this.handleError( + operationId, + blockchain, + `Unable to find enough paranet (${paranetId}) nodes for operationId: ${operationId}. Minimum number of nodes required: ${minAckResponses}`, + this.errorType, + true, + ); + return Command.empty(); + } + + return this.continueSequence( + { + ...command.data, + leftoverNodes: paranetNodes, + numberOfFoundNodes: paranetNodes.length, + }, + command.sequence, + ); + } + + async findNodes(blockchainId, operationId, paranetId) { + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchainId, + OPERATION_ID_STATUS.FIND_CURATED_PARANET_NODES_START, + ); + + const paranetCuratedNodes = await this.blockchainModuleManager.getParanetCuratedNodes( + blockchainId, + paranetId, + ); + const paranetCuratedPeerIds = paranetCuratedNodes.map((node) => + this.cryptoService.convertHexToAscii(node.nodeId), + ); + + const paranetCuratedNodePeerRecords = + await this.repositoryModuleManager.getPeerRecordsByIds( + blockchainId, + paranetCuratedPeerIds, + ); + const availableParanetNodes = paranetCuratedNodePeerRecords.filter( + (node) => node.lastSeen >= node.lastDialed, + ); + + const nodesFound = await Promise.all( + availableParanetNodes.map(({ peerId }) => + this.shardingTableService.findPeerAddressAndProtocols(peerId), + ), + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchainId, + OPERATION_ID_STATUS.FIND_CURATED_PARANET_NODES_END, + ); + + return nodesFound; + } + + /** + * Builds default findCuratedParanetNodesCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'findCuratedParanetNodesCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default FindCuratedParanetNodesCommand; diff --git a/src/commands/protocols/common/find-nodes-command.js b/src/commands/protocols/common/find-nodes-command.js deleted file mode 100644 index f11691fbd6..0000000000 --- a/src/commands/protocols/common/find-nodes-command.js +++ /dev/null @@ -1,134 +0,0 @@ -import Command from '../../command.js'; -import { OPERATION_ID_STATUS } from '../../../constants/constants.js'; - -class FindNodesCommand extends Command { - constructor(ctx) { - super(ctx); - this.networkModuleManager = ctx.networkModuleManager; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.shardingTableService = ctx.shardingTableService; - } - - /** - * Executes command and produces one or more events - * @param command - */ - async execute(command) { - const { - keyword, - operationId, - blockchain, - errorType, - networkProtocols, - hashFunctionId, - minAckResponses, - } = command.data; - const proximityScoreFunctionsPairId = command.data.proximityScoreFunctionsPairId ?? 1; - - this.errorType = errorType; - this.logger.debug( - `Searching for closest node(s) for operationId: ${operationId}, keyword: ${keyword}`, - ); - - // TODO: protocol selection - const closestNodes = []; - const foundNodes = await this.findNodes( - blockchain, - keyword, - operationId, - hashFunctionId, - proximityScoreFunctionsPairId, - ); - for (const node of foundNodes) { - if (node.id !== this.networkModuleManager.getPeerId().toB58String()) { - closestNodes.push({ id: node.id, protocol: networkProtocols[0] }); - } - } - - this.logger.debug( - `Found ${closestNodes.length} node(s) for operationId: ${operationId}, keyword: ${keyword}`, - ); - this.logger.trace( - `Found neighbourhood: ${JSON.stringify( - closestNodes.map((node) => node.id), - null, - 2, - )}`, - ); - - if (closestNodes.length < minAckResponses) { - await this.handleError( - operationId, - blockchain, - `Unable to find enough nodes for operationId: ${operationId}, keyword: ${keyword}. Minimum number of nodes required: ${minAckResponses}`, - this.errorType, - true, - ); - return Command.empty(); - } - - return this.continueSequence( - { - ...command.data, - leftoverNodes: closestNodes, - numberOfFoundNodes: closestNodes.length, - }, - command.sequence, - ); - } - - async findNodes( - blockchainId, - keyword, - operationId, - hashFunctionId, - proximityScoreFunctionsPairId, - ) { - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchainId, - OPERATION_ID_STATUS.FIND_NODES_START, - ); - const r2 = await this.blockchainModuleManager.getR2(blockchainId); - const closestNodes = await this.shardingTableService.findNeighbourhood( - blockchainId, - keyword, - r2, - hashFunctionId, - proximityScoreFunctionsPairId, - ); - - const availableNodes = closestNodes.filter((node) => node.lastSeen >= node.lastDialed); - - const nodesFound = await Promise.all( - availableNodes.map(({ peerId }) => - this.shardingTableService.findPeerAddressAndProtocols(peerId), - ), - ); - - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchainId, - OPERATION_ID_STATUS.FIND_NODES_END, - ); - - return nodesFound; - } - - /** - * Builds default findNodesCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'findNodesCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default FindNodesCommand; diff --git a/src/commands/protocols/common/find-shard-command.js b/src/commands/protocols/common/find-shard-command.js new file mode 100644 index 0000000000..34a6462168 --- /dev/null +++ b/src/commands/protocols/common/find-shard-command.js @@ -0,0 +1,156 @@ +import Command from '../../command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../constants/constants.js'; + +class FindShardCommand extends Command { + constructor(ctx) { + super(ctx); + this.networkModuleManager = ctx.networkModuleManager; + this.shardingTableService = ctx.shardingTableService; + this.errorType = ERROR_TYPE.FIND_SHARD.FIND_SHARD_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.FIND_NODES_START; + this.operationEndEvent = OPERATION_ID_STATUS.FIND_NODES_END; + this.findShardNodesStartEvent = OPERATION_ID_STATUS.FIND_NODES_FIND_SHARD_NODES_START; + this.findShardNodesEndEvent = OPERATION_ID_STATUS.FIND_NODES_FIND_SHARD_NODES_END; + this.processFoundNodesStartEvent = OPERATION_ID_STATUS.FIND_NODES_PROCESS_FOUND_NODES_START; + this.processFoundNodesEndEvent = OPERATION_ID_STATUS.FIND_NODES_PROCESS_FOUND_NODES_END; + } + + // eslint-disable-next-line no-unused-vars + getOperationCommandSequence(nodePartOfShard, commandData) { + return []; + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { operationId, blockchain, datasetRoot, minimumNumberOfNodeReplications } = + command.data; + this.logger.debug( + `Searching for shard for operationId: ${operationId}, dataset root: ${datasetRoot}`, + ); + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationStartEvent, + ); + + this.minAckResponses = this.operationService.getMinAckResponses( + minimumNumberOfNodeReplications, + ); + + const networkProtocols = this.operationService.getNetworkProtocols(); + + const shardNodes = []; + let nodePartOfShard = false; + const currentPeerId = this.networkModuleManager.getPeerId().toB58String(); + + this.operationIdService.emitChangeEvent( + this.findShardNodesStartEvent, + operationId, + blockchain, + ); + const foundNodes = await this.findShardNodes(blockchain); + this.operationIdService.emitChangeEvent( + this.findShardNodesEndEvent, + operationId, + blockchain, + ); + + this.operationIdService.emitChangeEvent( + this.processFoundNodesStartEvent, + operationId, + blockchain, + ); + for (const node of foundNodes) { + if (node.id === currentPeerId) { + nodePartOfShard = true; + } else { + shardNodes.push({ id: node.id, protocol: networkProtocols[0] }); + } + } + this.operationIdService.emitChangeEvent( + this.processFoundNodesEndEvent, + operationId, + blockchain, + ); + + const commandSequence = this.getOperationCommandSequence(nodePartOfShard, command.data); + + command.sequence.push(...commandSequence); + + this.logger.debug( + `Found ${ + shardNodes.length + (nodePartOfShard ? 1 : 0) + } node(s) for operationId: ${operationId}`, + ); + // TODO: Log local node + this.logger.trace( + `Found shard: ${JSON.stringify( + shardNodes.map((node) => node.id), + null, + 2, + )}`, + ); + + if (shardNodes.length + (nodePartOfShard ? 1 : 0) < this.minAckResponses) { + await this.handleError( + operationId, + blockchain, + `Unable to find enough nodes for operationId: ${operationId}. Minimum number of nodes required: ${this.minAckResponses}`, + this.errorType, + true, + ); + return Command.empty(); + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationEndEvent, + ); + + return this.continueSequence( + { + ...command.data, + leftoverNodes: shardNodes, + numberOfFoundNodes: shardNodes.length + (nodePartOfShard ? 1 : 0), + }, + command.sequence, + ); + } + + async findShardNodes(blockchainId) { + const shardNodes = await this.shardingTableService.findShard( + blockchainId, + true, // filter inactive nodes + ); + + // TODO: Optimize this so it's returned by shardingTableService.findShard + const nodesFound = await Promise.all( + shardNodes.map(({ peerId }) => + this.shardingTableService.findPeerAddressAndProtocols(peerId), + ), + ); + + return nodesFound; + } + + /** + * Builds default findShardCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'findShardCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default FindShardCommand; diff --git a/src/commands/protocols/common/handle-protocol-message-command.js b/src/commands/protocols/common/handle-protocol-message-command.js index 4477362614..108554bc8a 100644 --- a/src/commands/protocols/common/handle-protocol-message-command.js +++ b/src/commands/protocols/common/handle-protocol-message-command.js @@ -1,5 +1,5 @@ import Command from '../../command.js'; -import { BYTES_IN_KILOBYTE, NETWORK_MESSAGE_TYPES } from '../../../constants/constants.js'; +import { NETWORK_MESSAGE_TYPES, OPERATION_ID_STATUS } from '../../../constants/constants.js'; class HandleProtocolMessageCommand extends Command { constructor(ctx) { @@ -9,8 +9,22 @@ class HandleProtocolMessageCommand extends Command { this.operationIdService = ctx.operationIdService; this.shardingTableService = ctx.shardingTableService; this.blockchainModuleManager = ctx.blockchainModuleManager; - this.serviceAgreementService = ctx.serviceAgreementService; this.repositoryModuleManager = ctx.repositoryModuleManager; + + this.operationStartEvent = OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_START; + this.operationEndEvent = OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_END; + this.prepareMessageStartEvent = + OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = + OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_PREPARE_MESSAGE_END; + this.sendMessageResponseStartEvent = + OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_SEND_MESSAGE_RESPONSE_START; + this.sendMessageResponseEndEvent = + OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_SEND_MESSAGE_RESPONSE_END; + this.removeCachedSessionStartEvent = + OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_REMOVE_CACHED_SESSION_START; + this.removeCachedSessionEndEvent = + OPERATION_ID_STATUS.HANDLE_PROTOCOL_MESSAGE_REMOVE_CACHED_SESSION_END; } /** @@ -18,18 +32,44 @@ class HandleProtocolMessageCommand extends Command { * @param command */ async execute(command) { - const { remotePeerId, operationId, keywordUuid, protocol } = command.data; + const { remotePeerId, operationId, protocol, blockchain } = command.data; + + this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationStartEvent, + ); try { + this.operationIdService.emitChangeEvent( + this.prepareMessageStartEvent, + operationId, + blockchain, + ); const { messageType, messageData } = await this.prepareMessage(command.data); + this.operationIdService.emitChangeEvent( + this.prepareMessageEndEvent, + operationId, + blockchain, + ); + + this.operationIdService.emitChangeEvent( + this.sendMessageResponseStartEvent, + operationId, + blockchain, + ); await this.networkModuleManager.sendMessageResponse( protocol, remotePeerId, messageType, operationId, - keywordUuid, messageData, ); + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationEndEvent, + ); } catch (error) { if (command.retries) { this.logger.warn(error.message); @@ -38,7 +78,23 @@ class HandleProtocolMessageCommand extends Command { await this.handleError(error.message, command); } - this.networkModuleManager.removeCachedSession(operationId, keywordUuid, remotePeerId); + this.operationIdService.emitChangeEvent( + this.removeCachedSessionStartEvent, + operationId, + blockchain, + ); + this.networkModuleManager.removeCachedSession(operationId, remotePeerId); + this.operationIdService.emitChangeEvent( + this.removeCachedSessionEndEvent, + operationId, + blockchain, + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationEndEvent, + ); return Command.empty(); } @@ -47,39 +103,23 @@ class HandleProtocolMessageCommand extends Command { throw Error('prepareMessage not implemented'); } - async validateNeighborhood( - blockchain, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - ual, - ) { - const closestNodes = await this.shardingTableService.findNeighbourhood( - blockchain, - keyword, - await this.blockchainModuleManager.getR2(blockchain), - hashFunctionId, - proximityScoreFunctionsPairId, - ); + async validateShard(blockchain) { const peerId = this.networkModuleManager.getPeerId().toB58String(); - for (const { peerId: otherPeerId } of closestNodes) { - if (otherPeerId === peerId) { - return true; - } - } - this.logger.warn( - `Invalid neighborhood for ual: ${ual} on blockchain: ${blockchain} with hashFunctionId: ${hashFunctionId}, proximityScoreFunctionsPairId: ${proximityScoreFunctionsPairId}`, + const isNodePartOfShard = await this.shardingTableService.isNodePartOfShard( + blockchain, + peerId, ); - return false; + return isNodePartOfShard; } async validateAssertionId(blockchain, contract, tokenId, assertionId, ual) { - const blockchainAssertionId = await this.blockchainModuleManager.getLatestAssertionId( - blockchain, - contract, - tokenId, - ); + const blockchainAssertionId = + await this.blockchainModuleManager.getKnowledgeCollectionMerkleRoot( + blockchain, + contract, + tokenId, + ); if (blockchainAssertionId !== assertionId) { throw Error( `Invalid assertion id for asset ${ual}. Received value from blockchain: ${blockchainAssertionId}, received value from request: ${assertionId}`, @@ -87,158 +127,37 @@ class HandleProtocolMessageCommand extends Command { } } - async validateBid( - contract, - tokenId, - keyword, - hashFunctionId, - blockchain, - assertionId, - operationId, - ) { - const getAgreementData = async () => { - const agreementId = this.serviceAgreementService.generateId( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - ); - this.logger.info( - `Calculated agreement id: ${agreementId} for contract: ${contract}, token id: ${tokenId}, keyword: ${keyword}, hash function id: ${hashFunctionId}, operationId: ${operationId}`, - ); - - const agreementData = await this.blockchainModuleManager.getAgreementData( - blockchain, - agreementId, - ); - - return { - agreementId, - agreementData, - }; - }; - - const getAsk = async () => { - const peerRecord = await this.repositoryModuleManager.getPeerRecord( - this.networkModuleManager.getPeerId().toB58String(), - blockchain, - ); - - return this.blockchainModuleManager.convertToWei(blockchain, peerRecord.ask); - }; - - const [{ agreementId, agreementData }, blockchainAssertionSize, r0, ask] = - await Promise.all([ - getAgreementData(), - this.blockchainModuleManager.getAssertionSize(blockchain, assertionId), - this.blockchainModuleManager.getR0(blockchain), - getAsk(), - ]); - const blockchainAssertionSizeInKb = blockchainAssertionSize / BYTES_IN_KILOBYTE; - if (!agreementData) { - this.logger.warn( - `Unable to fetch agreement data in handle protocol messsage command for agreement id: ${agreementId}, blockchain id: ${blockchain}`, - ); - return { - errorMessage: 'Unable to fetch agreement data.', - agreementId, - agreementData, - }; - } - if (blockchainAssertionSizeInKb > this.config.maximumAssertionSizeInKb) { + async validateReceivedData(operationId, datasetRoot, dataset, blockchain, isOperationV0) { + this.logger.trace(`Validating shard for datasetRoot: ${datasetRoot}`); + const isShardValid = await this.validateShard(blockchain); + if (!isShardValid) { this.logger.warn( - `The size of the received assertion exceeds the maximum limit allowed.. Maximum allowed assertion size in kb: ${this.config.maximumAssertionSizeInKb}, assertion size read from blockchain in kb: ${blockchainAssertionSizeInKb}`, + `Invalid shard on blockchain: ${blockchain}, operationId: ${operationId}`, ); - return { - errorMessage: - 'The size of the received assertion exceeds the maximum limit allowed.', - agreementId, - agreementData, - }; - } - - const serviceAgreementBid = await this.serviceAgreementService.calculateBid( - blockchain, - blockchainAssertionSize, - agreementData, - r0, - ); - - const bidAskLog = `Service agreement bid: ${serviceAgreementBid}, ask: ${ask}, operationId: ${operationId}`; - this.logger.trace(bidAskLog); - - return { - errorMessage: ask.lte(serviceAgreementBid) ? null : bidAskLog, - agreementId, - agreementData, - }; - } - - async validateReceivedData( - operationId, - assertionId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - ) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - - this.logger.trace(`Validating neighborhood for ual: ${ual}`); - if ( - !(await this.validateNeighborhood( - blockchain, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - ual, - )) - ) { return { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, messageData: { errorMessage: 'Invalid neighbourhood' }, }; } - this.logger.trace(`Validating assertion with ual: ${ual}`); - await this.validateAssertionId(blockchain, contract, tokenId, assertionId, ual); - this.logger.trace(`Validating bid for asset with ual: ${ual}`); - const { errorMessage, agreementId, agreementData } = await this.validateBid( - contract, - tokenId, - keyword, - hashFunctionId, - blockchain, - assertionId, - operationId, - ); - - if (errorMessage) { - return { - messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, - messageData: { errorMessage }, - }; + if (!isOperationV0) { + try { + await this.validationService.validateDatasetRoot(dataset, datasetRoot); + } catch (error) { + return { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, + messageData: { + errorMessage: error.message, + }, + }; + } } - await this.operationIdService.cacheOperationIdData(operationId, { - assertionId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - agreementId, - agreementData, - }); - return { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: {} }; } async handleError(errorMessage, command) { - const { operationId, blockchain, remotePeerId, keywordUuid, protocol } = command.data; + const { operationId, blockchain, remotePeerId, protocol } = command.data; await super.handleError(operationId, blockchain, errorMessage, this.errorType, true); await this.networkModuleManager.sendMessageResponse( @@ -246,10 +165,9 @@ class HandleProtocolMessageCommand extends Command { remotePeerId, NETWORK_MESSAGE_TYPES.RESPONSES.NACK, operationId, - keywordUuid, { errorMessage }, ); - this.networkModuleManager.removeCachedSession(operationId, keywordUuid, remotePeerId); + this.networkModuleManager.removeCachedSession(operationId, remotePeerId); } } diff --git a/src/commands/protocols/common/network-protocol-command.js b/src/commands/protocols/common/network-protocol-command.js index 6c3aab9c15..8a2900514f 100644 --- a/src/commands/protocols/common/network-protocol-command.js +++ b/src/commands/protocols/common/network-protocol-command.js @@ -1,11 +1,15 @@ import Command from '../../command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../constants/constants.js'; class NetworkProtocolCommand extends Command { constructor(ctx) { super(ctx); this.commandExecutor = ctx.commandExecutor; this.blockchainModuleManager = ctx.blockchainModuleManager; - this.serviceAgreementService = ctx.serviceAgreementService; + + this.errorType = ERROR_TYPE.NETWORK_PROTOCOL_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.NETWORK_PROTOCOL_START; + this.operationEndEvent = OPERATION_ID_STATUS.NETWORK_PROTOCOL_END; } /** @@ -13,62 +17,43 @@ class NetworkProtocolCommand extends Command { * @param command */ async execute(command) { - const { blockchain, contract, tokenId, hashFunctionId } = command.data; + const { blockchain, operationId, minimumNumberOfNodeReplications, batchSize } = + command.data; - const keywords = await this.getKeywords(command); - const batchSize = await this.getBatchSize(blockchain); - const minAckResponses = await this.getMinAckResponses(blockchain); + this.operationIdService.emitChangeEvent(this.operationStartEvent, operationId, blockchain); - const serviceAgreementId = this.serviceAgreementService.generateId( - blockchain, - contract, - tokenId, - keywords[0], - hashFunctionId, + const batchSizePar = this.operationService.getBatchSize(batchSize); + const minAckResponses = this.operationService.getMinAckResponses( + minimumNumberOfNodeReplications, ); - const proximityScoreFunctionsPairId = - await this.blockchainModuleManager.getAgreementScoreFunctionId( - blockchain, - serviceAgreementId, - ); const commandSequence = [ - 'findNodesCommand', `${this.operationService.getOperationName()}ScheduleMessagesCommand`, ]; - const addCommandPromises = keywords.map((keyword) => - this.commandExecutor.add({ - name: commandSequence[0], - sequence: commandSequence.slice(1), - delay: 0, - data: { - ...command.data, - keyword, - batchSize, - minAckResponses, - errorType: this.errorType, - networkProtocols: this.operationService.getNetworkProtocols(), - proximityScoreFunctionsPairId, - }, - transactional: false, - }), - ); + await this.commandExecutor.add({ + name: commandSequence[0], + sequence: commandSequence.slice(1), + delay: 0, + data: { + ...command.data, + batchSize: batchSizePar, + minAckResponses, + errorType: this.errorType, + }, + transactional: false, + }); - await Promise.all(addCommandPromises); + this.operationIdService.emitChangeEvent(this.operationEndEvent, operationId, blockchain); return Command.empty(); } - async getKeywords() { - throw Error('getKeywords not implemented'); - } - - async getBatchSize() { + getBatchSize() { throw Error('getBatchSize not implemented'); } - async getMinAckResponses() { + getMinAckResponses() { throw Error('getMinAckResponses not implemented'); } diff --git a/src/commands/protocols/common/protocol-init-command.js b/src/commands/protocols/common/protocol-init-command.js deleted file mode 100644 index 6eac043b01..0000000000 --- a/src/commands/protocols/common/protocol-init-command.js +++ /dev/null @@ -1,31 +0,0 @@ -import ProtocolMessageCommand from './protocol-message-command.js'; -import { NETWORK_MESSAGE_TYPES } from '../../../constants/constants.js'; - -class ProtocolInitCommand extends ProtocolMessageCommand { - async prepareMessage(command) { - const { assertionId, contract, tokenId, keyword, hashFunctionId } = command.data; - const proximityScoreFunctionsPairId = command.data.proximityScoreFunctionsPairId ?? 1; - - // TODO: Backwards compatibility, send blockchain without chainId - const blockchain = command.data.blockchain.split(':')[0]; - - return { - assertionId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - }; - } - - async execute(command) { - return this.executeProtocolMessageCommand( - command, - NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_INIT, - ); - } -} - -export default ProtocolInitCommand; diff --git a/src/commands/protocols/common/protocol-message-command.js b/src/commands/protocols/common/protocol-message-command.js index b0ee5c48b9..6651e4a167 100644 --- a/src/commands/protocols/common/protocol-message-command.js +++ b/src/commands/protocols/common/protocol-message-command.js @@ -1,18 +1,38 @@ -import { v5 as uuidv5 } from 'uuid'; import Command from '../../command.js'; -import { NETWORK_MESSAGE_TYPES, OPERATION_REQUEST_STATUS } from '../../../constants/constants.js'; +import { + NETWORK_MESSAGE_TYPES, + OPERATION_REQUEST_STATUS, + OPERATION_ID_STATUS, +} from '../../../constants/constants.js'; class ProtocolMessageCommand extends Command { constructor(ctx) { super(ctx); this.networkModuleManager = ctx.networkModuleManager; + + this.prepareMessageStartEvent = OPERATION_ID_STATUS.PROTOCOL_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = OPERATION_ID_STATUS.PROTOCOL_PREPARE_MESSAGE_END; + this.sendMessageStartEvent = OPERATION_ID_STATUS.PROTOCOL_SEND_MESSAGE_START; + this.sendMessageEndEvent = OPERATION_ID_STATUS.PROTOCOL_SEND_MESSAGE_END; } async executeProtocolMessageCommand(command, messageType) { + const { operationId, blockchain } = command.data; + if (!(await this.shouldSendMessage(command))) { return Command.empty(); } + this.operationIdService.emitChangeEvent( + this.prepareMessageStartEvent, + operationId, + blockchain, + ); const message = await this.prepareMessage(command); + this.operationIdService.emitChangeEvent( + this.prepareMessageEndEvent, + operationId, + blockchain, + ); return this.sendProtocolMessage(command, message, messageType); } @@ -26,21 +46,24 @@ class ProtocolMessageCommand extends Command { } async sendProtocolMessage(command, message, messageType) { - const { node, operationId, keyword } = command.data; - - const keywordUuid = uuidv5(keyword, uuidv5.URL); + const { node, operationId, blockchain } = command.data; + this.operationIdService.emitChangeEvent( + this.sendMessageStartEvent, + operationId, + blockchain, + ); const response = await this.networkModuleManager.sendMessage( node.protocol, node.id, messageType, operationId, - keywordUuid, message, this.messageTimeout(), ); + this.operationIdService.emitChangeEvent(this.sendMessageEndEvent, operationId, blockchain); - this.networkModuleManager.removeCachedSession(operationId, keywordUuid, node.id); + this.networkModuleManager.removeCachedSession(operationId, node.id); switch (response.header.messageType) { case NETWORK_MESSAGE_TYPES.RESPONSES.BUSY: @@ -79,9 +102,8 @@ class ProtocolMessageCommand extends Command { } async recover(command) { - const { node, operationId, keyword } = command.data; - const keywordUuid = uuidv5(keyword, uuidv5.URL); - this.networkModuleManager.removeCachedSession(operationId, keywordUuid, node.id); + const { node, operationId } = command.data; + this.networkModuleManager.removeCachedSession(operationId, node.id); await this.markResponseAsFailed(command, command.message); return Command.empty(); diff --git a/src/commands/protocols/common/protocol-request-command.js b/src/commands/protocols/common/protocol-request-command.js index 0b223d75ae..161ddaf29f 100644 --- a/src/commands/protocols/common/protocol-request-command.js +++ b/src/commands/protocols/common/protocol-request-command.js @@ -1,13 +1,28 @@ import Command from '../../command.js'; import ProtocolMessageCommand from './protocol-message-command.js'; -import { NETWORK_MESSAGE_TYPES, OPERATION_REQUEST_STATUS } from '../../../constants/constants.js'; +import { + NETWORK_MESSAGE_TYPES, + OPERATION_REQUEST_STATUS, + OPERATION_ID_STATUS, +} from '../../../constants/constants.js'; class ProtocolRequestCommand extends ProtocolMessageCommand { + constructor(ctx) { + super(ctx); + this.operationStartEvent = OPERATION_ID_STATUS.PROTOCOL_REQUEST_START; + this.operationEndEvent = OPERATION_ID_STATUS.PROTOCOL_REQUEST_END; + } + async execute(command) { - return this.executeProtocolMessageCommand( + const { operationId, blockchain } = command.data; + this.operationIdService.emitChangeEvent(this.operationStartEvent, operationId, blockchain); + const result = await this.executeProtocolMessageCommand( command, NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_REQUEST, ); + this.operationIdService.emitChangeEvent(this.operationEndEvent, operationId, blockchain); + + return result; } async handleAck(command, responseData) { diff --git a/src/commands/protocols/common/protocol-schedule-messages-command.js b/src/commands/protocols/common/protocol-schedule-messages-command.js index dd84e7d287..2361ffb21f 100644 --- a/src/commands/protocols/common/protocol-schedule-messages-command.js +++ b/src/commands/protocols/common/protocol-schedule-messages-command.js @@ -1,10 +1,14 @@ import Command from '../../command.js'; +import { OPERATION_ID_STATUS } from '../../../constants/constants.js'; class ProtocolScheduleMessagesCommand extends Command { constructor(ctx) { super(ctx); this.commandExecutor = ctx.commandExecutor; this.protocolService = ctx.protocolService; + + this.operationStartEvent = OPERATION_ID_STATUS.PROTOCOL_SCHEDULE_MESSAGE_START; + this.operationEndEvent = OPERATION_ID_STATUS.PROTOCOL_SCHEDULE_MESSAGE_END; } /** @@ -14,7 +18,6 @@ class ProtocolScheduleMessagesCommand extends Command { async execute(command) { const { operationId, - keyword, batchSize, leftoverNodes, numberOfFoundNodes, @@ -29,15 +32,13 @@ class ProtocolScheduleMessagesCommand extends Command { await this.operationIdService.updateOperationIdStatus( operationId, blockchain, - this.startEvent, + this.operationStartEvent, ); this.logger.debug( `Trying to ${this.operationService.getOperationName()} to batch of ${ currentBatchNodes.length - } nodes for keyword : ${keyword}, leftover for retry: ${ - currentBatchLeftoverNodes.length - }`, + }, leftover for retry: ${currentBatchLeftoverNodes.length}`, ); const addCommandPromises = currentBatchNodes.map(async (node) => { @@ -50,7 +51,6 @@ class ProtocolScheduleMessagesCommand extends Command { ...this.getNextCommandData(command), blockchain, operationId, - keyword, node, numberOfFoundNodes, batchSize, @@ -65,19 +65,20 @@ class ProtocolScheduleMessagesCommand extends Command { await Promise.all(addCommandPromises); + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationEndEvent, + ); + return Command.empty(); } getNextCommandData(command) { - const { assertionId, blockchain, contract, tokenId, hashFunctionId } = command.data; - const proximityScoreFunctionsPairId = command.data.proximityScoreFunctionsPairId ?? 1; + const { datasetRoot, blockchain } = command.data; return { - assertionId, blockchain, - contract, - tokenId, - hashFunctionId, - proximityScoreFunctionsPairId, + datasetRoot, }; } diff --git a/src/commands/protocols/common/simple-asset-sync-command.js b/src/commands/protocols/common/simple-asset-sync-command.js deleted file mode 100644 index cd08272a32..0000000000 --- a/src/commands/protocols/common/simple-asset-sync-command.js +++ /dev/null @@ -1,194 +0,0 @@ -import { setTimeout } from 'timers/promises'; -import Command from '../../command.js'; -import { - COMMAND_RETRIES, - ERROR_TYPE, - OPERATION_ID_STATUS, - OPERATION_STATUS, - SIMPLE_ASSET_SYNC_PARAMETERS, -} from '../../../constants/constants.js'; - -class SimpleAssetSyncCommand extends Command { - constructor(ctx) { - super(ctx); - this.tripleStoreService = ctx.tripleStoreService; - this.ualService = ctx.ualService; - this.operationIdService = ctx.operationIdService; - this.getService = ctx.getService; - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.commandExecutor = ctx.commandExecutor; - - this.errorType = ERROR_TYPE.COMMIT_PROOF.SIMPLE_ASSET_SYNC_ERROR; - } - - /** - * Executes command and produces one or more events - * @param command - */ - async execute(command) { - const { - operationId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - epoch, - assertionId, - stateIndex, - } = command.data; - - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.COMMIT_PROOF.SIMPLE_ASSET_SYNC_START, - ); - - this.logger.info( - `[SIMPLE_ASSET_SYNC] (${operationId}): Started command for the ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Retry number: ${ - COMMAND_RETRIES.SIMPLE_ASSET_SYNC - command.retries + 1 - }`, - ); - - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - - const getOperationId = await this.operationIdService.generateOperationId( - OPERATION_ID_STATUS.GET.GET_START, - ); - - this.logger.debug( - `[SIMPLE_ASSET_SYNC] (${operationId}): Fetching Knowledge Asset from the network for the ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Network Get Operation ID: ${getOperationId}`, - ); - - await Promise.all([ - this.operationIdService.updateOperationIdStatus( - getOperationId, - blockchain, - OPERATION_ID_STATUS.GET.GET_INIT_START, - ), - this.repositoryModuleManager.createOperationRecord( - this.getService.getOperationName(), - getOperationId, - OPERATION_STATUS.IN_PROGRESS, - ), - ]); - - let getResult; - - try { - await this.commandExecutor.add({ - name: 'networkGetCommand', - sequence: [], - delay: 0, - data: { - operationId: getOperationId, - id: ual, - blockchain, - contract, - tokenId, - state: assertionId, - hashFunctionId, - assertionId, - stateIndex, - assetSync: true, - }, - transactional: false, - }); - - await this.operationIdService.updateOperationIdStatus( - getOperationId, - blockchain, - OPERATION_ID_STATUS.GET.GET_INIT_END, - ); - - let attempt = 0; - do { - // eslint-disable-next-line no-await-in-loop - await setTimeout(SIMPLE_ASSET_SYNC_PARAMETERS.GET_RESULT_POLLING_INTERVAL_MILLIS); - - // eslint-disable-next-line no-await-in-loop - getResult = await this.operationIdService.getOperationIdRecord(getOperationId); - attempt += 1; - } while ( - attempt < SIMPLE_ASSET_SYNC_PARAMETERS.GET_RESULT_POLLING_MAX_ATTEMPTS && - getResult?.status !== OPERATION_ID_STATUS.FAILED && - getResult?.status !== OPERATION_ID_STATUS.COMPLETED - ); - } catch (error) { - this.logger.warn( - `[SIMPLE_ASSET_SYNC] (${operationId}): Unable to sync Knowledge Asset for the ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Network Get Operation ID: ${getOperationId}, ` + - `Operation failed with error: ${error}.`, - ); - - return Command.retry(); - } - - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.COMMIT_PROOF.SIMPLE_ASSET_SYNC_END, - ); - const getOperationCachedData = await this.operationIdService.getCachedOperationIdData( - getOperationId, - ); - if (getOperationCachedData.message === 'Unable to find assertion on the network!') { - this.logger.info( - `[SIMPLE_ASSET_SYNC] (${operationId}): Failed to executed command. Couldn't find asset on the network for the ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Network Get Operation ID: ${getOperationId}, `, - ); - - return Command.empty(); - } - this.logger.info( - `[SIMPLE_ASSET_SYNC] (${operationId}): Successfully executed command for the ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Network Get Operation ID: ${getOperationId}, `, - ); - - return this.continueSequence(command.data, command.sequence, { - retries: COMMAND_RETRIES.SUBMIT_COMMIT, - }); - } - - async retryFinished(command) { - const { blockchain, contract, tokenId, operationId } = command.data; - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - await this.handleError( - operationId, - blockchain, - `Max retry count for the ${command.name} reached! ` + - `Unable to sync Knowledge Asset on the ${blockchain} blockchain with the UAL: ${ual}`, - this.errorType, - true, - ); - } - - /** - * Builds default simpleAssetSyncCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'simpleAssetSyncCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default SimpleAssetSyncCommand; diff --git a/src/commands/protocols/common/submit-commit-command.js b/src/commands/protocols/common/submit-commit-command.js deleted file mode 100644 index 71458ae2f0..0000000000 --- a/src/commands/protocols/common/submit-commit-command.js +++ /dev/null @@ -1,202 +0,0 @@ -import { - OPERATION_ID_STATUS, - ERROR_TYPE, - COMMAND_RETRIES, - COMMAND_TX_GAS_INCREASE_FACTORS, -} from '../../../constants/constants.js'; -import Command from '../../command.js'; -import SendTransactionCommand from '../../common/send-transaction-command.js'; - -class SubmitCommitCommand extends SendTransactionCommand { - constructor(ctx) { - super(ctx); - this.commandExecutor = ctx.commandExecutor; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.operationIdService = ctx.operationIdService; - this.repositoryModuleManager = ctx.repositoryModuleManager; - - this.errorType = ERROR_TYPE.COMMIT_PROOF.SUBMIT_COMMIT_ERROR; - - this.txStartStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_COMMIT_SEND_TX_START; - this.txEndStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_COMMIT_SEND_TX_END; - this.txErrorType = ERROR_TYPE.COMMIT_PROOF.SUBMIT_COMMIT_SEND_TX_ERROR; - this.txGasIncreaseFactor = COMMAND_TX_GAS_INCREASE_FACTORS.SUBMIT_COMMIT; - this.operationEndStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_COMMIT_END; - this.commandRetryNumber = COMMAND_RETRIES.SUBMIT_COMMIT; - } - - async execute(command) { - const { - operationId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - epoch, - agreementId, - stateIndex, - gasPrice, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - } = command.data; - - this.logger.trace( - `Started ${command.name} for the Service Agreement with the ID: ${agreementId}, ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Operation ID: ${operationId}, ` + - `Closest Node: ${closestNode}, Left neighborhood edge: ${leftNeighborhoodEdge}, ` + - `Right neighborhood edge: ${rightNeighborhoodEdge}, ` + - `Retry number: ${COMMAND_RETRIES.SUBMIT_COMMIT - command.retries + 1}`, - ); - - if (command.retries === COMMAND_RETRIES.SUBMIT_COMMIT) { - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_COMMIT_START, - operationId, - blockchain, - agreementId, - epoch, - ); - } - - const assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - - // If update for new state is already finalized (and node haven't processed the event yet), don't send commit for the older state - if (stateIndex < assertionIds.length - 1) { - this.logger.trace( - `Knowledge Asset was updated, not sending Commit for the Service Agreement with the ID: ${agreementId}, ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Operation ID: ${operationId}` + - `Closest Node: ${closestNode}, Left neighborhood edge: ${leftNeighborhoodEdge}, ` + - `Right neighborhood edge: ${rightNeighborhoodEdge}`, - ); - - return Command.empty(); - } - - // this can happen in case node has already submitted update commit - const alreadySubmitted = await this.commitAlreadySubmitted( - blockchain, - agreementId, - epoch, - stateIndex, - ); - if (alreadySubmitted) { - this.logger.trace( - `Commit has already been submitted for the Service Agreement with the ID: ${agreementId}, ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Operation ID: ${operationId}` + - `Closest Node: ${closestNode}, Left neighborhood edge: ${leftNeighborhoodEdge}, ` + - `Right neighborhood edge: ${rightNeighborhoodEdge}`, - ); - - return Command.empty(); - } - - const txGasPrice = gasPrice ?? (await this.blockchainModuleManager.getGasPrice(blockchain)); - - const transactionCompletePromise = new Promise((resolve, reject) => { - this.blockchainModuleManager.submitCommit( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - stateIndex, - (result) => { - if (result?.error) { - reject(result.error); - } - resolve(true); - }, - txGasPrice, - ); - }); - - return this.sendTransactionAndHandleResult( - transactionCompletePromise, - { - blockchain, - agreementId, - epoch, - operationId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - contract, - tokenId, - keyword, - hashFunctionId, - stateIndex, - txGasPrice, - }, - command, - ); - } - - async insufficientFundsErrorReceived(commandData) { - await this.repositoryModuleManager.updateServiceAgreementLastCommitEpoch( - commandData.agreementId, - commandData.epoch - 1 < 0 ? null : commandData.epoch - 1, - ); - } - - async commitAlreadySubmitted(blockchain, agreementId, epoch, stateIndex) { - const commits = await this.blockchainModuleManager.getTopCommitSubmissions( - blockchain, - agreementId, - epoch, - stateIndex, - ); - const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); - - for (const commit of commits) { - if (Number(commit.identityId) === identityId) { - return true; - } - } - - return false; - } - - async retryFinished(command) { - const { blockchain, operationId } = command.data; - await this.handleError( - operationId, - blockchain, - `Max retries has been reached! Latest Error Message: ${command.message}`, - this.errorType, - true, - ); - } - - /** - * Builds default handleStoreInitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'submitCommitCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default SubmitCommitCommand; diff --git a/src/commands/protocols/common/submit-proofs-command.js b/src/commands/protocols/common/submit-proofs-command.js deleted file mode 100644 index 57b4b7d028..0000000000 --- a/src/commands/protocols/common/submit-proofs-command.js +++ /dev/null @@ -1,238 +0,0 @@ -import { - OPERATION_ID_STATUS, - ERROR_TYPE, - COMMAND_RETRIES, - COMMAND_TX_GAS_INCREASE_FACTORS, - TRIPLE_STORE_REPOSITORIES, -} from '../../../constants/constants.js'; -import Command from '../../command.js'; -import SendTransactionCommand from '../../common/send-transaction-command.js'; - -class SubmitProofsCommand extends SendTransactionCommand { - constructor(ctx) { - super(ctx); - - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.validationModuleManager = ctx.validationModuleManager; - this.tripleStoreService = ctx.tripleStoreService; - this.operationIdService = ctx.operationIdService; - this.repositoryModuleManager = ctx.repositoryModuleManager; - - this.errorType = ERROR_TYPE.COMMIT_PROOF.SUBMIT_PROOFS_ERROR; - - this.txStartStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_PROOFS_SEND_TX_START; - this.txEndStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_PROOFS_SEND_TX_END; - this.txErrorType = ERROR_TYPE.COMMIT_PROOF.SUBMIT_PROOFS_SEND_TX_ERROR; - this.txGasIncreaseFactor = COMMAND_TX_GAS_INCREASE_FACTORS.SUBMIT_PROOFS; - this.operationEndStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_PROOFS_END; - this.commandRetryNumber = COMMAND_RETRIES.SUBMIT_PROOFS; - } - - async execute(command) { - const { - operationId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - epoch, - agreementId, - assertionId, - stateIndex, - gasPrice, - } = command.data; - - this.logger.trace( - `Started ${command.name} for the Service Agreement with the ID: ${agreementId} ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Operation ID: ${operationId}, ` + - `Retry number: ${COMMAND_RETRIES.SUBMIT_PROOFS - command.retries + 1}`, - ); - - if (command.retries === COMMAND_RETRIES.SUBMIT_PROOFS) { - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.COMMIT_PROOF.CALCULATE_PROOFS_START, - operationId, - blockchain, - agreementId, - epoch, - ); - } - - const { challenge } = await this.blockchainModuleManager.getChallenge( - blockchain, - contract, - tokenId, - epoch, - stateIndex, - ); - - const assertion = await this.tripleStoreService.getAssertion( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - assertionId, - ); - - if (!assertion.length) { - const errorMessage = `Assertion with id: ${assertionId} not found in the triple store.`; - this.logger.trace(errorMessage); - - await this.handleError(operationId, blockchain, errorMessage, this.errorType, true); - - return Command.empty(); - } - - const { leaf, proof } = this.validationModuleManager.getMerkleProof( - assertion, - Number(challenge), - ); - - if (command.retries === COMMAND_RETRIES.SUBMIT_PROOFS) { - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.COMMIT_PROOF.CALCULATE_PROOFS_END, - operationId, - blockchain, - agreementId, - epoch, - ); - - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_PROOFS_START, - operationId, - blockchain, - agreementId, - epoch, - ); - } - - const assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - - // If update for new state is already finalized (and node haven't processed the event yet), don't send commit for the older state - if (stateIndex < assertionIds.length - 1) { - this.logger.trace( - `Knowledge Asset was updated, not sending Proof for the Service Agreement with the ID: ${agreementId}, ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Operation ID: ${operationId}`, - ); - - return Command.empty(); - } - - const alreadySubmitted = await this.proofAlreadySubmitted( - blockchain, - agreementId, - epoch, - stateIndex, - ); - if (alreadySubmitted) { - this.logger.trace( - `Proof has already been submitted for the Service Agreement with the ID: ${agreementId}, ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Epoch: ${epoch}, ` + - `State Index: ${stateIndex}, Operation ID: ${operationId}`, - ); - - return Command.empty(); - } - - const txGasPrice = gasPrice ?? (await this.blockchainModuleManager.getGasPrice(blockchain)); - - const transactionCompletePromise = new Promise((resolve, reject) => { - this.blockchainModuleManager.sendProof( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - epoch, - proof, - leaf, - stateIndex, - (result) => { - if (result?.error) { - reject(result.error); - } - - resolve(true); - }, - txGasPrice, - ); - }); - return this.sendTransactionAndHandleResult( - transactionCompletePromise, - { - blockchain, - agreementId, - epoch, - operationId, - contract, - tokenId, - keyword, - hashFunctionId, - stateIndex, - txGasPrice, - }, - command, - ); - } - - async proofAlreadySubmitted(blockchain, agreementId, epoch, stateIndex) { - const commits = await this.blockchainModuleManager.getTopCommitSubmissions( - blockchain, - agreementId, - epoch, - stateIndex, - ); - const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); - - for (const commit of commits) { - if (Number(commit.identityId) === identityId && Number(commit.score) === 0) { - return true; - } - } - - return false; - } - - async insufficientFundsErrorReceived(commandData) { - await this.repositoryModuleManager.updateServiceAgreementLastProofEpoch( - commandData.agreementId, - commandData.epoch - 1 < 0 ? null : commandData.epoch - 1, - ); - } - - async retryFinished(command) { - const { blockchain, operationId } = command.data; - await this.handleError( - operationId, - blockchain, - `Max retries has been reached! Latest Error Message: ${command.message}`, - this.errorType, - true, - ); - } - - /** - * Builds default submitProofsCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'submitProofsCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default SubmitProofsCommand; diff --git a/src/commands/protocols/common/validate-assertion-metadata-command.js b/src/commands/protocols/common/validate-assertion-metadata-command.js new file mode 100644 index 0000000000..2c7787cbb5 --- /dev/null +++ b/src/commands/protocols/common/validate-assertion-metadata-command.js @@ -0,0 +1,76 @@ +import Command from '../../command.js'; + +class ValidateAssertionMetadataCommand extends Command { + constructor(ctx) { + super(ctx); + this.operationIdService = ctx.operationIdService; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.dataService = ctx.dataService; + } + + async execute(command) { + const { operationId, ual, blockchain, merkleRoot, cachedMerkleRoot, byteSize, assertion } = + command.data; + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationStartEvent, + ); + + try { + if (merkleRoot !== cachedMerkleRoot) { + await this.handleError( + operationId, + blockchain, + `Invalid Merkle Root for Knowledge Collection with UAL: ${ual}. Received value from blockchain: ${merkleRoot}, Cached value from publish operation: ${cachedMerkleRoot}`, + this.errorType, + true, + ); + } + + const calculatedAssertionSize = this.dataService.calculateAssertionSize( + assertion.public ?? assertion, + ); + + if (byteSize.toString() !== calculatedAssertionSize.toString()) { + await this.handleError( + operationId, + blockchain, + `Invalid Assertion Size for Knowledge Collection with UAL: ${ual}. Received value from blockchain: ${byteSize}, Calculated value: ${calculatedAssertionSize}`, + this.errorType, + true, + ); + } + } catch (e) { + await this.handleError(operationId, blockchain, e.message, this.errorType, true); + return Command.empty(); + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationEndEvent, + ); + + return this.continueSequence(command.data, command.sequence); + } + + /** + * Builds default validateAssertionMetadataCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'validateAssertionMetadataCommand', + delay: 0, + retries: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default ValidateAssertionMetadataCommand; diff --git a/src/commands/protocols/finality/receiver/publish-finality-save-ack-command.js b/src/commands/protocols/finality/receiver/publish-finality-save-ack-command.js new file mode 100644 index 0000000000..0edd6f1fc3 --- /dev/null +++ b/src/commands/protocols/finality/receiver/publish-finality-save-ack-command.js @@ -0,0 +1,89 @@ +import { + COMMAND_PRIORITY, + NETWORK_MESSAGE_TYPES, + OPERATION_ID_STATUS, +} from '../../../../constants/constants.js'; +import Command from '../../../command.js'; + +class PublishFinalitySaveAckCommand extends Command { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.protocolService = ctx.protocolService; + this.operationService = ctx.finalityService; + this.networkModuleManager = ctx.networkModuleManager; + this.repositoryModuleManager = ctx.repositoryModuleManager; + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { ual, publishOperationId, blockchain, operationId, remotePeerId, state } = + command.data; + + let ualWithState = ual; + if (state) { + ualWithState = `${ual}:${state}`; + } + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.FINALITY.PUBLISH_FINALITY_REMOTE_START, + ); + + let response; + let success; + try { + await this.repositoryModuleManager.saveFinalityAck( + publishOperationId, + ualWithState, + remotePeerId, + ); + + success = true; + response = { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, + messageData: { message: `Acknowledged storing of ${ualWithState}.` }, + }; + } catch (err) { + success = false; + response = { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, + messageData: { errorMessage: `Failed to acknowledge storing of ${ualWithState}.` }, + }; + } + + await this.operationService.markOperationAsCompleted(operationId, blockchain, success, [ + OPERATION_ID_STATUS.FINALITY.PUBLISH_FINALITY_FETCH_FROM_NODES_END, + OPERATION_ID_STATUS.FINALITY.PUBLISH_FINALITY_END, + OPERATION_ID_STATUS.COMPLETED, + ]); + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.FINALITY.PUBLISH_FINALITY_REMOTE_END, + ); + + return this.continueSequence({ ...command.data, response }, command.sequence); + } + + /** + * Builds default publishFinalitySaveAckCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'publishFinalitySaveAckCommand', + delay: 0, + transactional: false, + priority: COMMAND_PRIORITY.HIGHEST, + }; + Object.assign(command, map); + return command; + } +} + +export default PublishFinalitySaveAckCommand; diff --git a/src/commands/protocols/finality/receiver/v1.0.0/v1-0-0-handle-finality-request-command.js b/src/commands/protocols/finality/receiver/v1.0.0/v1-0-0-handle-finality-request-command.js new file mode 100644 index 0000000000..6dcb91b857 --- /dev/null +++ b/src/commands/protocols/finality/receiver/v1.0.0/v1-0-0-handle-finality-request-command.js @@ -0,0 +1,51 @@ +import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js'; +import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../../constants/constants.js'; + +class HandleFinalityRequestCommand extends HandleProtocolMessageCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.finalityService; + this.tripleStoreService = ctx.tripleStoreService; + this.pendingStorageService = ctx.pendingStorageService; + this.paranetService = ctx.paranetService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + + this.errorType = ERROR_TYPE.FINALITY.FINALITY_REQUEST_REMOTE_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_START; + this.operationEndEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_END; + this.prepareMessageStartEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_PREPARE_MESSAGE_END; + this.sendMessageResponseStartEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_SEND_MESSAGE_START; + this.sendMessageResponseEndEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_SEND_MESSAGE_END; + this.removeCachedSessionStartEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_REMOVE_CACHED_SESSION_START; + this.removeCachedSessionEndEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REMOTE_REMOVE_CACHED_SESSION_END; + } + + async prepareMessage(commandData) { + return commandData.response; + } + + /** + * Builds default handleFinalityRequestCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'v1_0_0HandleFinalityRequestCommand', + delay: 0, + transactional: false, + errorType: ERROR_TYPE.FINALITY.FINALITY_REQUEST_REMOTE_ERROR, + }; + Object.assign(command, map); + return command; + } +} + +export default HandleFinalityRequestCommand; diff --git a/src/commands/protocols/finality/sender/finality-schedule-messages-command.js b/src/commands/protocols/finality/sender/finality-schedule-messages-command.js new file mode 100644 index 0000000000..00eea8343a --- /dev/null +++ b/src/commands/protocols/finality/sender/finality-schedule-messages-command.js @@ -0,0 +1,45 @@ +import ProtocolScheduleMessagesCommand from '../../common/protocol-schedule-messages-command.js'; +import { + OPERATION_ID_STATUS, + ERROR_TYPE, + COMMAND_PRIORITY, +} from '../../../../constants/constants.js'; + +class FinalityScheduleMessagesCommand extends ProtocolScheduleMessagesCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.finalityService; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.repositoryModuleManager = ctx.repositoryModuleManager; + + this.operationStartEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_REPLICATE_START; + this.operationEndEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_REPLICATE_END; + this.errorType = ERROR_TYPE.FINALITY.FINALITY_START_ERROR; + } + + getNextCommandData(command) { + return { + ...super.getNextCommandData(command), + ual: command.data.ual, + publishOperationId: command.data.publishOperationId, + }; + } + + /** + * Builds default finalityScheduleMessagesCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'finalityScheduleMessagesCommand', + delay: 0, + transactional: false, + priority: COMMAND_PRIORITY.HIGHEST, + }; + Object.assign(command, map); + return command; + } +} + +export default FinalityScheduleMessagesCommand; diff --git a/src/commands/protocols/finality/sender/find-publisher-node-command.js b/src/commands/protocols/finality/sender/find-publisher-node-command.js new file mode 100644 index 0000000000..8a42289c83 --- /dev/null +++ b/src/commands/protocols/finality/sender/find-publisher-node-command.js @@ -0,0 +1,47 @@ +import { COMMAND_PRIORITY } from '../../../../constants/constants.js'; +import Command from '../../../command.js'; + +class FindPublisherNodeCommand extends Command { + constructor(ctx) { + super(ctx); + this.operationService = ctx.finalityService; + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { remotePeerId } = command.data; + + const networkProtocols = this.operationService.getNetworkProtocols(); + const leftoverNodes = [{ id: remotePeerId, protocol: networkProtocols[0] }]; + + return this.continueSequence( + { + ...command.data, + leftoverNodes, + numberOfFoundNodes: leftoverNodes.length, + }, + command.sequence, + ); + } + + /** + * Builds default findPublisherNodeCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'findPublisherNodeCommand', + delay: 0, + transactional: false, + priority: COMMAND_PRIORITY.HIGHEST, + }; + Object.assign(command, map); + return command; + } +} + +export default FindPublisherNodeCommand; diff --git a/src/commands/protocols/finality/sender/network-finality-command.js b/src/commands/protocols/finality/sender/network-finality-command.js new file mode 100644 index 0000000000..91fe91e152 --- /dev/null +++ b/src/commands/protocols/finality/sender/network-finality-command.js @@ -0,0 +1,36 @@ +import NetworkProtocolCommand from '../../common/network-protocol-command.js'; +import { + COMMAND_PRIORITY, + ERROR_TYPE, + OPERATION_ID_STATUS, +} from '../../../../constants/constants.js'; + +class NetworkFinalityCommand extends NetworkProtocolCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.finalityService; + this.ualService = ctx.ualService; + + this.errorType = ERROR_TYPE.FINALITY.FINALITY_NETWORK_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_NETWORK_START; + this.operationEndEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_NETWORK_END; + } + + /** + * Builds default networkFinalityCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'networkFinalityCommand', + delay: 0, + transactional: false, + priority: COMMAND_PRIORITY.HIGHEST, + }; + Object.assign(command, map); + return command; + } +} + +export default NetworkFinalityCommand; diff --git a/src/commands/protocols/finality/sender/v1.0.0/v1-0-0-finality-request-command.js b/src/commands/protocols/finality/sender/v1.0.0/v1-0-0-finality-request-command.js new file mode 100644 index 0000000000..ab91ef7145 --- /dev/null +++ b/src/commands/protocols/finality/sender/v1.0.0/v1-0-0-finality-request-command.js @@ -0,0 +1,80 @@ +import Command from '../../../../command.js'; +import ProtocolRequestCommand from '../../../common/protocol-request-command.js'; +import { + NETWORK_MESSAGE_TIMEOUT_MILLS, + ERROR_TYPE, + OPERATION_ID_STATUS, + COMMAND_PRIORITY, +} from '../../../../../constants/constants.js'; + +class FinalityRequestCommand extends ProtocolRequestCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.finalityService; + this.operationIdService = ctx.operationIdService; + + this.errorType = ERROR_TYPE.FINALITY.FINALITY_REQUEST_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_REQUEST_START; + this.operationEndEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_REQUEST_END; + this.prepareMessageStartEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REQUEST_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REQUEST_PREPARE_MESSAGE_END; + this.sendMessageStartEvent = + OPERATION_ID_STATUS.FINALITY.FINALITY_REQUEST_SEND_MESSAGE_START; + this.sendMessageEndEvent = OPERATION_ID_STATUS.FINALITY.FINALITY_REQUEST_SEND_MESSAGE_END; + } + + async prepareMessage(command) { + const { ual, publishOperationId, blockchain, operationId } = command.data; + + return { ual, publishOperationId, blockchain, operationId }; + } + + async handleAck(command) { + const { operationId, blockchain } = command.data; + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.COMPLETED, + ); + return ProtocolRequestCommand.empty(); + } + + async handleNack(command, responseData) { + const { operationId, blockchain } = command.data; + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.COMPLETED, + ); + await this.markResponseAsFailed( + command, + `Received NACK response from node during ${command.name}. Error message: ${responseData.errorMessage}`, + ); + return Command.empty(); + } + + messageTimeout() { + return NETWORK_MESSAGE_TIMEOUT_MILLS.FINALITY.REQUEST; + } + + /** + * Builds default finalityRequestCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'v1_0_0FinalityRequestCommand', + delay: 0, + retries: 0, + transactional: false, + priority: COMMAND_PRIORITY.HIGHEST, + }; + Object.assign(command, map); + return command; + } +} + +export default FinalityRequestCommand; diff --git a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-init-command.js b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-init-command.js deleted file mode 100644 index 475a9c2b3c..0000000000 --- a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-init-command.js +++ /dev/null @@ -1,100 +0,0 @@ -import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js'; -import { - ERROR_TYPE, - GET_STATES, - NETWORK_MESSAGE_TYPES, - OPERATION_ID_STATUS, - PENDING_STORAGE_REPOSITORIES, - TRIPLE_STORE_REPOSITORIES, -} from '../../../../../constants/constants.js'; - -class HandleGetInitCommand extends HandleProtocolMessageCommand { - constructor(ctx) { - super(ctx); - this.tripleStoreService = ctx.tripleStoreService; - this.operationService = ctx.getService; - this.pendingStorageService = ctx.pendingStorageService; - - this.errorType = ERROR_TYPE.GET.GET_INIT_REMOTE_ERROR; - } - - async prepareMessage(commandData) { - const { operationId, blockchain, contract, tokenId, assertionId, state } = commandData; - - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.GET.ASSERTION_EXISTS_LOCAL_START, - ); - - this.logger.trace( - `Checking if assertion ${assertionId} exists for state ${state}, on blockchain: ${blockchain}, contract: ${contract}, and tokenId: ${tokenId}`, - ); - - let assertionExists; - if ( - state !== GET_STATES.FINALIZED && - blockchain != null && - contract != null && - tokenId != null - ) { - assertionExists = await this.pendingStorageService.assetHasPendingState( - PENDING_STORAGE_REPOSITORIES.PUBLIC, - blockchain, - contract, - tokenId, - assertionId, - ); - } - - if (!assertionExists) { - for (const repository of [ - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - ]) { - // eslint-disable-next-line no-await-in-loop - assertionExists = await this.tripleStoreService.assertionExists( - repository, - assertionId, - ); - if (assertionExists) { - break; - } - } - } - - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.GET.ASSERTION_EXISTS_LOCAL_END, - ); - - if (assertionExists) { - return { - messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, - messageData: {}, - }; - } - return { - messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, - messageData: { errorMessage: 'Assertion not found' }, - }; - } - - /** - * Builds default handleGetInitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'v1_0_0HandleGetInitCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default HandleGetInitCommand; diff --git a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js index 8bf5f5b3a6..09189febef 100644 --- a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js +++ b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js @@ -1,12 +1,10 @@ import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js'; - import { ERROR_TYPE, NETWORK_MESSAGE_TYPES, OPERATION_ID_STATUS, - GET_STATES, + TRIPLES_VISIBILITY, TRIPLE_STORE_REPOSITORIES, - PENDING_STORAGE_REPOSITORIES, } from '../../../../../constants/constants.js'; class HandleGetRequestCommand extends HandleProtocolMessageCommand { @@ -15,62 +13,218 @@ class HandleGetRequestCommand extends HandleProtocolMessageCommand { this.operationService = ctx.getService; this.tripleStoreService = ctx.tripleStoreService; this.pendingStorageService = ctx.pendingStorageService; + this.paranetService = ctx.paranetService; this.errorType = ERROR_TYPE.GET.GET_REQUEST_REMOTE_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.GET.GET_REMOTE_START; + this.operationEndEvent = OPERATION_ID_STATUS.GET.GET_REMOTE_END; + this.prepareMessageStartEvent = OPERATION_ID_STATUS.GET.GET_REMOTE_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = OPERATION_ID_STATUS.GET.GET_REMOTE_PREPARE_MESSAGE_END; + this.sendMessageResponseStartEvent = OPERATION_ID_STATUS.GET.GET_REMOTE_SEND_MESSAGE_START; + this.sendMessageResponseEndEvent = OPERATION_ID_STATUS.GET.GET_REMOTE_SEND_MESSAGE_END; + this.removeCachedSessionStartEvent = + OPERATION_ID_STATUS.GET.GET_REMOTE_REMOVE_CACHED_SESSION_START; + this.removeCachedSessionEndEvent = + OPERATION_ID_STATUS.GET.GET_REMOTE_REMOVE_CACHED_SESSION_END; } async prepareMessage(commandData) { - const { operationId, blockchain, contract, tokenId, assertionId, state } = commandData; - await this.operationIdService.updateOperationIdStatus( + const { + operationId, + blockchain, + contract, + knowledgeCollectionId, + ual, + includeMetadata, + isOperationV0, + } = commandData; + + let { assertionId, knowledgeAssetId } = commandData; + + // if (paranetUAL) { + // const paranetNodeAccessPolicy = await this.blockchainModuleManager.getNodesAccessPolicy( + // blockchain, + // paranetId, + // ); + // if (paranetNodeAccessPolicy === PARANET_ACCESS_POLICY.CURATED) { + // const paranetCuratedNodes = + // await this.blockchainModuleManager.getParanetCuratedNodes( + // blockchain, + // paranetId, + // ); + // const paranetCuratedPeerIds = paranetCuratedNodes.map((node) => + // this.blockchainModuleManager.convertHexToAscii(blockchain, node.nodeId), + // ); + + // if (!paranetCuratedPeerIds.includes(remotePeerId)) { + // return { + // messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, + // messageData: { + // errorMessage: `Remote peer ${remotePeerId} is not a part of the Paranet (${paranetId}) with UAL: ${paranetUAL}`, + // }, + // }; + // } + // const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + // const paranetRepository = this.paranetService.getParanetRepositoryName(paranetUAL); + // const syncedAssetRecord = + // await this.repositoryModuleManager.getParanetSyncedAssetRecordByUAL(ual); + + // nquads = await this.tripleStoreService.getAssertion(paranetRepository, assertionId); + + // let privateNquads; + // if (syncedAssetRecord.privateAssertionId) { + // privateNquads = await this.tripleStoreService.getAssertion( + // paranetRepository, + // syncedAssetRecord.privateAssertionId, + // ); + // } + + // if (nquads?.length) { + // const response = { + // messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, + // messageData: { nquads, syncedAssetRecord }, + // }; + + // if (privateNquads?.length) { + // response.messageData.privateNquads = privateNquads; + // } + + // return response; + // } + + // return { + // messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, + // messageData: { + // errorMessage: `Unable to find assertion ${assertionId} for Paranet ${paranetId} with UAL: ${paranetUAL}`, + // }, + // }; + // } + // } + + const promises = []; + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_REMOTE_GET_ASSERTION_START, operationId, blockchain, - OPERATION_ID_STATUS.GET.GET_REMOTE_START, ); - let nquads; - if ( - state !== GET_STATES.FINALIZED && - blockchain != null && - contract != null && - tokenId != null - ) { - const cachedAssertion = await this.pendingStorageService.getCachedAssertion( - PENDING_STORAGE_REPOSITORIES.PUBLIC, - blockchain, - contract, - tokenId, - assertionId, - operationId, - ); - if (cachedAssertion?.public?.assertion?.length) { - nquads = cachedAssertion.public.assertion; + let assertionPromise; + + if (isOperationV0) { + if (!assertionId) { + assertionId = await this.tripleStoreService.getLatestAssertionId( + TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, + ual, + ); + + this.logger.info( + `Found assertion id: ${assertionId}, operation id ${operationId}, ual: ${ual}`, + ); } - } - if (!nquads?.length) { - for (const repository of [ - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - ]) { - // eslint-disable-next-line no-await-in-loop - nquads = await this.tripleStoreService.getAssertion(repository, assertionId); - if (nquads.length) { - break; - } + // DO NOT RUN THIS IF !assertionId + assertionPromise = this.tripleStoreService + .getV6Assertion(TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, assertionId) + .then(async (result) => { + if (!result?.length) { + this.logger.info( + `No V6 assertion found for assertionId: ${assertionId}, falling back to V8 getAssertion`, + ); + + const fallbackResult = await this.tripleStoreService.getAssertion( + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + TRIPLES_VISIBILITY.PUBLIC, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_REMOTE_GET_ASSERTION_END, + operationId, + blockchain, + ); + + return [ + ...(fallbackResult.public ?? []), + ...(fallbackResult.private ?? []), + ]; + } + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_REMOTE_GET_ASSERTION_END, + operationId, + blockchain, + ); + + return result.split('\n').filter((res) => res.length > 0); + }); + } else { + if (!knowledgeAssetId) { + knowledgeAssetId = await this.blockchainModuleManager.getKnowledgeAssetsRange( + blockchain, + contract, + knowledgeCollectionId, + ); } + assertionPromise = this.tripleStoreService + .getAssertion( + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + TRIPLES_VISIBILITY.PUBLIC, + ) + .then((result) => { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_REMOTE_GET_ASSERTION_END, + operationId, + blockchain, + ); + return result; + }); } + promises.push(assertionPromise); - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.GET.GET_REMOTE_END, - ); + if (includeMetadata) { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_REMOTE_GET_ASSERTION_METADATA_START, + operationId, + blockchain, + ); + const metadataPromise = this.tripleStoreService + .getAssertionMetadata(blockchain, contract, knowledgeCollectionId, knowledgeAssetId) + .then((result) => { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_REMOTE_GET_ASSERTION_METADATA_END, + operationId, + blockchain, + ); + return result; + }); + promises.push(metadataPromise); + } + + const [assertion, metadata] = await Promise.all(promises); + + const responseData = { + assertion, + ...(includeMetadata && metadata && { metadata }), + }; + + if (assertion?.public?.length || assertion?.length) { + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.GET.GET_REMOTE_END, + ); + } - return nquads.length - ? { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: { nquads } } + return assertion?.public?.length || assertion?.length + ? { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: responseData } : { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, - messageData: { errorMessage: `Invalid number of nquads: ${nquads.length}` }, + messageData: { errorMessage: `Unable to find assertion ${ual}` }, }; } diff --git a/src/commands/protocols/get/sender/curated-paranet-network-get-command.js b/src/commands/protocols/get/sender/curated-paranet-network-get-command.js new file mode 100644 index 0000000000..526b2d67c1 --- /dev/null +++ b/src/commands/protocols/get/sender/curated-paranet-network-get-command.js @@ -0,0 +1,84 @@ +// import Command from '../../../command.js'; +// import NetworkProtocolCommand from '../../common/network-protocol-command.js'; +// import { ERROR_TYPE } from '../../../../constants/constants.js'; + +// class CuratedParanetNetworkGetCommand extends NetworkProtocolCommand { +// constructor(ctx) { +// super(ctx); +// this.operationService = ctx.getService; +// this.ualService = ctx.ualService; + +// this.errorType = ERROR_TYPE.GET.GET_CURATED_PARANET_NETWORK_ERROR; +// } + +// /** +// * Executes command and produces one or more events +// * @param command +// */ +// async execute(command) { +// const batchSize = await this.getBatchSize(); +// const minAckResponses = await this.getMinAckResponses(); + +// const commandSequence = [ +// 'findCuratedParanetNodesCommand', +// `${this.operationService.getOperationName()}ScheduleMessagesCommand`, +// ]; +// // +// const addCommandPromises = keywords.map((keyword) => +// this.commandExecutor.add({ +// name: commandSequence[0], +// sequence: commandSequence.slice(1), +// delay: 0, +// data: { +// ...command.data, +// keyword, +// batchSize, +// minAckResponses, +// errorType: this.errorType, +// networkProtocols: this.operationService.getNetworkProtocols(), +// }, +// transactional: false, +// }), +// ); + +// await Promise.all(addCommandPromises); + +// return Command.empty(); +// } + +// async getKeywords(command) { +// const { blockchain, contract, tokenId } = command.data; +// const locationKeyword = await this.ualService.calculateLocationKeyword( +// blockchain, +// contract, +// tokenId, +// ); + +// return [locationKeyword]; +// } + +// async getBatchSize() { +// return 2; +// } + +// async getMinAckResponses() { +// return 1; +// } + +// /** +// * Builds default curatedParanetNetworkGetCommand +// * @param map +// * @returns {{add, data: *, delay: *, deadline: *}} +// */ +// default(map) { +// const command = { +// name: 'curatedParanetNetworkGetCommand', +// delay: 0, +// transactional: false, +// }; +// Object.assign(command, map); +// return command; +// } +// } + +// export default CuratedParanetNetworkGetCommand; diff --git a/src/commands/protocols/get/sender/get-assertion-id-command.js b/src/commands/protocols/get/sender/get-assertion-id-command.js deleted file mode 100644 index beea10c2ce..0000000000 --- a/src/commands/protocols/get/sender/get-assertion-id-command.js +++ /dev/null @@ -1,210 +0,0 @@ -import Command from '../../../command.js'; -import { - ERROR_TYPE, - GET_STATES, - PENDING_STORAGE_REPOSITORIES, - ZERO_BYTES32, -} from '../../../../constants/constants.js'; - -class GetAssertionIdCommand extends Command { - constructor(ctx) { - super(ctx); - this.operationService = ctx.getService; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.ualService = ctx.ualService; - this.serviceAgreementService = ctx.serviceAgreementService; - this.pendingStorageService = ctx.pendingStorageService; - this.repositoryModuleManager = ctx.repositoryModuleManager; - - this.errorType = ERROR_TYPE.GET.GET_ASSERTION_ID_ERROR; - } - - /** - * Executes command and produces one or more events - * @param command - */ - async execute(command) { - const { operationId, blockchain, contract, tokenId, state, hashFunctionId } = command.data; - this.logger.info( - `Getting assertion id for token id: ${tokenId}, contract: ${contract}, state: ${state}, hash function id: ${hashFunctionId}, operation id: ${operationId} on blockchain: ${blockchain}`, - ); - let assertionId; - if (!Object.values(GET_STATES).includes(state)) { - if (state === ZERO_BYTES32) { - await this.handleError( - operationId, - blockchain, - `The provided state: ${state}. State hash cannot be 0x0.`, - this.errorType, - ); - - return Command.empty(); - } - - let pendingState; - pendingState = await this.pendingStorageService.getPendingState( - PENDING_STORAGE_REPOSITORIES.PUBLIC, - blockchain, - contract, - tokenId, - ); - if (!pendingState) { - pendingState = await this.blockchainModuleManager.getUnfinalizedAssertionId( - blockchain, - tokenId, - ); - } - - if ( - state !== pendingState && - !( - await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ) - ).includes(state) - ) { - await this.handleError( - operationId, - blockchain, - `The provided state: ${state} does not exist on the ${blockchain} blockchain, ``within contract: ${contract}, for the Knowledge Asset with tokenId: ${tokenId}, operation id: ${operationId}.`, - this.errorType, - ); - - return Command.empty(); - } - - assertionId = state; - } else { - this.logger.debug( - `Searching for latest assertion id on ${blockchain} on contract: ${contract} with tokenId: ${tokenId}, operation id: ${operationId}`, - ); - - const assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - - const latestFinalizedAssertionId = assertionIds[assertionIds.length - 1]; - - if (state === GET_STATES.LATEST) { - let unfinalizedAssertionId; - unfinalizedAssertionId = await this.pendingStorageService.getPendingState( - PENDING_STORAGE_REPOSITORIES.PUBLIC, - blockchain, - contract, - tokenId, - ); - if (!unfinalizedAssertionId) { - unfinalizedAssertionId = - await this.blockchainModuleManager.getUnfinalizedAssertionId( - blockchain, - tokenId, - ); - } - if (unfinalizedAssertionId !== ZERO_BYTES32) { - const updateCommitWindowOpen = await this.isUpdateCommitWindowOpen( - blockchain, - contract, - tokenId, - hashFunctionId, - assertionIds, - ); - if (updateCommitWindowOpen) { - assertionId = unfinalizedAssertionId; - this.logger.warn( - `Commit update window open for tokenId: ${tokenId}, using unfinalized assertion id: ${assertionId} for operation id: ${operationId}`, - ); - } else { - assertionId = latestFinalizedAssertionId; - this.logger.warn( - `Commit update window closed for tokenId: ${tokenId}, latest assertion id will be used instead of unfinalized for operation id: ${operationId}`, - ); - } - } - } - if (assertionId === null || assertionId === ZERO_BYTES32 || assertionId === undefined) { - assertionId = latestFinalizedAssertionId; - } - } - this.logger.info( - `Found assertion id: ${assertionId} for token id: ${tokenId}, contract: ${contract} on blockchain: ${blockchain} for operation id: ${operationId}`, - ); - return this.continueSequence({ ...command.data, state, assertionId }, command.sequence); - } - - async isUpdateCommitWindowOpen(blockchain, contract, tokenId, hashFunctionId, assertionIds) { - const keyword = await this.ualService.calculateLocationKeyword( - blockchain, - contract, - tokenId, - assertionIds[0], - ); - - const agreementId = this.serviceAgreementService.generateId( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - ); - const latestStateIndex = assertionIds.length; - - let agreementData; - agreementData = await this.repositoryModuleManager.getServiceAgreementRecord(agreementId); - if (!agreementData || agreementData.scoreFunctionId === 0) { - agreementData = await this.blockchainModuleManager.getAgreementData( - blockchain, - agreementId, - ); - } - - if (!agreementData || agreementData.scoreFunctionId === 0) { - this.logger.warn( - `Unable to fetch agreement data in get assertion id command ${agreementId}, blockchain id: ${blockchain}`, - ); - throw Error(`Unable to get agreement data`); - } - - const epoch = await this.serviceAgreementService.calculateCurrentEpoch( - agreementData.startTime, - agreementData.epochLength, - blockchain, - ); - - return this.blockchainModuleManager.isUpdateCommitWindowOpen( - blockchain, - agreementId, - epoch, - latestStateIndex, - ); - } - - async handleError(operationId, blockchain, errorMessage, errorType) { - await this.operationService.markOperationAsFailed( - operationId, - blockchain, - errorMessage, - errorType, - ); - } - - /** - * Builds default getStateIdConditionalCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'getAssertionIdCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default GetAssertionIdCommand; diff --git a/src/commands/protocols/get/sender/get-assertion-merkle-root-command.js b/src/commands/protocols/get/sender/get-assertion-merkle-root-command.js new file mode 100644 index 0000000000..e5346592aa --- /dev/null +++ b/src/commands/protocols/get/sender/get-assertion-merkle-root-command.js @@ -0,0 +1,65 @@ +import Command from '../../../command.js'; +import { ERROR_TYPE, TRIPLE_STORE_REPOSITORIES } from '../../../../constants/constants.js'; + +class GetAssertionMerkleRootCommand extends Command { + constructor(ctx) { + super(ctx); + this.operationService = ctx.getService; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.tripleStoreService = ctx.tripleStoreService; + + this.errorType = ERROR_TYPE.GET.GET_ASSERTION_ID_ERROR; + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { operationId, ual } = command.data; + this.logger.info(`Getting assertion id and operation id ${operationId} for ual: ${ual}`); + + let assertionId = await this.tripleStoreService.getLatestAssertionId( + TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, + ual, + ); + + if (!assertionId) { + assertionId = await this.tripleStoreService.getLatestAssertionId( + TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, + ual, + ); + } + + this.logger.info( + `Found assertion id: ${assertionId}, operation id ${operationId}, ual: ${ual}`, + ); + return this.continueSequence({ ...command.data, assertionId }, command.sequence); + } + + async handleError(operationId, blockchain, errorMessage, errorType) { + await this.operationService.markOperationAsFailed( + operationId, + blockchain, + errorMessage, + errorType, + ); + } + + /** + * Builds default getAssertionMerkleRootCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'getAssertionMerkleRootCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default GetAssertionMerkleRootCommand; diff --git a/src/commands/protocols/get/sender/get-find-shard-command.js b/src/commands/protocols/get/sender/get-find-shard-command.js new file mode 100644 index 0000000000..409f50452f --- /dev/null +++ b/src/commands/protocols/get/sender/get-find-shard-command.js @@ -0,0 +1,51 @@ +import FindShardCommand from '../../common/find-shard-command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../../constants/constants.js'; + +class GetFindShardCommand extends FindShardCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.getService; + + this.errorType = ERROR_TYPE.FIND_SHARD.GET_FIND_SHARD_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.GET.GET_FIND_NODES_START; + this.operationEndEvent = OPERATION_ID_STATUS.GET.GET_FIND_NODES_END; + this.findShardNodesStartEvent = + OPERATION_ID_STATUS.GET.GET_FIND_NODES_FIND_SHARD_NODES_START; + this.findShardNodesEndEvent = OPERATION_ID_STATUS.GET.GET_FIND_NODES_FIND_SHARD_NODES_END; + this.processFoundNodesStartEvent = + OPERATION_ID_STATUS.GET.GET_FIND_NODES_PROCESS_FOUND_NODES_START; + this.processFoundNodesEndEvent = + OPERATION_ID_STATUS.GET.GET_FIND_NODES_PROCESS_FOUND_NODES_END; + } + + // eslint-disable-next-line no-unused-vars + getOperationCommandSequence(nodePartOfShard, commandData) { + const sequence = []; + if (nodePartOfShard) { + // If operationV0 and no assertionId found go directly to networkGet + if (!commandData.isOperationV0 || commandData.assertionId) { + sequence.push('localGetCommand'); + } + } + sequence.push('networkGetCommand'); + + return sequence; + } + + /** + * Builds default getFindShardCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'getFindShardCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default GetFindShardCommand; diff --git a/src/commands/protocols/get/sender/get-schedule-messages-command.js b/src/commands/protocols/get/sender/get-schedule-messages-command.js index 704bae3b56..7b34d8892e 100644 --- a/src/commands/protocols/get/sender/get-schedule-messages-command.js +++ b/src/commands/protocols/get/sender/get-schedule-messages-command.js @@ -7,17 +7,27 @@ class GetScheduleMessagesCommand extends ProtocolScheduleMessagesCommand { this.operationService = ctx.getService; this.errorType = ERROR_TYPE.GET.GET_START_ERROR; - this.startEvent = OPERATION_ID_STATUS.GET.GET_FETCH_FROM_NODES_START; + this.operationStartEvent = OPERATION_ID_STATUS.GET.GET_FETCH_FROM_NODES_START; + this.operationEndEvent = OPERATION_ID_STATUS.GET.GET_FETCH_FROM_NODES_END; } getNextCommandData(command) { return { ...super.getNextCommandData(command), - state: command.data.state, + contract: command.data.contract, + knowledgeCollectionId: command.data.knowledgeCollectionId, + knowledgeAssetId: command.data.knowledgeAssetId, + includeMetadata: command.data.includeMetadata, + ual: command.data.ual, assetSync: command.data.assetSync, paranetSync: command.data.paranetSync, paranetTokenId: command.data.paranetTokenId, paranetLatestAsset: command.data.paranetLatestAsset, + paranetUAL: command.data.paranetUAL, + paranetId: command.data.paranetId, + paranetMetadata: command.data.paranetMetadata, + assertionId: command.data.assertionId, + isOperationV0: command.data.isOperationV0, }; } diff --git a/src/commands/protocols/get/sender/get-validate-asset-command.js b/src/commands/protocols/get/sender/get-validate-asset-command.js new file mode 100644 index 0000000000..67a75d61f4 --- /dev/null +++ b/src/commands/protocols/get/sender/get-validate-asset-command.js @@ -0,0 +1,117 @@ +import ValidateAssetCommand from '../../../common/validate-asset-command.js'; +import Command from '../../../command.js'; +import { + OPERATION_ID_STATUS, + ERROR_TYPE, + OLD_CONTENT_STORAGE_MAP, +} from '../../../../constants/constants.js'; + +class GetValidateAssetCommand extends ValidateAssetCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.getService; + this.errorType = ERROR_TYPE.GET.GET_VALIDATE_ASSET_ERROR; + } + + async handleError(operationId, blockchain, errorMessage, errorType) { + await this.operationService.markOperationAsFailed( + operationId, + blockchain, + errorMessage, + errorType, + ); + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { operationId, blockchain, contract, knowledgeCollectionId, ual, isOperationV0 } = + command.data; + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.GET.GET_VALIDATE_ASSET_START, + ); + + const isUAL = this.ualService.isUAL(ual); + + if (!isUAL) { + await this.handleError( + operationId, + blockchain, + `Get for operation id: ${operationId}, UAL: ${ual}: is not a UAL.`, + this.errorType, + ); + return Command.empty(); + } + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_VALIDATE_UAL_START, + operationId, + blockchain, + ); + // TODO: Update to validate knowledge asset index + if ( + !isOperationV0 && + Object.values(OLD_CONTENT_STORAGE_MAP).every( + (ca) => !ca.toLowerCase().includes(contract.toLowerCase()), + ) + ) { + const isValidUal = await this.validationService.validateUal( + blockchain, + contract, + knowledgeCollectionId, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_VALIDATE_UAL_END, + operationId, + blockchain, + ); + + if (!isValidUal) { + await this.handleError( + operationId, + blockchain, + `Get for operation id: ${operationId}, UAL: ${ual}: there is no asset with this UAL.`, + this.errorType, + ); + return Command.empty(); + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.GET.GET_VALIDATE_ASSET_END, + ); + } + + return this.continueSequence( + { + ...command.data, + retry: undefined, + period: undefined, + }, + command.sequence, + ); + } + + /** + * Builds default getValidateAssetCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'getValidateAssetCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default GetValidateAssetCommand; diff --git a/src/commands/protocols/get/sender/local-get-command.js b/src/commands/protocols/get/sender/local-get-command.js index f510115010..39165d0e55 100644 --- a/src/commands/protocols/get/sender/local-get-command.js +++ b/src/commands/protocols/get/sender/local-get-command.js @@ -2,20 +2,21 @@ import Command from '../../../command.js'; import { OPERATION_ID_STATUS, ERROR_TYPE, - GET_STATES, TRIPLE_STORE_REPOSITORIES, - PENDING_STORAGE_REPOSITORIES, } from '../../../../constants/constants.js'; class LocalGetCommand extends Command { constructor(ctx) { super(ctx); - this.blockchainModuleManager = ctx.blockchainModuleManager; this.config = ctx.config; this.operationService = ctx.getService; this.operationIdService = ctx.operationIdService; this.tripleStoreService = ctx.tripleStoreService; this.pendingStorageService = ctx.pendingStorageService; + this.paranetService = ctx.paranetService; + this.ualService = ctx.ualService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.blockchainModuleManager = ctx.blockchainModuleManager; this.errorType = ERROR_TYPE.GET.GET_LOCAL_ERROR; } @@ -25,76 +26,176 @@ class LocalGetCommand extends Command { * @param command */ async execute(command) { - const { operationId, blockchain, contract, tokenId, assertionId, state } = command.data; + const { + operationId, + blockchain, + includeMetadata, + contract, + knowledgeCollectionId, + contentType, + assertionId, + } = command.data; + let { knowledgeAssetId } = command.data; await this.operationIdService.updateOperationIdStatus( operationId, blockchain, OPERATION_ID_STATUS.GET.GET_LOCAL_START, ); - const response = {}; - if ( - state !== GET_STATES.FINALIZED && - blockchain != null && - contract != null && - tokenId != null - ) { - for (const repository of [ - PENDING_STORAGE_REPOSITORIES.PRIVATE, - PENDING_STORAGE_REPOSITORIES.PUBLIC, - ]) { - // eslint-disable-next-line no-await-in-loop - const stateIsPending = await this.pendingStorageService.assetHasPendingState( - repository, - blockchain, - contract, - tokenId, - assertionId, - ); + // const response = {}; + + // if (paranetUAL) { + // const paranetRepository = this.paranetService.getParanetRepositoryName(paranetUAL); + + // const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + // const syncedAssetRecord = + // await this.repositoryModuleManager.getParanetSyncedAssetRecordByUAL(ual); + + // const nquads = await this.tripleStoreService.getAssertion( + // paranetRepository, + // syncedAssetRecord.publicAssertionId, + // ); + + // let privateNquads; + // if (syncedAssetRecord.privateAssertionId) { + // privateNquads = await this.tripleStoreService.getAssertion( + // paranetRepository, + // syncedAssetRecord.privateAssertionId, + // ); + // } + + // if (nquads?.length) { + // response.assertion = nquads; + // if (privateNquads?.length) { + // response.privateAssertion = privateNquads; + // } + // } else { + // this.handleError( + // operationId, + // blockchain, + // `Couldn't find locally asset with ${ual} in paranet ${paranetUAL}`, + // this.errorType, + // ); + // } + + // await this.operationService.markOperationAsCompleted( + // operationId, + // blockchain, + // response, + // [ + // OPERATION_ID_STATUS.GET.GET_LOCAL_END, + // OPERATION_ID_STATUS.GET.GET_END, + // OPERATION_ID_STATUS.COMPLETED, + // ], + // ); - if (stateIsPending) { + // return Command.empty(); + // } + + // else { + + const promises = []; + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_START, + operationId, + blockchain, + ); + + let assertionPromise; + + if (assertionId) { + assertionPromise = (async () => { + let result = null; + + for (const repository of [ + TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, + TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, + ]) { // eslint-disable-next-line no-await-in-loop - const cachedAssertion = await this.pendingStorageService.getCachedAssertion( - repository, + result = await this.tripleStoreService.getV6Assertion(repository, assertionId); + if (result?.length) { + break; + } + } + + if (!result?.length) { + result = await this.tripleStoreService.getAssertion( blockchain, contract, - tokenId, - assertionId, - operationId, + knowledgeCollectionId, + knowledgeAssetId, + contentType, ); - - if (cachedAssertion?.public?.assertion?.length) { - response.assertion = cachedAssertion.public.assertion; - if (cachedAssertion?.private?.assertion?.length) { - response.privateAssertion = cachedAssertion.private.assertion; - } - break; - } } - } - } + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_END, + operationId, + blockchain, + ); - if (!response?.assertion?.length) { - for (const repository of [ - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - ]) { - // eslint-disable-next-line no-await-in-loop - response.assertion = await this.tripleStoreService.getAssertion( - repository, - assertionId, + return typeof result === 'string' + ? result.split('\n').filter((res) => res.length > 0) + : result; + })(); + } else { + // TODO: Do this in clean way + if (!knowledgeAssetId) { + knowledgeAssetId = await this.blockchainModuleManager.getKnowledgeAssetsRange( + blockchain, + contract, + knowledgeCollectionId, ); - if (response?.assertion?.length) break; } + assertionPromise = this.tripleStoreService + .getAssertion( + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + contentType, + ) + .then((result) => { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_END, + operationId, + blockchain, + ); + return result; + }); + } + + promises.push(assertionPromise); + + if (includeMetadata) { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_METADATA_START, + operationId, + blockchain, + ); + const metadataPromise = this.tripleStoreService + .getAssertionMetadata(blockchain, contract, knowledgeCollectionId, knowledgeAssetId) + .then((result) => { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_METADATA_END, + operationId, + blockchain, + ); + return result; + }); + promises.push(metadataPromise); } - if (response?.assertion?.length) { + const [assertion, metadata] = await Promise.all(promises); + + const responseData = { + assertion, + ...(includeMetadata && metadata && { metadata }), + }; + if (assertion?.public?.length || assertion?.private?.length || assertion?.length) { await this.operationService.markOperationAsCompleted( operationId, blockchain, - response, + responseData, [ OPERATION_ID_STATUS.GET.GET_LOCAL_END, OPERATION_ID_STATUS.GET.GET_END, @@ -104,6 +205,7 @@ class LocalGetCommand extends Command { return Command.empty(); } + // } await this.operationIdService.updateOperationIdStatus( operationId, diff --git a/src/commands/protocols/get/sender/network-get-command.js b/src/commands/protocols/get/sender/network-get-command.js index 2856591cbb..f7c2334206 100644 --- a/src/commands/protocols/get/sender/network-get-command.js +++ b/src/commands/protocols/get/sender/network-get-command.js @@ -1,5 +1,5 @@ import NetworkProtocolCommand from '../../common/network-protocol-command.js'; -import { ERROR_TYPE } from '../../../../constants/constants.js'; +import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../constants/constants.js'; class NetworkGetCommand extends NetworkProtocolCommand { constructor(ctx) { @@ -8,25 +8,8 @@ class NetworkGetCommand extends NetworkProtocolCommand { this.ualService = ctx.ualService; this.errorType = ERROR_TYPE.GET.GET_NETWORK_ERROR; - } - - async getKeywords(command) { - const { blockchain, contract, tokenId } = command.data; - const locationKeyword = await this.ualService.calculateLocationKeyword( - blockchain, - contract, - tokenId, - ); - - return [locationKeyword]; - } - - async getBatchSize() { - return 2; - } - - async getMinAckResponses() { - return 1; + this.operationStartEvent = OPERATION_ID_STATUS.GET.GET_NETWORK_START; + this.operationEndEvent = OPERATION_ID_STATUS.GET.GET_NETWORK_END; } /** diff --git a/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-init-command.js b/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-init-command.js deleted file mode 100644 index 58956c0976..0000000000 --- a/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-init-command.js +++ /dev/null @@ -1,50 +0,0 @@ -import ProtocolInitCommand from '../../../common/protocol-init-command.js'; -import { NETWORK_MESSAGE_TIMEOUT_MILLS, ERROR_TYPE } from '../../../../../constants/constants.js'; - -class GetInitCommand extends ProtocolInitCommand { - constructor(ctx) { - super(ctx); - this.operationService = ctx.getService; - - this.errorType = ERROR_TYPE.GET.GET_INIT_ERROR; - } - - async prepareMessage(command) { - const { contract, tokenId, keyword, assertionId, state } = command.data; - const proximityScoreFunctionsPairId = command.data.proximityScoreFunctionsPairId ?? 1; - // TODO: Backwards compatibility, send blockchain without chainId - const blockchain = command.data.blockchain.split(':')[0]; - - return { - blockchain, - contract, - tokenId, - keyword, - assertionId, - state, - proximityScoreFunctionsPairId, - }; - } - - messageTimeout() { - return NETWORK_MESSAGE_TIMEOUT_MILLS.GET.INIT; - } - - /** - * Builds default getInitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'v1_0_0GetInitCommand', - delay: 0, - retries: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default GetInitCommand; diff --git a/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js b/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js index d1407d6cac..6cd5d3c24d 100644 --- a/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js +++ b/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js @@ -1,9 +1,12 @@ +import { kcTools } from 'assertion-tools'; import ProtocolRequestCommand from '../../../common/protocol-request-command.js'; import { NETWORK_MESSAGE_TIMEOUT_MILLS, ERROR_TYPE, OPERATION_REQUEST_STATUS, OPERATION_STATUS, + OPERATION_ID_STATUS, + PRIVATE_HASH_SUBJECT_PREFIX, } from '../../../../../constants/constants.js'; class GetRequestCommand extends ProtocolRequestCommand { @@ -13,6 +16,12 @@ class GetRequestCommand extends ProtocolRequestCommand { this.validationService = ctx.validationService; this.errorType = ERROR_TYPE.GET.GET_REQUEST_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.GET.GET_REQUEST_START; + this.operationEndEvent = OPERATION_ID_STATUS.GET.GET_REQUEST_END; + this.prepareMessageStartEvent = OPERATION_ID_STATUS.GET.GET_REQUEST_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = OPERATION_ID_STATUS.GET.GET_REQUEST_PREPARE_MESSAGE_END; + this.sendMessageStartEvent = OPERATION_ID_STATUS.GET.GET_REQUEST_SEND_MESSAGE_START; + this.sendMessageEndEvent = OPERATION_ID_STATUS.GET.GET_REQUEST_SEND_MESSAGE_END; } async shouldSendMessage(command) { @@ -31,36 +40,89 @@ class GetRequestCommand extends ProtocolRequestCommand { } async prepareMessage(command) { - const { contract, tokenId, assertionId, state, hashFunctionId } = command.data; - const proximityScoreFunctionsPairId = command.data.proximityScoreFunctionsPairId ?? 1; - - // TODO: Backwards compatibility, send blockchain without chainId - const blockchain = command.data.blockchain.split(':')[0]; + const { + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + includeMetadata, + ual, + paranetUAL, + paranetId, + isOperationV0, + assertionId, + } = command.data; return { blockchain, contract, - tokenId, + knowledgeCollectionId, + knowledgeAssetId, + includeMetadata, + ual, + paranetUAL, + paranetId, + isOperationV0, assertionId, - state, - hashFunctionId, - proximityScoreFunctionsPairId, }; } async handleAck(command, responseData) { - if (responseData?.nquads) { - try { - await this.validationService.validateAssertion( - command.data.assertionId, - command.data.blockchain, - responseData.nquads, - ); - } catch (e) { - return this.handleNack(command, { - errorMessage: e.message, + const { blockchain, contract, knowledgeCollectionId, knowledgeAssetId } = command.data; + if (responseData?.assertion?.public) { + // Only whole collection can be validated not particular KA + + if (!knowledgeAssetId) { + const publicAssertion = responseData?.assertion?.public; + + const filteredPublic = []; + const privateHashTriples = []; + publicAssertion.forEach((triple) => { + if (triple.startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`)) { + privateHashTriples.push(triple); + } else { + filteredPublic.push(triple); + } }); + + const publicKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( + filteredPublic, + true, + ); + publicKnowledgeAssetsTriplesGrouped.push( + ...kcTools.groupNquadsBySubject(privateHashTriples, true), + ); + try { + await this.validationService.validateDatasetOnBlockchain( + publicKnowledgeAssetsTriplesGrouped.map((t) => t.sort()).flat(), + blockchain, + contract, + knowledgeCollectionId, + ); + + // This is added as support when get starts supporting private for curated paranet + // TODO: This needs to be fixed when paranets are introduced + if (responseData.assertion?.private?.length) + await this.validationService.validatePrivateMerkleRoot( + responseData.assertion.public, + responseData.assertion.private, + ); + } catch (e) { + return this.handleNack(command, { + errorMessage: e.message, + }); + } } + await this.operationService.processResponse( + command, + OPERATION_REQUEST_STATUS.COMPLETED, + responseData, + ); + + return ProtocolRequestCommand.empty(); + } + if (responseData?.assertion?.length) { + // V6 assertion await this.operationService.processResponse( command, diff --git a/src/commands/protocols/publish/publish-validate-assertion-metadata-command.js b/src/commands/protocols/publish/publish-validate-assertion-metadata-command.js new file mode 100644 index 0000000000..cd644259fd --- /dev/null +++ b/src/commands/protocols/publish/publish-validate-assertion-metadata-command.js @@ -0,0 +1,68 @@ +import ValidateAssertionMetadataCommand from '../common/validate-assertion-metadata-command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../constants/constants.js'; +import Command from '../../command.js'; + +class PublishValidateAssertionMetadataCommand extends ValidateAssertionMetadataCommand { + constructor(ctx) { + super(ctx); + this.operationIdService = ctx.operationIdService; + this.dataService = ctx.dataService; + + this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_VALIDATE_ASSERTION_METADATA_ERROR; + this.operationStartEvent = + OPERATION_ID_STATUS.PUBLISH_FINALIZATION.PUBLISH_FINALIZATION_METADATA_VALIDATION_START; + this.operationEndEvent = + OPERATION_ID_STATUS.PUBLISH_FINALIZATION.PUBLISH_FINALIZATION_METADATA_VALIDATION_END; + } + + async execute(command) { + const { operationId, ual, blockchain, merkleRoot, cachedMerkleRoot } = command.data; + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationStartEvent, + ); + + try { + if (merkleRoot !== cachedMerkleRoot) { + await this.handleError( + operationId, + blockchain, + `Invalid Merkle Root for Knowledge Collection with UAL: ${ual}. Received value from blockchain: ${merkleRoot}, Cached value from publish operation: ${cachedMerkleRoot}`, + this.errorType, + true, + ); + } + } catch (e) { + await this.handleError(operationId, blockchain, e.message, this.errorType, true); + return Command.empty(); + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + this.operationEndEvent, + ); + + return this.continueSequence(command.data, command.sequence); + } + + /** + * Builds default publishValidateAssertionMetadataCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'publishValidateAssertionMetadataCommand', + delay: 0, + retries: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default PublishValidateAssertionMetadataCommand; diff --git a/src/commands/protocols/publish/read-cached-publish-data-command.js b/src/commands/protocols/publish/read-cached-publish-data-command.js new file mode 100644 index 0000000000..504a92bbc7 --- /dev/null +++ b/src/commands/protocols/publish/read-cached-publish-data-command.js @@ -0,0 +1,90 @@ +import Command from '../../command.js'; +import { + OPERATION_ID_STATUS, + ERROR_TYPE, + MAX_RETRIES_READ_CACHED_PUBLISH_DATA, + RETRY_DELAY_READ_CACHED_PUBLISH_DATA, +} from '../../../constants/constants.js'; + +class ReadCachedPublishDataCommand extends Command { + constructor(ctx) { + super(ctx); + this.ualService = ctx.ualService; + this.dataService = ctx.dataService; + this.fileService = ctx.fileService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.networkModuleManager = ctx.networkModuleManager; + + this.errorType = ERROR_TYPE.STORE_ASSERTION_ERROR; + } + + async execute(command) { + const { event } = command.data; + const eventData = JSON.parse(event.data); + const { id, publishOperationId, merkleRoot, byteSize } = eventData; + const { blockchain, contractAddress } = event; + const operationId = await this.operationIdService.generateOperationId( + OPERATION_ID_STATUS.PUBLISH_FINALIZATION.PUBLISH_FINALIZATION_START, + publishOperationId, + ); + let datasetPath; + let cachedData; + + try { + datasetPath = this.fileService.getPendingStorageDocumentPath(publishOperationId); + + // eslint-disable-next-line no-await-in-loop + cachedData = await this.fileService.readFile(datasetPath, true); + } catch (error) { + return Command.retry(); + } + + const ual = this.ualService.deriveUAL(blockchain, contractAddress, id); + + const myPeerId = this.networkModuleManager.getPeerId().toB58String(); + if (cachedData.remotePeerId === myPeerId) { + await this.repositoryModuleManager.saveFinalityAck( + publishOperationId, + ual, + cachedData.remotePeerId, + ); + } else { + command.sequence.push('findPublisherNodeCommand', 'networkFinalityCommand'); + } + + return this.continueSequence( + { + operationId, + ual, + blockchain, + contract: contractAddress, + tokenId: id, + merkleRoot, + remotePeerId: cachedData.remotePeerId, + publishOperationId, + assertion: cachedData.assertion, + byteSize, + cachedMerkleRoot: cachedData.merkleRoot, + }, + command.sequence, + ); + } + + /** + * Builds default readCachedPublishDataCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'readCachedPublishDataCommand', + delay: RETRY_DELAY_READ_CACHED_PUBLISH_DATA, + retries: MAX_RETRIES_READ_CACHED_PUBLISH_DATA, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default ReadCachedPublishDataCommand; diff --git a/src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-init-command.js b/src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-init-command.js deleted file mode 100644 index 8a0e410be3..0000000000 --- a/src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-init-command.js +++ /dev/null @@ -1,68 +0,0 @@ -import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js'; -import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../../constants/constants.js'; - -class HandleStoreInitCommand extends HandleProtocolMessageCommand { - constructor(ctx) { - super(ctx); - this.publishService = ctx.publishService; - this.ualService = ctx.ualService; - - this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_REMOTE_ERROR; - } - - async prepareMessage(commandData) { - const { operationId, assertionId, blockchain, contract, tokenId, keyword, hashFunctionId } = - commandData; - const proximityScoreFunctionsPairId = commandData.proximityScoreFunctionsPairId ?? 1; - - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.VALIDATE_ASSET_REMOTE_START, - ); - - const validationResult = await this.validateReceivedData( - operationId, - assertionId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - ); - - this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.VALIDATE_ASSET_REMOTE_END, - ); - - return validationResult; - } - - async retryFinished(command) { - const { operationId } = command.data; - await this.handleError( - `Retry count for command: ${command.name} reached! Unable to validate data for operation id: ${operationId}`, - command, - ); - } - - /** - * Builds default handleStoreInitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'v1_0_0HandleStoreInitCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default HandleStoreInitCommand; diff --git a/src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-request-command.js b/src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-request-command.js index bda74a7bb0..a051613200 100644 --- a/src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-request-command.js +++ b/src/commands/protocols/publish/receiver/v1.0.0/v1-0-0-handle-store-request-command.js @@ -4,8 +4,6 @@ import { NETWORK_MESSAGE_TYPES, OPERATION_ID_STATUS, ERROR_TYPE, - TRIPLE_STORE_REPOSITORIES, - SERVICE_AGREEMENT_SOURCES, } from '../../../../../constants/constants.js'; class HandleStoreRequestCommand extends HandleProtocolMessageCommand { @@ -13,88 +11,120 @@ class HandleStoreRequestCommand extends HandleProtocolMessageCommand { super(ctx); this.validationService = ctx.validationService; this.operationService = ctx.publishService; - this.serviceAgreementService = ctx.serviceAgreementService; this.repositoryModuleManager = ctx.repositoryModuleManager; this.blockchainModuleManager = ctx.blockchainModuleManager; this.tripleStoreService = ctx.tripleStoreService; this.ualService = ctx.ualService; + this.pendingStorageService = ctx.pendingStorageService; + this.operationIdService = ctx.operationIdService; + this.pendingStorageService = ctx.pendingStorageService; + this.signatureService = ctx.signatureService; this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_START; + this.operationEndEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_END; + this.prepareMessageStartEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_END; + this.sendMessageResponseStartEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_SEND_RESPONSE_START; + this.sendMessageResponseEndEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_SEND_RESPONSE_END; + this.removeCachedSessionStartEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_START; + this.removeCachedSessionEndEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_END; } async prepareMessage(commandData) { - const { - blockchain, - keyword, - hashFunctionId, - contract, - tokenId, - operationId, - assertionId, - agreementId, - agreementData, - } = commandData; + const { blockchain, operationId, datasetRoot, remotePeerId, isOperationV0 } = commandData; await this.operationIdService.updateOperationIdStatus( operationId, blockchain, - OPERATION_ID_STATUS.PUBLISH.VALIDATING_PUBLISH_ASSERTION_REMOTE_START, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_REMOTE_START, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_GET_CACHED_OPERATION_ID_DATA_START, + operationId, + blockchain, ); - const assertionIds = await this.blockchainModuleManager.getAssertionIds( + const { dataset } = await this.operationIdService.getCachedOperationIdData(operationId); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_GET_CACHED_OPERATION_ID_DATA_END, + operationId, + blockchain, + ); + + const validationResult = await this.validateReceivedData( + operationId, + datasetRoot, + dataset, blockchain, - contract, - tokenId, + isOperationV0, ); - const stateIndex = assertionIds.length - 1; - const { assertion } = await this.operationIdService.getCachedOperationIdData(operationId); - await this.validationService.validateAssertion(assertionId, blockchain, assertion); await this.operationIdService.updateOperationIdStatus( operationId, blockchain, - OPERATION_ID_STATUS.PUBLISH.VALIDATING_PUBLISH_ASSERTION_REMOTE_END, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_REMOTE_END, ); + if (validationResult.messageType === NETWORK_MESSAGE_TYPES.RESPONSES.NACK) { + return validationResult; + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_CACHE_DATASET_START, + ); + if (isOperationV0) { + const { contract, tokenId } = commandData; + const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + await this.tripleStoreService.createV6KnowledgeCollection(dataset, ual); + } else { + await this.pendingStorageService.cacheDataset( + operationId, + datasetRoot, + dataset, + remotePeerId, + ); + } await this.operationIdService.updateOperationIdStatus( operationId, blockchain, - OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_START, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_CACHE_DATASET_END, ); - await this.tripleStoreService.localStoreAsset( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - assertionId, - assertion, + const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_SIGN_START, + operationId, blockchain, - contract, - tokenId, - keyword, ); - await this.repositoryModuleManager.updateServiceAgreementRecord( + const { v, r, s, vs } = await this.signatureService.signMessage(blockchain, datasetRoot); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_REMOTE_SIGN_END, + operationId, blockchain, - contract, - tokenId, - agreementId, - agreementData.startTime, - agreementData.epochsNumber, - agreementData.epochLength, - agreementData.scoreFunctionId, - agreementData.proofWindowOffsetPerc, - hashFunctionId, - keyword, - assertionId, - stateIndex, - SERVICE_AGREEMENT_SOURCES.NODE, ); await this.operationIdService.updateOperationIdStatus( operationId, blockchain, - OPERATION_ID_STATUS.PUBLISH.PUBLISH_LOCAL_STORE_END, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_REMOTE_END, ); - return { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: {} }; + return { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, + messageData: { identityId, v, r, s, vs }, + }; } /** diff --git a/src/commands/protocols/publish/sender/network-publish-command.js b/src/commands/protocols/publish/sender/network-publish-command.js index ed1bf5bbdd..edc9936d63 100644 --- a/src/commands/protocols/publish/sender/network-publish-command.js +++ b/src/commands/protocols/publish/sender/network-publish-command.js @@ -1,33 +1,16 @@ import NetworkProtocolCommand from '../../common/network-protocol-command.js'; -import { ERROR_TYPE } from '../../../../constants/constants.js'; +import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../constants/constants.js'; class NetworkPublishCommand extends NetworkProtocolCommand { constructor(ctx) { super(ctx); + this.blockchainModuleManager = ctx.blockchainModuleManager; // this should be removed (???) + this.ualService = ctx.ualService; // this should be removed (???) this.operationService = ctx.publishService; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.ualService = ctx.ualService; - this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_START_ERROR; - } - - async getKeywords(command) { - const { blockchain, contract, tokenId } = command.data; - const locationKeyword = await this.ualService.calculateLocationKeyword( - blockchain, - contract, - tokenId, - ); - - return [locationKeyword]; - } - - async getBatchSize(blockchainId) { - return this.blockchainModuleManager.getR2(blockchainId); - } - - async getMinAckResponses(blockchainId) { - return this.blockchainModuleManager.getR1(blockchainId); + this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_NETWORK_START_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_NETWORK_START; + this.operationEndEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_NETWORK_END; } /** diff --git a/src/commands/protocols/publish/sender/publish-find-shard-command.js b/src/commands/protocols/publish/sender/publish-find-shard-command.js new file mode 100644 index 0000000000..1d9bff3af6 --- /dev/null +++ b/src/commands/protocols/publish/sender/publish-find-shard-command.js @@ -0,0 +1,52 @@ +import FindShardCommand from '../../common/find-shard-command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../../constants/constants.js'; + +class PublishFindShardCommand extends FindShardCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.publishService; + this.errorType = ERROR_TYPE.FIND_SHARD.PUBLISH_FIND_SHARD_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_FIND_NODES_START; + this.operationEndEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_FIND_NODES_END; + this.findShardNodesStartEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_FIND_NODES_FIND_SHARD_NODES_START; + this.findShardNodesEndEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_FIND_NODES_FIND_SHARD_NODES_END; + this.processFoundNodesStartEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_FIND_NODES_PROCESS_FOUND_NODES_START; + this.processFoundNodesEndEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_FIND_NODES_PROCESS_FOUND_NODES_END; + } + + getOperationCommandSequence(nodePartOfShard, commandData) { + const sequence = []; + if (!commandData.isOperationV0) { + sequence.push('publishValidateAssetCommand'); + } + + if (nodePartOfShard && !commandData.isOperationV0) { + sequence.push('localStoreCommand'); + } else { + sequence.push('networkPublishCommand'); + } + + return sequence; + } + + /** + * Builds default publishFindShardCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'publishFindShardCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default PublishFindShardCommand; diff --git a/src/commands/protocols/publish/sender/publish-schedule-messages-command.js b/src/commands/protocols/publish/sender/publish-schedule-messages-command.js index ff0f7ebdb0..e140a5466a 100644 --- a/src/commands/protocols/publish/sender/publish-schedule-messages-command.js +++ b/src/commands/protocols/publish/sender/publish-schedule-messages-command.js @@ -1,127 +1,27 @@ import ProtocolScheduleMessagesCommand from '../../common/protocol-schedule-messages-command.js'; -import Command from '../../../command.js'; import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../../constants/constants.js'; class PublishScheduleMessagesCommand extends ProtocolScheduleMessagesCommand { constructor(ctx) { super(ctx); this.operationService = ctx.publishService; - this.serviceAgreementService = ctx.serviceAgreementService; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.repositoryModuleManager = ctx.repositoryModuleManager; + this.blockchainModuleManager = ctx.blockchainModuleManager; // this should be removed (???) + this.repositoryModuleManager = ctx.repositoryModuleManager; // this should be removed (???) - this.startEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_REPLICATE_START; + this.operationStartEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_REPLICATE_START; + this.operationEndEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_REPLICATE_END; this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_START_ERROR; } - async execute(command) { - const { - operationId, - keyword, - leftoverNodes, - numberOfFoundNodes, - blockchain, - minAckResponses, - hashFunctionId, - assertionId, - tokenId, - contract, - } = command.data; - let isValid = true; - // perform check only first time not for every batch - if (leftoverNodes.length === numberOfFoundNodes) { - isValid = await this.validateBidsForNeighbourhood( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - assertionId, - leftoverNodes, - minAckResponses, - operationId, - ); - } - if (isValid) { - return super.execute(command); - } - return Command.empty(); - } - - async validateBidsForNeighbourhood( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - assertionId, - nodes, - minAckResponses, - operationId, - ) { - const blockchainAssertionSize = await this.blockchainModuleManager.getAssertionSize( - blockchain, - assertionId, - ); - - const agreementId = this.serviceAgreementService.generateId( + getNextCommandData(command) { + const { datasetRoot, blockchain, isOperationV0, contract, tokenId } = command.data; + return { blockchain, + datasetRoot, + isOperationV0, contract, tokenId, - keyword, - hashFunctionId, - ); - const agreementData = await this.blockchainModuleManager.getAgreementData( - blockchain, - agreementId, - ); - - if (!agreementData) { - await this.operationService.markOperationAsFailed( - operationId, - blockchain, - 'Unable to fetch agreement data.', - ERROR_TYPE.PUBLISH.PUBLISH_START_ERROR, - ); - return false; - } - - const r0 = await this.blockchainModuleManager.getR0(); - - const serviceAgreementBid = await this.serviceAgreementService.calculateBid( - blockchain, - blockchainAssertionSize, - agreementData, - r0, - ); - - let validBids = 0; - - await Promise.all( - nodes.map(async (node) => { - const ask = await this.getAsk(blockchain, node.id); - if (ask.lte(serviceAgreementBid)) { - validBids += 1; - } - }), - ); - - if (validBids < minAckResponses) { - await this.operationService.markOperationAsFailed( - operationId, - blockchain, - 'Unable to start publish, not enough nodes in neighbourhood satisfy the bid.', - ERROR_TYPE.PUBLISH.PUBLISH_START_ERROR, - ); - return false; - } - return true; - } - - async getAsk(blockchain, nodeId) { - const peerRecord = await this.repositoryModuleManager.getPeerRecord(nodeId, blockchain); - - return this.blockchainModuleManager.convertToWei(blockchain, peerRecord.ask); + }; } /** diff --git a/src/commands/protocols/publish/sender/publish-validate-asset-blockchain-command.js b/src/commands/protocols/publish/sender/publish-validate-asset-blockchain-command.js new file mode 100644 index 0000000000..808629850d --- /dev/null +++ b/src/commands/protocols/publish/sender/publish-validate-asset-blockchain-command.js @@ -0,0 +1,71 @@ +import ValidateAssetCommand from '../../../common/validate-asset-command.js'; +import { OPERATION_ID_STATUS } from '../../../../constants/constants.js'; + +class PublishValidateAssetBlockchainCommand extends ValidateAssetCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.publishService; + this.validationService = ctx.validationService; + } + + async handleError(operationId, blockchain, errorMessage, errorType) { + await this.operationService.markOperationAsFailed( + operationId, + blockchain, + errorMessage, + errorType, + ); + } + + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { operationId, blockchain, contract, tokenId, datasetRoot } = command.data; + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.VALIDATE_ASSET_BLOCKCHAIN_START, + ); + const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + this.logger.debug( + `Validating asset's public assertion with id: ${datasetRoot} ual: ${ual}`, + ); + + await this.validationService.validateDatasetRootOnBlockchain( + datasetRoot, + blockchain, + contract, + tokenId, + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.VALIDATE_ASSET_BLOCKCHAIN_END, + ); + return this.continueSequence( + { ...command.data, retry: undefined, period: undefined }, + command.sequence, + ); + } + + /** + * Builds default PublishValidateAssetBlockchainCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'publishValidateAssetBlockchainCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default PublishValidateAssetBlockchainCommand; diff --git a/src/commands/protocols/publish/sender/publish-validate-asset-command.js b/src/commands/protocols/publish/sender/publish-validate-asset-command.js index 764624a226..bfdce4339e 100644 --- a/src/commands/protocols/publish/sender/publish-validate-asset-command.js +++ b/src/commands/protocols/publish/sender/publish-validate-asset-command.js @@ -1,9 +1,17 @@ import ValidateAssetCommand from '../../../common/validate-asset-command.js'; +import Command from '../../../command.js'; +import { + OPERATION_ID_STATUS, + ERROR_TYPE, + LOCAL_STORE_TYPES, + PARANET_ACCESS_POLICY, +} from '../../../../constants/constants.js'; class PublishValidateAssetCommand extends ValidateAssetCommand { constructor(ctx) { super(ctx); this.operationService = ctx.publishService; + this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_VALIDATE_ASSET_ERROR; } async handleError(operationId, blockchain, errorMessage, errorType) { @@ -15,6 +23,156 @@ class PublishValidateAssetCommand extends ValidateAssetCommand { ); } + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { + operationId, + blockchain, + storeType = LOCAL_STORE_TYPES.TRIPLE, + paranetUAL, + datasetRoot, + } = command.data; + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_START, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_GET_CACHED_OPERATION_ID_DATA_START, + operationId, + blockchain, + ); + const cachedData = await this.operationIdService.getCachedOperationIdData(operationId); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_GET_CACHED_OPERATION_ID_DATA_END, + operationId, + blockchain, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_DATASET_ROOT_START, + operationId, + blockchain, + ); + await this.validationService.validateDatasetRoot(cachedData.dataset.public, datasetRoot); + + if (cachedData.dataset?.private?.length) + await this.validationService.validatePrivateMerkleRoot( + cachedData.dataset.public, + cachedData.dataset.private, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_DATASET_ROOT_END, + operationId, + blockchain, + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_END, + ); + + let paranetId; + if (storeType === LOCAL_STORE_TYPES.TRIPLE_PARANET) { + try { + const { + blockchain: paranetBlockchain, + contract: paranetContract, + tokenId: paranetTokenId, + } = this.ualService.resolveUAL(paranetUAL); + + paranetId = this.paranetService.constructParanetId(paranetContract, paranetTokenId); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_PARANET_EXISTS_START, + operationId, + blockchain, + ); + const paranetExists = await this.blockchainModuleManager.paranetExists( + paranetBlockchain, + paranetId, + ); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_PARANET_EXISTS_END, + operationId, + blockchain, + ); + + if (!paranetExists) { + await this.handleError( + operationId, + blockchain, + `Paranet: ${paranetId} doesn't exist.`, + this.errorType, + ); + return Command.empty(); + } + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH + .PUBLISH_VALIDATE_ASSET_NODES_ACCESS_POLICY_CHECK_START, + operationId, + blockchain, + ); + const nodesAccessPolicy = await this.blockchainModuleManager.getNodesAccessPolicy( + blockchain, + paranetId, + ); + if (nodesAccessPolicy === PARANET_ACCESS_POLICY.CURATED) { + const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); + const isCuratedNode = await this.blockchainModuleManager.isCuratedNode( + blockchain, + paranetId, + identityId, + ); + if (!isCuratedNode) { + await this.handleError( + operationId, + blockchain, + `Node is not part of curated paranet ${paranetId} because node with id ${identityId} is not a curated node.`, + this.errorType, + ); + return Command.empty(); + } + } else { + await this.handleError( + operationId, + blockchain, + `Paranet ${paranetId} is not curated paranet.`, + this.errorType, + ); + return Command.empty(); + } + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH + .PUBLISH_VALIDATE_ASSET_NODES_ACCESS_POLICY_CHECK_END, + operationId, + blockchain, + ); + } catch (error) { + await this.handleError(operationId, blockchain, error.message, this.errorType); + return Command.empty(); + } + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_VALIDATE_ASSET_END, + ); + return this.continueSequence( + { ...command.data, paranetId, retry: undefined, period: undefined }, + command.sequence, + ); + } + /** * Builds default publishValidateAssetCommand * @param map diff --git a/src/commands/protocols/publish/sender/v1.0.0/v1-0-0-publish-init-command.js b/src/commands/protocols/publish/sender/v1.0.0/v1-0-0-publish-init-command.js deleted file mode 100644 index 11aa6753b7..0000000000 --- a/src/commands/protocols/publish/sender/v1.0.0/v1-0-0-publish-init-command.js +++ /dev/null @@ -1,32 +0,0 @@ -import ProtocolInitCommand from '../../../common/protocol-init-command.js'; -import { NETWORK_MESSAGE_TIMEOUT_MILLS, ERROR_TYPE } from '../../../../../constants/constants.js'; - -class PublishInitCommand extends ProtocolInitCommand { - constructor(ctx) { - super(ctx); - this.operationService = ctx.publishService; - - this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_STORE_INIT_ERROR; - } - - messageTimeout() { - return NETWORK_MESSAGE_TIMEOUT_MILLS.PUBLISH.INIT; - } - - /** - * Builds default publishInitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'v1_0_0PublishInitCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default PublishInitCommand; diff --git a/src/commands/protocols/publish/sender/v1.0.0/v1-0-0-publish-request-command.js b/src/commands/protocols/publish/sender/v1.0.0/v1-0-0-publish-request-command.js index d1f5b01ce1..18f1d927ff 100644 --- a/src/commands/protocols/publish/sender/v1.0.0/v1-0-0-publish-request-command.js +++ b/src/commands/protocols/publish/sender/v1.0.0/v1-0-0-publish-request-command.js @@ -1,21 +1,65 @@ import ProtocolRequestCommand from '../../../common/protocol-request-command.js'; -import { NETWORK_MESSAGE_TIMEOUT_MILLS, ERROR_TYPE } from '../../../../../constants/constants.js'; +import { + NETWORK_MESSAGE_TIMEOUT_MILLS, + ERROR_TYPE, + OPERATION_ID_STATUS, + NETWORK_SIGNATURES_FOLDER, +} from '../../../../../constants/constants.js'; class PublishRequestCommand extends ProtocolRequestCommand { constructor(ctx) { super(ctx); this.operationService = ctx.publishService; - + this.signatureService = ctx.signatureService; + this.operationIdService = ctx.operationIdService; this.errorType = ERROR_TYPE.PUBLISH.PUBLISH_STORE_REQUEST_ERROR; + + this.operationStartEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_REQUEST_START; + this.operationEndEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_REQUEST_END; + this.prepareMessageStartEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_REQUEST_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = + OPERATION_ID_STATUS.PUBLISH.PUBLISH_REQUEST_PREPARE_MESSAGE_END; + this.sendMessageStartEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_SEND_MESSAGE_START; + this.sendMessageEndEvent = OPERATION_ID_STATUS.PUBLISH.PUBLISH_SEND_MESSAGE_END; } async prepareMessage(command) { - const { - public: { assertion }, - } = await this.operationIdService.getCachedOperationIdData(command.data.operationId); + const { datasetRoot, operationId, isOperationV0, contract, tokenId } = command.data; + + // TODO: Backwards compatibility, send blockchain without chainId + const { blockchain } = command.data; + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_GET_CACHED_OPERATION_ID_DATA_START, + operationId, + blockchain, + ); + const { dataset } = await this.operationIdService.getCachedOperationIdData(operationId); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_GET_CACHED_OPERATION_ID_DATA_END, + operationId, + blockchain, + ); + + return { + dataset: isOperationV0 ? dataset : dataset.public, + datasetRoot, + blockchain, + isOperationV0, + contract, + tokenId, + }; + } + getNextCommandData(command) { + const { datasetRoot, blockchain, isOperationV0, contract, tokenId } = command.data; return { - assertion, + blockchain, + datasetRoot, + isOperationV0, + contract, + tokenId, }; } @@ -23,6 +67,32 @@ class PublishRequestCommand extends ProtocolRequestCommand { return NETWORK_MESSAGE_TIMEOUT_MILLS.PUBLISH.REQUEST; } + async handleAck(command, responseData) { + const { operationId, blockchain } = command.data; + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_ADD_SIGNATURE_TO_STORAGE_START, + operationId, + blockchain, + ); + + await this.signatureService.addSignatureToStorage( + NETWORK_SIGNATURES_FOLDER, + operationId, + responseData.identityId, + responseData.v, + responseData.r, + responseData.s, + responseData.vs, + ); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_ADD_SIGNATURE_TO_STORAGE_END, + operationId, + blockchain, + ); + + return super.handleAck(command, responseData); + } + /** * Builds default publishRequestCommand * @param map diff --git a/src/commands/protocols/publish/store-assertion-command.js b/src/commands/protocols/publish/store-assertion-command.js new file mode 100644 index 0000000000..2bc8e2b142 --- /dev/null +++ b/src/commands/protocols/publish/store-assertion-command.js @@ -0,0 +1,68 @@ +import Command from '../../command.js'; +import { + OPERATION_ID_STATUS, + ERROR_TYPE, + TRIPLE_STORE_REPOSITORIES, +} from '../../../constants/constants.js'; + +class StoreAssertionCommand extends Command { + constructor(ctx) { + super(ctx); + this.operationIdService = ctx.operationIdService; + this.ualService = ctx.ualService; + this.dataService = ctx.dataService; + this.tripleStoreService = ctx.tripleStoreService; + + this.errorType = ERROR_TYPE.STORE_ASSERTION_ERROR; + } + + async execute(command) { + const { operationId, ual, blockchain, assertion } = command.data; + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH_FINALIZATION.PUBLISH_FINALIZATION_STORE_ASSERTION_START, + ); + try { + await this._insertAssertion(assertion, ual); + } catch (e) { + await this.handleError(operationId, blockchain, e.message, this.errorType, true); + return Command.empty(); // TODO: Should it end here or do a retry? + } + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH_FINALIZATION.PUBLISH_FINALIZATION_STORE_ASSERTION_END, + ); + + return this.continueSequence(command.data, command.sequence); + } + + async _insertAssertion(assertion, ual) { + await this.tripleStoreService.insertKnowledgeCollection( + TRIPLE_STORE_REPOSITORIES.DKG, + ual, + assertion, + ); + } + + /** + * Builds default storeAssertionCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'storeAssertionCommand', + delay: 0, + retries: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default StoreAssertionCommand; diff --git a/src/commands/protocols/update/receiver/delete-pending-state-command.js b/src/commands/protocols/update/receiver/delete-pending-state-command.js deleted file mode 100644 index 4edf754a55..0000000000 --- a/src/commands/protocols/update/receiver/delete-pending-state-command.js +++ /dev/null @@ -1,133 +0,0 @@ -import Command from '../../../command.js'; -import { - ERROR_TYPE, - PENDING_STORAGE_REPOSITORIES, - TRIPLE_STORE_REPOSITORIES, -} from '../../../../constants/constants.js'; - -class DeletePendingStateCommand extends Command { - constructor(ctx) { - super(ctx); - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.pendingStorageService = ctx.pendingStorageService; - - this.errorType = ERROR_TYPE.UPDATE.UPDATE_DELETE_PENDING_STATE_ERROR; - } - - async execute(command) { - const { blockchain, contract, tokenId, assertionId, operationId, keyword, hashFunctionId } = - command.data; - - this.logger.trace( - `Started ${command.name} for blockchain: ${blockchain} contract: ${contract}, ` + - `token id: ${tokenId}, assertion id: ${assertionId}`, - ); - - const pendingStateExists = await this.pendingStateExists( - blockchain, - contract, - tokenId, - assertionId, - ); - - if (pendingStateExists) { - this.logger.trace( - `Pending state exists for token id: ${tokenId}, assertion id: ${assertionId}, blockchain: ${blockchain} and operationId: ${operationId}`, - ); - const assetStates = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - if (assetStates.includes(assertionId)) { - const stateIndex = assetStates.indexOf(assertionId); - this.logger.trace( - `Node missed state finalized event for token id: ${tokenId}, assertion id: ${assertionId}, blockchain: ${blockchain} and operationId: ${operationId}. Node will now move data from pending storage to triple store`, - ); - await Promise.all([ - this.pendingStorageService.moveAndDeletePendingState( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - PENDING_STORAGE_REPOSITORIES.PUBLIC, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - assertionId, - stateIndex, - ), - this.pendingStorageService.moveAndDeletePendingState( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - PENDING_STORAGE_REPOSITORIES.PRIVATE, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - assertionId, - stateIndex, - ), - ]); - } - await this.deletePendingState(blockchain, contract, tokenId, assertionId, operationId); - } - return Command.empty(); - } - - async deletePendingState(blockchain, contract, tokenId, assertionId, operationId) { - for (const repository of [ - PENDING_STORAGE_REPOSITORIES.PUBLIC, - PENDING_STORAGE_REPOSITORIES.PRIVATE, - ]) { - // eslint-disable-next-line no-await-in-loop - await this.pendingStorageService.removeCachedAssertion( - repository, - blockchain, - contract, - tokenId, - assertionId, - operationId, - ); - } - } - - async pendingStateExists(blockchain, contract, tokenId, assertionId) { - for (const repository of [ - PENDING_STORAGE_REPOSITORIES.PUBLIC, - PENDING_STORAGE_REPOSITORIES.PRIVATE, - ]) { - // eslint-disable-next-line no-await-in-loop - const pendingStateExists = await this.pendingStorageService.assetHasPendingState( - repository, - blockchain, - contract, - tokenId, - assertionId, - ); - - if (pendingStateExists) { - return true; - } - } - return false; - } - - /** - * Builds default deletePendingStorageCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'deletePendingStateCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default DeletePendingStateCommand; diff --git a/src/commands/protocols/update/receiver/submit-update-commit-command.js b/src/commands/protocols/update/receiver/submit-update-commit-command.js deleted file mode 100644 index c2bf7eb5a0..0000000000 --- a/src/commands/protocols/update/receiver/submit-update-commit-command.js +++ /dev/null @@ -1,160 +0,0 @@ -import Command from '../../../command.js'; -import { - OPERATION_ID_STATUS, - ERROR_TYPE, - COMMAND_RETRIES, - COMMAND_TX_GAS_INCREASE_FACTORS, - CONTRACT_FUNCTION_FIXED_GAS_PRICE, -} from '../../../../constants/constants.js'; -import SendTransactionCommand from '../../../common/send-transaction-command.js'; - -class SubmitUpdateCommitCommand extends SendTransactionCommand { - constructor(ctx) { - super(ctx); - this.commandExecutor = ctx.commandExecutor; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.operationIdService = ctx.operationIdService; - this.serviceAgreementService = ctx.serviceAgreementService; - - this.errorType = ERROR_TYPE.COMMIT_PROOF.SUBMIT_UPDATE_COMMIT_ERROR; - - this.txStartStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_UPDATE_COMMIT_SEND_TX_START; - this.txEndStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_UPDATE_COMMIT_SEND_TX_END; - this.txErrorType = ERROR_TYPE.COMMIT_PROOF.SUBMIT_UPDATE_COMMIT_SEND_TX_ERROR; - this.txGasIncreaseFactor = COMMAND_TX_GAS_INCREASE_FACTORS.SUBMIT_UPDATE_COMMIT; - this.operationEndStatus = OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_UPDATE_COMMIT_END; - this.commandRetryNumber = COMMAND_RETRIES.SUBMIT_UPDATE_COMMIT; - } - - async execute(command) { - const { - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - agreementData, - agreementId, - operationId, - gasPrice, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - } = command.data; - - this.logger.trace( - `Started ${command.name} for the Service Agreement with the ID: ${agreementId}, ` + - `Blockchain: ${blockchain}, Contract: ${contract}, Token ID: ${tokenId}, ` + - `Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, Operation ID: ${operationId}, ` + - `Closest Node: ${closestNode}, Left neighborhood edge: ${leftNeighborhoodEdge}, ` + - `Right neighborhood edge: ${rightNeighborhoodEdge}, `, - `Retry number: ${COMMAND_RETRIES.SUBMIT_UPDATE_COMMIT - command.retries + 1}`, - ); - - const epoch = await this.serviceAgreementService.calculateCurrentEpoch( - agreementData.startTime, - agreementData.epochLength, - blockchain, - ); - - if (command.retries === COMMAND_RETRIES.SUBMIT_UPDATE_COMMIT) { - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.COMMIT_PROOF.SUBMIT_UPDATE_COMMIT_START, - operationId, - blockchain, - agreementId, - epoch, - ); - } - - const hasPendingUpdate = await this.blockchainModuleManager.hasPendingUpdate( - blockchain, - tokenId, - ); - - if (!hasPendingUpdate) { - this.logger.trace( - `Not submitting update commit as state has been already finalized for the Service Agreement ` + - `with the ID: ${agreementId}, Blockchain: ${blockchain}, Contract: ${contract}, ` + - `Token ID: ${tokenId}, Keyword: ${keyword}, Hash function ID: ${hashFunctionId}, ` + - `Closest Node: ${closestNode}, Left neighborhood edge: ${leftNeighborhoodEdge}, ` + - `Right neighborhood edge: ${rightNeighborhoodEdge}, `, - +`Epoch: ${epoch}, Operation ID: ${operationId}`, - ); - - return Command.empty(); - } - const txGasPrice = - gasPrice ?? - CONTRACT_FUNCTION_FIXED_GAS_PRICE[blockchain]?.SUBMIT_UPDATE_COMMIT ?? - (await this.blockchainModuleManager.getGasPrice(blockchain)); - - const transactionCompletePromise = new Promise((resolve, reject) => { - this.blockchainModuleManager.submitUpdateCommit( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - (result) => { - if (result?.error) { - reject(result.error); - } - resolve(true); - }, - txGasPrice, - ); - }); - - return this.sendTransactionAndHandleResult( - transactionCompletePromise, - { - blockchain, - agreementId, - epoch, - operationId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - contract, - tokenId, - keyword, - hashFunctionId, - txGasPrice, - }, - command, - ); - } - - async retryFinished(command) { - const { blockchain, operationId } = command.data; - await this.handleError( - operationId, - blockchain, - `Max retries has been reached! Latest Error Message: ${command.message}`, - this.errorType, - true, - ); - } - - /** - * Builds default submitUpdateCommitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'submitUpdateCommitCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default SubmitUpdateCommitCommand; diff --git a/src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-init-command.js b/src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-init-command.js deleted file mode 100644 index 5f218f45a9..0000000000 --- a/src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-init-command.js +++ /dev/null @@ -1,90 +0,0 @@ -import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js'; -import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../../constants/constants.js'; - -class HandleUpdateInitCommand extends HandleProtocolMessageCommand { - constructor(ctx) { - super(ctx); - this.ualService = ctx.ualService; - this.shardingTableService = ctx.shardingTableService; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.serviceAgreementService = ctx.serviceAgreementService; - this.repositoryModuleManager = ctx.repositoryModuleManager; - - this.errorType = ERROR_TYPE.UPDATE.UPDATE_REMOTE_ERROR; - } - - async prepareMessage(commandData) { - const { operationId, assertionId, blockchain, contract, tokenId, keyword, hashFunctionId } = - commandData; - const proximityScoreFunctionsPairId = commandData.proximityScoreFunctionsPairId ?? 1; - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.VALIDATE_ASSET_REMOTE_START, - ); - - await this.operationIdService.cacheOperationIdData(operationId, { - assertionId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - }); - - const validationResult = await this.validateReceivedData( - operationId, - assertionId, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - ); - - await this.operationIdService.updateOperationIdStatus( - operationId, - blockchain, - OPERATION_ID_STATUS.VALIDATE_ASSET_REMOTE_END, - ); - return validationResult; - } - - async validateAssertionId(blockchain, contract, tokenId, assertionId, ual) { - const blockchainAssertionId = await this.blockchainModuleManager.getUnfinalizedAssertionId( - blockchain, - tokenId, - ); - if (blockchainAssertionId !== assertionId) { - throw Error( - `Invalid assertion id for asset ${ual}. Received value from blockchain: ${blockchainAssertionId}, received value from request: ${assertionId}`, - ); - } - } - - async retryFinished(command) { - const { operationId } = command.data; - await this.handleError( - `Retry count for command: ${command.name} reached! Unable to validate data for operation id: ${operationId}`, - command, - ); - } - - /** - * Builds default v1_0_0HandleUpdateInitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'v1_0_0HandleUpdateInitCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default HandleUpdateInitCommand; diff --git a/src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-request-command.js b/src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-request-command.js index 199bf7f55f..bb542e796e 100644 --- a/src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-request-command.js +++ b/src/commands/protocols/update/receiver/v1.0.0/v1-0-0-handle-update-request-command.js @@ -4,201 +4,106 @@ import { NETWORK_MESSAGE_TYPES, OPERATION_ID_STATUS, ERROR_TYPE, - COMMAND_RETRIES, - PENDING_STORAGE_REPOSITORIES, - COMMIT_BLOCK_DURATION_IN_BLOCKS, - COMMITS_DELAY_BETWEEN_NODES_IN_BLOCKS, } from '../../../../../constants/constants.js'; class HandleUpdateRequestCommand extends HandleProtocolMessageCommand { constructor(ctx) { super(ctx); this.operationService = ctx.updateService; - this.serviceAgreementService = ctx.serviceAgreementService; - this.commandExecutor = ctx.commandExecutor; - this.repositoryModuleManager = ctx.repositoryModuleManager; this.blockchainModuleManager = ctx.blockchainModuleManager; - this.tripleStoreService = ctx.tripleStoreService; - this.ualService = ctx.ualService; this.pendingStorageService = ctx.pendingStorageService; - this.shardingTableService = ctx.shardingTableService; - this.hashingService = ctx.hashingService; - this.proximityScoringService = ctx.proximityScoringService; + this.operationIdService = ctx.operationIdService; + this.pendingStorageService = ctx.pendingStorageService; + this.signatureService = ctx.signatureService; this.errorType = ERROR_TYPE.UPDATE.UPDATE_LOCAL_STORE_REMOTE_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_START; + this.operationEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_END; + this.prepareMessageStartEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_END; + this.sendMessageResponseStartEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_SEND_RESPONSE_START; + this.sendMessageResponseEndEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_SEND_RESPONSE_END; + this.removeCachedSessionStartEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_START; + this.removeCachedSessionEndEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_END; } async prepareMessage(commandData) { - const { + const { blockchain, operationId, datasetRoot } = commandData; + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_GET_CACHED_OPERATION_ID_DATA_START, + operationId, blockchain, - contract, - tokenId, + ); + const { dataset } = await this.operationIdService.getCachedOperationIdData(operationId); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_GET_CACHED_OPERATION_ID_DATA_END, operationId, - agreementId, - keyword, - hashFunctionId, - agreementData, - } = commandData; - - const proximityScoreFunctionsPairId = commandData.proximityScoreFunctionsPairId ?? 1; + blockchain, + ); await this.operationIdService.updateOperationIdStatus( operationId, blockchain, - OPERATION_ID_STATUS.UPDATE.VALIDATING_UPDATE_ASSERTION_REMOTE_START, + OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_ASSET_REMOTE_START, ); - const cachedData = await this.operationIdService.getCachedOperationIdData(operationId); - await this.pendingStorageService.cacheAssertion( - PENDING_STORAGE_REPOSITORIES.PUBLIC, - blockchain, - contract, - tokenId, - cachedData.assertionId, - { - public: { - assertion: cachedData.assertion, - }, - agreementId, - agreementData, - }, + const validationResult = await this.validateReceivedData( operationId, - ); - - const updateCommitWindowDuration = - await this.blockchainModuleManager.getUpdateCommitWindowDuration(blockchain); - const r0 = await this.blockchainModuleManager.getR0(blockchain); - const r2 = await this.blockchainModuleManager.getR2(blockchain); - const scheduleCommandsPromises = []; - - const neighbourhood = await this.shardingTableService.findNeighbourhood( + datasetRoot, + dataset, blockchain, - keyword, - r2, - hashFunctionId, - proximityScoreFunctionsPairId, ); - const closestNode = neighbourhood[0]; - - let neighbourhoodEdges = null; - if (proximityScoreFunctionsPairId === 2) { - neighbourhoodEdges = await this.shardingTableService.getNeighboorhoodEdgeNodes( - neighbourhood, - blockchain, - hashFunctionId, - proximityScoreFunctionsPairId, - keyword, - ); - } - - if (!neighbourhoodEdges && proximityScoreFunctionsPairId === 2) { - throw Error('Unable to find neighbourhood edges for asset'); - } - - const totalNodesNumber = await this.repositoryModuleManager.getPeersCount(blockchain); - const minStake = await this.blockchainModuleManager.getMinimumStake(blockchain); - const maxStake = await this.blockchainModuleManager.getMaximumStake(blockchain); - - const rank = await this.serviceAgreementService.calculateRank( + this.operationIdService.updateOperationIdStatus( + operationId, blockchain, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - r2, - neighbourhood, - neighbourhoodEdges, - totalNodesNumber, - minStake, - maxStake, + OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_ASSET_REMOTE_END, ); - if (rank != null) { - this.logger.trace(`Calculated rank: ${rank + 1} for agreement id: ${agreementId}`); - const finalizationCommitsNumber = - await this.blockchainModuleManager.getFinalizationCommitsNumber(blockchain); - const updateCommitDelay = await this.calculateUpdateCommitDelay( - blockchain, - updateCommitWindowDuration, - finalizationCommitsNumber, - r0, - rank, - ); - scheduleCommandsPromises.push( - this.commandExecutor.add({ - name: 'submitUpdateCommitCommand', - delay: updateCommitDelay, - retries: COMMAND_RETRIES.SUBMIT_UPDATE_COMMIT, - data: { - ...commandData, - agreementData, - agreementId, - r0, - r2, - updateCommitWindowDuration, - proximityScoreFunctionsPairId, - closestNode: closestNode?.index, - leftNeighborhoodEdge: neighbourhoodEdges?.leftEdge?.index, - rightNeighborhoodEdge: neighbourhoodEdges?.rightEdge?.index, - }, - transactional: false, - }), - ); + if (validationResult.messageType === NETWORK_MESSAGE_TYPES.RESPONSES.NACK) { + return validationResult; } - scheduleCommandsPromises.push( - this.commandExecutor.add({ - name: 'deletePendingStateCommand', - sequence: [], - delay: (updateCommitWindowDuration + 60) * 1000, - data: { - ...commandData, - assertionId: cachedData.assertionId, - }, - transactional: false, - }), + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_START, ); - - await Promise.all(scheduleCommandsPromises); + await this.pendingStorageService.cacheDataset(operationId, datasetRoot, dataset); await this.operationIdService.updateOperationIdStatus( operationId, blockchain, - OPERATION_ID_STATUS.UPDATE.VALIDATING_UPDATE_ASSERTION_REMOTE_END, + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_END, ); - return { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: {} }; - } - async calculateUpdateCommitDelay( - blockchain, - updateCommitWindowDuration, - finalizationCommitsNumber, - r0, - rank, - ) { - const r0OffsetPeriod = 0; - const blockTime = this.blockchainModuleManager.getBlockTimeMillis(blockchain); - // wait for 5 blocks for first batch to send commits - const commitsBlockDuration = blockTime * COMMIT_BLOCK_DURATION_IN_BLOCKS; - const commitBlock = Math.floor(rank / finalizationCommitsNumber); - // put 5 blocks delay between nodes if they are not in first batch - const nextNodeDelay = - commitBlock === 0 - ? 0 - : (rank % finalizationCommitsNumber) * - COMMITS_DELAY_BETWEEN_NODES_IN_BLOCKS * - blockTime; - const delay = commitsBlockDuration * commitBlock + r0OffsetPeriod + nextNodeDelay; - this.logger.info( - `Calculated update commit delay: ${Math.floor( - delay / 1000, - )}s, commitsBlockDuration: ${commitsBlockDuration}, commitBlock: ${commitBlock}, r0OffsetPeriod:${r0OffsetPeriod}, updateCommitWindowDuration ${updateCommitWindowDuration}s, finalizationCommitsNumber: ${finalizationCommitsNumber}, r0: ${r0}, rank: ${rank}`, + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_SIGN_START, + operationId, + blockchain, + ); + const identityId = await this.blockchainModuleManager.getIdentityId(blockchain); + const { v, r, s, vs } = await this.signatureService.signMessage(blockchain, datasetRoot); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_SIGN_END, + operationId, + blockchain, ); - return delay; + return { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, + messageData: { identityId, v, r, s, vs }, + }; } /** - * Builds default HandleUpdateRequestCommand + * Builds default handleUpdateRequestCommand * @param map * @returns {{add, data: *, delay: *, deadline: *}} */ diff --git a/src/commands/protocols/update/sender/network-update-command.js b/src/commands/protocols/update/sender/network-update-command.js index 3b921a7499..7666babb4b 100644 --- a/src/commands/protocols/update/sender/network-update-command.js +++ b/src/commands/protocols/update/sender/network-update-command.js @@ -1,37 +1,19 @@ import NetworkProtocolCommand from '../../common/network-protocol-command.js'; -import { ERROR_TYPE } from '../../../../constants/constants.js'; +import { ERROR_TYPE, OPERATION_ID_STATUS } from '../../../../constants/constants.js'; class NetworkUpdateCommand extends NetworkProtocolCommand { constructor(ctx) { super(ctx); - this.operationService = ctx.updateService; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.ualService = ctx.ualService; + this.blockchainModuleManager = ctx.blockchainModuleManager; // can we remove this + this.ualService = ctx.ualService; // can we remove this - this.errorType = ERROR_TYPE.UPDATE.UPDATE_START_ERROR; - } - - async getKeywords(command) { - const { blockchain, contract, tokenId } = command.data; - const locationKeyword = await this.ualService.calculateLocationKeyword( - blockchain, - contract, - tokenId, - ); - - return [locationKeyword]; - } - - async getBatchSize(blockchainId) { - return this.blockchainModuleManager.getR2(blockchainId); - } - - async getMinAckResponses(blockchainId) { - return this.blockchainModuleManager.getFinalizationCommitsNumber(blockchainId); + this.errorType = ERROR_TYPE.UPDATE.UPDATE_NETWORK_START_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_NETWORK_START; + this.operationEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_NETWORK_END; } /** - * Builds default NetworkUpdateCommand + * Builds default networkUpdateCommand * @param map * @returns {{add, data: *, delay: *, deadline: *}} */ diff --git a/src/commands/protocols/update/sender/update-find-shard-command.js b/src/commands/protocols/update/sender/update-find-shard-command.js new file mode 100644 index 0000000000..138dc6fa9b --- /dev/null +++ b/src/commands/protocols/update/sender/update-find-shard-command.js @@ -0,0 +1,48 @@ +import FindShardCommand from '../../common/find-shard-command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../../constants/constants.js'; + +class UpdateFindShardCommand extends FindShardCommand { + constructor(ctx) { + super(ctx); + this.operationService = ctx.upateService; + this.errorType = ERROR_TYPE.FIND_SHARD.UPDATE_FIND_SHARD_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_FIND_NODES_START; + this.operationEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_FIND_NODES_END; + this.findShardNodesStartEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_FIND_NODES_FIND_SHARD_NODES_START; + this.findShardNodesEndEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_FIND_NODES_FIND_SHARD_NODES_END; + this.processFoundNodesStartEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_FIND_NODES_PROCESS_FOUND_NODES_START; + this.processFoundNodesEndEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_FIND_NODES_PROCESS_FOUND_NODES_END; + } + + getOperationCommandSequence(nodePartOfShard) { + const sequence = []; + sequence.push('updateValidateAssetCommand'); + if (nodePartOfShard) { + sequence.push('localUpdateCommand'); + } + sequence.push('networkUpdateCommand'); + + return sequence; + } + + /** + * Builds default updateFindShardCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'updateFindShardCommand', + delay: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default UpdateFindShardCommand; diff --git a/src/commands/protocols/update/sender/update-schedule-messages-command.js b/src/commands/protocols/update/sender/update-schedule-messages-command.js index be0bbbda21..c09629f752 100644 --- a/src/commands/protocols/update/sender/update-schedule-messages-command.js +++ b/src/commands/protocols/update/sender/update-schedule-messages-command.js @@ -4,9 +4,11 @@ import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../../constants/constants class UpdateScheduleMessagesCommand extends ProtocolScheduleMessagesCommand { constructor(ctx) { super(ctx); - this.operationService = ctx.updateService; + this.blockchainModuleManager = ctx.blockchainModuleManager; // can this be removed + this.repositoryModuleManager = ctx.repositoryModuleManager; // can this be removed - this.startEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_REPLICATE_START; + this.operationStartEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_REPLICATE_START; + this.operationEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_REPLICATE_END; this.errorType = ERROR_TYPE.UPDATE.UPDATE_START_ERROR; } diff --git a/src/commands/protocols/update/sender/update-validate-asset-command.js b/src/commands/protocols/update/sender/update-validate-asset-command.js index 867a6729a7..fd3ae9c333 100644 --- a/src/commands/protocols/update/sender/update-validate-asset-command.js +++ b/src/commands/protocols/update/sender/update-validate-asset-command.js @@ -1,9 +1,11 @@ import ValidateAssetCommand from '../../../common/validate-asset-command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../../constants/constants.js'; class UpdateValidateAssetCommand extends ValidateAssetCommand { constructor(ctx) { super(ctx); this.operationService = ctx.updateService; + this.errorType = ERROR_TYPE.UPDATE.UPDATE_VALIDATE_ASSET_ERROR; } async handleError(operationId, blockchain, errorMessage, errorType) { @@ -15,6 +17,54 @@ class UpdateValidateAssetCommand extends ValidateAssetCommand { ); } + /** + * Executes command and produces one or more events + * @param command + */ + async execute(command) { + const { operationId, blockchain, datasetRoot } = command.data; + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_ASSET_START, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_GET_CACHED_OPERATION_ID_DATA_START, + operationId, + blockchain, + ); + const cachedData = await this.operationIdService.getCachedOperationIdData(operationId); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_GET_CACHED_OPERATION_ID_DATA_END, + operationId, + blockchain, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_DATASET_ROOT_START, + operationId, + blockchain, + ); + await this.validationService.validateDatasetRoot(cachedData.dataset, datasetRoot); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_DATASET_ROOT_END, + operationId, + blockchain, + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_ASSET_END, + ); + return this.continueSequence( + { ...command.data, retry: undefined, period: undefined }, + command.sequence, + ); + } + /** * Builds default updateValidateAssetCommand * @param map diff --git a/src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-init-command.js b/src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-init-command.js deleted file mode 100644 index 405a19278d..0000000000 --- a/src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-init-command.js +++ /dev/null @@ -1,32 +0,0 @@ -import ProtocolInitCommand from '../../../common/protocol-init-command.js'; -import { NETWORK_MESSAGE_TIMEOUT_MILLS, ERROR_TYPE } from '../../../../../constants/constants.js'; - -class UpdateInitCommand extends ProtocolInitCommand { - constructor(ctx) { - super(ctx); - this.operationService = ctx.updateService; - - this.errorType = ERROR_TYPE.UPDATE.UPDATE_STORE_INIT_ERROR; - } - - messageTimeout() { - return NETWORK_MESSAGE_TIMEOUT_MILLS.UPDATE.INIT; - } - - /** - * Builds default v1_0_0UpdateInitCommand - * @param map - * @returns {{add, data: *, delay: *, deadline: *}} - */ - default(map) { - const command = { - name: 'v1_0_0UpdateInitCommand', - delay: 0, - transactional: false, - }; - Object.assign(command, map); - return command; - } -} - -export default UpdateInitCommand; diff --git a/src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-request-command.js b/src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-request-command.js index cda7aec635..c05da6ea48 100644 --- a/src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-request-command.js +++ b/src/commands/protocols/update/sender/v1.0.0/v1-0-0-update-request-command.js @@ -1,21 +1,50 @@ import ProtocolRequestCommand from '../../../common/protocol-request-command.js'; -import { NETWORK_MESSAGE_TIMEOUT_MILLS, ERROR_TYPE } from '../../../../../constants/constants.js'; +import { + NETWORK_MESSAGE_TIMEOUT_MILLS, + ERROR_TYPE, + OPERATION_ID_STATUS, + NETWORK_SIGNATURES_FOLDER, +} from '../../../../../constants/constants.js'; -class UpdateRequestCommand extends ProtocolRequestCommand { +class PublishRequestCommand extends ProtocolRequestCommand { constructor(ctx) { super(ctx); this.operationService = ctx.updateService; + this.signatureService = ctx.signatureService; + this.operationIdService = ctx.operationIdService; + this.errorType = ERROR_TYPE.UPDATE.UPDATE_STORE_REQUEST_ERROR; - this.errorType = ERROR_TYPE.UPDATE.UPDATE_REQUEST_ERROR; + this.operationStartEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_REQUEST_START; + this.operationEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_REQUEST_END; + this.prepareMessageStartEvent = + OPERATION_ID_STATUS.UPDATE.UPDATE_REQUEST_PREPARE_MESSAGE_START; + this.prepareMessageEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_REQUEST_PREPARE_MESSAGE_END; + this.sendMessageStartEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_SEND_MESSAGE_START; + this.sendMessageEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_SEND_MESSAGE_END; } async prepareMessage(command) { - const { - public: { assertion }, - } = await this.operationIdService.getCachedOperationIdData(command.data.operationId); + const { datasetRoot, operationId } = command.data; + + // TODO: Backwards compatibility, send blockchain without chainId + const { blockchain } = command.data; + + await this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_GET_CACHED_OPERATION_ID_DATA_START, + operationId, + blockchain, + ); + const { dataset } = await this.operationIdService.getCachedOperationIdData(operationId); + await this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_GET_CACHED_OPERATION_ID_DATA_END, + operationId, + blockchain, + ); return { - assertion, + dataset, + datasetRoot, + blockchain, }; } @@ -23,14 +52,39 @@ class UpdateRequestCommand extends ProtocolRequestCommand { return NETWORK_MESSAGE_TIMEOUT_MILLS.UPDATE.REQUEST; } + async handleAck(command, responseData) { + const { operationId, blockchain } = command.data; + await this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_ADD_SIGNATURE_TO_STORAGE_START, + operationId, + blockchain, + ); + await this.signatureService.addSignatureToStorage( + NETWORK_SIGNATURES_FOLDER, + operationId, + responseData.identityId, + responseData.v, + responseData.r, + responseData.s, + responseData.vs, + ); + await this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.UPDATE.UPDATE_ADD_SIGNATURE_TO_STORAGE_END, + operationId, + blockchain, + ); + + return super.handleAck(command, responseData); + } + /** - * Builds default v1_0_0UpdateRequestCommand + * Builds default publishRequestCommand * @param map * @returns {{add, data: *, delay: *, deadline: *}} */ default(map) { const command = { - name: 'v1_0_0UpdateRequestCommand', + name: 'v1_0_0PublishRequestCommand', delay: 0, transactional: false, }; @@ -39,4 +93,4 @@ class UpdateRequestCommand extends ProtocolRequestCommand { } } -export default UpdateRequestCommand; +export default PublishRequestCommand; diff --git a/src/commands/protocols/update/update-assertion-command.js b/src/commands/protocols/update/update-assertion-command.js new file mode 100644 index 0000000000..cefba1a3e6 --- /dev/null +++ b/src/commands/protocols/update/update-assertion-command.js @@ -0,0 +1,91 @@ +import { kcTools } from 'assertion-tools'; +import Command from '../../command.js'; +import { + // OPERATION_ID_STATUS, + ERROR_TYPE, + TRIPLE_STORE_REPOSITORY, + TRIPLES_VISIBILITY, +} from '../../../constants/constants.js'; + +class UpdateAssertionCommand extends Command { + constructor(ctx) { + super(ctx); + this.operationIdService = ctx.operationIdService; + this.ualService = ctx.ualService; + this.dataService = ctx.dataService; + this.tripleStoreService = ctx.tripleStoreService; + this.blockchainModuleManager = ctx.blockchainModuleManager; + + this.errorType = ERROR_TYPE.UPDATE.UPDATE_ASSERTION_ERROR; + } + + async execute(command) { + const { operationId, ual, blockchain, assertion, firstNewKAIndex, updateStateIndex } = + command.data; + const validateCurrentData = this.validateCurrentData(ual); + if (this.validateCurrentData(validateCurrentData)) { + const preUpdateUalNamedGraphs = + // Old subjects old ual from select returned here probably {s, g} + await this.tripleStoreService.moveToHistoricAndDeleteAssertion( + ual, + updateStateIndex - 1, + ); + + await this.tripleStoreService.insertUpdatedKnowledgeCollection( + preUpdateUalNamedGraphs, + ual, + assertion, + firstNewKAIndex, + ); + } else { + await this.handleError( + operationId, + blockchain, + `Data in current DKG doesn't match pre update data for ${ual}.`, + ERROR_TYPE.UPDATE_FINALIZATION.UPDATE_FINALIZATION_NO_OLD_DATA, + true, + ); + } + + return Command.empty(); + } + + // TODO: Move maybe outside of the command into metadata validation command (but it's not metadata) + async validateCurrentData(ual) { + const { blockchain, contract, knowledgeCollectionId } = this.ualService.resolveUAL(ual); + const assertionIds = await this.blockchainModuleManager.getKnowledgeCollectionMerkleRoot( + blockchain, + contract, + knowledgeCollectionId, + ); + const assertionIdOfCurrent = assertionIds[assertionIds.length() - 2]; + + const preUpdateAssertion = await this.tripleStoreService.getKnowledgeAssetNamedGraph( + TRIPLE_STORE_REPOSITORY.DKG, + ual, + TRIPLES_VISIBILITY.PUBLIC, + ); + + const preUpdateMerkleRoot = kcTools.calculateMerkleRoot(preUpdateAssertion); + + return assertionIdOfCurrent === preUpdateMerkleRoot; + } + + /** + * Builds default updateAssertionCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'updateAssertionCommand', + delay: 0, + retries: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default UpdateAssertionCommand; diff --git a/src/commands/protocols/update/update-validate-assertion-metadata-command.js b/src/commands/protocols/update/update-validate-assertion-metadata-command.js new file mode 100644 index 0000000000..ae2e42ba2e --- /dev/null +++ b/src/commands/protocols/update/update-validate-assertion-metadata-command.js @@ -0,0 +1,33 @@ +import ValidateAssertionMetadataCommand from '../common/validate-assertion-metadata-command.js'; +import { OPERATION_ID_STATUS, ERROR_TYPE } from '../../../constants/constants.js'; + +class UpdateValidateAssertionMetadataCommand extends ValidateAssertionMetadataCommand { + constructor(ctx) { + super(ctx); + this.operationIdService = ctx.operationIdService; + + this.errorType = ERROR_TYPE.UPDATE.UPDATE_VALIDATE_ASSERTION_METADATA_ERROR; + this.operationStartEvent = + OPERATION_ID_STATUS.UPDATE_FINALIZATION.UPDATE_FINALIZATION_METADATA_VALIDATION_START; + this.operationEndEvent = + OPERATION_ID_STATUS.UPDATE_FINALIZATION.UPDATE_FINALIZATION_METADATA_VALIDATION_END; + } + + /** + * Builds default updateValidateAssertionMetadataCommand + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'updateValidateAssertionMetadataCommand', + delay: 0, + retries: 0, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default UpdateValidateAssertionMetadataCommand; diff --git a/src/commands/query/query-command.js b/src/commands/query/query-command.js index 74412a0cf5..d54392d40e 100644 --- a/src/commands/query/query-command.js +++ b/src/commands/query/query-command.js @@ -18,44 +18,89 @@ class QueryCommand extends Command { } async execute(command) { - const { queryType, operationId } = command.data; - - let { query, repository = TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT } = command.data; - - let data; + const { operationId, query, queryType, repository } = command.data; await this.operationIdService.updateOperationIdStatus( operationId, null, OPERATION_ID_STATUS.QUERY.QUERY_START, ); - repository = this.validateRepositoryName(repository); + + let data; + + // TODO: Review federated query logic for V8 + // check if it's federated query - const pattern = /SERVICE\s+<([^>]+)>/g; - const matches = []; - let match; - // eslint-disable-next-line no-cond-assign - while ((match = pattern.exec(query)) !== null) { - matches.push(match[1]); - } - if (matches.length > 0) { - for (const repositoryInOriginalQuery of matches) { - const federatedQueryRepositoryName = `http://localhost:9999/blazegraph/namespace/${this.paranetService.getParanetRepositoryName( - repositoryInOriginalQuery, - )}/sparql`; - this.validateRepositoryName(repositoryInOriginalQuery); - query = query.replace(repositoryInOriginalQuery, federatedQueryRepositoryName); - } - } + // const pattern = /SERVICE\s+<([^>]+)>/g; + // const matches = []; + // let match; + // // eslint-disable-next-line no-cond-assign + // while ((match = pattern.exec(query)) !== null) { + // matches.push(match[1]); + // } + // if (matches.length > 0) { + // for (const repositoryInOriginalQuery of matches) { + // const federatedQueryRepositoryName = `http://localhost:9999/blazegraph/namespace/${this.paranetService.getParanetRepositoryName( + // repositoryInOriginalQuery, + // )}/sparql`; + // this.validateRepositoryName(repositoryInOriginalQuery); + // query = query.replace(repositoryInOriginalQuery, federatedQueryRepositoryName); + // } + // } + try { switch (queryType) { case QUERY_TYPES.CONSTRUCT: { - data = await this.tripleStoreService.construct(repository, query); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_CONSTRUCT_QUERY_START, + operationId, + ); + + if (Array.isArray(repository)) { + const dataV6 = await this.tripleStoreService.construct( + query, + repository[0], + ); + const dataV8 = await this.tripleStoreService.construct( + query, + repository[1], + ); + + data = this.dataService.removeDuplicateObjectsFromArray([ + ...dataV6, + ...dataV8, + ]); + } else { + data = await this.tripleStoreService.construct(query, repository); + } + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_CONSTRUCT_QUERY_END, + operationId, + ); break; } case QUERY_TYPES.SELECT: { - data = await this.dataService.parseBindings( - await this.tripleStoreService.select(repository, query), + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_SELECT_QUERY_START, + operationId, + ); + + if (Array.isArray(repository)) { + const dataV6 = await this.tripleStoreService.select(query, repository[0]); + const dataV8 = await this.tripleStoreService.select(query, repository[1]); + + data = this.dataService.removeDuplicateObjectsFromArray([ + ...dataV6, + ...dataV8, + ]); + } else { + data = await this.tripleStoreService.select(query, repository); + } + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_SELECT_QUERY_END, + operationId, ); break; } @@ -63,14 +108,32 @@ class QueryCommand extends Command { throw new Error(`Unknown query type ${queryType}`); } + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_CACHE_OPERATION_ID_DATA_TO_MEMORY_START, + operationId, + ); + await this.operationIdService.cacheOperationIdDataToMemory(operationId, data); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_CACHE_OPERATION_ID_DATA_TO_MEMORY_END, + operationId, + ); + + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_CACHE_OPERATION_ID_DATA_TO_FILE_START, + operationId, + ); + await this.operationIdService.cacheOperationIdDataToFile(operationId, data); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.QUERY.QUERY_CACHE_OPERATION_ID_DATA_TO_FILE_END, + operationId, + ); + await this.operationIdService.updateOperationIdStatus( operationId, null, OPERATION_ID_STATUS.QUERY.QUERY_END, ); - await this.operationIdService.cacheOperationIdData(operationId, data); - await this.operationIdService.updateOperationIdStatus( operationId, null, @@ -104,7 +167,7 @@ class QueryCommand extends Command { } /** - * Builds default getInitCommand + * Builds default queryCommand * @param map * @returns {{add, data: *, delay: *, deadline: *}} */ diff --git a/src/constants/constants.js b/src/constants/constants.js index 7c43e15e3d..0ae75657b0 100644 --- a/src/constants/constants.js +++ b/src/constants/constants.js @@ -1,4 +1,5 @@ import { BigNumber, ethers } from 'ethers'; +import { createRequire } from 'module'; export const WS_RPC_PROVIDER_PRIORITY = 2; @@ -6,6 +7,20 @@ export const HTTP_RPC_PROVIDER_PRIORITY = 1; export const FALLBACK_PROVIDER_QUORUM = 1; +export const PUBLISH_BATCH_SIZE = 20; + +export const PUBLISH_MIN_NUM_OF_NODE_REPLICATIONS = 3; + +export const GET_BATCH_SIZE = 2; + +export const GET_MIN_NUM_OF_NODE_REPLICATIONS = 1; + +export const FINALITY_BATCH_SIZE = 1; + +export const FINALITY_MIN_NUM_OF_NODE_REPLICATIONS = 1; + +export const ASK_BATCH_SIZE = 20; + export const RPC_PROVIDER_STALL_TIMEOUT = 60 * 1000; export const UINT256_MAX_BN = ethers.constants.MaxUint256; @@ -18,6 +33,8 @@ export const UINT40_MAX_BN = BigNumber.from(2).pow(40).sub(1); export const UINT32_MAX_BN = BigNumber.from(2).pow(32).sub(1); +export const ONE_ETHER = BigNumber.from('1000000000000000000'); + export const HASH_RING_SIZE = ethers.constants.MaxUint256; export const STAKE_UINT256_MULTIPLIER_BN = UINT256_MAX_BN.div(500000000); @@ -33,7 +50,16 @@ export const ZERO_ADDRESS = ethers.constants.AddressZero; export const SCHEMA_CONTEXT = 'http://schema.org/'; export const PRIVATE_ASSERTION_PREDICATE = - 'https://ontology.origintrail.io/dkg/1.0#privateAssertionID'; + 'https://ontology.origintrail.io/dkg/1.0#privateMerkleRoot'; + +export const TRIPLE_ANNOTATION_LABEL_PREDICATE = 'https://ontology.origintrail.io/dkg/1.0#label'; + +export const PRIVATE_RESOURCE_PREDICATE = + 'https://ontology.origintrail.io/dkg/1.0#representsPrivateResource'; + +export const PRIVATE_HASH_SUBJECT_PREFIX = 'https://ontology.origintrail.io/dkg/1.0#metadata-hash:'; + +export const UAL_PREDICATE = ''; export const COMMIT_BLOCK_DURATION_IN_BLOCKS = 5; @@ -61,8 +87,22 @@ export const LIBP2P_KEY_DIRECTORY = 'libp2p'; export const LIBP2P_KEY_FILENAME = 'privateKey'; +export const BLS_KEY_DIRECTORY = 'bls'; + +export const BLS_KEY_FILENAME = 'secretKey'; + export const TRIPLE_STORE_CONNECT_MAX_RETRIES = 10; +export const COMMAND_PRIORITY = { + HIGHEST: 0, + HIGH: 1, + MEDIUM: 5, + LOW: 10, + LOWEST: 20, +}; + +export const DEFAULT_COMMAND_PRIORITY = COMMAND_PRIORITY.MEDIUM; + export const DEFAULT_BLOCKCHAIN_EVENT_SYNC_PERIOD_IN_MILLS = 15 * 24 * 60 * 60 * 1000; // 15 days export const MAX_BLOCKCHAIN_EVENT_SYNC_OF_HISTORICAL_BLOCKS_IN_MILLS = 60 * 60 * 1000; // 1 hour @@ -89,18 +129,27 @@ export const PEER_OFFLINE_LIMIT = 24 * 60 * 60 * 1000; export const CONTENT_ASSET_HASH_FUNCTION_ID = 1; +export const CHUNK_BYTE_SIZE = 32; + export const PARANET_SYNC_KA_COUNT = 50; +export const PARANET_SYNC_RETRIES_LIMIT = 3; +export const PARANET_SYNC_RETRY_DELAY_MS = 60 * 1000; + +export const PARANET_ACCESS_POLICY = { + OPEN: 0, + CURATED: 1, +}; export const TRIPLE_STORE_REPOSITORIES = { + DKG: 'dkg', PUBLIC_CURRENT: 'publicCurrent', - PUBLIC_HISTORY: 'publicHistory', PRIVATE_CURRENT: 'privateCurrent', - PRIVATE_HISTORY: 'privateHistory', }; -export const PENDING_STORAGE_REPOSITORIES = { - PUBLIC: 'public', - PRIVATE: 'private', +export const BASE_NAMED_GRAPHS = { + UNIFIED: 'unified:graph', + HISTORICAL_UNIFIED: 'historical-unified:graph', + METADATA: 'metadata:graph', }; export const REQUIRED_MODULES = [ @@ -110,6 +159,7 @@ export const REQUIRED_MODULES = [ 'validation', 'blockchain', 'tripleStore', + 'blockchainEventsService', ]; /** @@ -150,9 +200,9 @@ export const NETWORK_API_BLACK_LIST_TIME_WINDOW_MINUTES = 60; export const HIGH_TRAFFIC_OPERATIONS_NUMBER_PER_HOUR = 16000; -export const SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MINUTES = 30; +export const SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MILLS = 10 * 1000; // 10 seconds -export const PARANET_SYNC_FREQUENCY_MILLS = 5 * 60 * 1000; +export const PARANET_SYNC_FREQUENCY_MILLS = 1 * 60 * 1000; export const SEND_TELEMETRY_COMMAND_FREQUENCY_MINUTES = 15; @@ -173,14 +223,13 @@ export const DIAL_PEERS_CONCURRENCY = 10; export const MIN_DIAL_FREQUENCY_MILLIS = 60 * 60 * 1000; export const PERMANENT_COMMANDS = [ + 'eventListenerCommand', 'otnodeUpdateCommand', 'sendTelemetryCommand', 'shardingTableCheckCommand', 'operationIdCleanerCommand', 'commandsCleanerCommand', 'dialPeersCommand', - 'epochCheckCommand', - 'getLatestServiceAgreement', 'blockchainEventCleanerCommand', 'getCleanerCommand', 'getResponseCleanerCommand', @@ -189,6 +238,7 @@ export const PERMANENT_COMMANDS = [ 'updateCleanerCommand', 'updateResponseCleanerCommand', 'startParanetSyncCommands', + 'pendingStorageCleanerCommand', ]; export const MAX_COMMAND_DELAY_IN_MILLS = 14400 * 60 * 1000; // 10 days @@ -198,45 +248,57 @@ export const DEFAULT_COMMAND_REPEAT_INTERVAL_IN_MILLS = 5000; // 5 seconds export const DEFAULT_COMMAND_DELAY_IN_MILLS = 60 * 1000; // 60 seconds export const TRANSACTION_PRIORITY = { + HIGHEST: 0, HIGH: 1, - REGULAR: 2, + MEDIUM: 5, + LOW: 10, + LOWEST: 20, }; -export const CONTRACT_FUNCTION_PRIORITY = { - 'submitCommit((address,uint256,bytes,uint8,uint16,uint72,uint72,uint72))': - TRANSACTION_PRIORITY.REGULAR, - 'submitCommit((address,uint256,bytes,uint8,uint16))': TRANSACTION_PRIORITY.REGULAR, - 'submitUpdateCommit((address,uint256,bytes,uint8,uint16,uint72,uint72,uint72))': - TRANSACTION_PRIORITY.HIGH, - 'submitUpdateCommit((address,uint256,bytes,uint8,uint16))': TRANSACTION_PRIORITY.HIGH, - sendProof: TRANSACTION_PRIORITY.REGULAR, -}; +export const V0_PRIVATE_ASSERTION_PREDICATE = + 'https://ontology.origintrail.io/dkg/1.0#privateAssertionID'; -export const COMMAND_RETRIES = { - SIMPLE_ASSET_SYNC: 1, - SUBMIT_COMMIT: 5, - SUBMIT_UPDATE_COMMIT: 5, - SUBMIT_PROOFS: 5, +const require = createRequire(import.meta.url); + +export const ABIs = { + KnowledgeCollection: require('dkg-evm-module/abi/KnowledgeCollection.json'), + KnowledgeCollectionStorage: require('dkg-evm-module/abi/KnowledgeCollectionStorage.json'), + Staking: require('dkg-evm-module/abi/Staking.json'), + Token: require('dkg-evm-module/abi/Token.json'), + Hub: require('dkg-evm-module/abi/Hub.json'), + IdentityStorage: require('dkg-evm-module/abi/IdentityStorage.json'), + ParametersStorage: require('dkg-evm-module/abi/ParametersStorage.json'), + Profile: require('dkg-evm-module/abi/Profile.json'), + ProfileStorage: require('dkg-evm-module/abi/ProfileStorage.json'), + ShardingTable: require('dkg-evm-module/abi/ShardingTable.json'), + ShardingTableStorage: require('dkg-evm-module/abi/ShardingTableStorage.json'), + ParanetsRegistry: require('dkg-evm-module/abi/ParanetsRegistry.json'), + ParanetKnowledgeAssetsRegistry: require('dkg-evm-module/abi/ParanetKnowledgeAssetsRegistry.json'), + AskStorage: require('dkg-evm-module/abi/AskStorage.json'), + Chronos: require('dkg-evm-module/abi/Chronos.json'), }; +export const CONTRACT_FUNCTION_PRIORITY = {}; + +export const COMMAND_RETRIES = {}; + export const SIMPLE_ASSET_SYNC_PARAMETERS = { GET_RESULT_POLLING_INTERVAL_MILLIS: 1 * 1000, GET_RESULT_POLLING_MAX_ATTEMPTS: 30, }; +export const PARANET_SYNC_PARAMETERS = { + GET_RESULT_POLLING_INTERVAL_MILLIS: 1 * 1000, + GET_RESULT_POLLING_MAX_ATTEMPTS: 300, +}; + export const COMMAND_TX_GAS_INCREASE_FACTORS = { SUBMIT_COMMIT: 1.2, SUBMIT_UPDATE_COMMIT: 1.2, SUBMIT_PROOFS: 1.2, }; -export const CONTRACT_FUNCTION_GAS_LIMIT_INCREASE_FACTORS = { - sendProof: 2, - 'submitCommit((address,uint256,bytes,uint8,uint16))': 2, - 'submitCommit((address,uint256,bytes,uint8,uint16,uint72,uint72,uint72))': 2, - 'submitUpdateCommit((address,uint256,bytes,uint8,uint16,uint72,uint72,uint72))': 2, - 'submitUpdateCommit((address,uint256,bytes,uint8,uint16))': 2, -}; +export const CONTRACT_FUNCTION_GAS_LIMIT_INCREASE_FACTORS = {}; export const GNOSIS_DEFAULT_GAS_PRICE = { TESTNET: 25, @@ -248,11 +310,7 @@ export const NEURO_DEFAULT_GAS_PRICE = { MAINNET: 8, }; -export const CONTRACT_FUNCTION_FIXED_GAS_PRICE = { - 'otp:2043': { - SUBMIT_UPDATE_COMMIT: 30, - }, -}; +export const CONTRACT_FUNCTION_FIXED_GAS_PRICE = {}; export const WEBSOCKET_PROVIDER_OPTIONS = { reconnect: { @@ -274,7 +332,6 @@ export const TRIPLE_STORE_IMPLEMENTATION = { export const NETWORK_MESSAGE_TYPES = { REQUESTS: { - PROTOCOL_INIT: 'PROTOCOL_INIT', PROTOCOL_REQUEST: 'PROTOCOL_REQUEST', }, RESPONSES: { @@ -284,17 +341,22 @@ export const NETWORK_MESSAGE_TYPES = { }, }; +export const PARANET_NODES_ACCESS_POLICIES = ['OPEN', 'CURATED']; + export const NETWORK_MESSAGE_TIMEOUT_MILLS = { PUBLISH: { - INIT: 60 * 1000, REQUEST: 60 * 1000, }, UPDATE: { - INIT: 60 * 1000, REQUEST: 60 * 1000, }, GET: { - INIT: 60 * 1000, + REQUEST: 5 * 60 * 1000, + }, + ASK: { + REQUEST: 60 * 1000, + }, + FINALITY: { REQUEST: 60 * 1000, }, }; @@ -302,19 +364,24 @@ export const NETWORK_MESSAGE_TIMEOUT_MILLS = { export const MAX_OPEN_SESSIONS = 10; export const ERROR_TYPE = { + EVENT_LISTENER_ERROR: 'EventListenerError', + BLOCKCHAIN_EVENT_LISTENER_ERROR: 'BlockchainEventListenerError', DIAL_PROTOCOL_ERROR: 'DialProtocolError', VALIDATE_ASSET_ERROR: 'ValidateAssetError', + NETWORK_PROTOCOL_ERROR: 'NetworkProtocolError', PUBLISH: { PUBLISH_START_ERROR: 'PublishStartError', PUBLISH_ROUTE_ERROR: 'PublishRouteError', + PUBLISH_NETWORK_START_ERROR: 'PublishNetworkStartError', + PUBLISH_VALIDATE_ASSET_ERROR: 'PublishValidateAssetError', PUBLISH_LOCAL_STORE_ERROR: 'PublishLocalStoreError', PUBLISH_LOCAL_STORE_REMOTE_ERROR: 'PublishLocalStoreRemoteError', PUBLISH_FIND_NODES_ERROR: 'PublishFindNodesError', - PUBLISH_STORE_INIT_ERROR: 'PublishStoreInitError', PUBLISH_STORE_REQUEST_ERROR: 'PublishStoreRequestError', + PUBLISH_VALIDATE_ASSERTION_METADATA_ERROR: 'PublishValidateAssertionMetadataError', PUBLISH_ERROR: 'PublishError', - PUBLISH_REMOTE_ERROR: 'PublishRemoteError', }, + STORE_ASSERTION_ERROR: 'StoreAssertionError', UPDATE: { UPDATE_INIT_ERROR: 'UpdateInitError', UPDATE_REQUEST_ERROR: 'UpdateRequestError', @@ -326,12 +393,20 @@ export const ERROR_TYPE = { UPDATE_STORE_INIT_ERROR: 'UpdateStoreInitError', UPDATE_REMOTE_ERROR: 'UpdateRemoteError', UPDATE_DELETE_PENDING_STATE_ERROR: 'UpdateDeletePendingStateError', + UPDATE_VALIDATE_ASSET_ERROR: 'UpdateValidateAssetError', + UPDATE_STORE_REQUEST_ERROR: 'UpdateStoreRequestError', + UPDATE_VALIDATE_ASSERTION_METADATA_ERROR: 'UpadateValidateAssertionMetadataError', + UPDATE_ASSERTION_ERROR: 'UpdateAssertionError', + UPDATE_NETWORK_START_ERROR: 'UpdateNetworkStartError', }, GET: { GET_ROUTE_ERROR: 'GetRouteError', GET_ASSERTION_ID_ERROR: 'GetAssertionIdError', + GET_PRIVATE_ASSERTION_ID_ERROR: 'GetPrivateAssertionIdError', + GET_VALIDATE_ASSET_ERROR: 'GetValidateAssetError', GET_LOCAL_ERROR: 'GetLocalError', GET_NETWORK_ERROR: 'GetNetworkError', + GET_CURATED_PARANET_NETWORK_ERROR: 'GetCuratedParanetNetworkError', GET_START_ERROR: 'GetStartError', GET_INIT_ERROR: 'GetInitError', GET_REQUEST_ERROR: 'GetRequestError', @@ -345,18 +420,6 @@ export const ERROR_TYPE = { QUERY: { LOCAL_QUERY_ERROR: 'LocalQueryError', }, - COMMIT_PROOF: { - CALCULATE_PROOFS_ERROR: 'CalculateProofsError', - EPOCH_CHECK_ERROR: 'EpochCheckError', - BLOCKCHAIN_EPOCH_CHECK_ERROR: 'BlockchainEpochCheckError', - SIMPLE_ASSET_SYNC_ERROR: 'SimpleAssetSyncError', - SUBMIT_COMMIT_ERROR: 'SubmitCommitError', - SUBMIT_COMMIT_SEND_TX_ERROR: 'SubmitCommitSendTxError', - SUBMIT_PROOFS_ERROR: 'SubmitProofsError', - SUBMIT_PROOFS_SEND_TX_ERROR: 'SubmitProofsSendTxError', - SUBMIT_UPDATE_COMMIT_ERROR: 'SubmitUpdateCommitError', - SUBMIT_UPDATE_COMMIT_SEND_TX_ERROR: 'SubmitUpdateCommitSendTxError', - }, GET_BID_SUGGESTION: { UNSUPPORTED_BID_SUGGESTION_RANGE_ERROR: 'UnsupportedBidSuggestionRangeError', }, @@ -364,6 +427,33 @@ export const ERROR_TYPE = { START_PARANET_SYNC_ERROR: 'StartParanetSyncError', PARANET_SYNC_ERROR: 'ParanetSyncError', }, + FIND_SHARD: { + FIND_SHARD_ERROR: 'FindShardError', + PUBLISH_FIND_SHARD_ERROR: 'PublishFindShardError', + UPDATE_FIND_SHARD_ERROR: 'UpdateFindShardError', + GET_FIND_SHARD_ERROR: 'GetFindShardError', + }, + ASK: { + ASK_ERROR: 'AskError', + ASK_NETWORK_ERROR: 'AskNetworkError', + ASK_REQUEST_ERROR: 'AskRequestError', + ASK_REQUEST_REMOTE_ERROR: 'AskRequestRemoteError', + ASK_FIND_SHARD_ERROR: 'AskFindShardError', + }, + PUBLISH_FINALIZATION: { + PUBLISH_FINALIZATION_NO_CACHED_DATA: 'PublishFinalizationNoCachedData', + }, + UPDATE_FINALIZATION: { + UPDATE_FINALIZATION_NO_CACHED_DATA: 'UpdateFinalizationNoCachedData', + UPDATE_FINALIZATION_NO_OLD_DATA: 'UpdateFinalizationNoOldData', + }, + FINALITY: { + FINALITY_ERROR: 'FinalityError', + FINALITY_NETWORK_ERROR: 'FinalityNetworkError', + FINALITY_REQUEST_ERROR: 'FinalityRequestError', + FINALITY_REQUEST_REMOTE_ERROR: 'FinalityRequestRemoteError', + FINALITY_START_ERROR: 'FinalityStartError', + }, }; export const OPERATION_ID_STATUS = { PENDING: 'PENDING', @@ -371,27 +461,132 @@ export const OPERATION_ID_STATUS = { COMPLETED: 'COMPLETED', FIND_NODES_START: 'FIND_NODES_START', FIND_NODES_END: 'FIND_NODES_END', - FIND_NODES_LOCAL_START: 'FIND_NODES_LOCAL_START', - FIND_NODES_LOCAL_END: 'FIND_NODES_LOCAL_END', + FIND_NODES_FIND_SHARD_NODES_START: 'FIND_NODES_FIND_SHARD_NODES_START', + FIND_NODES_FIND_SHARD_NODES_END: 'FIND_NODES_FIND_SHARD_NODES_END', + FIND_CURATED_PARANET_NODES_START: 'FIND_CURATED_PARANET_NODES_START', + FIND_CURATED_PARANET_NODES_END: 'FIND_CURATED_PARANET_NODES_END', + FIND_NODES_PROCESS_FOUND_NODES_START: 'FIND_NODES_PROCESS_FOUND_NODES_START', + FIND_NODES_PROCESS_FOUND_NODES_END: 'FIND_NODES_PROCESS_FOUND_NODES_END', DIAL_PROTOCOL_START: 'DIAL_PROTOCOL_START', DIAL_PROTOCOL_END: 'DIAL_PROTOCOL_END', VALIDATE_ASSET_START: 'VALIDATE_ASSET_START', VALIDATE_ASSET_END: 'VALIDATE_ASSET_END', - VALIDATE_ASSET_REMOTE_START: 'VALIDATE_ASSET_REMOTE_START', - VALIDATE_ASSET_REMOTE_END: 'VALIDATE_ASSET_REMOTE_END', + VALIDATE_ASSET_BLOCKCHAIN_START: 'VALIDATE_ASSET_BLOCKCHAIN_START', + VALIDATE_ASSET_BLOCKCHAIN_END: 'VALIDATE_ASSET_BLOCKCHAIN_END', + NETWORK_PROTOCOL_START: 'NETWORK_PROTOCOL_START', + NETWORK_PROTOCOL_END: 'NETWORK_PROTOCOL_END', + PROTOCOL_SCHEDULE_MESSAGE_START: 'PROTOCOL_SCHEDULE_MESSAGE_START', + PROTOCOL_SCHEDULE_MESSAGE_END: 'PROTOCOL_SCHEDULE_MESSAGE_END', + PROTOCOL_PREPARE_MESSAGE_START: 'PROTOCOL_PREPARE_MESSAGE_START', + PROTOCOL_PREPARE_MESSAGE_END: 'PROTOCOL_PREPARE_MESSAGE_END', + PROTOCOL_SEND_MESSAGE_START: 'PROTOCOL_SEND_MESSAGE_START', + PROTOCOL_SEND_MESSAGE_END: 'PROTOCOL_SEND_MESSAGE_END', + HANDLE_PROTOCOL_MESSAGE_START: 'HANDLE_PROTOCOL_MESSAGE_START', + HANDLE_PROTOCOL_MESSAGE_END: 'HANDLE_PROTOCOL_MESSAGE_END', + HANDLE_PROTOCOL_MESSAGE_SEND_MESSAGE_RESPONSE_START: + 'HANDLE_PROTOCOL_MESSAGE_SEND_MESSAGE_RESPONSE_START', + HANDLE_PROTOCOL_MESSAGE_SEND_MESSAGE_RESPONSE_END: + 'HANDLE_PROTOCOL_MESSAGE_SEND_MESSAGE_RESPONSE_END', + HANDLE_PROTOCOL_MESSAGE_REMOVE_CACHED_SESSION_START: + 'HANDLE_PROTOCOL_MESSAGE_REMOVE_CACHED_SESSION_START', + HANDLE_PROTOCOL_MESSAGE_REMOVE_CACHED_SESSION_END: + 'HANDLE_PROTOCOL_MESSAGE_REMOVE_CACHED_SESSION_END', + HANDLE_PROTOCOL_MESSAGE_PREPARE_MESSAGE_START: 'HANDLE_PROTOCOL_MESSAGE_PREPARE_MESSAGE_START', + HANDLE_PROTOCOL_MESSAGE_PREPARE_MESSAGE_END: 'HANDLE_PROTOCOL_MESSAGE_PREPARE_MESSAGE_END', + PUBLISH_LOCAL_STORE_REMOTE_SEND_MESSAGE_RESPONSE_START: + 'PUBLISH_LOCAL_STORE_REMOTE_SEND_MESSAGE_RESPONSE_START', + PUBLISH_LOCAL_STORE_REMOTE_SEND_MESSAGE_RESPONSE_END: + 'PUBLISH_LOCAL_STORE_REMOTE_SEND_MESSAGE_RESPONSE_END', PUBLISH: { + PUBLISH_CACHE_OPERATION_ID_DATA_TO_MEMORY_START: + 'PUBLISH_CACHE_OPERATION_ID_DATA_TO_MEMORY_START', + PUBLISH_CACHE_OPERATION_ID_DATA_TO_MEMORY_END: + 'PUBLISH_CACHE_OPERATION_ID_DATA_TO_MEMORY_END', + PUBLISH_CACHE_OPERATION_ID_DATA_TO_FILE_START: + 'PUBLISH_CACHE_OPERATION_ID_DATA_TO_FILE_START', + PUBLISH_CACHE_OPERATION_ID_DATA_TO_FILE_END: 'PUBLISH_CACHE_OPERATION_ID_DATA_TO_FILE_END', + PUBLISH_CACHE_DATASET_START: 'PUBLISH_CACHE_DATASET_START', + PUBLISH_CACHE_DATASET_END: 'PUBLISH_CACHE_DATASET_END', + PUBLISH_GET_CACHED_OPERATION_ID_DATA_START: 'PUBLISH_GET_CACHED_OPERATION_ID_DATA_START', + PUBLISH_GET_CACHED_OPERATION_ID_DATA_END: 'PUBLISH_GET_CACHED_OPERATION_ID_DATA_END', + PUBLISH_VALIDATE_DATASET_ROOT_START: 'PUBLISH_VALIDATE_DATASET_ROOT_START', + PUBLISH_VALIDATE_DATASET_ROOT_END: 'PUBLISH_VALIDATE_DATASET_ROOT_END', + PUBLISH_ADD_SIGNATURE_TO_STORAGE_START: 'PUBLISH_ADD_SIGNATURE_TO_STORAGE_START', + PUBLISH_ADD_SIGNATURE_TO_STORAGE_END: 'PUBLISH_ADD_SIGNATURE_TO_STORAGE_END', VALIDATING_PUBLISH_ASSERTION_REMOTE_START: 'VALIDATING_PUBLISH_ASSERTION_REMOTE_START', VALIDATING_PUBLISH_ASSERTION_REMOTE_END: 'VALIDATING_PUBLISH_ASSERTION_REMOTE_END', + PUBLISH_VALIDATE_ASSET_START: 'PUBLISH_VALIDATE_ASSET_START', + PUBLISH_VALIDATE_ASSET_END: 'PUBLISH_VALIDATE_ASSET_END', + PUBLISH_VALIDATE_ASSET_PARANET_EXISTS_START: 'PUBLISH_VALIDATE_ASSET_PARANET_EXISTS_START', + PUBLISH_VALIDATE_ASSET_PARANET_EXISTS_END: 'PUBLISH_VALIDATE_ASSET_PARANET_EXISTS_END', + PUBLISH_VALIDATE_ASSET_NODES_ACCESS_POLICY_CHECK_START: + 'PUBLISH_VALIDATE_ASSET_NODES_ACCESS_POLICY_CHECK_START', + PUBLISH_VALIDATE_ASSET_NODES_ACCESS_POLICY_CHECK_END: + 'PUBLISH_VALIDATE_ASSET_NODES_ACCESS_POLICY_CHECK_END', INSERTING_ASSERTION: 'INSERTING_ASSERTION', PUBLISHING_ASSERTION: 'PUBLISHING_ASSERTION', PUBLISH_START: 'PUBLISH_START', PUBLISH_INIT_START: 'PUBLISH_INIT_START', PUBLISH_INIT_END: 'PUBLISH_INIT_END', - PUBLISH_LOCAL_STORE_START: 'PUBLISH_LOCAL_STORE_START', - PUBLISH_LOCAL_STORE_END: 'PUBLISH_LOCAL_STORE_END', + PUBLISH_LOCAL_STORE_REMOTE_CACHE_DATASET_START: + 'PUBLISH_LOCAL_STORE_REMOTE_CACHE_DATASET_START', + PUBLISH_LOCAL_STORE_REMOTE_CACHE_DATASET_END: + 'PUBLISH_LOCAL_STORE_REMOTE_CACHE_DATASET_END', + PUBLISH_LOCAL_STORE_REMOTE_SIGN_START: 'PUBLISH_LOCAL_STORE_REMOTE_SIGN_START', + PUBLISH_LOCAL_STORE_REMOTE_SIGN_END: 'PUBLISH_LOCAL_STORE_REMOTE_SIGN_END', PUBLISH_REPLICATE_START: 'PUBLISH_REPLICATE_START', PUBLISH_REPLICATE_END: 'PUBLISH_REPLICATE_END', + PUBLISH_FIND_NODES_START: 'PUBLISH_FIND_NODES_START', + PUBLISH_FIND_NODES_END: 'PUBLISH_FIND_NODES_END', + PUBLISH_FIND_NODES_FIND_SHARD_NODES_START: 'PUBLISH_FIND_NODES_FIND_SHARD_NODES_START', + PUBLISH_FIND_NODES_FIND_SHARD_NODES_END: 'PUBLISH_FIND_NODES_FIND_SHARD_NODES_END', + PUBLISH_FIND_NODES_PROCESS_FOUND_NODES_START: + 'PUBLISH_FIND_NODES_PROCESS_FOUND_NODES_START', + PUBLISH_FIND_NODES_PROCESS_FOUND_NODES_END: 'PUBLISH_FIND_NODES_PROCESS_FOUND_NODES_END', PUBLISH_END: 'PUBLISH_END', + PUBLISH_NETWORK_START: 'NETWORK_PUBLISH_START', + PUBLISH_NETWORK_END: 'NETWORK_PUBLISH_END', + PUBLISH_REQUEST_START: 'PUBLISH_REQUEST_START', + PUBLISH_REQUEST_END: 'PUBLISH_REQUEST_END', + PUBLISH_REQUEST_PREPARE_MESSAGE_START: 'PUBLISH_REQUEST_PREPARE_MESSAGE_START', + PUBLISH_REQUEST_PREPARE_MESSAGE_END: 'PUBLISH_REQUEST_PREPARE_MESSAGE_END', + PUBLISH_SEND_MESSAGE_START: 'PUBLISH_SEND_MESSAGE_START', + PUBLISH_SEND_MESSAGE_END: 'PUBLISH_SEND_MESSAGE_END', + PUBLISH_LOCAL_STORE_REMOTE_START: 'PUBLISH_LOCAL_STORE_REMOTE_START', + PUBLISH_LOCAL_STORE_REMOTE_END: 'PUBLISH_LOCAL_STORE_REMOTE_END', + PUBLISH_VALIDATE_ASSET_REMOTE_START: 'VALIDATE_ASSET_REMOTE_START', + PUBLISH_VALIDATE_ASSET_REMOTE_END: 'VALIDATE_ASSET_REMOTE_END', + PUBLISH_LOCAL_STORE_REMOTE_SEND_RESPONSE_START: + 'PUBLISH_LOCAL_STORE_REMOTE_SEND_RESPONSE_START', + PUBLISH_LOCAL_STORE_REMOTE_SEND_RESPONSE_END: + 'PUBLISH_LOCAL_STORE_REMOTE_SEND_RESPONSE_END', + PUBLISH_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_START: + 'PUBLISH_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_START', + PUBLISH_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_END: + 'PUBLISH_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_END', + PUBLISH_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_START: + 'PUBLISH_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_START', + PUBLISH_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_END: + 'PUBLISH_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_END', + }, + PUBLISH_FINALIZATION: { + PUBLISH_FINALIZATION_START: 'PUBLISH_FINALIZATION_START', + PUBLISH_FINALIZATION_METADATA_VALIDATION_START: + 'PUBLISH_FINALIZATION_METADATA_VALIDATION_START', + PUBLISH_FINALIZATION_METADATA_VALIDATION_END: + 'PUBLISH_FINALIZATION_METADATA_VALIDATION_END', + PUBLISH_FINALIZATION_STORE_ASSERTION_START: 'PUBLISH_FINALIZATION_STORE_ASSERTION_START', + PUBLISH_FINALIZATION_STORE_ASSERTION_END: 'PUBLISH_FINALIZATION_STORE_ASSERTION_END', + PUBLISH_FINALIZATION_END: 'PUBLISH_FINALIZATION_END', + }, + UPDATE_FINALIZATION: { + UPDATE_FINALIZATION_START: 'UPDATE_FINALIZATION_START', + UPDATE_FINALIZATION_METADATA_VALIDATION_START: + 'UPDATE_FINALIZATION_METADATA_VALIDATION_START', + UPDATE_FINALIZATION_METADATA_VALIDATION_END: 'UPDATE_FINALIZATION_METADATA_VALIDATION_END', + UPDATE_FINALIZATION_STORE_ASSERTION_START: 'UPDATE_FINALIZATION_STORE_ASSERTION_START', + UPDATE_FINALIZATION_STORE_ASSERTION_END: 'UPDATE_FINALIZATION_STORE_ASSERTION_END', + UPDATE_FINALIZATION_END: 'UPDATE_FINALIZATION_END', }, UPDATE: { UPDATE_START: 'UPDATE_START', @@ -399,9 +594,52 @@ export const OPERATION_ID_STATUS = { UPDATE_INIT_END: 'UPDATE_INIT_END', UPDATE_REPLICATE_START: 'UPDATE_REPLICATE_START', UPDATE_REPLICATE_END: 'UPDATE_REPLICATE_END', + UPDATE_FIND_NODES_START: 'UPDATE_FIND_NODES_START', + UPDATE_FIND_NODES_END: 'UPDATE_FIND_NODES_END', + UPDATE_FIND_NODES_FIND_SHARD_NODES_START: 'UPDATE_FIND_NODES_FIND_SHARD_NODES_START', + UPDATE_FIND_NODES_FIND_SHARD_NODES_END: 'UPDATE_FIND_NODES_FIND_SHARD_NODES_END', + UPDATE_FIND_NODES_PROCESS_FOUND_NODES_START: 'UPDATE_FIND_NODES_PROCESS_FOUND_NODES_START', + UPDATE_FIND_NODES_PROCESS_FOUND_NODES_END: 'UPDATE_FIND_NODES_PROCESS_FOUND_NODES_END', VALIDATING_UPDATE_ASSERTION_REMOTE_START: 'VALIDATING_UPDATE_ASSERTION_REMOTE_START', VALIDATING_UPDATE_ASSERTION_REMOTE_END: 'VALIDATING_UPDATE_ASSERTION_REMOTE_END', UPDATE_END: 'UPDATE_END', + UPDATE_VALIDATE_ASSET_START: 'UPDATE_VALIDATE_ASSET_START', + UPDATE_VALIDATE_ASSET_END: 'UPDATE_VALIDATE_ASSET_END', + UPDATE_GET_CACHED_OPERATION_ID_DATA_START: 'UPDATE_GET_CACHED_OPERATION_ID_DATA_START', + UPDATE_GET_CACHED_OPERATION_ID_DATA_END: 'UPDATE_GET_CACHED_OPERATION_ID_DATA_END', + UPDATE_VALIDATE_DATASET_ROOT_START: 'UPDATE_VALIDATE_DATASET_ROOT_START', + UPDATE_VALIDATE_DATASET_ROOT_END: 'UPDATE_VALIDATE_DATASET_ROOT_END', + UPDATE_NETWORK_START_ERROR: 'UPDATE_NETWORK_START_ERROR', + UPDATE_NETWORK_START: 'UPDATE_NETWORK_START', + UPDATE_NETWORK_END: 'UPDATE_NETWORK_END', + UPDATE_REQUEST_START: 'UPDATE_REQUEST_START', + UPDATE_REQUEST_END: 'UPDATE_REQUEST_END', + UPDATE_REQUEST_PREPARE_MESSAGE_START: 'UPDATE_REQUEST_PREPARE_MESSAGE_START', + UPDATE_REQUEST_PREPARE_MESSAGE_END: 'UPDATE_REQUEST_PREPARE_MESSAGE_END', + UPDATE_SEND_MESSAGE_START: 'UPDATE_SEND_MESSAGE_START', + UPDATE_SEND_MESSAGE_END: 'UPDATE_SEND_MESSAGE_END', + UPDATE_ADD_SIGNATURE_TO_STORAGE_START: 'UPDATE_ADD_SIGNATURE_TO_STORAGE_START', + UPDATE_ADD_SIGNATURE_TO_STORAGE_END: 'UPDATE_ADD_SIGNATURE_TO_STORAGE_END', + UPDATE_LOCAL_STORE_REMOTE_START: 'UPDATE_LOCAL_STORE_REMOTE_START', + UPDATE_LOCAL_STORE_REMOTE_END: 'UPDATE_LOCAL_STORE_REMOTE_END', + UPDATE_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_START: + 'UPDATE_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_START', + UPDATE_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_END: + 'UPDATE_LOCAL_STORE_REMOTE_PREPARE_MESSAGE_END', + UPDATE_LOCAL_STORE_REMOTE_SEND_RESPONSE_START: + 'UPDATE_LOCAL_STORE_REMOTE_SEND_RESPONSE_START', + UPDATE_LOCAL_STORE_REMOTE_SEND_RESPONSE_END: 'UPDATE_LOCAL_STORE_REMOTE_SEND_RESPONSE_END', + UPDATE_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_START: + 'UPDATE_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_START', + UPDATE_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_END: + 'UPDATE_LOCAL_STORE_REMOTE_REMOVE_CACHED_SESSION_END', + UPDATE_VALIDATE_ASSET_REMOTE_START: 'UPDATE_VALIDATE_ASSET_REMOTE_START', + UPDATE_VALIDATE_ASSET_REMOTE_END: 'UPDATE_VALIDATE_ASSET_REMOTE_END', + UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_START: + 'UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_START', + UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_END: 'UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_END', + UPDATE_LOCAL_STORE_REMOTE_SIGN_START: 'UPDATE_LOCAL_STORE_REMOTE_SIGN_START', + UPDATE_LOCAL_STORE_REMOTE_SIGN_END: 'UPDATE_LOCAL_STORE_REMOTE_SIGN_END', }, GET: { ASSERTION_EXISTS_LOCAL_START: 'ASSERTION_EXISTS_LOCAL_START', @@ -409,52 +647,154 @@ export const OPERATION_ID_STATUS = { GET_START: 'GET_START', GET_INIT_START: 'GET_INIT_START', GET_INIT_END: 'GET_INIT_END', + GET_VALIDATE_ASSET_START: 'GET_VALIDATE_ASSET_START', + GET_VALIDATE_ASSET_END: 'GET_VALIDATE_ASSET_END', GET_LOCAL_START: 'GET_LOCAL_START', GET_LOCAL_END: 'GET_LOCAL_END', GET_REMOTE_START: 'GET_REMOTE_START', GET_REMOTE_END: 'GET_REMOTE_END', GET_FETCH_FROM_NODES_START: 'GET_FETCH_FROM_NODES_START', GET_FETCH_FROM_NODES_END: 'GET_FETCH_FROM_NODES_END', + GET_FIND_NODES_START: 'GET_FIND_NODES_START', + GET_FIND_NODES_END: 'PUBLISH_FIND_NODES_END', + GET_FIND_NODES_FIND_SHARD_NODES_START: 'GET_FIND_NODES_FIND_SHARD_NODES_START', + GET_FIND_NODES_FIND_SHARD_NODES_END: 'GET_FIND_NODES_FIND_SHARD_NODES_END', + GET_NETWORK_START: 'GET_NETWORK_START', + GET_NETWORK_END: 'GET_NETWORK_END', + GET_VALIDATE_UAL_START: 'GET_VALIDATE_UAL_START', + GET_VALIDATE_UAL_END: 'GET_VALIDATE_UAL_END', + GET_LOCAL_GET_ASSERTION_START: 'GET_LOCAL_GET_ASSERTION_START', + GET_LOCAL_GET_ASSERTION_END: 'GET_LOCAL_GET_ASSERTION_END', + GET_LOCAL_GET_ASSERTION_METADATA_START: 'GET_LOCAL_GET_ASSERTION_METADATA_START', + GET_LOCAL_GET_ASSERTION_METADATA_END: 'GET_LOCAL_GET_ASSERTION_METADATA_END', + GET_REQUEST_START: 'GET_REQUEST_START', + GET_REQUEST_END: 'GET_REQUEST_END', + GET_REQUEST_SEND_MESSAGE_START: 'GET_REQUEST_SEND_MESSAGE_START', + GET_REQUEST_SEND_MESSAGE_END: 'GET_REQUEST_SEND_MESSAGE_END', + GET_REQUEST_PREPARE_MESSAGE_START: 'GET_REQUEST_PREPARE_MESSAGE_START', + GET_REQUEST_PREPARE_MESSAGE_END: 'GET_REQUEST_PREPARE_MESSAGE_END', + GET_REMOTE_PREPARE_MESSAGE_START: 'GET_REMOTE_PREPARE_MESSAGE_START', + GET_REMOTE_PREPARE_MESSAGE_END: 'GET_REMOTE_PREPARE_MESSAGE_END', + GET_REMOTE_GET_ASSERTION_START: 'GET_REMOTE_GET_ASSERTION_START', + GET_REMOTE_GET_ASSERTION_END: 'GET_REMOTE_GET_ASSERTION_END', + GET_REMOTE_GET_ASSERTION_METADATA_START: 'GET_REMOTE_GET_ASSERTION_METADATA_START', + GET_REMOTE_GET_ASSERTION_METADATA_END: 'GET_REMOTE_GET_ASSERTION_METADATA_END', + GET_REMOTE_SEND_MESSAGE_START: 'GET_REMOTE_SEND_MESSAGE_START', + GET_REMOTE_SEND_MESSAGE_END: 'GET_REMOTE_SEND_MESSAGE_END', + GET_REMOTE_REMOVE_CACHED_SESSION_START: 'GET_REMOTE_REMOVE_CACHED_SESSION_START', + GET_REMOTE_REMOVE_CACHED_SESSION_END: 'GET_REMOTE_REMOVE_CACHED_SESSION_END', + GET_FIND_NODES_PROCESS_FOUND_NODES_START: 'GET_FIND_NODES_PROCESS_FOUND_NODES_START', + GET_FIND_NODES_PROCESS_FOUND_NODES_END: 'GET_FIND_NODES_PROCESS_FOUND_NODES_END', GET_END: 'GET_END', }, - COMMIT_PROOF: { - EPOCH_CHECK_START: 'EPOCH_CHECK_START', - EPOCH_CHECK_END: 'EPOCH_CHECK_END', - SIMPLE_ASSET_SYNC_START: 'SIMPLE_ASSET_SYNC_START', - SIMPLE_ASSET_SYNC_END: 'SIMPLE_ASSET_SYNC_END', - SUBMIT_COMMIT_START: 'SUBMIT_COMMIT_START', - SUBMIT_COMMIT_END: 'SUBMIT_COMMIT_END', - SUBMIT_COMMIT_SEND_TX_START: 'SUBMIT_COMMIT_SEND_TX_START', - SUBMIT_COMMIT_SEND_TX_END: 'SUBMIT_COMMIT_SEND_TX_END', - CALCULATE_PROOFS_START: 'CALCULATE_PROOFS_START', - CALCULATE_PROOFS_END: 'CALCULATE_PROOFS_END', - SUBMIT_PROOFS_START: 'SUBMIT_PROOFS_START', - SUBMIT_PROOFS_END: 'SUBMIT_PROOFS_END', - SUBMIT_PROOFS_SEND_TX_START: 'SUBMIT_PROOFS_START', - SUBMIT_PROOFS_SEND_TX_END: 'SUBMIT_PROOFS_END', - SUBMIT_UPDATE_COMMIT_START: 'SUBMIT_UPDATE_COMMIT_START', - SUBMIT_UPDATE_COMMIT_END: 'SUBMIT_UPDATE_COMMIT_END', - SUBMIT_UPDATE_COMMIT_SEND_TX_START: 'SUBMIT_UPDATE_COMMIT_START', - SUBMIT_UPDATE_COMMIT_SEND_TX_END: 'SUBMIT_UPDATE_COMMIT_END', - }, QUERY: { QUERY_INIT_START: 'QUERY_INIT_START', QUERY_INIT_END: 'QUERY_INIT_END', QUERY_START: 'QUERY_START', QUERY_END: 'QUERY_END', + QUERY_CONSTRUCT_QUERY_START: 'QUERY_CONTRCUT_QUERY_START', + QUERY_CONSTRUCT_QUERY_END: 'QUERY_CONTRCUT_QUERY_END', + QUERY_SELECT_QUERY_START: 'QUERY_SELECT_QUERY_START', + QUERY_SELECT_QUERY_END: 'QUERY_SELECT_QUERY_END', + QUERY_CACHE_OPERATION_ID_DATA_TO_MEMORY_START: + 'QUERY_CACHE_OPERATION_ID_DATA_TO_MEMORY_START', + QUERY_CACHE_OPERATION_ID_DATA_TO_MEMORY_END: 'QUERY_CACHE_OPERATION_ID_DATA_TO_MEMORY_END', + QUERY_CACHE_OPERATION_ID_DATA_TO_FILE_START: 'QUERY_CACHE_OPERATION_ID_DATA_TO_FILE_START', + QUERY_CACHE_OPERATION_ID_DATA_TO_FILE_END: 'QUERY_CACHE_OPERATION_ID_DATA_TO_FILE_END', }, LOCAL_STORE: { LOCAL_STORE_INIT_START: 'LOCAL_STORE_INIT_START', LOCAL_STORE_INIT_END: 'LOCAL_STORE_INIT_END', LOCAL_STORE_START: 'LOCAL_STORE_START', LOCAL_STORE_END: 'LOCAL_STORE_END', + LOCAL_STORE_GET_CACHED_OPERATION_ID_DATA_START: + 'LOCAL_STORE_GET_CACHED_OPERATION_ID_DATA_START', + LOCAL_STORE_GET_CACHED_OPERATION_ID_DATA_END: + 'LOCAL_STORE_GET_CACHED_OPERATION_ID_DATA_END', + LOCAL_STORE_PROCESS_RESPONSE_START: 'LOCAL_STORE_PROCESS_RESPONSE_START', + LOCAL_STORE_PROCESS_RESPONSE_END: 'LOCAL_STORE_PROCESS_RESPONSE_END', + LOCAL_STORE_GET_PARANET_METADATA_START: 'LOCAL_STORE_GET_PARANET_METADATA_START', + LOCAL_STORE_GET_PARANET_METADATA_END: 'LOCAL_STORE_GET_PARANET_METADATA_END', + LOCAL_STORE_INITIALIZE_PARANET_REPOSITORY_START: + 'LOCAL_STORE_INITIALIZE_PARANET_REPOSITORY_START', + LOCAL_STORE_INITIALIZE_PARANET_REPOSITORY_END: + 'LOCAL_STORE_INITIALIZE_PARANET_REPOSITORY_END', + LOCAL_STORE_INITIALIZE_PARANET_RECORD_START: 'LOCAL_STORE_INITIALIZE_PARANET_RECORD_START', + LOCAL_STORE_INITIALIZE_PARANET_RECORD_END: 'LOCAL_STORE_INITIALIZE_PARANET_RECORD_END', + LOCAL_STORE_INCREMENT_PARANET_KA_COUNT_START: + 'LOCAL_STORE_INCREMENT_PARANET_KA_COUNT_START', + LOCAL_STORE_INCREMENT_PARANET_KA_COUNT_END: 'LOCAL_STORE_INCREMENT_PARANET_KA_COUNT_END', + }, + PARANET: { + PARANET_SYNC_START: 'PARANET_SYNC_START', + PARANET_SYNC_END: 'PARANET_SYNC_END', + PARANET_SYNC_MISSED_KAS_SYNC_START: 'PARANET_SYNC_MISSED_KAS_SYNC_START', + PARANET_SYNC_MISSED_KAS_SYNC_END: 'PARANET_SYNC_MISSED_KAS_SYNC_END', + PARANET_SYNC_NEW_KAS_SYNC_START: 'PARANET_SYNC_NEW_KAS_SYNC_START', + PARANET_SYNC_NEW_KAS_SYNC_END: 'PARANET_SYNC_NEW_KAS_SYNC_END', + }, + ASK: { + ASK_START: 'ASK_START', + ASK_END: 'ASK_END', + ASK_REMOTE_START: 'ASK_REMOTE_START', + ASK_REMOTE_END: 'ASK_REMOTE_START', + ASK_REMOTE_PREPARE_MESSAGE_START: 'ASK_REMOTE_PREPARE_MESSAGE_START', + ASK_REMOTE_PREPARE_MESSAGE_END: 'ASK_REMOTE_PREPARE_MESSAGE_END', + ASK_REMOTE_SEND_MESSAGE_START: 'ASK_REMOTE_SEND_MESSAGE_START', + ASK_REMOTE_SEND_MESSAGE_END: 'ASK_REMOTE_SEND_MESSAGE_END', + ASK_REMOTE_REMOVE_CACHED_SESSION_START: 'ASK_REMOTE_REMOVE_CACHED_SESSION_START', + ASK_REMOTE_REMOVE_CACHED_SESSION_END: 'ASK_REMOTE_REMOVE_CACHED_SESSION_END', + ASK_FIND_NODES_START: 'ASK_FIND_NODES_START', + ASK_FIND_NODES_END: 'ASK_FIND_NODES_END', + ASK_FIND_NODES_FIND_SHARD_NODES_START: 'ASK_FIND_NODES_FIND_SHARD_NODES_START', + ASK_FIND_NODES_FIND_SHARD_NODES_END: 'ASK_FIND_NODES_FIND_SHARD_NODES_END', + ASK_FIND_NODES_PROCESS_FOUND_NODES_START: 'ASK_FIND_NODES_PROCESS_FOUND_NODES_START', + ASK_FIND_NODES_PROCESS_FOUND_NODES_END: 'ASK_FIND_NODES_PROCESS_FOUND_NODES_END', + ASK_FETCH_FROM_NODES_START: 'ASK_FETCH_FROM_NODES_START', + ASK_FETCH_FROM_NODES_END: 'ASK_FETCH_FROM_NODES_END', + ASK_NETWORK_START: 'ASK_NETWORK_START', + ASK_NETWORK_END: 'ASK_NETWORK_END', + ASK_REQUEST_START: 'ASK_REQUEST_START', + ASK_REQUEST_END: 'ASK_REQUEST_END', + ASK_REQUEST_PREPARE_MESSAGE_START: 'ASK_REQUEST_PREPARE_MESSAGE_START', + ASK_REQUEST_PREPARE_MESSAGE_END: 'ASK_REQUEST_PREPARE_MESSAGE_END', + ASK_REQUEST_SEND_MESSAGE_START: 'ASK_REQUEST_SEND_MESSAGE_START', + ASK_REQUEST_SEND_MESSAGE_END: 'ASK_REQUEST_SEND_MESSAGE_END', + }, + FINALITY: { + FINALITY_START: 'FINALITY_START', + FINALITY_END: 'FINALITY_END', + FINALITY_REMOTE_START: 'FINALITY_REMOTE_START', + FINALITY_REMOTE_END: 'FINALITY_REMOTE_START', + FINALITY_REMOTE_PREPARE_MESSAGE_START: 'FINALITY_REMOTE_PREPARE_MESSAGE_START', + FINALITY_REMOTE_PREPARE_MESSAGE_END: 'FINALITY_REMOTE_PREPARE_MESSAGE_END', + FINALITY_REMOTE_SEND_MESSAGE_START: 'FINALITY_REMOTE_SEND_MESSAGE_START', + FINALITY_REMOTE_SEND_MESSAGE_END: 'FINALITY_REMOTE_SEND_MESSAGE_END', + FINALITY_REMOTE_REMOVE_CACHED_SESSION_START: 'FINALITY_REMOTE_REMOVE_CACHED_SESSION_START', + FINALITY_REMOTE_REMOVE_CACHED_SESSION_END: 'FINALITY_REMOTE_REMOVE_CACHED_SESSION_END', + FINALITY_REPLICATE_START: 'FINALITY_REPLICATE_START', + FINALITY_REPLICATE_END: 'FINALITY_REPLICATE_END', + FINALITY_FETCH_FROM_NODES_START: 'FINALITY_FETCH_FROM_NODES_START', + FINALITY_FETCH_FROM_NODES_END: 'FINALITY_FETCH_FROM_NODES_END', + FINALITY_REQUEST_START: 'FINALITY_REQUEST_START', + FINALITY_REQUEST_END: 'FINALITY_REQUEST_END', + FINALITY_REQUEST_PREPARE_MESSAGE_START: 'FINALITY_REQUEST_PREPARE_MESSAGE_START', + FINALITY_REQUEST_PREPARE_MESSAGE_END: 'FINALITY_REQUEST_PREPARE_MESSAGE_END', + FINALITY_REQUEST_SEND_MESSAGE_START: 'FINALITY_REQUEST_SEND_MESSAGE_START', + FINALITY_REQUEST_SEND_MESSAGE_END: 'FINALITY_REQUEST_SEND_MESSAGE_END', + PUBLISH_FINALITY_REMOTE_START: 'PUBLISH_FINALITY_REMOTE_START', + PUBLISH_FINALITY_REMOTE_END: 'PUBLISH_FINALITY_REMOTE_END', + PUBLISH_FINALITY_END: 'PUBLISH_FINALITY_END', + PUBLISH_FINALITY_FETCH_FROM_NODES_END: 'PUBLISH_FINALITY_FETCH_FROM_NODES_END', }, }; export const OPERATIONS = { PUBLISH: 'publish', - UPDATE: 'update', + FINALITY: 'finality', + // UPDATE: 'update', GET: 'get', + ASK: 'ask', }; export const SERVICE_AGREEMENT_START_TIME_DELAY_FOR_COMMITS_SECONDS = { @@ -472,7 +812,6 @@ export const EXPECTED_TRANSACTION_ERRORS = { TOO_LOW_PRIORITY: 'TooLowPriority', NODE_ALREADY_REWARDED: 'NodeAlreadyRewarded', SERVICE_AGREEMENT_DOESNT_EXIST: 'ServiceAgreementDoesntExist', - INVALID_PROXIMITY_SCORE_FUNCTIONS_PAIR_ID: 'InvalidProximityScoreFunctionsPairId', INVALID_SCORE_FUNCTION_ID: 'InvalidScoreFunctionId', COMMIT_WINDOW_CLOSED: 'CommitWindowClosed', NODE_NOT_IN_SHARDING_TABLE: 'NodeNotInShardingTable', @@ -491,35 +830,40 @@ export const OPERATION_ID_COMMAND_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; * @constant {number} FINALIZED_COMMAND_CLEANUP_TIME_MILLS - Command cleanup interval time * finalized commands command cleanup interval time 24h */ + +export const PUBLISH_STORAGE_MEMORY_CLEANUP_COMMAND_CLEANUP_TIME_MILLS = 4 * 60 * 60 * 1000; +export const PUBLISH_STORAGE_FILE_CLEANUP_COMMAND_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; + export const FINALIZED_COMMAND_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; export const GET_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; - export const GET_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; - export const GET_RESPONSE_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; - export const GET_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; export const PUBLISH_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; - export const PUBLISH_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; - export const PUBLISH_RESPONSE_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; - export const PUBLISH_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; export const UPDATE_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; - export const UPDATE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; - export const UPDATE_RESPONSE_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; - export const UPDATE_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; -export const PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; +export const ASK_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; +export const ASK_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; +export const ASK_RESPONSE_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; +export const ASK_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; + +export const FINALITY_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; +export const FINALITY_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; +export const FINALITY_RESPONSE_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; +export const FINALITY_RESPONSE_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; +export const PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_MILLS = 24 * 60 * 60 * 1000; export const PROCESSED_BLOCKCHAIN_EVENTS_CLEANUP_TIME_DELAY = 24 * 60 * 60 * 1000; + /** * @constant {number} COMMAND_STATUS - * Status for commands @@ -534,26 +878,39 @@ export const COMMAND_STATUS = { REPEATING: 'REPEATING', }; +export const PENDING_STORAGE_FILES_FOR_REMOVAL_MAX_NUMBER = 100; + export const OPERATION_ID_FILES_FOR_REMOVAL_MAX_NUMBER = 100; -export const REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER = 1000; +export const REPOSITORY_ROWS_FOR_REMOVAL_MAX_NUMBER = 10_000; + +export const ARCHIVE_FOLDER = 'archive'; + +export const MIGRATION_FOLDER = 'migrations'; export const ARCHIVE_COMMANDS_FOLDER = 'commands'; +export const PUBLISHER_NODE_SIGNATURES_FOLDER = 'publisher'; + +export const NETWORK_SIGNATURES_FOLDER = 'network'; + export const ARCHIVE_BLOCKCHAIN_EVENTS_FOLDER = 'blockchain_events'; export const ARCHIVE_GET_FOLDER = 'get'; - export const ARCHIVE_GET_RESPONSES_FOLDER = 'get_responses'; export const ARCHIVE_PUBLISH_FOLDER = 'publish'; - export const ARCHIVE_PUBLISH_RESPONSES_FOLDER = 'publish_responses'; export const ARCHIVE_UPDATE_FOLDER = 'update'; - export const ARCHIVE_UPDATE_RESPONSES_FOLDER = 'update_responses'; +export const ARCHIVE_ASK_FOLDER = 'ask'; +export const ARCHIVE_ASK_RESPONSES_FOLDER = 'ask_responses'; + +export const ARCHIVE_FINALITY_FOLDER = 'finality'; +export const ARCHIVE_FINALITY_RESPONSES_FOLDER = 'finality_responses'; + /** * How many commands will run in parallel * @type {number} @@ -579,11 +936,11 @@ export const HTTP_API_ROUTES = { path: '/publish', options: { rateLimit: true }, }, - update: { - method: 'post', - path: '/update', - options: { rateLimit: true }, - }, + // update: { + // method: 'post', + // path: '/update', + // options: { rateLimit: true }, + // }, query: { method: 'post', path: '/query', @@ -615,7 +972,48 @@ export const HTTP_API_ROUTES = { options: {}, }, }, - v1: {}, + v1: { + publish: { + method: 'post', + path: '/publish', + options: { rateLimit: true }, + }, + finality: { + method: 'get', + path: '/finality', + options: {}, + }, + // update: { + // method: 'post', + // path: '/update', + // options: { rateLimit: true }, + // }, + query: { + method: 'post', + path: '/query', + options: {}, + }, + get: { + method: 'post', + path: '/get', + options: { rateLimit: true }, + }, + result: { + method: 'get', + path: '/:operation/:operationId', + options: {}, + }, + info: { + method: 'get', + path: '/info', + options: {}, + }, + ask: { + method: 'post', + path: '/ask', + options: {}, + }, + }, }; /** @@ -624,8 +1022,10 @@ export const HTTP_API_ROUTES = { */ export const NETWORK_PROTOCOLS = { STORE: ['/store/1.0.0'], - UPDATE: ['/update/1.0.0'], + // UPDATE: ['/update/1.0.0'], GET: ['/get/1.0.0'], + ASK: ['/ask/1.0.0'], + FINALITY: ['/finality/1.0.0'], }; export const OPERATION_STATUS = { @@ -659,51 +1059,38 @@ export const QUERY_TYPES = { */ export const LOCAL_STORE_TYPES = { TRIPLE: 'TRIPLE', - PENDING: 'PENDING', + TRIPLE_PARANET: 'TRIPLE_PARANET', }; /** * Contract names - * @type {{SHARDING_TABLE_CONTRACT: string}} + * @type {{SHARDING_TABLE: string}} */ export const CONTRACTS = { - SHARDING_TABLE_CONTRACT: 'ShardingTableContract', - STAKING_CONTRACT: 'StakingContract', - PROFILE_CONTRACT: 'ProfileContract', - HUB_CONTRACT: 'HubContract', - CONTENT_ASSET: 'ContentAssetContract', - COMMIT_MANAGER_V1_U1_CONTRACT: 'CommitManagerV1U1Contract', - SERVICE_AGREEMENT_V1_CONTRACT: 'ServiceAgreementV1Contract', - PARAMETERS_STORAGE_CONTRACT: 'ParametersStorageContract', - IDENTITY_STORAGE_CONTRACT: 'IdentityStorageContract', - LOG2PLDSF_CONTRACT: 'Log2PLDSFContract', - LINEAR_SUM_CONTRACT: 'LinearSumContract', - PARANETS_REGISTRY_CONTRACT: 'ParanetsRegistry', -}; - -export const CONTRACT_EVENTS = { - HUB: ['NewContract', 'ContractChanged', 'NewAssetStorage', 'AssetStorageChanged'], - SHARDING_TABLE: ['NodeAdded', 'NodeRemoved'], - STAKING: ['StakeIncreased', 'StakeWithdrawalStarted'], - PROFILE: ['AskUpdated'], - COMMIT_MANAGER_V1: ['StateFinalized'], - SERVICE_AGREEMENT_V1: ['ServiceAgreementV1Extended', 'ServiceAgreementV1Terminated'], - PARAMETERS_STORAGE: ['ParameterChanged'], - LOG2PLDSF: ['ParameterChanged'], - LINEAR_SUM: ['ParameterChanged'], -}; - -export const GROUPED_CONTRACT_EVENTS = {}; - -export const CONTRACT_EVENT_TO_GROUP_MAPPING = (() => { - const mapping = {}; - Object.entries(GROUPED_CONTRACT_EVENTS).forEach(([groupName, { events }]) => { - events.forEach((eventName) => { - mapping[eventName] = groupName; - }); - }); - return mapping; -})(); + SHARDING_TABLE: 'ShardingTable', + STAKING: 'Staking', + PROFILE: 'Profile', + HUB: 'Hub', + PARAMETERS_STORAGE: 'ParametersStorage', + IDENTITY_STORAGE: 'IdentityStorage', + LOG2PLDSF: 'Log2PLDSF', + LINEAR_SUM: 'LinearSum', + PARANETS_REGISTRY: 'ParanetsRegistry', +}; + +export const MONITORED_CONTRACT_EVENTS = { + Hub: ['NewContract', 'ContractChanged', 'NewAssetStorage', 'AssetStorageChanged'], + ParametersStorage: ['ParameterChanged'], + KnowledgeCollectionStorage: ['KnowledgeCollectionCreated'], +}; + +export const MONITORED_CONTRACTS = Object.keys(MONITORED_CONTRACT_EVENTS); + +export const MONITORED_EVENTS = Object.values(MONITORED_CONTRACT_EVENTS).flatMap( + (events) => events, +); + +export const CONTRACT_INDEPENDENT_EVENTS = {}; export const NODE_ENVIRONMENTS = { DEVELOPMENT: 'development', @@ -715,21 +1102,11 @@ export const NODE_ENVIRONMENTS = { export const MAXIMUM_FETCH_EVENTS_FAILED_COUNT = 1000; -export const DELAY_BETWEEN_FAILED_FETCH_EVENTS_MILLIS = 10 * 1000; - export const CONTRACT_EVENT_FETCH_INTERVALS = { MAINNET: 10 * 1000, DEVELOPMENT: 4 * 1000, }; -export const BLOCK_TIME_MILLIS = { - OTP: 12_000, - HARDHAT: 5_000, - GNOSIS: 5_000, - DEFAULT: 12_000, - BASE: 2_000, -}; - export const TRANSACTION_CONFIRMATIONS = 1; export const SERVICE_AGREEMENT_SOURCES = { @@ -744,6 +1121,11 @@ export const CACHE_DATA_TYPES = { ANY: 'any', }; +export const PARANET_SYNC_SOURCES = { + SYNC: 'sync', + LOCAL_STORE: 'local_store', +}; + /** * CACHED_FUNCTIONS: * ContractName: { @@ -769,12 +1151,6 @@ export const CACHED_FUNCTIONS = { IdentityStorageContract: { getIdentityId: CACHE_DATA_TYPES.NUMBER, }, - Log2PLDSFContract: { - getParameters: CACHE_DATA_TYPES.ANY, - }, - LinearSumContract: { - getParameters: CACHE_DATA_TYPES.ANY, - }, }; export const LOW_BID_SUGGESTION = 'low'; @@ -790,3 +1166,35 @@ export const BID_SUGGESTION_RANGE_ENUM = [ export const LOW_BID_SUGGESTION_OFFSET = 9; export const MED_BID_SUGGESTION_OFFSET = 11; export const HIGH_BID_SUGGESTION_OFFSET = 14; + +export const LOCAL_INSERT_FOR_ASSET_SYNC_MAX_ATTEMPTS = 5; +export const LOCAL_INSERT_FOR_ASSET_SYNC_RETRY_DELAY = 1000; + +export const LOCAL_INSERT_FOR_CURATED_PARANET_MAX_ATTEMPTS = 5; +export const LOCAL_INSERT_FOR_CURATED_PARANET_RETRY_DELAY = 1000; + +export const MAX_RETRIES_READ_CACHED_PUBLISH_DATA = 5; +export const RETRY_DELAY_READ_CACHED_PUBLISH_DATA = 10000; + +export const TRIPLE_STORE_REPOSITORY = { + DKG: 'dkg', + DKG_HISTORIC: 'dkg-historic', +}; + +export const TRIPLES_VISIBILITY = { + PUBLIC: 'public', + PRIVATE: 'private', + ALL: 'all', +}; + +export const OLD_CONTENT_STORAGE_MAP = { + BASE_MAINNET: '0x3bdfA81079B2bA53a25a6641608E5E1E6c464597', + BASE_TESTNET: '0x9e3071Dc0730CB6dd0ce42969396D716Ea33E7e1', + BASE_DEVNET: '0xBe08A25dcF2B68af88501611e5456571f50327B4', + GNOSIS_MAINNET: '0xf81a8C0008DE2DCdb73366Cf78F2b178616d11DD', + GNOSIS_TESTNET: '0xeA3423e02c8d231532dab1BCE5D034f3737B3638', + GNOSIS_DEVNET: '0x3db64dD0Ac054610d1e2Af9Cca0fbCB1A7f4C2d8', + OTP_MAINNET: '0x5cAC41237127F94c2D21dAe0b14bFeFa99880630', + OTP_TESTNET: '0x1A061136Ed9f5eD69395f18961a0a535EF4B3E5f', + OTP_DEVNET: '0xABd59A9aa71847F499d624c492d3903dA953d67a', +}; diff --git a/src/controllers/http-api/v0/bid-suggestion-http-api-controller-v0.js b/src/controllers/http-api/v0/bid-suggestion-http-api-controller-v0.js index 93fe75c81e..252f7eeb6c 100644 --- a/src/controllers/http-api/v0/bid-suggestion-http-api-controller-v0.js +++ b/src/controllers/http-api/v0/bid-suggestion-http-api-controller-v0.js @@ -1,76 +1,34 @@ +import { BigNumber } from 'ethers'; import BaseController from '../base-http-api-controller.js'; -import { LOW_BID_SUGGESTION } from '../../../constants/constants.js'; +import { ONE_ETHER } from '../../../constants/constants.js'; class BidSuggestionController extends BaseController { constructor(ctx) { super(ctx); - this.repositoryModuleManager = ctx.repositoryModuleManager; this.blockchainModuleManager = ctx.blockchainModuleManager; - this.shardingTableService = ctx.shardingTableService; - this.serviceAgreementService = ctx.serviceAgreementService; } async handleRequest(req, res) { - if ((await this.repositoryModuleManager.getPeersCount(req.query.blockchain)) === 0) { - const message = `Unable to get bid suggestion. Empty sharding table for blockchain id: ${req.query.blockchain}`; - this.logger.error(message); - this.returnResponse(res, 406, { - code: 406, - message, - }); - return; - } - - // Uncomment when switch to ethers.js - // if ( - // !(await this.blockchainModuleManager.isAssetStorageContract( - // req.query.blockchain, - // req.query.contentAssetStorageAddress, - // )) - // ) - // this.returnResponse(res, 400, { - // code: 400, - // message: `Invalid Content Asset Storage Contract Address`, - // }); - // if ( - // !(await this.blockchainModuleManager.isHashFunction( - // req.query.blockchain, - // req.query.hashFunctionId, - // )) - // ) - // this.returnResponse(res, 400, { - // code: 400, - // message: `Invalid Hash Function ID`, - // }); - - const { - blockchain, - epochsNumber, - assertionSize, - contentAssetStorageAddress, - firstAssertionId, - hashFunctionId, - } = req.query; - let { bidSuggestionRange } = req.query; try { - const proximityScoreFunctionsPairId = 2; - - if (!bidSuggestionRange) { - bidSuggestionRange = LOW_BID_SUGGESTION; - } - - const bidSuggestion = await this.shardingTableService.getBidSuggestion( - blockchain, - epochsNumber, - assertionSize, - contentAssetStorageAddress, - firstAssertionId, - hashFunctionId, - proximityScoreFunctionsPairId, - bidSuggestionRange, + const { blockchain, epochsNumber, assertionSize } = req.body; + const promises = [ + this.blockchainModuleManager.getTimeUntilNextEpoch(blockchain), + this.blockchainModuleManager.getEpochLength(blockchain), + this.blockchainModuleManager.getStakeWeightedAverageAsk(blockchain), + ]; + const [timeUntilNextEpoch, epochLength, stakeWeightedAverageAsk] = await Promise.all( + promises, ); - - this.returnResponse(res, 200, { bidSuggestion }); + const timeUntilNextEpochScaled = BigNumber.from(timeUntilNextEpoch) + .mul(ONE_ETHER) + .div(BigNumber.from(epochLength)); + const epochsNumberScaled = BigNumber.from(epochsNumber).mul(ONE_ETHER); + const storageTime = timeUntilNextEpochScaled.add(epochsNumberScaled); + const bidSuggestion = BigNumber.from(stakeWeightedAverageAsk) + .mul(storageTime) + .mul(BigNumber.from(assertionSize)) + .div(ONE_ETHER); + this.returnResponse(res, 200, { bidSuggestion: bidSuggestion.toString() }); } catch (error) { this.logger.error(`Unable to get bid suggestion. Error: ${error}`); this.returnResponse(res, 500, { diff --git a/src/controllers/http-api/v0/get-http-api-controller-v0.js b/src/controllers/http-api/v0/get-http-api-controller-v0.js index 3114e49955..02b66bb6f2 100644 --- a/src/controllers/http-api/v0/get-http-api-controller-v0.js +++ b/src/controllers/http-api/v0/get-http-api-controller-v0.js @@ -1,9 +1,9 @@ import { OPERATION_ID_STATUS, OPERATION_STATUS, - CONTENT_ASSET_HASH_FUNCTION_ID, - DEFAULT_GET_STATE, ERROR_TYPE, + TRIPLES_VISIBILITY, + OLD_CONTENT_STORAGE_MAP, } from '../../../constants/constants.js'; import BaseController from '../base-http-api-controller.js'; @@ -16,6 +16,7 @@ class GetController extends BaseController { this.repositoryModuleManager = ctx.repositoryModuleManager; this.ualService = ctx.ualService; this.validationService = ctx.validationService; + this.fileService = ctx.fileService; } async handleRequest(req, res) { @@ -39,49 +40,57 @@ class GetController extends BaseController { OPERATION_STATUS.IN_PROGRESS, ); + let tripleStoreMigrationAlreadyExecuted = false; + try { + tripleStoreMigrationAlreadyExecuted = + (await this.fileService.readFile( + '/root/ot-node/data/migrations/v8DataMigration', + )) === 'MIGRATED'; + } catch (e) { + this.logger.warn(`No triple store migration file error: ${e}`); + } let blockchain; let contract; - let tokenId; + let knowledgeCollectionId; + let knowledgeAssetId; try { - const { id } = req.body; + const { id, paranetUAL, includeMetadata, contentType } = req.body; + ({ blockchain, contract, knowledgeCollectionId, knowledgeAssetId } = + this.ualService.resolveUAL(id)); - if (!this.ualService.isUAL(id)) { - throw Error('Requested id is not a UAL.'); - } - - ({ blockchain, contract, tokenId } = this.ualService.resolveUAL(id)); + this.logger.info(`Get for ${id} with operation id ${operationId} initiated.`); - const isValidUal = await this.validationService.validateUal( - blockchain, - contract, - tokenId, - ); - if (!isValidUal) { - throw Error(`${id} UAL isn't valid.`); - } + // Get assertionId - datasetRoot + // - const state = req.body.state ?? DEFAULT_GET_STATE; - const hashFunctionId = req.body.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID; + const commandSequence = []; - this.logger.info(`Get for ${id} with operation id ${operationId} initiated.`); + if ( + !tripleStoreMigrationAlreadyExecuted && + Object.values(OLD_CONTENT_STORAGE_MAP) + .map((ca) => ca.toLowerCase()) + .includes(contract.toLowerCase()) + ) { + commandSequence.push('getAssertionMerkleRootCommand'); + } - const commandSequence = [ - 'getAssertionIdCommand', - 'localGetCommand', - 'networkGetCommand', - ]; + commandSequence.push('getFindShardCommand'); await this.commandExecutor.add({ name: commandSequence[0], sequence: commandSequence.slice(1), delay: 0, data: { + ual: id, + includeMetadata, blockchain, contract, - tokenId, + knowledgeCollectionId, + knowledgeAssetId, operationId, - state, - hashFunctionId, + paranetUAL, + contentType: contentType ?? TRIPLES_VISIBILITY.ALL, + isOperationV0: true, }, transactional: false, }); diff --git a/src/controllers/http-api/v0/local-store-http-api-controller-v0.js b/src/controllers/http-api/v0/local-store-http-api-controller-v0.js index 06b6e0385a..122b766629 100644 --- a/src/controllers/http-api/v0/local-store-http-api-controller-v0.js +++ b/src/controllers/http-api/v0/local-store-http-api-controller-v0.js @@ -7,6 +7,7 @@ class LocalStoreController extends BaseController { this.commandExecutor = ctx.commandExecutor; this.operationIdService = ctx.operationIdService; this.dataService = ctx.dataService; + this.fileService = ctx.fileService; } async handleRequest(req, res) { @@ -23,8 +24,13 @@ class LocalStoreController extends BaseController { null, OPERATION_ID_STATUS.LOCAL_STORE.LOCAL_STORE_INIT_END, ); - - const assertions = req.body; + let assertions; + const { filePath } = req.body; + if (filePath) { + assertions = JSON.parse(await this.fileService.readFile(filePath)); + } else { + assertions = req.body; + } const cachedAssertions = { public: {}, @@ -65,9 +71,11 @@ class LocalStoreController extends BaseController { )}. Operation id: ${operationId}`, ); - await this.operationIdService.cacheOperationIdData(operationId, cachedAssertions); + await this.operationIdService.cacheOperationIdDataToMemory(operationId, cachedAssertions); + + await this.operationIdService.cacheOperationIdDataToFile(operationId, cachedAssertions); - const commandSequence = ['validateAssetCommand', 'localStoreCommand']; + const commandSequence = ['localStoreCommand']; await this.commandExecutor.add({ name: commandSequence[0], @@ -79,6 +87,8 @@ class LocalStoreController extends BaseController { contract: assertions[0].contract, tokenId: assertions[0].tokenId, storeType: assertions[0].storeType, + paranetUAL: assertions[0].paranetUAL, + isOperationV0: true, }, transactional: false, }); diff --git a/src/controllers/http-api/v0/publish-http-api-controller-v0.js b/src/controllers/http-api/v0/publish-http-api-controller-v0.js index f3de5c7c4b..2abd1a9517 100644 --- a/src/controllers/http-api/v0/publish-http-api-controller-v0.js +++ b/src/controllers/http-api/v0/publish-http-api-controller-v0.js @@ -3,28 +3,31 @@ import { ERROR_TYPE, OPERATION_ID_STATUS, OPERATION_STATUS, - CONTENT_ASSET_HASH_FUNCTION_ID, LOCAL_STORE_TYPES, } from '../../../constants/constants.js'; class PublishController extends BaseController { constructor(ctx) { super(ctx); - this.operationService = ctx.publishService; this.commandExecutor = ctx.commandExecutor; + this.operationService = ctx.publishService; this.operationIdService = ctx.operationIdService; this.repositoryModuleManager = ctx.repositoryModuleManager; - this.ualService = ctx.ualService; - this.serviceAgreementService = ctx.serviceAgreementService; - this.blockchainModuleManager = ctx.blockchainModuleManager; + this.blockchainModuleManager = ctx.blockchainModuleManager; // this is not used + this.pendingStorageService = ctx.pendingStorageService; } async handleRequest(req, res) { - const { assertion, assertionId, blockchain, contract, tokenId } = req.body; - const hashFunctionId = req.body.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID; + const { + assertion: dataset, + assertionId: datasetRoot, + blockchain, + contract, + tokenId, + } = req.body; this.logger.info( - `Received asset with assertion id: ${assertionId}, blockchain: ${blockchain}, hub contract: ${contract}, token id: ${tokenId}`, + `Received asset with dataset root: ${datasetRoot}, blockchain: ${blockchain}`, ); const operationId = await this.operationIdService.generateOperationId( @@ -53,24 +56,49 @@ class PublishController extends BaseController { ); try { - await this.operationIdService.cacheOperationIdData(operationId, { - public: { - assertion, - assertionId, - }, + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_CACHE_OPERATION_ID_DATA_TO_MEMORY_START, + operationId, blockchain, - contract, - tokenId, + ); + await this.operationIdService.cacheOperationIdDataToMemory(operationId, { + dataset, + datasetRoot, }); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_CACHE_OPERATION_ID_DATA_TO_MEMORY_END, + operationId, + blockchain, + ); - const commandSequence = ['publishValidateAssetCommand']; + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_CACHE_OPERATION_ID_DATA_TO_FILE_START, + operationId, + blockchain, + ); + await this.operationIdService.cacheOperationIdDataToFile(operationId, { + dataset, + datasetRoot, + }); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_CACHE_OPERATION_ID_DATA_TO_FILE_END, + operationId, + blockchain, + ); - // Backwards compatibility check - true for older clients - if (req.body.localStore) { - commandSequence.push('localStoreCommand'); - } + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_CACHE_DATASET_START, + operationId, + blockchain, + ); + await this.pendingStorageService.cacheDataset(operationId, datasetRoot, dataset); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_CACHE_DATASET_END, + operationId, + blockchain, + ); - commandSequence.push('networkPublishCommand'); + const commandSequence = ['publishFindShardCommand']; await this.commandExecutor.add({ name: commandSequence[0], @@ -79,12 +107,12 @@ class PublishController extends BaseController { period: 5000, retries: 3, data: { - assertionId, + datasetRoot, blockchain, + operationId, contract, tokenId, - hashFunctionId, - operationId, + isOperationV0: true, storeType: LOCAL_STORE_TYPES.TRIPLE, }, transactional: false, diff --git a/src/controllers/http-api/v0/query-http-api-controller-v0.js b/src/controllers/http-api/v0/query-http-api-controller-v0.js index 79e2455734..6b5da96b8a 100644 --- a/src/controllers/http-api/v0/query-http-api-controller-v0.js +++ b/src/controllers/http-api/v0/query-http-api-controller-v0.js @@ -1,16 +1,17 @@ import BaseController from '../base-http-api-controller.js'; -import { OPERATION_ID_STATUS } from '../../../constants/constants.js'; +import { OPERATION_ID_STATUS, TRIPLE_STORE_REPOSITORIES } from '../../../constants/constants.js'; class QueryController extends BaseController { constructor(ctx) { super(ctx); this.commandExecutor = ctx.commandExecutor; this.operationIdService = ctx.operationIdService; + this.fileService = ctx.fileService; } async handleRequest(req, res) { - const { query, type: queryType } = req.body; + const { query, type: queryType, repository } = req.body; const operationId = await this.operationIdService.generateOperationId( OPERATION_ID_STATUS.QUERY.QUERY_INIT_START, @@ -20,6 +21,15 @@ class QueryController extends BaseController { operationId, }); + let tripleStoreMigrationAlreadyExecuted = false; + try { + tripleStoreMigrationAlreadyExecuted = + (await this.fileService.readFile( + '/root/ot-node/data/migrations/v8DataMigration', + )) === 'MIGRATED'; + } catch (e) { + this.logger.warn(`No triple store migration file error: ${e}`); + } await this.operationIdService.updateOperationIdStatus( operationId, null, @@ -30,7 +40,15 @@ class QueryController extends BaseController { name: 'queryCommand', sequence: [], delay: 0, - data: { query, queryType, repository: req.body.repository, operationId }, + data: { + query, + queryType, + repository: + !tripleStoreMigrationAlreadyExecuted && repository + ? [repository, TRIPLE_STORE_REPOSITORIES.DKG] + : TRIPLE_STORE_REPOSITORIES.DKG, + operationId, + }, transactional: false, }); } diff --git a/src/controllers/http-api/v0/request-schema/get-schema-v0.js b/src/controllers/http-api/v0/request-schema/get-schema-v0.js index a01a9a4e2c..6de06ffc35 100644 --- a/src/controllers/http-api/v0/request-schema/get-schema-v0.js +++ b/src/controllers/http-api/v0/request-schema/get-schema-v0.js @@ -1,5 +1,3 @@ -import { GET_STATES } from '../../../../constants/constants.js'; - export default () => ({ type: 'object', required: ['id'], @@ -7,18 +5,18 @@ export default () => ({ id: { type: 'string', }, - state: { - oneOf: [ - { enum: [GET_STATES.LATEST, GET_STATES.FINALIZED] }, - { - type: 'string', - pattern: '^0x[A-Fa-f0-9]{64}$', - }, - ], + contentType: { + type: 'string', + }, + includeMetadata: { + type: 'boolean', }, hashFunctionId: { type: 'number', minimum: 1, }, + paranetUAL: { + type: ['string', 'null'], + }, }, }); diff --git a/src/controllers/http-api/v0/request-schema/local-store-schema-v0.js b/src/controllers/http-api/v0/request-schema/local-store-schema-v0.js index 65aab92c27..1810cb0408 100644 --- a/src/controllers/http-api/v0/request-schema/local-store-schema-v0.js +++ b/src/controllers/http-api/v0/request-schema/local-store-schema-v0.js @@ -1,42 +1,74 @@ import { LOCAL_STORE_TYPES } from '../../../../constants/constants.js'; export default (argumentsObject) => ({ - type: 'array', + type: ['object', 'array'], items: { - type: 'object', - required: ['assertionId', 'assertion'], - properties: { - assertionId: { - type: 'string', - minLength: 66, - maxLength: 66, - }, - assertion: { - type: 'array', - items: { - type: 'string', + oneOf: [ + { + type: 'object', + required: ['assertionId', 'assertion'], + properties: { + assertionId: { + type: 'string', + minLength: 66, + maxLength: 66, + }, + assertion: { + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + }, + blockchain: { + enum: argumentsObject.blockchainImplementationNames, + }, + contract: { + type: 'string', + minLength: 42, + maxLength: 42, + }, + tokenId: { + type: 'number', + minimum: 0, + }, + storeType: { + enum: [LOCAL_STORE_TYPES.TRIPLE, LOCAL_STORE_TYPES.TRIPLE_PARANET], + }, + paranetUAL: { + type: 'string', + }, }, minItems: 1, + maxItems: 2, }, - blockchain: { - enum: argumentsObject.blockchainImplementationNames, - }, - contract: { - type: 'string', - minLength: 42, - maxLength: 42, - }, - tokenId: { - type: 'number', - minimum: 0, - }, - storeType: { - type: { - enum: [LOCAL_STORE_TYPES.TRIPLE, LOCAL_STORE_TYPES.PENDING], + { + type: 'object', + required: ['filePath'], + properties: { + filePath: { + type: 'string', + }, + paranetUAL: { + type: 'string', + }, + blockchain: { + enum: argumentsObject.blockchainImplementationNames, + }, + contract: { + type: 'string', + minLength: 42, + maxLength: 42, + }, + tokenId: { + type: 'number', + minimum: 0, + }, + storeType: { + enum: [LOCAL_STORE_TYPES.TRIPLE, LOCAL_STORE_TYPES.TRIPLE_PARANET], + }, }, }, - }, + ], }, - minItems: 1, - maxItems: 2, }); diff --git a/src/controllers/http-api/v0/request-schema/query-schema-v0.js b/src/controllers/http-api/v0/request-schema/query-schema-v0.js index 41f70f84f2..68ccc101d1 100644 --- a/src/controllers/http-api/v0/request-schema/query-schema-v0.js +++ b/src/controllers/http-api/v0/request-schema/query-schema-v0.js @@ -10,8 +10,8 @@ export default () => ({ query: { type: 'string', }, - repository: { - type: 'string', - }, + // repository: { + // type: 'string', + // }, }, }); diff --git a/src/controllers/http-api/v0/update-http-api-controller-v0.js b/src/controllers/http-api/v0/update-http-api-controller-v0.js index 104677a889..d71dfce323 100644 --- a/src/controllers/http-api/v0/update-http-api-controller-v0.js +++ b/src/controllers/http-api/v0/update-http-api-controller-v0.js @@ -3,7 +3,6 @@ import { ERROR_TYPE, OPERATION_ID_STATUS, OPERATION_STATUS, - CONTENT_ASSET_HASH_FUNCTION_ID, LOCAL_STORE_TYPES, } from '../../../constants/constants.js'; @@ -18,7 +17,6 @@ class UpdateController extends BaseController { async handleRequest(req, res) { const { assertion, assertionId, blockchain, contract, tokenId } = req.body; - const hashFunctionId = req.body.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID; this.logger.info( `Received asset with assertion id: ${assertionId}, blockchain: ${blockchain}, hub contract: ${contract}, token id: ${tokenId}`, @@ -74,9 +72,8 @@ class UpdateController extends BaseController { contract, tokenId, assertionId, - hashFunctionId, operationId, - storeType: LOCAL_STORE_TYPES.PENDING, + storeType: LOCAL_STORE_TYPES.TRIPLE, }, transactional: false, }); diff --git a/src/controllers/http-api/v1/ask-http-api-controller-v1.js b/src/controllers/http-api/v1/ask-http-api-controller-v1.js new file mode 100644 index 0000000000..f62fe292b1 --- /dev/null +++ b/src/controllers/http-api/v1/ask-http-api-controller-v1.js @@ -0,0 +1,85 @@ +import { OPERATION_ID_STATUS, OPERATION_STATUS, ERROR_TYPE } from '../../../constants/constants.js'; +import BaseController from '../base-http-api-controller.js'; + +class AskController extends BaseController { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.operationIdService = ctx.operationIdService; + this.operationService = ctx.askService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.ualService = ctx.ualService; + this.validationService = ctx.validationService; + this.blockchainModuleManager = ctx.blockchainModuleManager; + } + + async handleRequest(req, res) { + const operationId = await this.operationIdService.generateOperationId( + OPERATION_ID_STATUS.ASK.ASK_START, + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + null, + OPERATION_ID_STATUS.ASK.ASK_START, + ); + + this.returnResponse(res, 202, { + operationId, + }); + + await this.repositoryModuleManager.createOperationRecord( + this.operationService.getOperationName(), + operationId, + OPERATION_STATUS.IN_PROGRESS, + ); + + const { ual, blockchain, minimumNumberOfNodeReplications } = req.body; + + try { + this.logger.info(`Ask for ${ual} with operation id ${operationId} initiated.`); + + const commandSequence = ['askFindShardCommand', 'networkAskCommand']; + + const { contract, knowledgeCollectionId } = this.ualService.resolveUAL(ual); + + const datasetRoot = + await this.blockchainModuleManager.getKnowledgeCollectionLatestMerkleRoot( + blockchain, + contract, + knowledgeCollectionId, + ); + + await this.commandExecutor.add({ + name: commandSequence[0], + sequence: commandSequence.slice(1), + delay: 0, + data: { + ual, + operationId, + blockchain, + datasetRoot, + minimumNumberOfNodeReplications, + }, + transactional: false, + }); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.ASK.ASK_END, + ); + } catch (error) { + this.logger.error(`Error while initializing ask: ${error.message}.`); + + await this.operationService.markOperationAsFailed( + operationId, + blockchain, + 'Unable to check ask, Failed to process input data!', + ERROR_TYPE.ASK.ASK_ERROR, + ); + } + } +} + +export default AskController; diff --git a/src/controllers/http-api/v1/finality-http-api-controller-v1.js b/src/controllers/http-api/v1/finality-http-api-controller-v1.js new file mode 100644 index 0000000000..a7d97c6457 --- /dev/null +++ b/src/controllers/http-api/v1/finality-http-api-controller-v1.js @@ -0,0 +1,28 @@ +import BaseController from '../base-http-api-controller.js'; + +class FinalityController extends BaseController { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.operationIdService = ctx.operationIdService; + this.operationService = ctx.finalityService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.ualService = ctx.ualService; + this.validationService = ctx.validationService; + } + + async handleRequest(req, res) { + const { ual } = req.query; + + const finality = await this.repositoryModuleManager.getFinalityAcksCount(ual || ''); + + if (typeof finality !== 'number') + return this.returnResponse(res, 400, { + message: 'Asset with provided UAL was not published to this node.', + }); + + this.returnResponse(res, 200, { finality }); + } +} + +export default FinalityController; diff --git a/src/controllers/http-api/v1/get-http-api-controller-v1.js b/src/controllers/http-api/v1/get-http-api-controller-v1.js new file mode 100644 index 0000000000..bace47ba6a --- /dev/null +++ b/src/controllers/http-api/v1/get-http-api-controller-v1.js @@ -0,0 +1,116 @@ +import { + OPERATION_ID_STATUS, + OPERATION_STATUS, + ERROR_TYPE, + TRIPLES_VISIBILITY, + OLD_CONTENT_STORAGE_MAP, +} from '../../../constants/constants.js'; +import BaseController from '../base-http-api-controller.js'; + +class GetController extends BaseController { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.operationIdService = ctx.operationIdService; + this.operationService = ctx.getService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.ualService = ctx.ualService; + this.validationService = ctx.validationService; + this.fileService = ctx.fileService; + } + + async handleRequest(req, res) { + const operationId = await this.operationIdService.generateOperationId( + OPERATION_ID_STATUS.GET.GET_START, + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + null, + OPERATION_ID_STATUS.GET.GET_INIT_START, + ); + + this.returnResponse(res, 202, { + operationId, + }); + + await this.repositoryModuleManager.createOperationRecord( + this.operationService.getOperationName(), + operationId, + OPERATION_STATUS.IN_PROGRESS, + ); + + let tripleStoreMigrationAlreadyExecuted = false; + try { + tripleStoreMigrationAlreadyExecuted = + (await this.fileService.readFile( + '/root/ot-node/data/migrations/v8DataMigration', + )) === 'MIGRATED'; + } catch (e) { + this.logger.warn(`No triple store migration file error: ${e}`); + } + let blockchain; + let contract; + let knowledgeCollectionId; + let knowledgeAssetId; + try { + const { id, paranetUAL, includeMetadata, contentType } = req.body; + ({ blockchain, contract, knowledgeCollectionId, knowledgeAssetId } = + this.ualService.resolveUAL(id)); + + this.logger.info(`Get for ${id} with operation id ${operationId} initiated.`); + + // Get assertionId - datasetRoot + // + + const commandSequence = []; + commandSequence.push('getValidateAssetCommand'); + + if ( + !tripleStoreMigrationAlreadyExecuted && + Object.values(OLD_CONTENT_STORAGE_MAP) + .map((ca) => ca.toLowerCase()) + .includes(contract.toLowerCase()) + ) { + commandSequence.push('getAssertionMerkleRootCommand'); + } + + commandSequence.push('getFindShardCommand'); + + await this.commandExecutor.add({ + name: commandSequence[0], + sequence: commandSequence.slice(1), + delay: 0, + data: { + ual: id, + includeMetadata, + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + operationId, + paranetUAL, + contentType: contentType ?? TRIPLES_VISIBILITY.ALL, + }, + transactional: false, + }); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.GET.GET_INIT_END, + ); + } catch (error) { + this.logger.error(`Error while initializing get data: ${error.message}.`); + + await this.operationService.markOperationAsFailed( + operationId, + blockchain, + 'Unable to get data, Failed to process input data!', + ERROR_TYPE.GET.GET_ROUTE_ERROR, + ); + } + } +} + +export default GetController; diff --git a/src/controllers/http-api/v1/info-http-api-controller-v1.js b/src/controllers/http-api/v1/info-http-api-controller-v1.js new file mode 100644 index 0000000000..61dbb514ed --- /dev/null +++ b/src/controllers/http-api/v1/info-http-api-controller-v1.js @@ -0,0 +1,15 @@ +import { createRequire } from 'module'; +import BaseController from '../base-http-api-controller.js'; + +const require = createRequire(import.meta.url); +const { version } = require('../../../../package.json'); + +class InfoController extends BaseController { + handleRequest(_, res) { + this.returnResponse(res, 200, { + version, + }); + } +} + +export default InfoController; diff --git a/src/controllers/http-api/v1/publish-http-api-controller-v1.js b/src/controllers/http-api/v1/publish-http-api-controller-v1.js new file mode 100644 index 0000000000..53008fe38d --- /dev/null +++ b/src/controllers/http-api/v1/publish-http-api-controller-v1.js @@ -0,0 +1,103 @@ +import BaseController from '../base-http-api-controller.js'; +import { + ERROR_TYPE, + OPERATION_ID_STATUS, + OPERATION_STATUS, + LOCAL_STORE_TYPES, +} from '../../../constants/constants.js'; + +class PublishController extends BaseController { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.operationService = ctx.publishService; + this.operationIdService = ctx.operationIdService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.pendingStorageService = ctx.pendingStorageService; + this.networkModuleManager = ctx.networkModuleManager; + } + + async handleRequest(req, res) { + const { dataset, datasetRoot, blockchain, minimumNumberOfNodeReplications } = req.body; + + this.logger.info( + `Received asset with dataset root: ${datasetRoot}, blockchain: ${blockchain}`, + ); + + const operationId = await this.operationIdService.generateOperationId( + OPERATION_ID_STATUS.PUBLISH.PUBLISH_START, + ); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_INIT_START, + ); + + this.returnResponse(res, 202, { + operationId, + }); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.PUBLISH.PUBLISH_INIT_END, + ); + await this.repositoryModuleManager.createOperationRecord( + this.operationService.getOperationName(), + operationId, + OPERATION_STATUS.IN_PROGRESS, + ); + + try { + await this.operationIdService.cacheOperationIdDataToMemory(operationId, { + dataset, + datasetRoot, + }); + + await this.operationIdService.cacheOperationIdDataToFile(operationId, { + dataset, + datasetRoot, + }); + + const publisherNodePeerId = this.networkModuleManager.getPeerId().toB58String(); + await this.pendingStorageService.cacheDataset( + operationId, + datasetRoot, + dataset, + publisherNodePeerId, + ); + + const commandSequence = ['publishFindShardCommand']; + + await this.commandExecutor.add({ + name: commandSequence[0], + sequence: commandSequence.slice(1), + delay: 0, + period: 5000, + retries: 3, + data: { + datasetRoot, + blockchain, + operationId, + storeType: LOCAL_STORE_TYPES.TRIPLE, + minimumNumberOfNodeReplications, + }, + transactional: false, + }); + } catch (error) { + this.logger.error( + `Error while initializing publish data: ${error.message}. ${error.stack}`, + ); + + await this.operationService.markOperationAsFailed( + operationId, + blockchain, + 'Unable to publish data, Failed to process input data!', + ERROR_TYPE.PUBLISH.PUBLISH_ROUTE_ERROR, + ); + } + } +} + +export default PublishController; diff --git a/src/controllers/http-api/v1/query-http-api-controller-v1.js b/src/controllers/http-api/v1/query-http-api-controller-v1.js new file mode 100644 index 0000000000..6b5da96b8a --- /dev/null +++ b/src/controllers/http-api/v1/query-http-api-controller-v1.js @@ -0,0 +1,57 @@ +import BaseController from '../base-http-api-controller.js'; + +import { OPERATION_ID_STATUS, TRIPLE_STORE_REPOSITORIES } from '../../../constants/constants.js'; + +class QueryController extends BaseController { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.operationIdService = ctx.operationIdService; + this.fileService = ctx.fileService; + } + + async handleRequest(req, res) { + const { query, type: queryType, repository } = req.body; + + const operationId = await this.operationIdService.generateOperationId( + OPERATION_ID_STATUS.QUERY.QUERY_INIT_START, + ); + + this.returnResponse(res, 202, { + operationId, + }); + + let tripleStoreMigrationAlreadyExecuted = false; + try { + tripleStoreMigrationAlreadyExecuted = + (await this.fileService.readFile( + '/root/ot-node/data/migrations/v8DataMigration', + )) === 'MIGRATED'; + } catch (e) { + this.logger.warn(`No triple store migration file error: ${e}`); + } + await this.operationIdService.updateOperationIdStatus( + operationId, + null, + OPERATION_ID_STATUS.QUERY.QUERY_INIT_END, + ); + + await this.commandExecutor.add({ + name: 'queryCommand', + sequence: [], + delay: 0, + data: { + query, + queryType, + repository: + !tripleStoreMigrationAlreadyExecuted && repository + ? [repository, TRIPLE_STORE_REPOSITORIES.DKG] + : TRIPLE_STORE_REPOSITORIES.DKG, + operationId, + }, + transactional: false, + }); + } +} + +export default QueryController; diff --git a/src/controllers/http-api/v1/request-schema/ask-schema-v1.js b/src/controllers/http-api/v1/request-schema/ask-schema-v1.js new file mode 100644 index 0000000000..c989f1f837 --- /dev/null +++ b/src/controllers/http-api/v1/request-schema/ask-schema-v1.js @@ -0,0 +1,20 @@ +export default (argumentsObject) => ({ + type: 'object', + required: ['ual', 'blockchain', 'minimumNumberOfNodeReplications'], + properties: { + ual: { + oneOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' }, minItems: 1 }], + }, + blockchain: { + enum: argumentsObject.blockchainImplementationNames, + }, + minimumNumberOfNodeReplications: { + type: 'number', + minimum: 0, + }, + batchSize: { + type: 'number', + minimum: 1, + }, + }, +}); diff --git a/src/controllers/http-api/v1/request-schema/finality-schema-v1.js b/src/controllers/http-api/v1/request-schema/finality-schema-v1.js new file mode 100644 index 0000000000..087a20dc25 --- /dev/null +++ b/src/controllers/http-api/v1/request-schema/finality-schema-v1.js @@ -0,0 +1,9 @@ +export default () => ({ + type: 'object', + required: ['ual'], + properties: { + ual: { + type: 'string', + }, + }, +}); diff --git a/src/controllers/http-api/v1/request-schema/get-schema-v1.js b/src/controllers/http-api/v1/request-schema/get-schema-v1.js new file mode 100644 index 0000000000..73d4f673a9 --- /dev/null +++ b/src/controllers/http-api/v1/request-schema/get-schema-v1.js @@ -0,0 +1,18 @@ +export default () => ({ + type: 'object', + required: ['id'], + properties: { + id: { + type: 'string', + }, + contentType: { + type: 'string', + }, + includeMetadata: { + type: 'boolean', + }, + paranetUAL: { + type: ['string', 'null'], + }, + }, +}); diff --git a/src/controllers/http-api/v1/request-schema/publish-schema-v1.js b/src/controllers/http-api/v1/request-schema/publish-schema-v1.js new file mode 100644 index 0000000000..654af51d1d --- /dev/null +++ b/src/controllers/http-api/v1/request-schema/publish-schema-v1.js @@ -0,0 +1,34 @@ +export default (argumentsObject) => ({ + type: 'object', + required: ['datasetRoot', 'dataset', 'blockchain'], + properties: { + datasetRoot: { + type: 'string', + minLength: 66, + maxLength: 66, + }, + dataset: { + type: 'object', + properties: { + public: { + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + }, + private: { + type: 'array', + items: { + type: 'string', + }, + }, + }, + required: ['public'], + additionalProperties: false, + }, + blockchain: { + enum: argumentsObject.blockchainImplementationNames, + }, + }, +}); diff --git a/src/controllers/http-api/v1/request-schema/query-schema-v1.js b/src/controllers/http-api/v1/request-schema/query-schema-v1.js new file mode 100644 index 0000000000..f79f4bd45b --- /dev/null +++ b/src/controllers/http-api/v1/request-schema/query-schema-v1.js @@ -0,0 +1,14 @@ +import { QUERY_TYPES } from '../../../../constants/constants.js'; + +export default () => ({ + type: 'object', + required: ['type', 'query'], + properties: { + type: { + enum: [QUERY_TYPES.CONSTRUCT, QUERY_TYPES.SELECT], + }, + query: { + type: 'string', + }, + }, +}); diff --git a/src/controllers/http-api/v1/result-http-api-controller-v1.js b/src/controllers/http-api/v1/result-http-api-controller-v1.js new file mode 100644 index 0000000000..5502f593d9 --- /dev/null +++ b/src/controllers/http-api/v1/result-http-api-controller-v1.js @@ -0,0 +1,105 @@ +import { + NETWORK_SIGNATURES_FOLDER, + OPERATION_ID_STATUS, + PUBLISHER_NODE_SIGNATURES_FOLDER, +} from '../../../constants/constants.js'; +import BaseController from '../base-http-api-controller.js'; + +class ResultController extends BaseController { + constructor(ctx) { + super(ctx); + this.operationIdService = ctx.operationIdService; + this.signatureService = ctx.signatureService; + + this.availableOperations = ['publish', 'get', 'query', 'update', 'ask', 'finality']; + } + + async handleRequest(req, res) { + if (!this.availableOperations.includes(req.params.operation)) { + return this.returnResponse(res, 400, { + code: 400, + message: `Unsupported operation: ${req.params.operation}, available operations are: ${this.availableOperations}`, + }); + } + + const { operationId, operation } = req.params; + if (!this.operationIdService.operationIdInRightFormat(operationId)) { + return this.returnResponse(res, 400, { + code: 400, + message: `Operation id: ${operationId} is in wrong format`, + }); + } + + try { + const handlerRecord = await this.operationIdService.getOperationIdRecord(operationId); + + if (handlerRecord) { + const response = { + status: handlerRecord.status, + }; + if (handlerRecord.status === OPERATION_ID_STATUS.FAILED) { + response.data = JSON.parse(handlerRecord.data); + } + + switch (operation) { + case 'get': + case 'query': + case 'finality': + if (handlerRecord.status === OPERATION_ID_STATUS.COMPLETED) { + response.data = await this.operationIdService.getCachedOperationIdData( + operationId, + ); + } + break; + case 'publish': + case 'update': { + const minAcksReached = handlerRecord.minAcksReached || false; + response.data = { ...response.data, minAcksReached }; + if (minAcksReached) { + const publisherNodeSignature = ( + await this.signatureService.getSignaturesFromStorage( + PUBLISHER_NODE_SIGNATURES_FOLDER, + operationId, + ) + )[0]; + const signatures = await this.signatureService.getSignaturesFromStorage( + NETWORK_SIGNATURES_FOLDER, + operationId, + ); + response.data = { + ...response.data, + publisherNodeSignature, + signatures, + }; + } + break; + } + case 'ask': + response.data = await this.operationIdService.getCachedOperationIdData( + operationId, + ); + break; + default: + break; + } + + return this.returnResponse(res, 200, response); + } + return this.returnResponse(res, 400, { + code: 400, + message: `Handler with id: ${operationId} does not exist.`, + }); + } catch (e) { + this.logger.error( + `Error while trying to fetch ${operation} data for operation id ${operationId}. Error message: ${e.message}. ${e.stack}`, + ); + + return this.returnResponse(res, 400, { + code: 400, + message: `Unexpected error at getting results: ${e.message}`, + }); + } + } +} + +export default ResultController; diff --git a/src/controllers/rpc/ask-rpc-controller.js b/src/controllers/rpc/ask-rpc-controller.js new file mode 100644 index 0000000000..4034f87cc2 --- /dev/null +++ b/src/controllers/rpc/ask-rpc-controller.js @@ -0,0 +1,40 @@ +import { NETWORK_MESSAGE_TYPES } from '../../constants/constants.js'; +import BaseController from './base-rpc-controller.js'; + +class AskController extends BaseController { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.operationService = ctx.askService; + } + + async v1_0_0HandleRequest(message, remotePeerId, protocol) { + const { operationId, messageType } = message.header; + const [handleRequestCommand] = this.getCommandSequence(protocol); + let commandName; + switch (messageType) { + case NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_REQUEST: + commandName = handleRequestCommand; + break; + default: + throw Error('unknown messageType'); + } + + await this.commandExecutor.add({ + name: commandName, + sequence: [], + delay: 0, + data: { + remotePeerId, + operationId, + protocol, + ual: message.data.ual, + numberOfFoundNodes: message.data.numberOfFoundNodes, + blockchain: message.data.blockchain, + }, + transactional: false, + }); + } +} + +export default AskController; diff --git a/src/controllers/rpc/finality-rpc-controller.js b/src/controllers/rpc/finality-rpc-controller.js new file mode 100644 index 0000000000..9171fc7459 --- /dev/null +++ b/src/controllers/rpc/finality-rpc-controller.js @@ -0,0 +1,48 @@ +import { NETWORK_MESSAGE_TYPES } from '../../constants/constants.js'; +import BaseController from './base-rpc-controller.js'; + +class FinalityController extends BaseController { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.operationService = ctx.finalityService; + } + + async v1_0_0HandleRequest(message, remotePeerId, protocol) { + const { operationId, messageType } = message.header; + const [handleRequestCommand] = this.getCommandSequence(protocol); + let commandName; + switch (messageType) { + case NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_REQUEST: + commandName = handleRequestCommand; + break; + default: + throw Error('unknown messageType'); + } + + await this.commandExecutor.add({ + name: commandName, + sequence: [], + delay: 0, + data: { + remotePeerId, + operationId, + protocol, + ual: message.data.ual, + blockchain: message.data.blockchain, + publishOperationId: message.data.publishOperationId, + }, + transactional: false, + }); + } + + getCommandSequence(protocol) { + // TODO: Rework this to schedule different command for update + return [ + 'publishFinalitySaveAckCommand', + ...this.protocolService.getReceiverCommandSequence(protocol), + ]; + } +} + +export default FinalityController; diff --git a/src/controllers/rpc/get-rpc-controller.js b/src/controllers/rpc/get-rpc-controller.js index c2b50f359e..32b242b84c 100644 --- a/src/controllers/rpc/get-rpc-controller.js +++ b/src/controllers/rpc/get-rpc-controller.js @@ -1,4 +1,4 @@ -import { CONTENT_ASSET_HASH_FUNCTION_ID, DEFAULT_GET_STATE, NETWORK_MESSAGE_TYPES } from '../../constants/constants.js'; +import { DEFAULT_GET_STATE, NETWORK_MESSAGE_TYPES } from '../../constants/constants.js'; import BaseController from './base-rpc-controller.js'; class GetController extends BaseController { @@ -9,13 +9,10 @@ class GetController extends BaseController { } async v1_0_0HandleRequest(message, remotePeerId, protocol) { - const { operationId, keywordUuid, messageType } = message.header; - const [handleInitCommand, handleRequestCommand] = this.getCommandSequence(protocol); + const { operationId, messageType } = message.header; + const [handleRequestCommand] = this.getCommandSequence(protocol); let commandName; switch (messageType) { - case NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_INIT: - commandName = handleInitCommand; - break; case NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_REQUEST: commandName = handleRequestCommand; break; @@ -30,15 +27,18 @@ class GetController extends BaseController { data: { remotePeerId, operationId, - keywordUuid, protocol, - assertionId: message.data.assertionId, + ual: message.data.ual, blockchain: message.data.blockchain, contract: message.data.contract, - tokenId: message.data.tokenId, - keyword: message.data.keyword, - hashFunctionId: message.data.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID, - state: message.data.state ?? DEFAULT_GET_STATE + knowledgeCollectionId: message.data.knowledgeCollectionId, + knowledgeAssetId: message.data.knowledgeAssetId, + includeMetadata: message.data.includeMetadata, + state: message.data.state ?? DEFAULT_GET_STATE, + paranetUAL: message.data.paranetUAL, + paranetId: message.data.paranetId, + isOperationV0: message.data.isOperationV0, + assertionId: message.data.assertionId, }, transactional: false, }); diff --git a/src/controllers/rpc/publish-rpc-controller.js b/src/controllers/rpc/publish-rpc-controller.js index a3aaa0c8b2..dca2309d72 100644 --- a/src/controllers/rpc/publish-rpc-controller.js +++ b/src/controllers/rpc/publish-rpc-controller.js @@ -1,8 +1,5 @@ import BaseController from './base-rpc-controller.js'; -import { - NETWORK_MESSAGE_TYPES, - CONTENT_ASSET_HASH_FUNCTION_ID, -} from '../../constants/constants.js'; +import { NETWORK_MESSAGE_TYPES } from '../../constants/constants.js'; class PublishController extends BaseController { constructor(ctx) { @@ -13,48 +10,41 @@ class PublishController extends BaseController { } async v1_0_0HandleRequest(message, remotePeerId, protocol) { - const { operationId, keywordUuid, messageType } = message.header; + const { operationId, messageType } = message.header; const command = { sequence: [], delay: 0, transactional: false, data: {} }; - let dataSource; - const [handleInitCommand, handleRequestCommand] = this.getCommandSequence(protocol); - switch (messageType) { - case NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_INIT: - dataSource = message.data; - command.name = handleInitCommand; - command.period = 5000; - command.retries = 3; + const [handleRequestCommand] = this.getCommandSequence(protocol); + if (messageType === NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_REQUEST) { + Object.assign(command, { + name: handleRequestCommand, + period: 5000, + retries: 3, + }); - break; - case NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_REQUEST: - // eslint-disable-next-line no-case-declarations - dataSource = await this.operationIdService.getCachedOperationIdData(operationId); - await this.operationIdService.cacheOperationIdData(operationId, { - assertionId: dataSource.assertionId, - assertion: message.data.assertion, - }); - command.name = handleRequestCommand; - command.data.keyword = message.data.keyword; - command.data.agreementId = dataSource.agreementId; - command.data.agreementData = dataSource.agreementData; - break; - default: - throw Error('unknown message type'); + await this.operationIdService.cacheOperationIdDataToMemory(operationId, { + dataset: message.data.dataset, + datasetRoot: message.data.datasetRoot, + }); + + await this.operationIdService.cacheOperationIdDataToFile(operationId, { + dataset: message.data.dataset, + datasetRoot: message.data.datasetRoot, + }); + } else { + throw new Error('Unknown message type'); } command.data = { ...command.data, remotePeerId, operationId, - keywordUuid, protocol, - assertionId: dataSource.assertionId, - blockchain: dataSource.blockchain, - contract: dataSource.contract, - tokenId: dataSource.tokenId, - keyword: dataSource.keyword, - hashFunctionId: message.data.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID, - proximityScoreFunctionsPairId: dataSource.proximityScoreFunctionsPairId ?? 1, + dataset: message.data.dataset, + datasetRoot: message.data.datasetRoot, + blockchain: message.data.blockchain, + isOperationV0: message.data.isOperationV0, + contract: message.data.contract, + tokenId: message.data.tokenId, }; await this.commandExecutor.add(command); diff --git a/src/controllers/rpc/rpc-router.js b/src/controllers/rpc/rpc-router.js index 18bfd4e9a1..3b1bb77bdb 100644 --- a/src/controllers/rpc/rpc-router.js +++ b/src/controllers/rpc/rpc-router.js @@ -9,6 +9,8 @@ class RpcRouter { this.publishRpcController = ctx.publishRpcController; this.getRpcController = ctx.getRpcController; this.updateRpcController = ctx.updateRpcController; + this.askRpcController = ctx.askRpcController; + this.finalityRpcController = ctx.finalityRpcController; } initialize() { diff --git a/src/controllers/rpc/update-rpc-controller.js b/src/controllers/rpc/update-rpc-controller.js index 74e24ae7fc..7c2bb6525f 100644 --- a/src/controllers/rpc/update-rpc-controller.js +++ b/src/controllers/rpc/update-rpc-controller.js @@ -1,8 +1,5 @@ import BaseController from './base-rpc-controller.js'; -import { - CONTENT_ASSET_HASH_FUNCTION_ID, - NETWORK_MESSAGE_TYPES, -} from '../../constants/constants.js'; +import { NETWORK_MESSAGE_TYPES } from '../../constants/constants.js'; class UpdateController extends BaseController { constructor(ctx) { @@ -13,7 +10,7 @@ class UpdateController extends BaseController { } async v1_0_0HandleRequest(message, remotePeerId, protocol) { - const { operationId, keywordUuid, messageType } = message.header; + const { operationId, messageType } = message.header; const command = { sequence: [], delay: 0, transactional: false, data: {} }; let dataSource; @@ -24,8 +21,6 @@ class UpdateController extends BaseController { command.name = handleInitCommand; command.period = 5000; command.retries = 3; - command.data.proximityScoreFunctionsPairId = - dataSource.proximityScoreFunctionsPairId ?? 1; break; case NETWORK_MESSAGE_TYPES.REQUESTS.PROTOCOL_REQUEST: // eslint-disable-next-line no-case-declarations @@ -35,11 +30,6 @@ class UpdateController extends BaseController { assertion: message.data.assertion, }); command.name = handleRequestCommand; - command.data.keyword = message.data.keyword; - command.data.agreementId = dataSource.agreementId; - command.data.agreementData = dataSource.agreementData; - command.data.proximityScoreFunctionsPairId = - dataSource.agreementData.scoreFunctionId ?? 1; break; default: throw Error('unknown message type'); @@ -49,14 +39,11 @@ class UpdateController extends BaseController { ...command.data, remotePeerId, operationId, - keywordUuid, protocol, assertionId: dataSource.assertionId, blockchain: dataSource.blockchain, contract: dataSource.contract, tokenId: dataSource.tokenId, - keyword: dataSource.keyword, - hashFunctionId: dataSource.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID, }; await this.commandExecutor.add(command); diff --git a/src/logger/logger.js b/src/logger/logger.js index d98978426c..c1641ab432 100644 --- a/src/logger/logger.js +++ b/src/logger/logger.js @@ -15,7 +15,14 @@ class Logger { translateTime: 'yyyy-mm-dd HH:MM:ss', ignore: 'pid,hostname,Event_name,Operation_name,Id_operation', hideObject: true, - messageFormat: (log, messageKey) => `${log[messageKey]}`, + messageFormat: (log, messageKey) => { + const { commandId, commandName, operationId } = log; + let context = ''; + if (operationId) context += `{Operation ID: ${operationId}} `; + if (commandName) context += `[${commandName}] `; + if (commandId) context += `(Command ID: ${commandId}) `; + return `${context} ${log[messageKey]}`; + }, }); this.pinoLogger = pino( { @@ -33,6 +40,10 @@ class Logger { } } + child(bindings) { + return this.pinoLogger.child(bindings, {}); + } + restart() { this.initialize(this.logLevel, true); } diff --git a/src/migration/blockchain-identity-migration.js b/src/migration/blockchain-identity-migration.js deleted file mode 100644 index fb697a1ee0..0000000000 --- a/src/migration/blockchain-identity-migration.js +++ /dev/null @@ -1,31 +0,0 @@ -import path from 'path'; -import appRootPath from 'app-root-path'; -import BaseMigration from './base-migration.js'; -import { NODE_ENVIRONMENTS } from '../constants/constants.js'; - -class BlockchainIdentityMigration extends BaseMigration { - async executeMigration() { - if ( - process.env.NODE_ENV !== NODE_ENVIRONMENTS.DEVELOPMENT && - process.env.NODE_ENV !== NODE_ENVIRONMENTS.TEST - ) { - const configurationFolderPath = path.join(appRootPath.path, '..'); - const configurationFilePath = path.join( - configurationFolderPath, - this.config.configFilename, - ); - - const config = await this.fileService.readFile(configurationFilePath, true); - for (const blockchainImpl in config.modules.blockchain.implementation) { - delete config.modules.blockchain.implementation[blockchainImpl].config.identity; - } - await this.fileService.writeContentsToFile( - configurationFolderPath, - this.config.configFilename, - JSON.stringify(config, null, 4), - ); - } - } -} - -export default BlockchainIdentityMigration; diff --git a/src/migration/clean-operational-database-migration.js b/src/migration/clean-operational-database-migration.js deleted file mode 100644 index e65847384e..0000000000 --- a/src/migration/clean-operational-database-migration.js +++ /dev/null @@ -1,21 +0,0 @@ -import BaseMigration from './base-migration.js'; -import { NODE_ENVIRONMENTS } from '../constants/constants.js'; - -class CleanOperationalDatabaseMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - if ( - process.env.NODE_ENV !== NODE_ENVIRONMENTS.DEVELOPMENT && - process.env.NODE_ENV !== NODE_ENVIRONMENTS.TEST - ) { - this.logger.info('Dropping old operational database.'); - await this.repositoryModuleManager.dropDatabase(); - } - } -} - -export default CleanOperationalDatabaseMigration; diff --git a/src/migration/clean-sharding-table-migration.js b/src/migration/clean-sharding-table-migration.js deleted file mode 100644 index 7eb37a7328..0000000000 --- a/src/migration/clean-sharding-table-migration.js +++ /dev/null @@ -1,27 +0,0 @@ -import BaseMigration from './base-migration.js'; -import { CONTRACTS, NODE_ENVIRONMENTS } from '../constants/constants.js'; - -class CleanShardingTableMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - if ( - process.env.NODE_ENV !== NODE_ENVIRONMENTS.DEVELOPMENT && - process.env.NODE_ENV !== NODE_ENVIRONMENTS.TEST - ) { - this.logger.info('Removing all entries from local sharding table'); - await this.repositoryModuleManager.cleanShardingTable(); - await this.repositoryModuleManager.removeBlockchainEvents( - CONTRACTS.SHARDING_TABLE_CONTRACT, - ); - await this.repositoryModuleManager.removeLastCheckedBlockForContract( - CONTRACTS.SHARDING_TABLE_CONTRACT, - ); - } - } -} - -export default CleanShardingTableMigration; diff --git a/src/migration/devnet-neuro-pruning-migration.js b/src/migration/devnet-neuro-pruning-migration.js deleted file mode 100644 index 1fb9d6ca27..0000000000 --- a/src/migration/devnet-neuro-pruning-migration.js +++ /dev/null @@ -1,34 +0,0 @@ -import BaseMigration from './base-migration.js'; -import { NODE_ENVIRONMENTS } from '../constants/constants.js'; - -class DevnetNeuroPruningMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - if (process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVNET) { - this.logger.info('Pruning Neuro devenet tables'); - // commands are not here as parsing JSON in SQL would take too much time - const tables = [ - 'blockchain', - 'blockchain_event', - 'event', - 'missed_paranet_asset', - 'paranet', - 'service_agreement', - 'shard', - ]; - for (const table of tables) { - const query = ` - DELETE FROM ${table} - WHERE blockchain_id = 'otp:2160'`; - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.query(query); - } - } - } -} - -export default DevnetNeuroPruningMigration; diff --git a/src/migration/get-old-service-agreements-migration.js b/src/migration/get-old-service-agreements-migration.js deleted file mode 100644 index dd6f33d65b..0000000000 --- a/src/migration/get-old-service-agreements-migration.js +++ /dev/null @@ -1,133 +0,0 @@ -import BaseMigration from './base-migration.js'; -import { SERVICE_AGREEMENT_SOURCES } from '../constants/constants.js'; - -const BATCH_SIZE = 50; -const GNOSIS_MAINNET_CHAIN_ID = 'gnosis:100'; -const GNOSIS_MAINNET_ASSET_STORAGE_CONTRACT_ADDRESS = '0xf81a8c0008de2dcdb73366cf78f2b178616d11dd'; - -class GetOldServiceAgreementsMigration extends BaseMigration { - constructor( - migrationName, - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - serviceAgreementService, - ) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - this.blockchainModuleManager = blockchainModuleManager; - this.serviceAgreementService = serviceAgreementService; - } - - async executeMigration() { - const blockchainId = this.blockchainModuleManager - .getImplementationNames() - .find((s) => s === GNOSIS_MAINNET_CHAIN_ID); - - if (blockchainId) { - const contract = GNOSIS_MAINNET_ASSET_STORAGE_CONTRACT_ADDRESS; - - const existingTokenIds = - await this.repositoryModuleManager.getServiceAgreementsTokenIds(0, blockchainId); - - const latestTokenId = Number( - await this.blockchainModuleManager.getLatestTokenId(blockchainId, contract), - ); - - const missingTokenIds = []; - let expectedTokenId = 0; - existingTokenIds.forEach((serviceAgreement) => { - while (serviceAgreement.tokenId > expectedTokenId) { - missingTokenIds.push(expectedTokenId); - expectedTokenId += 1; - } - expectedTokenId += 1; - }); - - for ( - let i = (existingTokenIds[existingTokenIds.length - 1] ?? -1) + 1; - i <= latestTokenId; - i += 1 - ) { - missingTokenIds.push(i); - } - - let batchNumber = 0; - // Check < or <= condition - while (batchNumber * BATCH_SIZE < missingTokenIds.length) { - const promises = []; - for ( - let i = batchNumber * BATCH_SIZE; - i < missingTokenIds.length && i < (batchNumber + 1) * BATCH_SIZE; - i += 1 - ) { - const tokenIdToBeFetched = missingTokenIds[i]; - promises.push( - this.getAndProcessMissingServiceAgreement( - tokenIdToBeFetched, - blockchainId, - contract, - ), - ); - } - - // eslint-disable-next-line no-await-in-loop - const missingAgreements = await Promise.all(promises); - - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.bulkCreateServiceAgreementRecords( - missingAgreements.filter((agreement) => agreement != null), - ); - batchNumber += 1; - } - } - } - - async getAndProcessMissingServiceAgreement(tokenIdToBeFetched, blockchainId, contract) { - try { - const assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchainId, - contract, - tokenIdToBeFetched, - ); - const keyword = this.blockchainModuleManager.encodePacked( - blockchainId, - ['address', 'bytes32'], - [contract, assertionIds[0]], - ); - const agreementId = this.serviceAgreementService.generateId( - blockchainId, - contract, - tokenIdToBeFetched, - keyword, - 1, - ); - const agreementData = await this.blockchainModuleManager.getAgreementData( - blockchainId, - agreementId, - ); - return { - blockchainId, - assetStorageContractAddress: contract, - tokenId: tokenIdToBeFetched, - agreementId, - startTime: agreementData?.startTime ?? 0, - epochsNumber: agreementData?.epochsNumber ?? 0, - epochLength: agreementData?.epochLength ?? 0, - scoreFunctionId: agreementData?.scoreFunctionId ?? 0, - stateIndex: 0, - assertionId: assertionIds[0], - hashFunctionId: 1, - keyword, - proofWindowOffsetPerc: agreementData?.proofWindowOffsetPerc ?? 0, - dataSource: SERVICE_AGREEMENT_SOURCES.BLOCKCHAIN, - }; - } catch (error) { - this.logger.warn(`Unable to fetch agreement data for token id: ${tokenIdToBeFetched}`); - return null; - } - } -} - -export default GetOldServiceAgreementsMigration; diff --git a/src/migration/mark-old-blockchain-events-as-processed-migration.js b/src/migration/mark-old-blockchain-events-as-processed-migration.js deleted file mode 100644 index 78e69904fd..0000000000 --- a/src/migration/mark-old-blockchain-events-as-processed-migration.js +++ /dev/null @@ -1,19 +0,0 @@ -import BaseMigration from './base-migration.js'; - -class MarkOldBlockchainEventsAsProcessedMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - this.logger.info('Marking old blockchain events as processed'); - const timestamp = Date.now(); - const query = `update blockchain_event - set processed = true - where created_at < FROM_UNIXTIME(${timestamp / 1000})`; - await this.repositoryModuleManager.query(query); - } -} - -export default MarkOldBlockchainEventsAsProcessedMigration; diff --git a/src/migration/mark-staking-events-as-processed-migration.js b/src/migration/mark-staking-events-as-processed-migration.js deleted file mode 100644 index 2fe63ac39d..0000000000 --- a/src/migration/mark-staking-events-as-processed-migration.js +++ /dev/null @@ -1,25 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import BaseMigration from './base-migration.js'; - -class MarkStakingEventsAsProcessedMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager, blockchainModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - this.blockchainModuleManager = blockchainModuleManager; - } - - async executeMigration() { - this.logger.info('Marking old blockchain events as processed'); - for (const blockchain of this.blockchainModuleManager.getImplementationNames()) { - const timestamp = Date.now(); - const block = await this.blockchainModuleManager.getLatestBlock(blockchain); - const query = `update blockchain - set last_checked_block = ${block.number}, - last_checked_timestamp = ${timestamp} - where blockchain_id = 'otp:2043'`; - await this.repositoryModuleManager.query(query); - } - } -} - -export default MarkStakingEventsAsProcessedMigration; diff --git a/src/migration/migration-executor.js b/src/migration/migration-executor.js index 8e26b5c9ab..8c0321c77a 100644 --- a/src/migration/migration-executor.js +++ b/src/migration/migration-executor.js @@ -1,529 +1,28 @@ import path from 'path'; + import { NODE_ENVIRONMENTS } from '../constants/constants.js'; -import PullBlockchainShardingTableMigration from './pull-sharding-table-migration.js'; -import PrivateAssetsMetadataMigration from './private-assets-metadata-migration.js'; -import TelemetryModuleUserConfigurationMigration from './telemetry-module-user-configuration-migration.js'; import TripleStoreUserConfigurationMigration from './triple-store-user-configuration-migration.js'; -import ServiceAgreementsMetadataMigration from './service-agreements-metadata-migration.js'; -import RemoveAgreementStartEndTimeMigration from './remove-agreement-start-end-time-migration.js'; -import TripleStoreMetadataMigration from './triple-store-metadata-migration.js'; -import RemoveOldEpochCommandsMigration from './remove-old-epoch-commands-migration.js'; -import PendingStorageMigration from './pending-storage-migration.js'; -import MarkOldBlockchainEventsAsProcessedMigration from './mark-old-blockchain-events-as-processed-migration.js'; -import ServiceAgreementsDataInspector from './service-agreements-data-inspector.js'; -import ServiceAgreementsInvalidDataMigration from './service-agreements-invalid-data-migration.js'; -import UalExtensionUserConfigurationMigration from './ual-extension-user-configuration-migration.js'; -import UalExtensionTripleStoreMigration from './ual-extension-triple-store-migration.js'; -import MarkStakingEventsAsProcessedMigration from './mark-staking-events-as-processed-migration.js'; -import RemoveServiceAgreementsForChiadoMigration from './remove-service-agreements-for-chiado-migration.js'; -import MultipleOpWalletsUserConfigurationMigration from './multiple-op-wallets-user-configuration-migration.js'; -import GetOldServiceAgreementsMigration from './get-old-service-agreements-migration.js'; -import ServiceAgreementPruningMigration from './service-agreement-pruning-migration.js'; -import RemoveDuplicateServiceAgreementMigration from './remove-duplicate-service-agreement-migration.js'; -import DevnetNeuroPruningMigration from './devnet-neuro-pruning-migration.js'; class MigrationExecutor { - static async executePullShardingTableMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const validationModuleManager = container.resolve('validationModuleManager'); - - const migration = new PullBlockchainShardingTableMigration( - 'pullShardingTableMigrationV620Hotfix11', - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - validationModuleManager, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - } - } - - static async executePrivateAssetsMetadataMigration(container, logger, config) { + static async executeTripleStoreUserConfigurationMigration(container, logger, config) { if ( process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - const tripleStoreService = container.resolve('tripleStoreService'); - const serviceAgreementService = container.resolve('serviceAgreementService'); - const ualService = container.resolve('ualService'); - const dataService = container.resolve('dataService'); - - const migration = new PrivateAssetsMetadataMigration( - 'privateAssetsMetadataMigration', - logger, - config, - tripleStoreService, - blockchainModuleManager, - serviceAgreementService, - ualService, - dataService, - ); - - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - logger.info('Node will now restart!'); - MigrationExecutor.exitNode(1); - } - } - - static async executeTelemetryModuleUserConfigurationMigration(logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const migration = new TelemetryModuleUserConfigurationMigration( - 'telemetryModuleUserConfigurationMigration', - logger, - config, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - logger.info('Node will now restart!'); - MigrationExecutor.exitNode(1); - } - } - - static async executeTripleStoreUserConfigurationMigration(logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST + process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST || + process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVNET ) return; const migration = new TripleStoreUserConfigurationMigration( - 'tripleStoreUserConfigurationMigration', - logger, - config, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - logger.info('Node will now restart!'); - MigrationExecutor.exitNode(1); - } - } - - static async executeServiceAgreementsMetadataMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const tripleStoreService = container.resolve('tripleStoreService'); - const serviceAgreementService = container.resolve('serviceAgreementService'); - const ualService = container.resolve('ualService'); - - const migration = new ServiceAgreementsMetadataMigration( - 'serviceAgreementsMetadataMigration', - logger, - config, - tripleStoreService, - blockchainModuleManager, - repositoryModuleManager, - serviceAgreementService, - ualService, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - } - } - - static async executeRemoveAgreementStartEndTimeMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const tripleStoreService = container.resolve('tripleStoreService'); - - const migration = new RemoveAgreementStartEndTimeMigration( - 'removeAgreementStartEndTimeMigration', - logger, - config, - tripleStoreService, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - } - } - - static async executeTripleStoreMetadataMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - const tripleStoreService = container.resolve('tripleStoreService'); - const serviceAgreementService = container.resolve('serviceAgreementService'); - const ualService = container.resolve('ualService'); - const dataService = container.resolve('dataService'); - - const migration = new TripleStoreMetadataMigration( - 'tripleStoreMetadataMigration', - logger, - config, - tripleStoreService, - blockchainModuleManager, - serviceAgreementService, - ualService, - dataService, - ); - - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - } - } - - static async executeRemoveOldEpochCommandsMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - - const migration = new RemoveOldEpochCommandsMigration( - 'removeOldEpochCommandsMigration', - logger, - config, - repositoryModuleManager, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - } - } - - static async executePendingStorageMigration(logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const migration = new PendingStorageMigration('pendingStorageMigration', logger, config); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - } - } - - static async executeMarkOldBlockchainEventsAsProcessedMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - - const migration = new MarkOldBlockchainEventsAsProcessedMigration( - 'markOldBlockchainEventsAsProcessedMigration', - logger, - config, - repositoryModuleManager, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - } - } - - static async executeServiceAgreementsDataInspector(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const tripleStoreService = container.resolve('tripleStoreService'); - const ualService = container.resolve('ualService'); - const serviceAgreementService = container.resolve('serviceAgreementService'); - - const migration = new ServiceAgreementsDataInspector( - 'serviceAgreementsDataInspector', - logger, - config, - blockchainModuleManager, - repositoryModuleManager, - tripleStoreService, - ualService, - serviceAgreementService, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - logger.info('Node will now restart!'); - MigrationExecutor.exitNode(1); - } - } - - static async executeServiceAgreementsInvalidDataMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const tripleStoreService = container.resolve('tripleStoreService'); - - const migration = new ServiceAgreementsInvalidDataMigration( - 'serviceAgreementsInvalidDataMigration', - logger, - config, - repositoryModuleManager, - tripleStoreService, - ); - if ( - (await migration.migrationAlreadyExecuted('serviceAgreementsDataInspector')) && - !(await migration.migrationAlreadyExecuted()) - ) { - await migration.migrate(); - } - } - - static async executeUalExtensionUserConfigurationMigration(logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const migration = new UalExtensionUserConfigurationMigration( - 'ualExtensionUserConfigurationMigration', - logger, - config, - ); - if (!(await migration.migrationAlreadyExecuted())) { - await migration.migrate(); - logger.info('Node will now restart!'); - this.exitNode(1); - } - } - - static async executeUalExtensionTripleStoreMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const tripleStoreService = container.resolve('tripleStoreService'); - - const migration = new UalExtensionTripleStoreMigration( - 'ualExtensionTripleStoreMigration', - logger, - config, - tripleStoreService, - ); - if (!(await migration.migrationAlreadyExecuted())) { - try { - await migration.migrate(); - } catch (error) { - logger.error( - `Unable to execute ual extension triple store migration. Error: ${error.message}`, - ); - this.exitNode(1); - } - } - } - - static async executeMarkStakingEventsAsProcessedMigration(container, logger, config) { - if (process.env.NODE_ENV !== NODE_ENVIRONMENTS.MAINNET) return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - - const migration = new MarkStakingEventsAsProcessedMigration( - 'markStakingEventsAsProcessedMigration', - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - ); - if (!(await migration.migrationAlreadyExecuted())) { - try { - await migration.migrate(); - } catch (error) { - logger.error( - `Unable to execute mark staking events as processed migration. Error: ${error.message}`, - ); - this.exitNode(1); - } - } - } - - static async executeRemoveServiceAgreementsForChiadoMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVNET || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TESTNET - ) { - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - - const migration = new RemoveServiceAgreementsForChiadoMigration( - 'removeServiceAgreementsForChiadoMigrationV6.2.0.Hotfix11', - logger, - config, - repositoryModuleManager, - ); - if (!(await migration.migrationAlreadyExecuted())) { - try { - await migration.migrate(); - } catch (error) { - logger.error( - `Unable to execute remove service agreements for Chiado migration. Error: ${error.message}`, - ); - this.exitNode(1); - } - } - } - } - - static async executeMultipleOpWalletsUserConfigurationMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const migration = new MultipleOpWalletsUserConfigurationMigration( - 'multipleOpWalletsUserConfigurationMigration', - logger, - config, - ); - if (!(await migration.migrationAlreadyExecuted())) { - try { - await migration.migrate(); - } catch (error) { - logger.error( - `Unable to execute multiple op wallets user configuration migration. Error: ${error.message}`, - ); - } - } - } - - static async executeGetOldServiceAgreementsMigration(container, logger, config) { - if (process.env.NODE_ENV !== NODE_ENVIRONMENTS.MAINNET) return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - const serviceAgreementService = container.resolve('serviceAgreementService'); - - const migration = new GetOldServiceAgreementsMigration( - 'getOldServiceAgreementsMigrationv623', - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - serviceAgreementService, - ); - if (!(await migration.migrationAlreadyExecuted())) { - try { - await migration.migrate(); - } catch (error) { - logger.error( - `Unable to execute get old service agreements migration. Error: ${error.message}`, - ); - } - } - } - - static async executeServiceAgreementPruningMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - const serviceAgreementService = container.resolve('serviceAgreementService'); - - const migration = new ServiceAgreementPruningMigration( - 'serviceAgreementPruningMigration', - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - serviceAgreementService, - ); - if (!(await migration.migrationAlreadyExecuted())) { - try { - await migration.migrate(); - } catch (error) { - logger.error( - `Unable to execute service agreement pruning migration. Error: ${error.message}`, - ); - } - } - } - - static async executeRemoveDuplicateServiceAgreementMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - const blockchainModuleManager = container.resolve('blockchainModuleManager'); - - const migration = new RemoveDuplicateServiceAgreementMigration( - 'removeDuplicateServiceAgreementMigration', - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - ); - if (!(await migration.migrationAlreadyExecuted())) { - try { - await migration.migrate(); - } catch (error) { - logger.error( - `Unable to execute remove duplicate service agreement migration. Error: ${error.message}`, - ); - } - } - } - - static async executeDevnetNeuroPruningMigration(container, logger, config) { - if ( - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST - ) - return; - - const repositoryModuleManager = container.resolve('repositoryModuleManager'); - - const migration = new DevnetNeuroPruningMigration( - 'devnetNeuroPruningMigration', + 'tripleStoreUserConfigurationMigrationV8', logger, config, - repositoryModuleManager, ); if (!(await migration.migrationAlreadyExecuted())) { try { await migration.migrate(); } catch (error) { logger.error( - `Unable to execute devnet neuro pruning migration. Error: ${error.message}`, + `Unable to execute triple store user configuration migration. Error: ${error.message}`, ); } } diff --git a/src/migration/multiple-op-wallets-user-configuration-migration.js b/src/migration/multiple-op-wallets-user-configuration-migration.js deleted file mode 100644 index 7ef95b512a..0000000000 --- a/src/migration/multiple-op-wallets-user-configuration-migration.js +++ /dev/null @@ -1,56 +0,0 @@ -import appRootPath from 'app-root-path'; -import path from 'path'; -import BaseMigration from './base-migration.js'; - -class MultipleOpWalletsUserConfigurationMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - const configurationFolderPath = path.join(appRootPath.path, '..'); - const configurationFilePath = path.join( - configurationFolderPath, - this.config.configFilename, - ); - - const userConfiguration = await this.fileService.readFile(configurationFilePath, true); - - for (const blockchainId in userConfiguration?.modules?.blockchain?.implementation) { - const blockchain = userConfiguration.modules.blockchain.implementation[blockchainId]; - - if (!blockchain?.config.operationalWallets) { - try { - blockchain.config.operationalWallets = [ - { - evmAddress: blockchain.config.evmOperationalWalletPublicKey ?? '', - privateKey: blockchain.config.evmOperationalWalletPrivateKey ?? '', - }, - ]; - delete blockchain.config.evmOperationalWalletPublicKey; - delete blockchain.config.evmOperationalWalletPrivateKey; - this.logger.trace( - `${this.migrationName}: User configuration updated for blockchain: ${blockchainId}`, - ); - } catch (error) { - this.logger.warn( - `${this.migrationName}: Error while updating user configuration for blockchain: ${blockchainId}, error: ${error}`, - ); - } - } else { - this.logger.trace( - `${this.migrationName}: Skipping user configuration update for blockchain: ${blockchainId}. Configuration in new format.`, - ); - } - } - - await this.fileService.writeContentsToFile( - configurationFolderPath, - this.config.configFilename, - JSON.stringify(userConfiguration, null, 4), - ); - } -} - -export default MultipleOpWalletsUserConfigurationMigration; diff --git a/src/migration/network-private-key-migration.js b/src/migration/network-private-key-migration.js deleted file mode 100644 index 70a18b1e8e..0000000000 --- a/src/migration/network-private-key-migration.js +++ /dev/null @@ -1,40 +0,0 @@ -import { join } from 'path'; -import appRootPath from 'app-root-path'; -import BaseMigration from './base-migration.js'; -import { LIBP2P_KEY_DIRECTORY, LIBP2P_KEY_FILENAME } from '../constants/constants.js'; - -class NetworkPrivateKeyMigration extends BaseMigration { - async executeMigration() { - const networkPrivateKey = - this.config.modules?.network?.implementation?.['libp2p-service']?.config?.privateKey; - - if (networkPrivateKey) { - let directoryPath; - if ( - process.env.NODE_ENV === 'testnet' || - process.env.NODE_ENV === 'mainnet' || - process.env.NODE_ENV === 'devnet' - ) { - directoryPath = join( - appRootPath.path, - '..', - this.config.appDataPath, - LIBP2P_KEY_DIRECTORY, - ); - } else { - directoryPath = join( - appRootPath.path, - this.config.appDataPath, - LIBP2P_KEY_DIRECTORY, - ); - } - await this.fileService.writeContentsToFile( - directoryPath, - LIBP2P_KEY_FILENAME, - networkPrivateKey, - ); - } - } -} - -export default NetworkPrivateKeyMigration; diff --git a/src/migration/pending-storage-migration.js b/src/migration/pending-storage-migration.js deleted file mode 100644 index 040cf491a5..0000000000 --- a/src/migration/pending-storage-migration.js +++ /dev/null @@ -1,38 +0,0 @@ -import path from 'path'; -import { calculateRoot } from 'assertion-tools'; -import { PENDING_STORAGE_REPOSITORIES } from '../constants/constants.js'; -import BaseMigration from './base-migration.js'; - -class PendingStorageMigration extends BaseMigration { - async executeMigration() { - const promises = Object.values(PENDING_STORAGE_REPOSITORIES).map(async (repository) => { - let fileNames; - const repositoryPath = this.fileService.getPendingStorageCachePath(repository); - try { - fileNames = await this.fileService.readDirectory(repositoryPath); - } catch (error) { - return false; - } - - await Promise.all( - fileNames.map(async (fileName) => { - const newDirectoryPath = path.join(repositoryPath, fileName); - const cachedData = await this.fileService.readFile(newDirectoryPath, true); - await this.fileService.removeFile(newDirectoryPath); - if (cachedData?.public?.assertion) { - const newDocumentName = calculateRoot(cachedData.public.assertion); - await this.fileService.writeContentsToFile( - newDirectoryPath, - newDocumentName, - JSON.stringify(cachedData), - ); - } - }), - ); - }); - - await Promise.all(promises); - } -} - -export default PendingStorageMigration; diff --git a/src/migration/private-assets-metadata-migration.js b/src/migration/private-assets-metadata-migration.js deleted file mode 100644 index 3558c8aa68..0000000000 --- a/src/migration/private-assets-metadata-migration.js +++ /dev/null @@ -1,154 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import BaseMigration from './base-migration.js'; -import { TRIPLE_STORE_REPOSITORIES } from '../constants/constants.js'; - -class PrivateAssetsMetadataMigration extends BaseMigration { - constructor( - migrationName, - logger, - config, - tripleStoreService, - blockchainModuleManager, - serviceAgreementService, - ualService, - dataService, - ) { - super(migrationName, logger, config); - this.blockchainModuleManager = blockchainModuleManager; - this.serviceAgreementService = serviceAgreementService; - this.ualService = ualService; - this.tripleStoreService = tripleStoreService; - this.dataService = dataService; - } - - async executeMigration() { - const graphs = await this.tripleStoreService.select( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - `SELECT DISTINCT ?g - WHERE { - GRAPH ?g { ?s ?p ?o } - }`, - ); - - const assertionIds = (graphs ?? []) - .filter(({ g }) => g.startsWith('assertion:')) - .map(({ g }) => g.replace('assertion:', '')); - - if (!assertionIds?.length) { - this.logger.debug( - `No assertions found in ${TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT} repository. Skipping migration.`, - ); - return; - } - - this.logger.debug( - `${assertionIds.length} assertions found in ${TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT} repository.`, - ); - for (const blockchain of this.blockchainModuleManager.getImplementationNames()) { - const assetStorageContractAddresses = - this.blockchainModuleManager.getAssetStorageContractAddresses(); - - for (const assetStorageContractAddress of assetStorageContractAddresses) { - const latestTokenId = Number( - await this.blockchainModuleManager.getLatestTokenId( - blockchain, - assetStorageContractAddress, - ), - ); - - this.logger.debug( - `Getting latest asset metadata from blockchain: ${blockchain}, asset storage contract address: ${assetStorageContractAddress}, from tokenId 0 to tokenId ${latestTokenId}`, - ); - const concurrency = 100; - let promises = []; - for (let tokenId = 0; tokenId < latestTokenId; tokenId += 1) { - promises.push( - this._migrateAssertions( - blockchain, - assetStorageContractAddress, - tokenId, - latestTokenId, - assertionIds, - ), - ); - if (promises.length > concurrency) { - // eslint-disable-next-line no-await-in-loop - await Promise.all(promises); - promises = []; - } - } - await Promise.all(promises); - } - } - } - - async _migrateAssertions( - blockchain, - assetStorageContractAddress, - tokenId, - latestTokenId, - assertionIds, - ) { - this._logPercentage(tokenId, latestTokenId); - let assertionId; - try { - assertionId = await this.blockchainModuleManager.getLatestAssertionId( - blockchain, - assetStorageContractAddress, - tokenId, - ); - } catch (error) { - this.logger.warn(`Unable to find assertion id for token id: ${tokenId}`); - return; - } - if (!assertionIds.includes(assertionId)) return; - - this.logger.debug( - `Getting latest metadata for asset with token id: ${tokenId}, assertion id: ${assertionId}, blockchain: ${blockchain}, asset storage contract address: ${assetStorageContractAddress}`, - ); - - const keyword = await this.ualService.calculateLocationKeyword( - blockchain, - assetStorageContractAddress, - tokenId, - ); - - await this.tripleStoreService.insertAssetAssertionMetadata( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - blockchain, - assetStorageContractAddress, - tokenId, - assertionId, - keyword, - ); - - const assertion = await this.tripleStoreService.getAssertion( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - assertionId, - ); - - const privateAssertionId = this.dataService.getPrivateAssertionId(assertion); - - if (privateAssertionId == null || !assertionIds.includes(privateAssertionId)) return; - - await this.tripleStoreService.insertAssetAssertionMetadata( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - blockchain, - assetStorageContractAddress, - tokenId, - privateAssertionId, - keyword, - ); - } - - _logPercentage(index, max) { - const previousPercentage = (Math.max(0, index - 1) / max) * 100; - const currentPercentage = (index / max) * 100; - - if (Math.floor(currentPercentage) - Math.floor(previousPercentage) < 1) return; - - this.logger.debug(`Migration at ${Math.floor(currentPercentage * 10) / 10}%`); - } -} - -export default PrivateAssetsMetadataMigration; diff --git a/src/migration/pull-sharding-table-migration.js b/src/migration/pull-sharding-table-migration.js deleted file mode 100644 index 7a7411d5f4..0000000000 --- a/src/migration/pull-sharding-table-migration.js +++ /dev/null @@ -1,93 +0,0 @@ -import BaseMigration from './base-migration.js'; - -class PullBlockchainShardingTableMigration extends BaseMigration { - constructor( - migrationName, - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - hashingService, - ) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - this.blockchainModuleManager = blockchainModuleManager; - this.hashingService = hashingService; - } - - async executeMigration() { - const promises = this.blockchainModuleManager - .getImplementationNames() - .map(async (blockchainId) => { - this.logger.debug( - `Removing nodes from local sharding table for blockchain ${blockchainId}.`, - ); - await this.repositoryModuleManager.removeShardingTablePeerRecords(blockchainId); - - const shardingTableLength = - await this.blockchainModuleManager.getShardingTableLength(blockchainId); - let startingIdentityId = await this.blockchainModuleManager.getShardingTableHead( - blockchainId, - ); - const pageSize = 10; - const shardingTable = []; - - this.logger.debug( - `Started pulling ${shardingTableLength} nodes from blockchain sharding table.`, - ); - - let sliceIndex = 0; - - while (shardingTable.length < shardingTableLength) { - // eslint-disable-next-line no-await-in-loop - const nodes = await this.blockchainModuleManager.getShardingTablePage( - blockchainId, - startingIdentityId, - pageSize, - ); - shardingTable.push( - ...nodes.slice(sliceIndex).filter((node) => node.nodeId !== '0x'), - ); - sliceIndex = 1; - startingIdentityId = nodes[nodes.length - 1].identityId; - } - - this.logger.debug( - `Finished pulling ${shardingTable.length} nodes from blockchain sharding table.`, - ); - - await this.repositoryModuleManager.createManyPeerRecords( - await Promise.all( - shardingTable.map(async (peer) => { - const nodeId = this.blockchainModuleManager.convertHexToAscii( - blockchainId, - peer.nodeId, - ); - - const sha256 = await this.hashingService.callHashFunction(1, nodeId); - - return { - peerId: nodeId, - blockchainId, - ask: this.blockchainModuleManager.convertFromWei( - blockchainId, - peer.ask, - 'ether', - ), - stake: this.blockchainModuleManager.convertFromWei( - blockchainId, - peer.stake, - 'ether', - ), - sha256, - }; - }), - ), - ); - }); - - await Promise.all(promises); - } -} - -export default PullBlockchainShardingTableMigration; diff --git a/src/migration/remove-agreement-start-end-time-migration.js b/src/migration/remove-agreement-start-end-time-migration.js deleted file mode 100644 index 469aab1290..0000000000 --- a/src/migration/remove-agreement-start-end-time-migration.js +++ /dev/null @@ -1,35 +0,0 @@ -import BaseMigration from './base-migration.js'; -import { TRIPLE_STORE_REPOSITORIES, SCHEMA_CONTEXT } from '../constants/constants.js'; - -class RemoveAgreementStartEndTimeMigration extends BaseMigration { - constructor(migrationName, logger, config, tripleStoreService) { - super(migrationName, logger, config); - this.tripleStoreService = tripleStoreService; - } - - async executeMigration() { - const repositories = Object.values(TRIPLE_STORE_REPOSITORIES); - const query = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - - DELETE { - GRAPH { - ?ual schema:agreementEndTime ?agreementEndTime . - ?ual schema:agreementStartTime ?agreementStartTime . - } - } - WHERE { - GRAPH { - { ?ual schema:agreementEndTime ?agreementEndTime . } - UNION - { ?ual schema:agreementStartTime ?agreementStartTime . } - } - }`; - - await Promise.all( - repositories.map((repository) => this.tripleStoreService.queryVoid(repository, query)), - ); - } -} - -export default RemoveAgreementStartEndTimeMigration; diff --git a/src/migration/remove-duplicate-service-agreement-migration.js b/src/migration/remove-duplicate-service-agreement-migration.js deleted file mode 100644 index 489596173e..0000000000 --- a/src/migration/remove-duplicate-service-agreement-migration.js +++ /dev/null @@ -1,47 +0,0 @@ -import BaseMigration from './base-migration.js'; - -class RemoveDuplicateServiceAgreementMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager, blockchainModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - this.blockchainModuleManager = blockchainModuleManager; - } - - async executeMigration() { - const blockchainIds = this.blockchainModuleManager.getImplementationNames(); - - for (const blockchainId of blockchainIds) { - const incorrectServiceAgreementId = []; - const duplicateTokenIdsRestult = - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.findDuplicateServiceAgreements(blockchainId); - const duplicateTokenIds = duplicateTokenIdsRestult.map((t) => t.dataValues.token_id); - const findDuplicateServiceAgreements = - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.findServiceAgreementsByTokenIds( - duplicateTokenIds, - blockchainId, - ); - for (const serviceAgreement of findDuplicateServiceAgreements) { - try { - const blockchainAssertionId = - // eslint-disable-next-line no-await-in-loop - await this.blockchainModuleManager.getAssertionIdByIndex( - blockchainId, - serviceAgreement.assetStorageContractAddress, - serviceAgreement.tokenId, - serviceAgreement.stateIndex, - ); - if (serviceAgreement.assertionId !== blockchainAssertionId) { - incorrectServiceAgreementId.push(serviceAgreement.agreementId); - } - } catch (error) { - incorrectServiceAgreementId.push(serviceAgreement.agreementId); - } - } - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.removeServiceAgreements(incorrectServiceAgreementId); - } - } -} -export default RemoveDuplicateServiceAgreementMigration; diff --git a/src/migration/remove-old-epoch-commands-migration.js b/src/migration/remove-old-epoch-commands-migration.js deleted file mode 100644 index bda9b823b8..0000000000 --- a/src/migration/remove-old-epoch-commands-migration.js +++ /dev/null @@ -1,25 +0,0 @@ -import BaseMigration from './base-migration.js'; - -class RemoveOldEpochCommandsMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - const commandsToDestroy = [ - 'epochCheckCommand', - 'calculateProofsCommand', - 'submitCommitCommand', - 'submitProofsCommand', - ]; - - await Promise.all( - commandsToDestroy.map((command) => - this.repositoryModuleManager.destroyCommand(command), - ), - ); - } -} - -export default RemoveOldEpochCommandsMigration; diff --git a/src/migration/remove-service-agreements-for-chiado-migration.js b/src/migration/remove-service-agreements-for-chiado-migration.js deleted file mode 100644 index 680931b4f2..0000000000 --- a/src/migration/remove-service-agreements-for-chiado-migration.js +++ /dev/null @@ -1,18 +0,0 @@ -import BaseMigration from './base-migration.js'; - -const GNOSIS_DEVNET_CHAIN_ID = 'gnosis:10200'; - -class RemoveServiceAgreementsForChiadoMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - await this.repositoryModuleManager.removeServiceAgreementsForBlockchain( - GNOSIS_DEVNET_CHAIN_ID, - ); - } -} - -export default RemoveServiceAgreementsForChiadoMigration; diff --git a/src/migration/service-agreement-pruning-migration.js b/src/migration/service-agreement-pruning-migration.js deleted file mode 100644 index c29ba4de17..0000000000 --- a/src/migration/service-agreement-pruning-migration.js +++ /dev/null @@ -1,46 +0,0 @@ -import BaseMigration from './base-migration.js'; - -class ServiceAgreementPruningMigration extends BaseMigration { - constructor( - migrationName, - logger, - config, - repositoryModuleManager, - blockchainModuleManager, - serviceAgreementService, - ) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - this.blockchainModuleManager = blockchainModuleManager; - this.serviceAgreementService = serviceAgreementService; - } - - async executeMigration() { - const blockchainIds = this.blockchainModuleManager.getImplementationNames(); - - // eslint-disable-next-line no-await-in-loop - for (const blockchainId of blockchainIds) { - const assetStorageContractAddresses = - // eslint-disable-next-line no-await-in-loop - await this.blockchainModuleManager.getAssetStorageContractAddresses(blockchainId); - - const countOfServiceAgreementsToBeRemoved = - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.getCountOfServiceAgreementsByBlockchainAndContract( - blockchainId, - assetStorageContractAddresses[0], - ); - - // removeServiceAgreementsByBlockchainAndContract deletes in batches od 100_000 - const numberOfIteration = Math.ceil(countOfServiceAgreementsToBeRemoved / 100_000); - for (let i = 0; i < numberOfIteration; i += 1) { - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.removeServiceAgreementsByBlockchainAndContract( - blockchainId, - assetStorageContractAddresses[0], - ); - } - } - } -} -export default ServiceAgreementPruningMigration; diff --git a/src/migration/service-agreements-data-inspector.js b/src/migration/service-agreements-data-inspector.js deleted file mode 100644 index aad52f2fe8..0000000000 --- a/src/migration/service-agreements-data-inspector.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import BaseMigration from './base-migration.js'; -import { TRIPLE_STORE_REPOSITORIES } from '../constants/constants.js'; - -const fixedServiceAgreements = []; -const fixedHistoricalAssertions = []; -let wrongAgreementsCount = 0; -const MAX_BATCH_SIZE = 10000; -const CONCURRENCY = 200; - -class ServiceAgreementsDataInspector extends BaseMigration { - constructor( - migrationName, - logger, - config, - blockchainModuleManager, - repositoryModuleManager, - tripleStoreService, - ualService, - serviceAgreementService, - ) { - super(migrationName, logger, config); - this.blockchainModuleManager = blockchainModuleManager; - this.repositoryModuleManager = repositoryModuleManager; - this.tripleStoreService = tripleStoreService; - this.ualService = ualService; - this.serviceAgreementService = serviceAgreementService; - } - - async executeMigration() { - let migrationInfo = await this.getMigrationInfo(); - if (!migrationInfo?.lastProcessedTokenId) { - migrationInfo = { - fixedServiceAgreements: [], - fixedHistoricalAssertions: [], - lastProcessedTokenId: 0, - }; - } - - const numberOfActiveServiceAgreements = - await this.repositoryModuleManager.getNumberOfActiveServiceAgreements(); - let processed = 0; - const batchSize = - numberOfActiveServiceAgreements > MAX_BATCH_SIZE - ? MAX_BATCH_SIZE - : numberOfActiveServiceAgreements; - - while (processed < numberOfActiveServiceAgreements) { - const serviceAgreementsToProcess = - await this.repositoryModuleManager.getServiceAgreements( - migrationInfo.lastProcessedTokenId, - batchSize, - ); - let promises = []; - - for (const serviceAgreement of serviceAgreementsToProcess) { - promises.push(this.processServiceAgreement(serviceAgreement)); - - if ( - promises.length >= CONCURRENCY || - promises.length === serviceAgreementsToProcess.length - ) { - try { - await Promise.all(promises); - } catch (error) { - this.logger.warn( - `Unable to process invalid service agreements. Error: ${error}`, - ); - } - promises = []; - migrationInfo.fixedServiceAgreements.push(...fixedServiceAgreements); - migrationInfo.fixedHistoricalAssertions.push(...fixedHistoricalAssertions); - migrationInfo.lastProcessedTokenId = serviceAgreement.tokenId; - await this.saveMigrationInfo(migrationInfo); - this.logger.trace( - `${this.migrationName} Last token id processed: ${migrationInfo.lastProcessedTokenId}. ` + - `Invalid Service Agreements: ${migrationInfo.fixedServiceAgreements.length}. ` + - `Assets with Invalid Historical Assertions: ${migrationInfo.fixedHistoricalAssertions.length}.`, - ); - } - } - - processed += serviceAgreementsToProcess.length; - } - - this.logger.trace( - `${this.migrationName} Total number of processed agreements ${processed}. Found invalid agreements: ${wrongAgreementsCount}`, - ); - } - - async processServiceAgreement(serviceAgreement) { - const updatedServiceAgreement = {}; - let isInvalid = false; - - const assertionIds = await this.blockchainModuleManager.getAssertionIds( - serviceAgreement.blockchain, - serviceAgreement.assetStorageContractAddress, - serviceAgreement.tokenId, - ); - - const historicalAssertionIds = assertionIds.slice(0, -1); - - const publicHistoricalAssertionLinks = await this.tripleStoreService.getAssetAssertionLinks( - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - serviceAgreement.blockchain, - serviceAgreement.assetStorageContractAddress, - serviceAgreement.tokenId, - ); - const publicHistoricalLinkedAssertionIds = publicHistoricalAssertionLinks.map( - ({ assertion }) => assertion.replace('assertion:', ''), - ); - const missingPublicHistoricalAssertions = historicalAssertionIds.filter( - (element) => !publicHistoricalLinkedAssertionIds.includes(element), - ); - const redundantPublicHistoricalAssertions = publicHistoricalLinkedAssertionIds.filter( - (element) => !historicalAssertionIds.includes(element), - ); - - const privateHistoricalAssertionLinks = - await this.tripleStoreService.getAssetAssertionLinks( - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - serviceAgreement.blockchain, - serviceAgreement.assetStorageContractAddress, - serviceAgreement.tokenId, - ); - const privateHistoricalLinkedAssertionIds = privateHistoricalAssertionLinks.map( - ({ assertion }) => assertion.replace('assertion:', ''), - ); - const missingPrivateHistoricalAssertions = historicalAssertionIds.filter( - (element) => !privateHistoricalLinkedAssertionIds.includes(element), - ); - const redundantPrivateHistoricalAssertions = privateHistoricalLinkedAssertionIds.filter( - (element) => !historicalAssertionIds.includes(element), - ); - - const hasInvalidHistoricalAssertions = [ - missingPublicHistoricalAssertions, - missingPrivateHistoricalAssertions, - redundantPublicHistoricalAssertions, - redundantPrivateHistoricalAssertions, - ].some((array) => array.length > 0); - - if (hasInvalidHistoricalAssertions) { - fixedHistoricalAssertions.push({ - blockchain: serviceAgreement.blockchain, - contract: serviceAgreement.assetStorageContractAddress, - tokenId: serviceAgreement.tokenId, - missingPublicHistoricalAssertions, - missingPrivateHistoricalAssertions, - redundantPublicHistoricalAssertions, - redundantPrivateHistoricalAssertions, - }); - } - - const stateIndex = assertionIds.length - 1; - - if (serviceAgreement.assertionId !== assertionIds[stateIndex]) { - updatedServiceAgreement.assertionId = assertionIds[stateIndex]; - isInvalid = true; - } - - if (serviceAgreement.stateIndex !== stateIndex) { - updatedServiceAgreement.stateIndex = stateIndex; - isInvalid = true; - } - - const keyword = await this.ualService.calculateLocationKeyword( - serviceAgreement.blockchainId, - serviceAgreement.assetStorageContractAddress, - serviceAgreement.tokenId, - assertionIds[0], - ); - - if (serviceAgreement.keyword !== keyword) { - updatedServiceAgreement.keyword = keyword; - isInvalid = true; - } - - const agreementId = this.serviceAgreementService.generateId( - serviceAgreement.blockchainId, - serviceAgreement.assetStorageContractAddress, - serviceAgreement.tokenId, - keyword, - serviceAgreement.hashFunctionId, - ); - - if (serviceAgreement.agreementId !== agreementId) { - updatedServiceAgreement.agreementId = agreementId; - isInvalid = true; - } - - if (isInvalid) { - wrongAgreementsCount += 1; - fixedServiceAgreements.push({ - blockchain: serviceAgreement.blockchain, - contract: serviceAgreement.assetStorageContractAddress, - tokenId: serviceAgreement.tokenId, - agreementId: updatedServiceAgreement.agreementId ?? serviceAgreement.agreementId, - currentKeyword: serviceAgreement.keyword, - correctKeyword: updatedServiceAgreement.keyword ?? serviceAgreement.keyword, - currentAssertionId: serviceAgreement.assertionId, - correctAssertionId: - updatedServiceAgreement.assertionId ?? serviceAgreement.assertionId, - stateIndex: updatedServiceAgreement.stateIndex ?? serviceAgreement.stateIndex, - }); - } - } -} - -export default ServiceAgreementsDataInspector; diff --git a/src/migration/service-agreements-invalid-data-migration.js b/src/migration/service-agreements-invalid-data-migration.js deleted file mode 100644 index 59f1636cc6..0000000000 --- a/src/migration/service-agreements-invalid-data-migration.js +++ /dev/null @@ -1,218 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import BaseMigration from './base-migration.js'; -import { TRIPLE_STORE_REPOSITORIES } from '../constants/constants.js'; - -class ServiceAgreementsInvalidDataMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager, tripleStoreService) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - this.tripleStoreService = tripleStoreService; - } - - async executeMigration() { - let migrationInfo = await this.getMigrationInfo(); - if (!migrationInfo?.lastFixedTokenId) { - migrationInfo = { - lastFixedTokenId: 0, - }; - } - - const serviceAgreementsDataInspectorInfo = await this.getMigrationInfo( - 'serviceAgreementsDataInspector', - ); - - // Fixing invalid Service Agreements in the Operational DB (agreementId + keyword + assertionId + stateIndex) + - // Current repositories of the Triple Store ([Metadata: keyword] + [Assertion Links]) - const serviceAgreementsToUpdate = - serviceAgreementsDataInspectorInfo.fixedServiceAgreements.sort( - (a, b) => a.tokenId - b.tokenId, - ); - for (const serviceAgreement of serviceAgreementsToUpdate) { - if (serviceAgreement.tokenId < migrationInfo.lastFixedTokenId) { - continue; - } - - this.logger.trace( - `Fixing Service Agreement in the Operational DB for the Knowledge Asset with the ID: ${serviceAgreement.tokenId}, ` + - `Service Agreement ID: ${serviceAgreement.agreementId}, Keyword: ${serviceAgreement.correctKeyword}, ` + - `Assertion ID: ${serviceAgreement.correctAssertionId}, State Index: ${serviceAgreement.stateIndex}.`, - ); - - await this.repositoryModuleManager.updateServiceAgreementForTokenId( - serviceAgreement.tokenId, - serviceAgreement.agreementId, - serviceAgreement.correctKeyword, - serviceAgreement.correctAssertionId, - serviceAgreement.stateIndex, - ); - - // Fix wrong Assertion links in the PublicCurrent / PrivateCurrent repositories - if (serviceAgreement.currentAssertionId !== serviceAgreement.correctAssertionId) { - const assertionLinkedInPublicCurrentRepository = - await this.tripleStoreService.assetAssertionLinkExists( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.currentAssertionId, - ); - - if (assertionLinkedInPublicCurrentRepository) { - await this.tripleStoreService.updateAssetAssertionLink( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.currentAssertionId, - serviceAgreement.correctAssertionId, - ); - } - - const assertionLinkedInPrivateCurrentRepository = - await this.tripleStoreService.assetAssertionLinkExists( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.currentAssertionId, - ); - - if (assertionLinkedInPrivateCurrentRepository) { - await this.tripleStoreService.updateAssetAssertionLink( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.currentAssertionId, - serviceAgreement.correctAssertionId, - ); - } - } - - // Fix wrong keyword for the Asset Metadata in the Triple Store - if (serviceAgreement.currentKeyword !== serviceAgreement.correctKeyword) { - const assetInPublicCurrentRepository = await this.tripleStoreService.assetExists( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - ); - - if (assetInPublicCurrentRepository) { - await this.tripleStoreService.updateAssetNonAssertionMetadata( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.correctKeyword, - ); - } - - const assetInPrivateCurrentRepository = await this.tripleStoreService.assetExists( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - ); - - if (assetInPrivateCurrentRepository) { - await this.tripleStoreService.updateAssetNonAssertionMetadata( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.correctKeyword, - ); - } - - const assetInPublicHistoricalRepository = await this.tripleStoreService.assetExists( - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - ); - - if (assetInPublicHistoricalRepository) { - await this.tripleStoreService.updateAssetNonAssertionMetadata( - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.correctKeyword, - ); - } - - const assetInPrivateHistoricalRepository = - await this.tripleStoreService.assetExists( - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - ); - - if (assetInPrivateHistoricalRepository) { - await this.tripleStoreService.updateAssetNonAssertionMetadata( - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - serviceAgreement.blockchain, - serviceAgreement.contract, - serviceAgreement.tokenId, - serviceAgreement.correctKeyword, - ); - } - } - } - - // Fixing invalid Historical Assertions ([Assertion Links]) - const historicalStatesToUpdate = - serviceAgreementsDataInspectorInfo.fixedHistoricalAssertions.sort( - (a, b) => a.tokenId - b.tokenId, - ); - for (const state of historicalStatesToUpdate) { - if (state.tokenId < migrationInfo.lastFixedTokenId) { - continue; - } - - for (const assertionId of state.missingPublicHistoricalAssertions) { - await this.tripleStoreService.insertAssetAssertionLink( - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - state.blockchain, - state.contract, - state.tokenId, - assertionId, - ); - } - - for (const assertionId of state.missingPrivateHistoricalAssertions) { - await this.tripleStoreService.insertAssetAssertionLink( - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - state.blockchain, - state.contract, - state.tokenId, - assertionId, - ); - } - - for (const assertionId of state.redundantPublicHistoricalAssertions) { - await this.tripleStoreService.deleteAssetAssertionLink( - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - state.blockchain, - state.contract, - state.tokenId, - assertionId, - ); - } - - for (const assertionId of state.redundantPrivateHistoricalAssertions) { - await this.tripleStoreService.deleteAssetAssertionLink( - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - state.blockchain, - state.contract, - state.tokenId, - assertionId, - ); - } - } - } -} - -export default ServiceAgreementsInvalidDataMigration; diff --git a/src/migration/service-agreements-metadata-migration.js b/src/migration/service-agreements-metadata-migration.js deleted file mode 100644 index 382c2eaf94..0000000000 --- a/src/migration/service-agreements-metadata-migration.js +++ /dev/null @@ -1,234 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import path from 'path'; -import { setTimeout } from 'timers/promises'; -import BaseMigration from './base-migration.js'; -import { - CONTENT_ASSET_HASH_FUNCTION_ID, - SCHEMA_CONTEXT, - TRIPLE_STORE_REPOSITORIES, - SERVICE_AGREEMENT_SOURCES, -} from '../constants/constants.js'; - -class ServiceAgreementsMetadataMigration extends BaseMigration { - constructor( - migrationName, - logger, - config, - tripleStoreService, - blockchainModuleManager, - repositoryModuleManager, - serviceAgreementService, - ualService, - ) { - super(migrationName, logger, config); - this.blockchainModuleManager = blockchainModuleManager; - this.repositoryModuleManager = repositoryModuleManager; - this.serviceAgreementService = serviceAgreementService; - this.ualService = ualService; - this.tripleStoreService = tripleStoreService; - } - - async executeMigration() { - const migrationFolderPath = this.fileService.getMigrationFolderPath(); - const migrationInfoFileName = `${this.migrationName}_info`; - const migrationInfoPath = path.join(migrationFolderPath, migrationInfoFileName); - let migrationInfo; - if (await this.fileService.pathExists(migrationInfoPath)) { - migrationInfo = await this.fileService - .readFile(migrationInfoPath, true) - .catch(() => {}); - } - if (!migrationInfo?.lastProcessedTokenId) { - migrationInfo = { - lastProcessedTokenId: -1, - }; - } - // get metadata of all stored assets in public current triple store - const query = `PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT DISTINCT ?ual WHERE { - GRAPH { - ?ual schema:tokenId ?tokenId - } - FILTER (xsd:integer(?tokenId) > ${migrationInfo.lastProcessedTokenId}) - } - ORDER BY ASC(xsd:integer(?tokenId))`; - const assetsMetadata = await this.tripleStoreService.select( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - query, - ); - const identities = {}; - const concurrency = 3; - let promises = []; - let assetsToProcess = assetsMetadata.length; - for (const { ual } of assetsMetadata) { - const { blockchain, contract, tokenId } = this.ualService.resolveUAL(ual); - if (!identities[blockchain]) { - identities[blockchain] = await this.blockchainModuleManager.getIdentityId( - blockchain, - ); - } - promises.push( - this.processAsset(ual, blockchain, contract, tokenId, identities[blockchain]), - ); - assetsToProcess -= 1; - if (promises.length >= concurrency) { - // eslint-disable-next-line no-await-in-loop - await Promise.all(promises); - promises = []; - await this.fileService.writeContentsToFile( - migrationFolderPath, - migrationInfoFileName, - JSON.stringify({ lastProcessedTokenId: tokenId }), - false, - ); - this.logger.trace( - `${this.migrationName} remaining assets to process: ${assetsToProcess}.`, - ); - } - } - await Promise.all(promises); - } - - async processAsset(ual, blockchain, contract, tokenId, identityId) { - const maxAttempts = 10; - const sleepTimeSeconds = 2; - - // get assertion ids - let attempt = 0; - let assertionIds; - while (!assertionIds) { - attempt += 1; - if (attempt >= maxAttempts) - throw Error( - `Error while trying to get assertion ids for asset with ual: ${ual}. Max attempts reached`, - ); - if (attempt > 1) { - await setTimeout(sleepTimeSeconds * 1000); - } - try { - assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - } catch (error) { - this.logger.warn( - `Error while trying to get assertion ids for asset with ual: ${ual}. Retrying in ${sleepTimeSeconds} seconds. Attempt number: ${attempt}.`, - ); - } - } - - if (!assertionIds?.length) { - this.logger.warn(`Unable to find assertion ids for asset with ual: ${ual}`); - return; - } - const stateIndex = assertionIds.length - 1; - const assertionId = assertionIds[stateIndex]; - // calculate keyword - const keyword = this.blockchainModuleManager.encodePacked( - blockchain, - ['address', 'bytes32'], - [contract, assertionIds[0]], - ); - - // generate agreement id - const agreementId = this.serviceAgreementService.generateId( - blockchain, - contract, - tokenId, - keyword, - CONTENT_ASSET_HASH_FUNCTION_ID, - ); - - // get agreement data - attempt = 0; - let agreementData; - while (!agreementData) { - attempt += 1; - if (attempt >= maxAttempts) - throw Error( - `Error while trying to get agreement data for asset with ual: ${ual}. Max attempts reached`, - ); - if (attempt > 1) { - await setTimeout(sleepTimeSeconds * 1000); - } - try { - agreementData = await this.blockchainModuleManager.getAgreementData( - blockchain, - agreementId, - ); - } catch (error) { - this.logger.warn( - `Error while trying to get agreement data for asset with ual: ${ual}. Retrying in ${sleepTimeSeconds} seconds. Attempt number: ${attempt}.`, - ); - } - } - - // calculate current epoch - const now = await this.blockchainModuleManager.getBlockchainTimestamp(blockchain); - const epoch = Math.floor((now - agreementData.startTime) / agreementData.epochLength); - - // service agreement expired, don't update commits and proofs - if (epoch >= Number(agreementData.epochsNumber)) return; - - // get top commits - attempt = 0; - let commits; - while (!commits) { - attempt += 1; - if (attempt >= maxAttempts) - throw Error( - `Error while trying to get top commit submissions for asset with ual: ${ual}. Max attempts reached`, - ); - if (attempt > 1) { - await setTimeout(sleepTimeSeconds * 1000); - } - try { - commits = await this.blockchainModuleManager.getTopCommitSubmissions( - blockchain, - agreementId, - epoch, - stateIndex, - ); - } catch (error) { - this.logger.warn( - `Error while trying to get top commit submissions for asset with ual: ${ual}. Retrying in ${sleepTimeSeconds} seconds. Attempt number: ${attempt}.`, - ); - } - } - - let lastCommitEpoch = null; - let lastProofEpoch = null; - - for (const commit of commits) { - if (Number(commit.identityId) === identityId) { - lastCommitEpoch = epoch; - if (Number(commit.score) === 0) { - lastProofEpoch = epoch; - } - } - } - - // store in service_agreement table - await this.repositoryModuleManager.updateServiceAgreementRecord( - blockchain, - contract, - tokenId, - agreementId, - agreementData.startTime, - agreementData.epochsNumber, - agreementData.epochLength, - agreementData.scoreFunctionId, - agreementData.proofWindowOffsetPerc, - CONTENT_ASSET_HASH_FUNCTION_ID, - keyword, - assertionId, - stateIndex, - SERVICE_AGREEMENT_SOURCES.BLOCKCHAIN, - lastCommitEpoch, - lastProofEpoch, - ); - } -} - -export default ServiceAgreementsMetadataMigration; diff --git a/src/migration/telemetry-module-user-configuration-migration.js b/src/migration/telemetry-module-user-configuration-migration.js deleted file mode 100644 index a49cc393af..0000000000 --- a/src/migration/telemetry-module-user-configuration-migration.js +++ /dev/null @@ -1,45 +0,0 @@ -import appRootPath from 'app-root-path'; -import path from 'path'; -import BaseMigration from './base-migration.js'; - -class TelemetryModuleUserConfigurationMigration extends BaseMigration { - async executeMigration() { - const configurationFolderPath = path.join(appRootPath.path, '..'); - const configurationFilePath = path.join( - configurationFolderPath, - this.config.configFilename, - ); - - const userConfiguration = await this.fileService.readFile(configurationFilePath, true); - - let newTelemetryConfig; - - if ('telemetry' in userConfiguration) { - const oldConfigTelemetry = userConfiguration.telemetry; - newTelemetryConfig = { - enabled: oldConfigTelemetry.enabled, - implementation: { - 'ot-telemetry': { - enabled: oldConfigTelemetry.enabled, - package: './telemetry/implementation/ot-telemetry.js', - config: { - sendTelemetryData: oldConfigTelemetry.sendTelemetryData, - signalingServerUrl: oldConfigTelemetry.signalingServerUrl, - }, - }, - }, - }; - - delete userConfiguration.telemetry; - userConfiguration.modules.telemetry = newTelemetryConfig; - - await this.fileService.writeContentsToFile( - configurationFolderPath, - this.config.configFilename, - JSON.stringify(userConfiguration, null, 4), - ); - } - } -} - -export default TelemetryModuleUserConfigurationMigration; diff --git a/src/migration/triple-store-metadata-migration.js b/src/migration/triple-store-metadata-migration.js deleted file mode 100644 index dc087689d8..0000000000 --- a/src/migration/triple-store-metadata-migration.js +++ /dev/null @@ -1,776 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import { formatAssertion } from 'assertion-tools'; -import path from 'path'; -import BaseMigration from './base-migration.js'; -import { SCHEMA_CONTEXT, TRIPLE_STORE_REPOSITORIES } from '../constants/constants.js'; - -class TripleStoreMetadataMigration extends BaseMigration { - constructor( - migrationName, - logger, - config, - tripleStoreService, - blockchainModuleManager, - serviceAgreementService, - ualService, - dataService, - ) { - super(migrationName, logger, config); - this.blockchainModuleManager = blockchainModuleManager; - this.serviceAgreementService = serviceAgreementService; - this.ualService = ualService; - this.tripleStoreService = tripleStoreService; - this.dataService = dataService; - } - - async executeMigration() { - await this.updatePublicCurrentMetadata(); - await this.updatePrivateCurrentMetadata(); - } - - async updatePublicCurrentMetadata() { - const currentRepository = TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT; - const historyRepository = TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY; - const migrationFolderPath = this.fileService.getMigrationFolderPath(); - const migrationInfoFileName = `${this.migrationName}_${currentRepository}`; - const migrationInfoPath = path.join(migrationFolderPath, migrationInfoFileName); - - let migrationInfo; - if (await this.fileService.pathExists(migrationInfoPath)) { - try { - migrationInfo = await this.fileService.readFile(migrationInfoPath, true); - } catch (error) { - migrationInfo = { - status: 'IN_PROGRESS', - processedUals: {}, - deletedAssertions: [], - }; - } - - if (migrationInfo.status === 'COMPLETED') return; - } else { - migrationInfo = { - status: 'IN_PROGRESS', - processedUals: {}, - deletedAssertions: [], - }; - } - - await this._logMetadataStats(currentRepository); - - migrationInfo = await this.updateBlockchainMetadata(currentRepository, migrationInfo); - migrationInfo = await this.updateContractMetadata(currentRepository, migrationInfo); - await this.deleteUnsupportedAssetsMetadata(currentRepository); - migrationInfo = await this.updateKeywordMetadata(currentRepository, migrationInfo); - migrationInfo = await this.updateAssertionMetadata( - currentRepository, - historyRepository, - migrationInfo, - ); - migrationInfo = await this.deleteUnlinkedAssertions(currentRepository, migrationInfo); - - await this._logMetadataStats(currentRepository); - - migrationInfo.status = 'COMPLETED'; - await this._updateMigrationInfoFile(currentRepository, migrationInfo); - } - - async updatePrivateCurrentMetadata() { - const currentRepository = TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT; - const historyRepository = TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY; - const migrationFolderPath = this.fileService.getMigrationFolderPath(); - const migrationInfoFileName = `${this.migrationName}_${currentRepository}`; - const migrationInfoPath = path.join(migrationFolderPath, migrationInfoFileName); - let migrationInfo; - if (await this.fileService.pathExists(migrationInfoPath)) { - try { - migrationInfo = await this.fileService.readFile(migrationInfoPath, true); - } catch (error) { - migrationInfo = { - status: 'IN_PROGRESS', - processedUals: {}, - deletedAssertions: [], - }; - } - - if (migrationInfo.status === 'COMPLETED') return; - } else { - const assetsQueryResult = await this.tripleStoreService.select( - currentRepository, - `SELECT distinct ?ual - WHERE { - GRAPH { - ?ual ?p ?o - } - }`, - ); - - migrationInfo = { - status: 'IN_PROGRESS', - ualsToProcess: assetsQueryResult.map(({ ual }) => ual), - processedUals: {}, - deletedAssertions: [], - }; - } - - await this._logMetadataStats(currentRepository); - - const ualsToProcess = JSON.parse(JSON.stringify(migrationInfo.ualsToProcess)); - for (let i = 0; i < ualsToProcess.length; i += 1) { - this._logPercentage(i, ualsToProcess.length, currentRepository); - const ual = ualsToProcess[i]; - if (!migrationInfo.processedUals[ual]) migrationInfo.processedUals[ual] = {}; - - let resolvedUAL; - try { - resolvedUAL = this.ualService.resolveUAL(ual); - } catch (error) { - this.logger.warn(`Unable to resolve UAL: ${error}`); - continue; - } - - const { blockchain, contract, tokenId } = resolvedUAL; - - let assertionIds; - try { - assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - migrationInfo.processedUals[ual].assertionIds = assertionIds; - } catch (error) { - this.logger.warn(`Unable to find assertion ids for asset with ual: ${ual}`); - migrationInfo.ualsToProcess.splice(i, 1); - await this._updateMigrationInfoFile(currentRepository, migrationInfo); - continue; - } - - if (!assertionIds?.length) { - this.logger.warn(`Unable to find assertion ids for asset with ual: ${ual}`); - migrationInfo.ualsToProcess.splice(i, 1); - await this._updateMigrationInfoFile(currentRepository, migrationInfo); - continue; - } - - const keyword = this.blockchainModuleManager.encodePacked( - blockchain, - ['address', 'bytes32'], - [contract, assertionIds[0]], - ); - - migrationInfo = await this._moveOldAssertionIds( - currentRepository, - historyRepository, - ual, - blockchain, - contract, - tokenId, - keyword, - assertionIds, - migrationInfo, - ); - - migrationInfo = await this._updateAssetMetadata( - currentRepository, - assertionIds, - ual, - blockchain, - contract, - tokenId, - keyword, - migrationInfo, - ); - - migrationInfo.ualsToProcess.splice(i, 1); - await this._updateMigrationInfoFile(currentRepository, migrationInfo); - } - await this.deleteUnlinkedAssertions(currentRepository, migrationInfo); - - await this._logMetadataStats(currentRepository); - - migrationInfo.status = 'COMPLETED'; - await this._updateMigrationInfoFile(currentRepository, migrationInfo); - } - - async updateBlockchainMetadata(repository, migrationInfo) { - const assetsQueryResult = await this.tripleStoreService.select( - repository, - `PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT DISTINCT ?ual - WHERE { - GRAPH { - ?ual ?p ?o . - FILTER NOT EXISTS { - ?ual schema:blockchain ?blockchain . - } - } - }`, - ); - - this.logger.debug( - `found ${assetsQueryResult.length} assets with missing blockchain metadata`, - ); - - let triples = ''; - let processedAssets = []; - const migrationInfoCopy = migrationInfo; - for (let i = 0; i < assetsQueryResult.length; i += 1) { - const { ual } = assetsQueryResult[i]; - let resolvedUAL; - try { - resolvedUAL = this.ualService.resolveUAL(ual); - } catch (error) { - this.logger.warn(`Unable to resolve UAL: ${error}`); - continue; - } - - const { blockchain } = resolvedUAL; - - triples += `<${ual}> schema:blockchain "${blockchain}" . \n`; - processedAssets.push({ ual, blockchain }); - if (i % 10_000 === 0) { - await this.insertMetadataTriples(repository, triples); - for (const processedAsset of processedAssets) { - if (!migrationInfoCopy.processedUals[processedAsset.ual]) - migrationInfoCopy.processedUals[processedAsset.ual] = { - blockchain: processedAsset.blockchain, - }; - else - migrationInfoCopy.processedUals[processedAsset.ual].blockchain = - processedAsset.blockchain; - } - await this._updateMigrationInfoFile(repository, migrationInfoCopy); - triples = ''; - processedAssets = []; - } - } - await this.insertMetadataTriples(repository, triples); - return migrationInfoCopy; - } - - async updateContractMetadata(repository, migrationInfo) { - const assetsQueryResult = await this.tripleStoreService.select( - repository, - `PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT DISTINCT ?ual - WHERE { - GRAPH { - ?ual ?p ?o . - FILTER NOT EXISTS { - ?ual schema:contract ?contract . - } - } - }`, - ); - - this.logger.debug( - `found ${assetsQueryResult.length} assets with missing contract metadata`, - ); - - let triples = ''; - let processedAssets = []; - const migrationInfoCopy = migrationInfo; - for (let i = 0; i < assetsQueryResult.length; i += 1) { - const { ual } = assetsQueryResult[i]; - let resolvedUAL; - try { - resolvedUAL = this.ualService.resolveUAL(ual); - } catch (error) { - this.logger.warn(`Unable to resolve UAL: ${error}`); - continue; - } - - const { contract } = resolvedUAL; - - triples += `<${ual}> schema:contract "${contract}" . \n`; - processedAssets.push({ ual, contract }); - if (i % 10_000 === 0) { - await this.insertMetadataTriples(repository, triples); - for (const processedAsset of processedAssets) { - if (!migrationInfoCopy.processedUals[processedAsset.ual]) - migrationInfoCopy.processedUals[processedAsset.ual] = { - contract: processedAsset.contract, - }; - else - migrationInfoCopy.processedUals[processedAsset.ual].contract = - processedAsset.contract; - } - await this._updateMigrationInfoFile(repository, migrationInfoCopy); - triples = ''; - processedAssets = []; - } - } - await this.insertMetadataTriples(repository, triples); - return migrationInfoCopy; - } - - async updateKeywordMetadata(repository, migrationInfo) { - const assetsQueryResult = await this.tripleStoreService.select( - repository, - `PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT DISTINCT ?ual - WHERE { - GRAPH { - ?ual ?p ?o . - FILTER NOT EXISTS { - ?ual schema:keyword ?keyword . - } - } - }`, - ); - - this.logger.debug(`found ${assetsQueryResult.length} assets with missing keyword metadata`); - - let triples = ''; - const processedAssets = []; - const migrationInfoCopy = migrationInfo; - for (const { ual } of assetsQueryResult) { - let resolvedUAL; - try { - resolvedUAL = this.ualService.resolveUAL(ual); - } catch (error) { - this.logger.warn(`Unable to resolve UAL: ${error}`); - continue; - } - - const { blockchain, contract, tokenId } = resolvedUAL; - - let assertionIds; - try { - assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - } catch (error) { - this.logger.warn(`Unable to find assertion ids for asset with ual: ${ual}`); - continue; - } - - if (!assertionIds?.length) { - this.logger.warn(`Unable to find assertion ids for asset with ual: ${ual}`); - continue; - } - - const keyword = this.blockchainModuleManager.encodePacked( - blockchain, - ['address', 'bytes32'], - [contract, assertionIds[0]], - ); - - triples += `<${ual}> schema:keyword "${keyword}" . \n`; - processedAssets.push({ ual, keyword }); - } - - for (const processedAsset of processedAssets) { - if (!migrationInfoCopy.processedUals[processedAsset.ual]) - migrationInfoCopy.processedUals[processedAsset.ual] = { - keyword: processedAsset.keyword, - }; - else - migrationInfoCopy.processedUals[processedAsset.ual].keyword = - processedAsset.keyword; - } - await this.insertMetadataTriples(repository, triples); - await this._updateMigrationInfoFile(repository, migrationInfoCopy); - return migrationInfoCopy; - } - - async updateAssertionMetadata(currentRepository, historyRepository, migrationInfo) { - const assetsQueryResult = await this.tripleStoreService.select( - currentRepository, - `PREFIX schema: <${SCHEMA_CONTEXT}> - - SELECT distinct ?ual - WHERE { - { - GRAPH { - ?ual ?p ?o . - } - FILTER NOT EXISTS { - ?ual schema:assertion ?assertion . - } - } - UNION - { - GRAPH { - ?ual schema:assertion ?assertion1 . - ?ual schema:assertion ?assertion2 . - } - FILTER (?assertion1 != ?assertion2) - } - }`, - ); - - this.logger.debug( - `found ${assetsQueryResult.length} assets not containing exactly one assertion id in metadata`, - ); - - let migrationInfoCopy = migrationInfo; - for (const { ual } of assetsQueryResult) { - if (!migrationInfoCopy.processedUals[ual]) migrationInfoCopy.processedUals[ual] = {}; - let resolvedUAL; - try { - resolvedUAL = this.ualService.resolveUAL(ual); - } catch (error) { - this.logger.warn(`Unable to resolve UAL: ${error}`); - continue; - } - - const { blockchain, contract, tokenId } = resolvedUAL; - - let assertionIds; - try { - assertionIds = await this.blockchainModuleManager.getAssertionIds( - blockchain, - contract, - tokenId, - ); - migrationInfoCopy.processedUals[ual].assertionIds = assertionIds; - } catch (error) { - this.logger.warn(`Unable to find assertion ids for asset with ual: ${ual}`); - continue; - } - - if (!assertionIds?.length) { - this.logger.warn(`Unable to find assertion ids for asset with ual: ${ual}`); - continue; - } - - const keyword = this.blockchainModuleManager.encodePacked( - blockchain, - ['address', 'bytes32'], - [contract, assertionIds[0]], - ); - - migrationInfoCopy = await this._moveOldAssertionIds( - currentRepository, - historyRepository, - ual, - blockchain, - contract, - tokenId, - keyword, - assertionIds, - migrationInfoCopy, - ); - - migrationInfoCopy = await this._updateAssetMetadata( - currentRepository, - assertionIds, - ual, - blockchain, - contract, - tokenId, - keyword, - migrationInfoCopy, - ); - } - - return migrationInfoCopy; - } - - async _moveOldAssertionIds( - currentRepository, - historyRepository, - ual, - blockchain, - contract, - tokenId, - keyword, - assertionIds, - migrationInfo, - ) { - const migrationInfoCopy = migrationInfo; - for (let i = 0; i < assertionIds.length - 1; i += 1) { - const publicAssertionId = assertionIds[i]; - const publicAssertion = await this.tripleStoreService.getAssertion( - currentRepository, - publicAssertionId, - ); - - if (publicAssertion?.length) { - await this.tripleStoreService.localStoreAsset( - historyRepository, - publicAssertionId, - publicAssertion, - blockchain, - contract, - tokenId, - keyword, - ); - if (!migrationInfoCopy.processedUals[ual].copiedHistory) { - migrationInfoCopy.processedUals[ual].copiedHistory = []; - } - migrationInfoCopy.processedUals[ual].copiedHistory.push({ - stateIndex: i, - publicAssertionId, - publicAssertion, - }); - - await this._updateMigrationInfoFile(currentRepository, migrationInfoCopy); - - if (currentRepository === TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT) { - const privateAssertionId = - this.dataService.getPrivateAssertionId(publicAssertion); - if (privateAssertionId) { - const privateAssertion = await this.tripleStoreService.getAssertion( - currentRepository, - privateAssertionId, - ); - - if (privateAssertion?.length) { - await this.tripleStoreService.localStoreAsset( - historyRepository, - privateAssertionId, - privateAssertion, - blockchain, - contract, - tokenId, - keyword, - ); - migrationInfoCopy.processedUals[ual].copiedHistory.push({ - stateIndex: i, - privateAssertionId, - privateAssertion, - }); - await this._updateMigrationInfoFile( - currentRepository, - migrationInfoCopy, - ); - } - } - } - } - } - - return migrationInfoCopy; - } - - async _updateAssetMetadata( - currentRepository, - assertionIds, - ual, - blockchain, - contract, - tokenId, - keyword, - migrationInfo, - ) { - const migrationInfoCopy = migrationInfo; - const latestPublicAssertionId = assertionIds[assertionIds.length - 1]; - const latestPublicAssertion = await this.tripleStoreService.getAssertion( - currentRepository, - latestPublicAssertionId, - ); - - if (latestPublicAssertion?.length) { - const assetMetadata = { - '@context': SCHEMA_CONTEXT, - '@id': ual, - blockchain, - contract, - tokenId, - keyword, - assertion: [{ '@id': `assertion:${latestPublicAssertionId}` }], - }; - - if (currentRepository === TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT) { - const latestPrivateAssertionId = - this.dataService.getPrivateAssertionId(latestPublicAssertion); - if (latestPrivateAssertionId) { - assetMetadata.assertion.push({ - '@id': `assertion:${latestPrivateAssertionId}`, - }); - } - } - - const assetMetadataNquads = await formatAssertion(assetMetadata); - await this.tripleStoreService.queryVoid( - currentRepository, - `DELETE WHERE { - GRAPH { - <${ual}> ?p ?o - } - }; - INSERT DATA { - GRAPH { - ${assetMetadataNquads.join('\n')} - } - }`, - ); - migrationInfoCopy.processedUals[ual].upddatedMetadata = true; - } else { - await this.tripleStoreService.deleteAssetMetadata( - currentRepository, - blockchain, - contract, - tokenId, - ); - migrationInfoCopy.processedUals[ual].deletedMetadata = true; - } - - await this._updateMigrationInfoFile(currentRepository, migrationInfoCopy); - - return migrationInfoCopy; - } - - async deleteUnsupportedAssetsMetadata(repository) { - let assetStorageContractAddresses = []; - for (const blockchain of this.blockchainModuleManager.getImplementationNames()) { - assetStorageContractAddresses = assetStorageContractAddresses.concat( - await this.blockchainModuleManager.getAssetStorageContractAddresses(blockchain), - ); - } - - const deleteQuery = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - - DELETE { - GRAPH { ?s ?p ?o . } - } WHERE { - GRAPH { - ?s ?p ?o . - ?s schema:contract ?o2 . - FILTER NOT EXISTS { - VALUES ?oValue { ${assetStorageContractAddresses - .map((addr) => `"${addr}"`) - .join(' ')} } - FILTER (?o2 = ?oValue) - } - } - }`; - - await this.tripleStoreService.queryVoid(repository, deleteQuery); - } - - async deleteUnlinkedAssertions(repository, migrationInfo) { - let assetsQueryResult; - const migrationInfoCopy = migrationInfo; - do { - assetsQueryResult = await this.tripleStoreService.select( - repository, - `PREFIX schema: <${SCHEMA_CONTEXT}> - - SELECT DISTINCT ?g WHERE { - GRAPH ?g { ?s ?p ?o . } - FILTER NOT EXISTS { - GRAPH { - ?ual schema:assertion ?g . - } - } - FILTER (?g != ) - } - LIMIT 100`, - ); - if (assetsQueryResult?.length) { - assetsQueryResult = assetsQueryResult.filter(({ g }) => g.startsWith('assertion:')); - } - this.logger.debug( - `found ${assetsQueryResult.length} assertions not linked to any asset.`, - ); - let deleteQuery = ''; - if (!migrationInfoCopy.deletedAssertions) migrationInfoCopy.deletedAssertions = []; - for (const { g } of assetsQueryResult) { - deleteQuery += ` - WITH <${g}> - DELETE { ?s ?p ?o } - WHERE { ?s ?p ?o };`; - migrationInfoCopy.deletedAssertions.push(g); - } - - if (deleteQuery !== '') { - await this.tripleStoreService.queryVoid(repository, deleteQuery); - } - await this._updateMigrationInfoFile(repository, migrationInfoCopy); - } while (assetsQueryResult?.length); - - return migrationInfoCopy; - } - - async _logMetadataStats(repository) { - const allAssetsResult = await this.tripleStoreService.select( - repository, - `PREFIX schema: <${SCHEMA_CONTEXT}> - - SELECT - (COUNT(DISTINCT ?ual) AS ?all) - WHERE { - GRAPH { - { - ?ual ?p ?o . - } - } - }`, - ); - let stats = this.dataService.parseBindings(allAssetsResult)[0]; - - let log = `metadata stats for ${repository} repository: `; - log += `\n\t\t\t\tdistinct number of uals: ${stats.all}`; - - const predicates = ['blockchain', 'contract', 'tokenId', 'keyword', 'assertion']; - for (const predicate of predicates) { - stats = await this._getPredicateStats(repository, predicate); - log += `\n\t\t\t\tdistinct number of uals with predicate ${predicate}: ${stats}`; - } - this.logger.debug(log); - } - - async _getPredicateStats(repository, predicate) { - const query = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT - (COUNT(DISTINCT ?ual) AS ?${predicate}) - WHERE { - GRAPH { - { - ?ual schema:${predicate} ?${predicate} . - } - } - }`; - - const result = await this.tripleStoreService.select(repository, query); - const stats = this.dataService.parseBindings(result)[0]; - - return stats[predicate]; - } - - _logPercentage(index, max, repository) { - const previousPercentage = (Math.max(0, index - 1) / max) * 100; - const currentPercentage = (index / max) * 100; - - if (Math.floor(currentPercentage) - Math.floor(previousPercentage) < 1) return; - - this.logger.debug( - `${this.migrationName} at ${ - Math.floor(currentPercentage * 10) / 10 - }% for ${repository} repository`, - ); - } - - async _updateMigrationInfoFile(repository, migrationInfo) { - const migrationFolderPath = this.fileService.getMigrationFolderPath(); - const migrationInfoFileName = `${this.migrationName}_${repository}`; - - await this.fileService.writeContentsToFile( - migrationFolderPath, - migrationInfoFileName, - JSON.stringify(migrationInfo), - ); - } - - async insertMetadataTriples(repository, triples) { - await this.tripleStoreService.queryVoid( - repository, - `PREFIX schema: <${SCHEMA_CONTEXT}> - INSERT DATA { - GRAPH { - ${triples} - } - }`, - ); - } -} - -export default TripleStoreMetadataMigration; diff --git a/src/migration/triple-store-user-configuration-migration.js b/src/migration/triple-store-user-configuration-migration.js index ba6f7b8646..5fef044050 100644 --- a/src/migration/triple-store-user-configuration-migration.js +++ b/src/migration/triple-store-user-configuration-migration.js @@ -1,130 +1,36 @@ -import path from 'path'; import appRootPath from 'app-root-path'; +import path from 'path'; import BaseMigration from './base-migration.js'; -import { NODE_ENVIRONMENTS } from '../constants/constants.js'; class TripleStoreUserConfigurationMigration extends BaseMigration { async executeMigration() { - if ( - process.env.NODE_ENV !== NODE_ENVIRONMENTS.DEVELOPMENT && - process.env.NODE_ENV !== NODE_ENVIRONMENTS.TEST - ) { - const configurationFolderPath = path.join(appRootPath.path, '..'); - const configurationFilePath = path.join( - configurationFolderPath, - this.config.configFilename, - ); - - const userConfiguration = await this.fileService.readFile(configurationFilePath, true); - if (userConfiguration.modules.tripleStore.implementation) { - for (const implementationName in userConfiguration.modules.tripleStore - .implementation) { - const oldImplementationConfig = - userConfiguration.modules.tripleStore.implementation[implementationName] - .config; - if (oldImplementationConfig && !oldImplementationConfig.repositories) { - let { url, username, password, repository } = oldImplementationConfig; - - if (!url) { - url = - implementationName === 'ot-blazegraph' - ? 'http://localhost:9999' - : 'http://localhost:3030'; - } - - if (!username) { - username = 'admin'; - } - - if (!password) { - password = ''; - } - - if (!repository) { - if (implementationName === 'ot-blazegraph') { - repository = 'kb'; - } - if (implementationName === 'ot-fuseki') { - repository = 'node0'; - } - } - const newImplementationConfig = { - repositories: { - publicCurrent: { - url, - name: repository, - username, - password, - }, - publicHistory: { - url, - name: 'public-history', - username, - password, - }, - privateCurrent: { - url, - name: 'private-current', - username, - password, - }, - privateHistory: { - url, - name: 'private-history', - username, - password, - }, - }, - }; - - userConfiguration.modules.tripleStore.implementation[ - implementationName - ].config = newImplementationConfig; - } - } - } else { - const configurationTemplatePath = path.join( - appRootPath.path, - 'tools', - 'local-network-setup', - '.origintrail_noderc_template.json', - ); - const configurationTemplate = await this.fileService.readFile( - configurationTemplatePath, - true, - ); - - if ( - userConfiguration.modules.tripleStore.defaultImplementation === 'ot-blazegraph' - ) { - userConfiguration.modules.tripleStore.implementation = { - 'ot-blazegraph': - configurationTemplate.modules.tripleStore.implementation[ - 'ot-blazegraph' - ], - }; - configurationTemplate.modules.tripleStore.implementation[ - 'ot-blazegraph' - ].enabled = true; - configurationTemplate.modules.tripleStore.implementation[ - 'ot-blazegraph' - ].config.repositories.publicCurrent.name = 'kb'; - } else if ( - userConfiguration.modules.tripleStore.defaultImplementation === 'ot-fuseki' - ) { - userConfiguration.modules.tripleStore.implementation = { - 'ot-fuseki': - configurationTemplate.modules.tripleStore.implementation['ot-fuseki'], + const configurationFolderPath = path.join(appRootPath.path, '..'); + const configurationFilePath = path.join( + configurationFolderPath, + this.config.configFilename, + ); + + const userConfiguration = await this.fileService.readFile(configurationFilePath, true); + + if ('tripleStore' in userConfiguration.modules) { + const oldConfigTripleStore = userConfiguration.modules; + for (const implementation in oldConfigTripleStore.tripleStore.implementation) { + if (oldConfigTripleStore.tripleStore.implementation[implementation].enabled) { + const { url, username, password } = + oldConfigTripleStore.tripleStore.implementation[implementation].config + .repositories.publicCurrent; + + oldConfigTripleStore.tripleStore.implementation[ + implementation + ].config.repositories.dkg = { + url, + name: 'dkg', + username, + password, }; - configurationTemplate.modules.tripleStore.implementation[ - 'ot-fuseki' - ].enabled = true; - configurationTemplate.modules.tripleStore.implementation[ - 'ot-fuseki' - ].config.repositories.publicCurrent.name = 'node0'; } } - delete userConfiguration.modules.tripleStore.defaultImplementation; + await this.fileService.writeContentsToFile( configurationFolderPath, this.config.configFilename, diff --git a/src/migration/ual-extension-triple-store-migration.js b/src/migration/ual-extension-triple-store-migration.js deleted file mode 100644 index 4709c6133b..0000000000 --- a/src/migration/ual-extension-triple-store-migration.js +++ /dev/null @@ -1,95 +0,0 @@ -/* eslint-disable no-await-in-loop */ -import BaseMigration from './base-migration.js'; -import { TRIPLE_STORE_REPOSITORIES } from '../constants/constants.js'; - -const CHAIN_IDS = { - development: 31337, - test: 31337, - devnet: 2160, - testnet: 20430, - mainnet: 2043, -}; -const chainId = CHAIN_IDS[process.env.NODE_ENV]; - -class UalExtensionTripleStoreMigration extends BaseMigration { - constructor(migrationName, logger, config, tripleStoreService) { - super(migrationName, logger, config); - this.tripleStoreService = tripleStoreService; - } - - async executeMigration() { - const oldBlockchainId = this.getOldBlockchainId(); - const newBlockchainId = `${oldBlockchainId}:${chainId}`; - - const chunkSize = 10000; - - for (const repository in TRIPLE_STORE_REPOSITORIES) { - const getUalListQuery = ` - PREFIX schema: - SELECT DISTINCT ?subject ?object - WHERE { - ?subject schema:assertion ?object . - }`; - - const ualList = await this.tripleStoreService.select( - TRIPLE_STORE_REPOSITORIES[repository], - getUalListQuery, - ); - - this.logger.info( - `Ual extension triple store migration: found ${ualList.length} distinct UALs in ${repository}`, - ); - const subjectsSet = new Set(ualList.map((item) => item.subject)); - const newTriples = []; - for (const { subject: ual, object: assertionId } of ualList) { - if (assertionId.startsWith('assertion:')) { - let newUal; - if (ual.includes(newBlockchainId)) { - newUal = ual.replace(newBlockchainId, oldBlockchainId); - } else { - newUal = ual.replace(oldBlockchainId, newBlockchainId); - } - if (!subjectsSet.has(newUal)) { - newTriples.push(`<${newUal}> schema:assertion <${assertionId}>`); - } - } - } - - while (newTriples.length) { - const triplesForInsert = newTriples.splice(0, chunkSize); - const insertQuery = ` - PREFIX schema: - INSERT DATA { - GRAPH { - ${triplesForInsert.join(' .\n')} - } - }`; - await this.tripleStoreService.queryVoid( - TRIPLE_STORE_REPOSITORIES[repository], - insertQuery, - ); - this.logger.info( - `Inserted ${triplesForInsert.length} triples, left for insert: ${newTriples.length} repository: ${repository}`, - ); - } - this.logger.info(`Finished processing of UALs in repository: ${repository}`); - } - } - - getOldBlockchainId() { - let oldBlockchainId; - if (this.config.modules.blockchain.implementation) { - for (const implementationName in this.config.modules.blockchain.implementation) { - if (this.config.modules.blockchain.implementation[implementationName].enabled) { - oldBlockchainId = implementationName; - } - } - } - if (!oldBlockchainId) { - throw Error('Unable to find old blockchain id in configuration'); - } - return oldBlockchainId.split(':')[0]; - } -} - -export default UalExtensionTripleStoreMigration; diff --git a/src/migration/ual-extension-user-configuration-migration.js b/src/migration/ual-extension-user-configuration-migration.js deleted file mode 100644 index 5d0c74f570..0000000000 --- a/src/migration/ual-extension-user-configuration-migration.js +++ /dev/null @@ -1,71 +0,0 @@ -import appRootPath from 'app-root-path'; -import path from 'path'; -import BaseMigration from './base-migration.js'; - -const CHAIN_IDS = { - development: 31337, - test: 31337, - devnet: 2160, - testnet: 20430, - mainnet: 2043, -}; -const chainId = CHAIN_IDS[process.env.NODE_ENV]; - -class UalExtensionUserConfigurationMigration extends BaseMigration { - constructor(migrationName, logger, config, repositoryModuleManager) { - super(migrationName, logger, config); - this.repositoryModuleManager = repositoryModuleManager; - } - - async executeMigration() { - const configurationFolderPath = path.join(appRootPath.path, '..'); - const configurationFilePath = path.join( - configurationFolderPath, - this.config.configFilename, - ); - - const userConfiguration = await this.fileService.readFile(configurationFilePath, true); - - const oldBlockchainId = this.getOldBlockchainId(userConfiguration); - - if (this.blockchainIdInNewFormat(oldBlockchainId)) { - this.logger.info( - 'Blockchain id in user configuration already updated to be in new format, migration will be skipped', - ); - return null; - } - - const newBlockchainId = `${oldBlockchainId}:${chainId}`; - userConfiguration.modules.blockchain.defaultImplementation = newBlockchainId; - userConfiguration.modules.blockchain.implementation[newBlockchainId] = - userConfiguration.modules.blockchain.implementation[oldBlockchainId]; - userConfiguration.modules.blockchain.implementation[newBlockchainId].enabled = true; - delete userConfiguration.modules.blockchain.implementation[oldBlockchainId]; - await this.fileService.writeContentsToFile( - configurationFolderPath, - this.config.configFilename, - JSON.stringify(userConfiguration, null, 4), - ); - } - - blockchainIdInNewFormat(blockchainId) { - return blockchainId.includes(':'); - } - - getOldBlockchainId(userConfiguration) { - let oldBlockchainId; - if (userConfiguration.modules.blockchain.implementation) { - for (const implementationName in userConfiguration.modules.blockchain.implementation) { - if (implementationName.includes('otp')) { - oldBlockchainId = implementationName; - } - } - } - if (!oldBlockchainId) { - throw Error('Unable to find old blockchain id in user configuration'); - } - return oldBlockchainId; - } -} - -export default UalExtensionUserConfigurationMigration; diff --git a/src/modules/blockchain-events/blockchain-events-module-manager.js b/src/modules/blockchain-events/blockchain-events-module-manager.js new file mode 100644 index 0000000000..4ddc821eb9 --- /dev/null +++ b/src/modules/blockchain-events/blockchain-events-module-manager.js @@ -0,0 +1,55 @@ +import BaseModuleManager from '../base-module-manager.js'; + +class BlockchainEventsModuleManager extends BaseModuleManager { + getContractAddress(implementationName, blockchain, contractName) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.getContractAddress( + blockchain, + contractName, + ); + } + } + + updateContractAddress(implementationName, blockchain, contractName, contractAddress) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.updateContractAddress( + blockchain, + contractName, + contractAddress, + ); + } + } + + async getBlock(implementationName, blockchain, tag) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.getBlock(blockchain, tag); + } + } + + async getPastEvents( + implementationName, + blockchain, + contractNames, + eventsToFilter, + lastCheckedBlock, + lastCheckedTimestamp, + currentBlock, + ) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.getPastEvents( + blockchain, + contractNames, + eventsToFilter, + lastCheckedBlock, + lastCheckedTimestamp, + currentBlock, + ); + } + } + + getName() { + return 'blockchainEvents'; + } +} + +export default BlockchainEventsModuleManager; diff --git a/src/modules/blockchain-events/implementation/blockchain-events-service.js b/src/modules/blockchain-events/implementation/blockchain-events-service.js new file mode 100644 index 0000000000..a0a3cb3a10 --- /dev/null +++ b/src/modules/blockchain-events/implementation/blockchain-events-service.js @@ -0,0 +1,24 @@ +class BlockchainEventsService { + async initialize(config, logger) { + this.logger = logger; + this.config = config; + } + + getContractAddress() { + throw Error('getContractAddress not implemented'); + } + + updateContractAddress() { + throw Error('updateContractAddress not implemented'); + } + + async getBlock() { + throw Error('getBlock not implemented'); + } + + async getPastEvents() { + throw Error('getPastEvents not implemented'); + } +} + +export default BlockchainEventsService; diff --git a/src/modules/blockchain-events/implementation/ot-ethers/ot-ethers.js b/src/modules/blockchain-events/implementation/ot-ethers/ot-ethers.js new file mode 100644 index 0000000000..afd87ef4f4 --- /dev/null +++ b/src/modules/blockchain-events/implementation/ot-ethers/ot-ethers.js @@ -0,0 +1,242 @@ +/* eslint-disable no-await-in-loop */ +import { ethers } from 'ethers'; +import BlockchainEventsService from '../blockchain-events-service.js'; + +import { + MAXIMUM_NUMBERS_OF_BLOCKS_TO_FETCH, + MAX_BLOCKCHAIN_EVENT_SYNC_OF_HISTORICAL_BLOCKS_IN_MILLS, + NODE_ENVIRONMENTS, + ABIs, + MONITORED_CONTRACTS, +} from '../../../../constants/constants.js'; + +class OtEthers extends BlockchainEventsService { + async initialize(config, logger) { + await super.initialize(config, logger); + this.contractCallCache = {}; + await this._initializeRpcProviders(); + await this._initializeContracts(); + } + + async _initializeRpcProviders() { + this.providers = {}; + for (const blockchain of this.config.blockchains) { + const validProviders = []; + for (const rpcEndpoint of this.config.rpcEndpoints[blockchain]) { + try { + const provider = new ethers.providers.JsonRpcProvider(rpcEndpoint); + + // eslint-disable-next-line no-await-in-loop + await provider.getNetwork(); + validProviders.push(provider); + } catch (error) { + this.logger.error( + `Failed to initialize provider: ${rpcEndpoint}. Error: ${error.message}`, + ); + } + } + + if (validProviders.length === 0) { + throw new Error(`No valid providers found for blockchain: ${blockchain}`); + } + + this.providers[blockchain] = validProviders; + this.logger.info( + `Initialized ${validProviders.length} valid providers for blockchain: ${blockchain}`, + ); + } + } + + _getRandomProvider(blockchain) { + const blockchainProviders = this.providers[blockchain]; + if (!blockchainProviders || blockchainProviders.length === 0) { + throw new Error(`No providers available for blockchain: ${blockchain}`); + } + const randomIndex = Math.floor(Math.random() * blockchainProviders.length); + return blockchainProviders[randomIndex]; + } + + async _initializeContracts() { + this.contracts = {}; + + for (const blockchain of this.config.blockchains) { + this.contracts[blockchain] = {}; + + this.logger.info( + `Initializing contracts with hub contract address: ${this.config.hubContractAddress[blockchain]}`, + ); + this.contracts[blockchain].Hub = this.config.hubContractAddress[blockchain]; + + const provider = this._getRandomProvider(blockchain); + const hubContract = new ethers.Contract( + this.config.hubContractAddress[blockchain], + ABIs.Hub, + provider, + ); + + const contractsAray = await hubContract.getAllContracts(); + const assetStoragesArray = await hubContract.getAllAssetStorages(); + + const allContracts = [...contractsAray, ...assetStoragesArray]; + + for (const [contractName, contractAddress] of allContracts) { + if (MONITORED_CONTRACTS.includes(contractName) && ABIs[contractName] != null) { + this.contracts[blockchain][contractName] = contractAddress; + } + } + } + } + + getContractAddress(blockchain, contractName) { + return this.contracts[blockchain][contractName]; + } + + updateContractAddress(blockchain, contractName, contractAddress) { + this.contracts[blockchain][contractName] = contractAddress; + } + + async getBlock(blockchain, tag) { + const provider = this._getRandomProvider(blockchain); + return provider.getBlock(tag); + } + + async getPastEvents(blockchain, contractNames, eventsToFilter, lastCheckedBlock, currentBlock) { + const maxBlocksToSync = await this._getMaxNumberOfHistoricalBlocksForSync(blockchain); + let fromBlock = + currentBlock - lastCheckedBlock > maxBlocksToSync ? currentBlock : lastCheckedBlock + 1; + const eventsMissed = currentBlock - lastCheckedBlock > maxBlocksToSync; + if (eventsMissed) { + return { + events: [], + lastCheckedBlock: currentBlock, + eventsMissed, + }; + } + + const contractAddresses = []; + const topics = []; + const addressToContractNameMap = {}; + + for (const contractName of contractNames) { + const contractAddress = this.contracts[blockchain][contractName]; + + if (!contractAddress) { + continue; + } + + const provider = this._getRandomProvider(blockchain); + const contract = new ethers.Contract(contractAddress, ABIs[contractName], provider); + const contractTopics = []; + for (const filterName in contract.filters) { + if (!eventsToFilter.includes(filterName)) { + continue; + } + const filter = contract.filters[filterName]().topics[0]; + contractTopics.push(filter); + } + + if (contractTopics.length > 0) { + contractAddresses.push(contract.address); + topics.push(...contractTopics); + addressToContractNameMap[contract.address.toLowerCase()] = contractName; + } + } + + const events = []; + let toBlock = currentBlock; + try { + while (fromBlock <= currentBlock) { + toBlock = Math.min( + fromBlock + MAXIMUM_NUMBERS_OF_BLOCKS_TO_FETCH - 1, + currentBlock, + ); + + const fromBlockParam = ethers.BigNumber.from(fromBlock) + .toHexString() + .replace(/^0x0+/, '0x'); + const toBlockParam = ethers.BigNumber.from(toBlock) + .toHexString() + .replace(/^0x0+/, '0x'); + const provider = this._getRandomProvider(blockchain); + const newLogs = await provider.send('eth_getLogs', [ + { + address: contractAddresses, + fromBlock: fromBlockParam, + toBlock: toBlockParam, + topics: [topics], + }, + ]); + + for (const log of newLogs) { + const contractName = addressToContractNameMap[log.address]; + const contractInterface = new ethers.utils.Interface(ABIs[contractName]); + + try { + const parsedLog = contractInterface.parseLog(log); + events.push({ + blockchain, + contract: contractName, + contractAddress: log.address, + event: parsedLog.name, + data: JSON.stringify( + Object.fromEntries( + Object.entries(parsedLog.args).map(([k, v]) => [ + k, + ethers.BigNumber.isBigNumber(v) ? v.toString() : v, + ]), + ), + ), + blockNumber: parseInt(log.blockNumber, 16), + transactionIndex: parseInt(log.transactionIndex, 16), + logIndex: parseInt(log.logIndex, 16), + }); + } catch (error) { + this.logger.warn( + `Failed to parse log for contract: ${contractName}. Error: ${error.message}`, + ); + } + } + + fromBlock = toBlock + 1; + } + } catch (error) { + this.logger.warn( + `Unable to process block range from: ${fromBlock} to: ${toBlock} on blockchain: ${blockchain}. Error: ${error.message}`, + ); + } + + return { + events, + eventsMissed, + }; + } + + async _getMaxNumberOfHistoricalBlocksForSync(blockchain) { + if (!this.maxNumberOfHistoricalBlocksForSync) { + if ( + [NODE_ENVIRONMENTS.DEVELOPMENT, NODE_ENVIRONMENTS.TEST].includes( + process.env.NODE_ENV, + ) + ) { + this.maxNumberOfHistoricalBlocksForSync = Infinity; + } else { + const blockTimeMillis = await this._getBlockTimeMillis(blockchain); + + this.maxNumberOfHistoricalBlocksForSync = Math.round( + MAX_BLOCKCHAIN_EVENT_SYNC_OF_HISTORICAL_BLOCKS_IN_MILLS / blockTimeMillis, + ); + } + } + return this.maxNumberOfHistoricalBlocksForSync; + } + + async _getBlockTimeMillis(blockchain, blockRange = 1000) { + const latestBlock = await this.getBlock(blockchain); + const olderBlock = await this.getBlock(blockchain, latestBlock.number - blockRange); + + const timeDiffMillis = (latestBlock.timestamp - olderBlock.timestamp) * 1000; + return timeDiffMillis / blockRange; + } +} + +export default OtEthers; diff --git a/src/modules/blockchain/blockchain-module-manager.js b/src/modules/blockchain/blockchain-module-manager.js index 1d8f9c755c..9e6f691ea4 100644 --- a/src/modules/blockchain/blockchain-module-manager.js +++ b/src/modules/blockchain/blockchain-module-manager.js @@ -5,6 +5,16 @@ class BlockchainModuleManager extends BaseModuleManager { return 'blockchain'; } + callImplementationFunction(blockchain, functionName, args = []) { + if (blockchain) { + if (this.getImplementation(blockchain)) { + return this.getImplementation(blockchain).module[functionName](...args); + } + } else { + return this.getImplementation().module[functionName](...args); + } + } + initializeTransactionQueues(blockchain, concurrency) { return this.callImplementationFunction(blockchain, 'getTotalTransactionQueueLength', [ concurrency, @@ -32,6 +42,10 @@ class BlockchainModuleManager extends BaseModuleManager { ]); } + getContractAddress(blockchain, contractName) { + return this.callImplementationFunction(blockchain, 'getContractAddress', [contractName]); + } + setContractCallCache(blockchain, contractName, functionName, value) { return this.callImplementationFunction(blockchain, 'setContractCallCache', [ contractName, @@ -82,41 +96,34 @@ class BlockchainModuleManager extends BaseModuleManager { return this.callImplementationFunction(blockchain, 'restartService'); } - async getMinProofWindowOffsetPerc(blockchain) { - return this.callImplementationFunction(blockchain, 'getMinProofWindowOffsetPerc'); - } - - async getMaxProofWindowOffsetPerc(blockchain) { - return this.callImplementationFunction(blockchain, 'getMaxProofWindowOffsetPerc'); - } - - async generatePseudorandomUint8(blockchain, assetCreator, blockNumber, blockTimestamp, limit) { - return this.callImplementationFunction(blockchain, 'generatePseudorandomUint8', [ - assetCreator, - blockNumber, - blockTimestamp, - limit, - ]); - } - - async getAssertionIdByIndex(blockchain, assetContractAddress, tokenId, index) { - return this.callImplementationFunction(blockchain, 'getAssertionIdByIndex', [ - assetContractAddress, - tokenId, + async getKnowledgeCollectionMerkleRootByIndex( + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, + index, + ) { + return this.callImplementationFunction(blockchain, 'getCollectionMerkleRootByIndex', [ + assetStorageContractAddress, + knowledgeCollectionId, index, ]); } - async getLatestAssertionId(blockchain, assetContractAddress, tokenId) { - return this.callImplementationFunction(blockchain, 'getLatestAssertionId', [ - assetContractAddress, - tokenId, - ]); + async getKnowledgeCollectionLatestMerkleRoot( + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, + ) { + return this.callImplementationFunction( + blockchain, + 'getKnowledgeCollectionLatestMerkleRoot', + [assetStorageContractAddress, knowledgeCollectionId], + ); } - async getLatestTokenId(blockchain, assetContractAddress) { - return this.callImplementationFunction(blockchain, 'getLatestTokenId', [ - assetContractAddress, + async getLatestKnowledgeCollectionId(blockchain, assetStorageContractAddress) { + return this.callImplementationFunction(blockchain, 'getLatestKnowledgeCollectionId', [ + assetStorageContractAddress, ]); } @@ -124,22 +131,33 @@ class BlockchainModuleManager extends BaseModuleManager { return this.callImplementationFunction(blockchain, 'getAssetStorageContractAddresses'); } - async getAssertionIds(blockchain, assetContractAddress, tokenId) { - return this.callImplementationFunction(blockchain, 'getAssertionIds', [ - assetContractAddress, - tokenId, + async getKnowledgeCollectionMerkleRoots( + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, + ) { + return this.callImplementationFunction(blockchain, 'getKnowledgeCollectionMerkleRoots', [ + assetStorageContractAddress, + knowledgeCollectionId, ]); } - async getKnowledgeAssetOwner(blockchain, assetContractAddress, tokenId) { - return this.callImplementationFunction(blockchain, 'getKnowledgeAssetOwner', [ - assetContractAddress, - tokenId, - ]); - } + // async getKnowledgeAssetOwner(blockchain, assetContractAddress, tokenId) { + // return this.callImplementationFunction(blockchain, 'getKnowledgeAssetOwner', [ + // assetContractAddress, + // tokenId, + // ]); + // } - async getUnfinalizedAssertionId(blockchain, tokenId) { - return this.callImplementationFunction(blockchain, 'getUnfinalizedState', [tokenId]); + async getLatestMerkleRootPublisher( + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, + ) { + return this.callImplementationFunction(blockchain, 'getLatestMerkleRootPublisher', [ + assetStorageContractAddress, + knowledgeCollectionId, + ]); } async getShardingTableHead(blockchain) { @@ -157,107 +175,16 @@ class BlockchainModuleManager extends BaseModuleManager { ]); } - async getTransaction(blockchain, transactionHash) { - return this.callImplementationFunction(blockchain, 'getTransaction', [transactionHash]); - } - - async getAllPastEvents( - blockchain, - contractName, - eventsToFilter, - lastCheckedBlock, - lastCheckedTimestamp, - currentBlock, - ) { - return this.callImplementationFunction(blockchain, 'getAllPastEvents', [ - blockchain, - contractName, - eventsToFilter, - lastCheckedBlock, - lastCheckedTimestamp, - currentBlock, - ]); - } - - toBigNumber(blockchain, value) { - return this.callImplementationFunction(blockchain, 'toBigNumber', [value]); - } - - keccak256(blockchain, bytesLikeData) { - return this.callImplementationFunction(blockchain, 'keccak256', [bytesLikeData]); - } - - sha256(blockchain, bytesLikeData) { - return this.callImplementationFunction(blockchain, 'sha256', [bytesLikeData]); - } - - encodePacked(blockchain, types, values) { - return this.callImplementationFunction(blockchain, 'encodePacked', [types, values]); - } - - convertAsciiToHex(blockchain, string) { - return this.callImplementationFunction(blockchain, 'convertAsciiToHex', [string]); - } - - convertHexToAscii(blockchain, hexString) { - return this.callImplementationFunction(blockchain, 'convertHexToAscii', [hexString]); - } - - convertBytesToUint8Array(blockchain, bytesLikeData) { - return this.callImplementationFunction(blockchain, 'convertBytesToUint8Array', [ - bytesLikeData, + async getKnowledgeCollectionSize(blockchain, knowledgeCollectionId) { + return this.callImplementationFunction(blockchain, 'getKnowledgeCollectionSize', [ + knowledgeCollectionId, ]); } - convertToWei(blockchain, value, fromUnit) { - return this.callImplementationFunction(blockchain, 'convertToWei', [value, fromUnit]); - } - - convertFromWei(blockchain, value, toUnit) { - return this.callImplementationFunction(blockchain, 'convertFromWei', [value, toUnit]); - } - - async isCommitWindowOpen(blockchain, agreementId, epoch, stateIndex) { - return this.callImplementationFunction(blockchain, 'isCommitWindowOpen', [ - agreementId, - epoch, - stateIndex, - ]); - } - - async isUpdateCommitWindowOpen(blockchain, agreementId, epoch, latestStateIndex) { - return this.callImplementationFunction(blockchain, 'isUpdateCommitWindowOpen', [ - agreementId, - epoch, - latestStateIndex, - ]); - } - - async getTopCommitSubmissions(blockchain, agreementId, epoch, latestStateIndex) { - return this.callImplementationFunction(blockchain, 'getTopCommitSubmissions', [ - agreementId, - epoch, - latestStateIndex, - ]); - } - - async getAgreementData(blockchain, agreementId) { - return this.callImplementationFunction(blockchain, 'getAgreementData', [agreementId]); - } - - async getAssertionSize(blockchain, assertionid) { - return this.callImplementationFunction(blockchain, 'getAssertionSize', [assertionid]); - } - - async getAssertionTriplesNumber(blockchain, assertionid) { - return this.callImplementationFunction(blockchain, 'getAssertionTriplesNumber', [ - assertionid, - ]); - } - - async getAssertionChunksNumber(blockchain, assertionid) { - return this.callImplementationFunction(blockchain, 'getAssertionChunksNumber', [ - assertionid, + async getKnowledgeAssetsRange(blockchain, assetStorageContractAddress, knowledgeCollectionId) { + return this.callImplementationFunction(blockchain, 'getKnowledgeAssetsRange', [ + assetStorageContractAddress, + knowledgeCollectionId, ]); } @@ -275,110 +202,6 @@ class BlockchainModuleManager extends BaseModuleManager { ); } - async getAssertionData(blockchain, assertionid) { - return this.callImplementationFunction(blockchain, 'getAssertionData', [assertionid]); - } - - submitCommit( - blockchain, - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - latestStateIndex, - callback, - gasPrice, - ) { - return this.callImplementationFunction(blockchain, 'submitCommit', [ - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - latestStateIndex, - callback, - gasPrice, - ]); - } - - submitUpdateCommit( - blockchain, - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - callback, - gasPrice, - ) { - return this.callImplementationFunction(blockchain, 'submitUpdateCommit', [ - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - callback, - gasPrice, - ]); - } - - async isProofWindowOpen(blockchain, agreementId, epoch, latestStateIndex) { - return this.callImplementationFunction(blockchain, 'isProofWindowOpen', [ - agreementId, - epoch, - latestStateIndex, - ]); - } - - async getChallenge(blockchain, assetContractAddress, tokenId, epoch, latestStateIndex) { - return this.callImplementationFunction(blockchain, 'getChallenge', [ - assetContractAddress, - tokenId, - epoch, - latestStateIndex, - ]); - } - - sendProof( - blockchain, - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - epoch, - proof, - chunkHash, - latestStateIndex, - callback, - gasPrice, - ) { - return this.callImplementationFunction(blockchain, 'sendProof', [ - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - epoch, - proof, - chunkHash, - latestStateIndex, - callback, - gasPrice, - ]); - } - async getMinimumStake(blockchain) { return this.callImplementationFunction(blockchain, 'getMinimumStake'); } @@ -387,60 +210,6 @@ class BlockchainModuleManager extends BaseModuleManager { return this.callImplementationFunction(blockchain, 'getMaximumStake'); } - async getR2(blockchain) { - return this.callImplementationFunction(blockchain, 'getR2'); - } - - async getR1(blockchain) { - return this.callImplementationFunction(blockchain, 'getR1'); - } - - async getR0(blockchain) { - return this.callImplementationFunction(blockchain, 'getR0'); - } - - async getFinalizationCommitsNumber(blockchain) { - return this.callImplementationFunction(blockchain, 'getFinalizationCommitsNumber'); - } - - async getUpdateCommitWindowDuration(blockchain) { - return this.callImplementationFunction(blockchain, 'getUpdateCommitWindowDuration'); - } - - async getCommitWindowDurationPerc(blockchain) { - return this.callImplementationFunction(blockchain, 'getCommitWindowDurationPerc'); - } - - async getEpochLength(blockchain) { - return this.callImplementationFunction(blockchain, 'getEpochLength'); - } - - async getProofWindowDurationPerc(blockchain) { - return this.callImplementationFunction(blockchain, 'getProofWindowDurationPerc'); - } - - async isHashFunction(blockchain, hashFunctionId) { - return this.callImplementationFunction(blockchain, 'isHashFunction', [hashFunctionId]); - } - - getScoreFunctionIds(blockchain) { - return this.callImplementationFunction(blockchain, 'getScoreFunctionIds'); - } - - async getLog2PLDSFParams(blockchain) { - return this.callImplementationFunction(blockchain, 'getLog2PLDSFParams'); - } - - callImplementationFunction(blockchain, functionName, args = []) { - if (blockchain) { - if (this.getImplementation(blockchain)) { - return this.getImplementation(blockchain).module[functionName](...args); - } - } else { - return this.getImplementation().module[functionName](...args); - } - } - async getLatestBlock(blockchain) { return this.callImplementationFunction(blockchain, 'getLatestBlock'); } @@ -449,28 +218,6 @@ class BlockchainModuleManager extends BaseModuleManager { return this.callImplementationFunction(blockchain, 'getBlockchainTimestamp'); } - getBlockTimeMillis(blockchain) { - return this.callImplementationFunction(blockchain, 'getBlockTimeMillis'); - } - - async hasPendingUpdate(blockchain, tokenId) { - return this.callImplementationFunction(blockchain, 'hasPendingUpdate', [tokenId]); - } - - async getAgreementScoreFunctionId(blockchain, agreementId) { - return this.callImplementationFunction(blockchain, 'getAgreementScoreFunctionId', [ - agreementId, - ]); - } - - convertUint8ArrayToHex(blockchain, uint8Array) { - return this.callImplementationFunction(blockchain, 'convertUint8ArrayToHex', [uint8Array]); - } - - async getLinearSumParams(blockchain) { - return this.callImplementationFunction(blockchain, 'getLinearSumParams'); - } - async getParanetMetadata(blockchain, paranetId) { return this.callImplementationFunction(blockchain, 'getParanetMetadata', [paranetId]); } @@ -489,26 +236,51 @@ class BlockchainModuleManager extends BaseModuleManager { ]); } - async getKnowledgeAssetLocatorFromParanetId(blockchain, paranetId) { - return this.callImplementationFunction( - blockchain, - 'getKnowledgeAssetLocatorFromParanetId', - [paranetId], - ); - } - async paranetExists(blockchain, paranetId) { return this.callImplementationFunction(blockchain, 'paranetExists', [paranetId]); } - async isParanetKnowledgeAsset(blockchain, knowledgeAssetId) { - return this.callImplementationFunction(blockchain, 'isParanetKnowledgeAsset', [ - knowledgeAssetId, + async isCuratedNode(blockchain, paranetId, identityId) { + return this.callImplementationFunction(blockchain, 'isCuratedNode', [ + paranetId, + identityId, ]); } - async getParanetId(blockchain, knowledgeAssetId) { - return this.callImplementationFunction(blockchain, 'getParanetId', [knowledgeAssetId]); + async getNodesAccessPolicy(blockchain, paranetId) { + return this.callImplementationFunction(blockchain, 'getNodesAccessPolicy', [paranetId]); + } + + async getParanetCuratedNodes(blockchain, paranetId) { + return this.callImplementationFunction(blockchain, 'getParanetCuratedNodes', [paranetId]); + } + + async getNodeId(blockchain, identityId) { + return this.callImplementationFunction(blockchain, 'getNodeId', [identityId]); + } + + async signMessage(blockchain, messageHash) { + return this.callImplementationFunction(blockchain, 'signMessage', [messageHash]); + } + + async getStakeWeightedAverageAsk(blockchain) { + return this.callImplementationFunction(blockchain, 'getStakeWeightedAverageAsk', []); + } + + async getTimeUntilNextEpoch(blockchain) { + return this.callImplementationFunction(blockchain, 'getTimeUntilNextEpoch', []); + } + + async getEpochLength(blockchain) { + return this.callImplementationFunction(blockchain, 'getEpochLength', []); + } + + // SUPPORT FOR OLD CONTRACTS + async getLatestAssertionId(blockchain, assetContractAddress, tokenId) { + return this.callImplementationFunction(blockchain, 'getLatestAssertionId', [ + assetContractAddress, + tokenId, + ]); } } diff --git a/src/modules/blockchain/implementation/base/base-service.js b/src/modules/blockchain/implementation/base/base-service.js index c6dd518cdd..57dbcc6e98 100644 --- a/src/modules/blockchain/implementation/base/base-service.js +++ b/src/modules/blockchain/implementation/base/base-service.js @@ -1,5 +1,4 @@ import Web3Service from '../web3-service.js'; -import { BLOCK_TIME_MILLIS } from '../../../../constants/constants.js'; class BaseService extends Web3Service { constructor(ctx) { @@ -9,17 +8,9 @@ class BaseService extends Web3Service { this.tracTicker = 'TRAC'; } - getBlockTimeMillis() { - return BLOCK_TIME_MILLIS.BASE; - } - async getGasPrice() { return this.provider.getGasPrice(); } - - async getAgreementScoreFunctionId() { - return 2; - } } export default BaseService; diff --git a/src/modules/blockchain/implementation/gnosis/gnosis-service.js b/src/modules/blockchain/implementation/gnosis/gnosis-service.js index 5a83949d5b..30ea45e3f4 100644 --- a/src/modules/blockchain/implementation/gnosis/gnosis-service.js +++ b/src/modules/blockchain/implementation/gnosis/gnosis-service.js @@ -1,10 +1,7 @@ import axios from 'axios'; +import ethers from 'ethers'; import Web3Service from '../web3-service.js'; -import { - BLOCK_TIME_MILLIS, - GNOSIS_DEFAULT_GAS_PRICE, - NODE_ENVIRONMENTS, -} from '../../../../constants/constants.js'; +import { GNOSIS_DEFAULT_GAS_PRICE, NODE_ENVIRONMENTS } from '../../../../constants/constants.js'; class GnosisService extends Web3Service { constructor(ctx) { @@ -13,18 +10,14 @@ class GnosisService extends Web3Service { this.baseTokenTicker = 'GNO'; this.tracTicker = 'TRAC'; - this.defaultGasPrice = this.convertToWei( + this.defaultGasPrice = ethers.utils.parseUnits( process.env.NODE_ENV === NODE_ENVIRONMENTS.MAINNET - ? GNOSIS_DEFAULT_GAS_PRICE.MAINNET - : GNOSIS_DEFAULT_GAS_PRICE.TESTNET, + ? GNOSIS_DEFAULT_GAS_PRICE.MAINNET.toString() + : GNOSIS_DEFAULT_GAS_PRICE.TESTNET.toString(), 'gwei', ); } - getBlockTimeMillis() { - return BLOCK_TIME_MILLIS.GNOSIS; - } - async getGasPrice() { let gasPrice; @@ -34,7 +27,7 @@ class GnosisService extends Web3Service { // returns gwei gasPrice = Number(response.data.average); this.logger.debug(`Gas price from Gnosis oracle link: ${gasPrice} gwei`); - gasPrice = this.convertToWei(gasPrice, 'gwei'); + gasPrice = ethers.utils.parseUnits(gasPrice.toString(), 'gwei'); } else if (response?.data?.result) { // returns wei gasPrice = Number(response.data.result, 10); @@ -65,10 +58,6 @@ class GnosisService extends Web3Service { } return false; } - - async getAgreementScoreFunctionId() { - return 2; - } } export default GnosisService; diff --git a/src/modules/blockchain/implementation/hardhat/hardhat-service.js b/src/modules/blockchain/implementation/hardhat/hardhat-service.js index 5a89c03a27..d6911591c5 100644 --- a/src/modules/blockchain/implementation/hardhat/hardhat-service.js +++ b/src/modules/blockchain/implementation/hardhat/hardhat-service.js @@ -1,4 +1,4 @@ -import { BLOCK_TIME_MILLIS } from '../../../../constants/constants.js'; +import ethers from 'ethers'; import Web3Service from '../web3-service.js'; class HardhatService extends Web3Service { @@ -13,20 +13,12 @@ class HardhatService extends Web3Service { return latestBlock.timestamp; } - getBlockTimeMillis() { - return BLOCK_TIME_MILLIS.HARDHAT; - } - async providerReady() { return this.provider.ready; } async getGasPrice() { - return this.convertToWei(20, 'wei'); - } - - async getAgreementScoreFunctionId() { - return 2; + return ethers.utils.parseUnits('20', 'wei'); } } diff --git a/src/modules/blockchain/implementation/ot-parachain/ot-parachain-service.js b/src/modules/blockchain/implementation/ot-parachain/ot-parachain-service.js index 9f4e15e51f..6d065b6305 100644 --- a/src/modules/blockchain/implementation/ot-parachain/ot-parachain-service.js +++ b/src/modules/blockchain/implementation/ot-parachain/ot-parachain-service.js @@ -1,10 +1,6 @@ import { ApiPromise, WsProvider, HttpProvider } from '@polkadot/api'; import { ethers } from 'ethers'; -import { - BLOCK_TIME_MILLIS, - NEURO_DEFAULT_GAS_PRICE, - NODE_ENVIRONMENTS, -} from '../../../../constants/constants.js'; +import { NEURO_DEFAULT_GAS_PRICE, NODE_ENVIRONMENTS } from '../../../../constants/constants.js'; import Web3Service from '../web3-service.js'; const NATIVE_TOKEN_DECIMALS = 12; @@ -135,7 +131,8 @@ class OtParachainService extends Web3Service { process.env.NODE_ENV === NODE_ENVIRONMENTS.MAINNET ? NEURO_DEFAULT_GAS_PRICE.MAINNET : NEURO_DEFAULT_GAS_PRICE.TESTNET; - return this.convertToWei(defaultGasPrice, 'wei'); + + return ethers.utils.parseUnits(defaultGasPrice.toString(), 'wei'); } } @@ -174,10 +171,6 @@ class OtParachainService extends Web3Service { return nativeBalance / 10 ** NATIVE_TOKEN_DECIMALS; } - getBlockTimeMillis() { - return BLOCK_TIME_MILLIS.OTP; - } - getValidOperationalWallets() { const wallets = []; this.config.operationalWallets.forEach((wallet) => { diff --git a/src/modules/blockchain/implementation/web3-service-validator.js b/src/modules/blockchain/implementation/web3-service-validator.js index e46699916a..c94b4144e3 100644 --- a/src/modules/blockchain/implementation/web3-service-validator.js +++ b/src/modules/blockchain/implementation/web3-service-validator.js @@ -8,26 +8,6 @@ class Web3ServiceValidator { } return true; } - - static getAgreementDataValidator(result) { - if (!result) { - return false; - } - const agreementData = { - startTime: result['0'].toNumber(), - epochsNumber: result['1'], - epochLength: result['2'].toNumber(), - scoreFunctionId: result['4'][0], - proofWindowOffsetPerc: result['4'][1], - }; - return !( - agreementData.startTime === 0 && - agreementData.epochsNumber === 0 && - agreementData.epochLength === 0 && - agreementData.scoreFunctionId === 0 && - agreementData.proofWindowOffsetPerc === 0 - ); - } } export default Web3ServiceValidator; diff --git a/src/modules/blockchain/implementation/web3-service.js b/src/modules/blockchain/implementation/web3-service.js index 76b5148913..34149490ef 100644 --- a/src/modules/blockchain/implementation/web3-service.js +++ b/src/modules/blockchain/implementation/web3-service.js @@ -3,18 +3,15 @@ import { ethers, BigNumber } from 'ethers'; import axios from 'axios'; import async from 'async'; import { setTimeout as sleep } from 'timers/promises'; -import { createRequire } from 'module'; import { SOLIDITY_ERROR_STRING_PREFIX, SOLIDITY_PANIC_CODE_PREFIX, SOLIDITY_PANIC_REASONS, ZERO_PREFIX, - MAXIMUM_NUMBERS_OF_BLOCKS_TO_FETCH, TRANSACTION_QUEUE_CONCURRENCY, TRANSACTION_POLLING_TIMEOUT_MILLIS, TRANSACTION_CONFIRMATIONS, - BLOCK_TIME_MILLIS, WS_RPC_PROVIDER_PRIORITY, HTTP_RPC_PROVIDER_PRIORITY, FALLBACK_PROVIDER_QUORUM, @@ -25,46 +22,10 @@ import { CONTRACT_FUNCTION_PRIORITY, TRANSACTION_PRIORITY, CONTRACT_FUNCTION_GAS_LIMIT_INCREASE_FACTORS, - MAX_BLOCKCHAIN_EVENT_SYNC_OF_HISTORICAL_BLOCKS_IN_MILLS, + ABIs, } from '../../../constants/constants.js'; import Web3ServiceValidator from './web3-service-validator.js'; -const require = createRequire(import.meta.url); - -const ABIs = { - ContentAsset: require('dkg-evm-module/abi/ContentAsset.json'), - ContentAssetStorage: require('dkg-evm-module/abi/ContentAssetStorageV2.json'), - AssertionStorage: require('dkg-evm-module/abi/AssertionStorage.json'), - Staking: require('dkg-evm-module/abi/Staking.json'), - StakingStorage: require('dkg-evm-module/abi/StakingStorage.json'), - Token: require('dkg-evm-module/abi/Token.json'), - HashingProxy: require('dkg-evm-module/abi/HashingProxy.json'), - Hub: require('dkg-evm-module/abi/Hub.json'), - IdentityStorage: require('dkg-evm-module/abi/IdentityStorage.json'), - Log2PLDSF: require('dkg-evm-module/abi/Log2PLDSF.json'), - ParametersStorage: require('dkg-evm-module/abi/ParametersStorage.json'), - Profile: require('dkg-evm-module/abi/Profile.json'), - ProfileStorage: require('dkg-evm-module/abi/ProfileStorage.json'), - ScoringProxy: require('dkg-evm-module/abi/ScoringProxy.json'), - ServiceAgreementV1: require('dkg-evm-module/abi/ServiceAgreementV1.json'), - CommitManagerV1: require('dkg-evm-module/abi/CommitManagerV2.json'), - CommitManagerV1U1: require('dkg-evm-module/abi/CommitManagerV2U1.json'), - ProofManagerV1: require('dkg-evm-module/abi/ProofManagerV1.json'), - ProofManagerV1U1: require('dkg-evm-module/abi/ProofManagerV1U1.json'), - ShardingTable: require('dkg-evm-module/abi/ShardingTableV2.json'), - ShardingTableStorage: require('dkg-evm-module/abi/ShardingTableStorageV2.json'), - ServiceAgreementStorageProxy: require('dkg-evm-module/abi/ServiceAgreementStorageProxy.json'), - UnfinalizedStateStorage: require('dkg-evm-module/abi/UnfinalizedStateStorage.json'), - LinearSum: require('dkg-evm-module/abi/LinearSum.json'), - ParanetsRegistry: require('dkg-evm-module/abi/ParanetsRegistry.json'), - ParanetKnowledgeAssetsRegistry: require('dkg-evm-module/abi/ParanetKnowledgeAssetsRegistry.json'), -}; - -const SCORING_FUNCTIONS = { - 1: 'Log2PLDSF', - 2: 'LinearSum', -}; - class Web3Service { async initialize(config, logger) { this.config = config; @@ -72,7 +33,6 @@ class Web3Service { this.contractCallCache = {}; await this.initializeWeb3(); this.initializeTransactionQueues(); - this.startBlock = await this.getBlockNumber(); await this.initializeContracts(); this.initializeProviderDebugging(); @@ -81,7 +41,7 @@ class Web3Service { initializeTransactionQueues(concurrency = TRANSACTION_QUEUE_CONCURRENCY) { this.transactionQueues = {}; for (const operationalWallet of this.operationalWallets) { - const transactionQueue = async.queue((args, cb) => { + const transactionQueue = async.priorityQueue((args, cb) => { const { contractInstance, functionName, transactionArgs, gasPrice } = args; this._executeContractFunction( contractInstance, @@ -104,33 +64,18 @@ class Web3Service { queueTransaction(contractInstance, functionName, transactionArgs, callback, gasPrice) { const selectedQueue = this.selectTransactionQueue(); - const priority = CONTRACT_FUNCTION_PRIORITY[functionName] ?? TRANSACTION_PRIORITY.REGULAR; + const priority = CONTRACT_FUNCTION_PRIORITY[functionName] ?? TRANSACTION_PRIORITY.MEDIUM; this.logger.info(`Calling ${functionName} with priority: ${priority}`); - switch (priority) { - case TRANSACTION_PRIORITY.HIGH: - selectedQueue.unshift( - { - contractInstance, - functionName, - transactionArgs, - gasPrice, - }, - callback, - ); - break; - case TRANSACTION_PRIORITY.REGULAR: - default: - selectedQueue.push( - { - contractInstance, - functionName, - transactionArgs, - gasPrice, - }, - callback, - ); - break; - } + selectedQueue.push( + { + contractInstance, + functionName, + transactionArgs, + gasPrice, + }, + priority, + callback, + ); } removeTransactionQueue(walletAddress) { @@ -182,6 +127,11 @@ class Web3Service { return wallets; } + getRandomOperationalWallet() { + const randomIndex = Math.floor(Math.random() * this.operationalWallets.length); + return this.operationalWallets[randomIndex]; + } + async initializeWeb3() { const providers = []; for (const rpcEndpoint of this.config.rpcEndpoints) { @@ -235,25 +185,22 @@ class Web3Service { } } - getABIs() { - return ABIs; - } - async initializeContracts() { + this.contracts = {}; this.contractAddresses = {}; this.logger.info( `Initializing contracts with hub contract address: ${this.config.hubContractAddress}`, ); - this.HubContract = new ethers.Contract( + this.contracts.Hub = new ethers.Contract( this.config.hubContractAddress, - this.getABIs().Hub, + ABIs.Hub, this.operationalWallets[0], ); - this.contractAddresses[this.config.hubContractAddress] = this.HubContract; + this.contractAddresses[this.config.hubContractAddress] = this.contracts.Hub; const contractsArray = await this.callContractFunction( - this.HubContract, + this.contracts.Hub, 'getAllContracts', [], ); @@ -262,19 +209,9 @@ class Web3Service { this.initializeContract(contractName, contractAddress); }); - this.scoringFunctionsContracts = {}; - const scoringFunctionsArray = await this.callContractFunction( - this.ScoringProxyContract, - 'getAllScoreFunctions', - [], - ); - scoringFunctionsArray.forEach(([id, scoringContractAddress]) => { - this.initializeScoringContract(id, scoringContractAddress); - }); - this.assetStorageContracts = {}; const assetStoragesArray = await this.callContractFunction( - this.HubContract, + this.contracts.Hub, 'getAllAssetStorages', [], ); @@ -354,30 +291,13 @@ class Web3Service { initializeAssetStorageContract(assetStorageAddress) { this.assetStorageContracts[assetStorageAddress.toLowerCase()] = new ethers.Contract( assetStorageAddress, - this.getABIs().ContentAssetStorage, + ABIs.KnowledgeCollectionStorage, this.operationalWallets[0], ); this.contractAddresses[assetStorageAddress] = this.assetStorageContracts[assetStorageAddress.toLowerCase()]; } - initializeScoringContract(id, contractAddress) { - const contractName = SCORING_FUNCTIONS[id]; - - if (this.getABIs()[contractName] != null) { - this.scoringFunctionsContracts[id] = new ethers.Contract( - contractAddress, - this.getABIs()[contractName], - this.operationalWallets[0], - ); - this.contractAddresses[contractAddress] = this.scoringFunctionsContracts[id]; - } else { - this.logger.trace( - `Skipping initialisation of contract with id: ${id}, address: ${contractAddress}`, - ); - } - } - setContractCallCache(contractName, functionName, value) { if (CACHED_FUNCTIONS[contractName]?.[functionName]) { const type = CACHED_FUNCTIONS[contractName][functionName]; @@ -405,20 +325,26 @@ class Web3Service { } initializeContract(contractName, contractAddress) { - if (this.getABIs()[contractName] != null) { - this[`${contractName}Contract`] = new ethers.Contract( + if (ABIs[contractName] != null) { + this.contracts[contractName] = new ethers.Contract( contractAddress, - this.getABIs()[contractName], + ABIs[contractName], this.operationalWallets[0], ); - this.contractAddresses[contractAddress] = this[`${contractName}Contract`]; - } else { - this.logger.trace( - `Skipping initialisation of contract: ${contractName}, address: ${contractAddress}`, - ); + this.contractAddresses[contractAddress] = this.contracts[contractName]; } } + getContractAddress(contractName) { + const contract = this.contracts[contractName]; + + if (!contract) { + return null; + } + + return contract.address; + } + async providerReady() { return this.provider.getNetwork(); } @@ -449,7 +375,7 @@ class Web3Service { } async getTokenBalance(publicKey) { - const tokenBalance = await this.callContractFunction(this.TokenContract, 'balanceOf', [ + const tokenBalance = await this.callContractFunction(this.contracts.Token, 'balanceOf', [ publicKey, ]); return Number(ethers.utils.formatEther(tokenBalance)); @@ -460,10 +386,6 @@ class Web3Service { return latestBlock.number; } - getBlockTimeMillis() { - return BLOCK_TIME_MILLIS.DEFAULT; - } - async getIdentityId() { if (this.identityId) { return this.identityId; @@ -471,10 +393,10 @@ class Web3Service { const promises = this.operationalWallets.map((wallet) => this.callContractFunction( - this.IdentityStorageContract, + this.contracts.IdentityStorage, 'getIdentityId', [wallet.address], - CONTRACTS.IDENTITY_STORAGE_CONTRACT, + CONTRACTS.IDENTITY_STORAGE, ).then((identityId) => [wallet.address, Number(identityId)]), ); const results = await Promise.all(promises); @@ -535,9 +457,9 @@ class Web3Service { } async createProfile(peerId) { - if (!this.config.sharesTokenName || !this.config.sharesTokenSymbol) { + if (!this.config.nodeName) { throw new Error( - 'Missing sharesTokenName and sharesTokenSymbol in blockchain configuration. Please add it and start the node again.', + 'Missing nodeName in blockchain configuration. Please add it and start the node again.', ); } @@ -549,23 +471,20 @@ class Web3Service { try { // eslint-disable-next-line no-await-in-loop await this._executeContractFunction( - this.ProfileContract, + this.contracts.Profile, 'createProfile', [ this.getManagementKey(), this.getPublicKeys().slice(1), - this.convertAsciiToHex(peerId), - this.config.sharesTokenName, - this.config.sharesTokenSymbol, + this.config.nodeName, + ethers.utils.hexlify(ethers.utils.toUtf8Bytes(peerId)), this.config.operatorFee, ], null, this.operationalWallets[0], ); this.logger.info( - `Profile created with name: ${this.config.sharesTokenName} and symbol: ${ - this.config.sharesTokenSymbol - }, wallet: ${ + `Profile created with name: ${this.config.nodeName}, wallet: ${ this.operationalWallets[0].address }, on blockchain ${this.getBlockchainId()}`, ); @@ -652,7 +571,7 @@ class Web3Service { this._decodeEstimateGasError(contractInstance, functionName, error, args); } - gasLimit = gasLimit ?? this.convertToWei(900, 'kwei'); + gasLimit = gasLimit ?? ethers.utils.parseUnits('900', 'kwei'); const gasLimitMultiplier = CONTRACT_FUNCTION_GAS_LIMIT_INCREASE_FACTORS[functionName] ?? 1; @@ -915,325 +834,141 @@ class Web3Service { return value.toString(); } - async getTransaction(transactionHash) { - return this.provider.getTransaction(transactionHash); - } - - async getAllPastEvents( - blockchainId, - contractName, - eventsToFilter, - lastCheckedBlock, - lastCheckedTimestamp, - currentBlock, - ) { - const contract = this[contractName]; - if (!contract) { - // this will happen when we have different set of contracts on different blockchains - // eg LinearSum contract is available on gnosis but not on NeuroWeb, so the node should not fetch events - // from LinearSum contract on NeuroWeb blockchain - return { - events: [], - lastCheckedBlock: currentBlock, - eventsMissed: false, - }; - } - - let fromBlock; - let eventsMissed = false; - if (this.startBlock - lastCheckedBlock > this.getMaxNumberOfHistoricalBlocksForSync()) { - fromBlock = this.startBlock; - eventsMissed = true; - } else { - fromBlock = lastCheckedBlock + 1; - } - - const topics = []; - for (const filterName in contract.filters) { - if (!eventsToFilter.includes(filterName)) continue; - const filter = contract.filters[filterName]().topics[0]; - topics.push(filter); - } - - const events = []; - let toBlock = currentBlock; - try { - while (fromBlock <= currentBlock) { - toBlock = Math.min( - fromBlock + MAXIMUM_NUMBERS_OF_BLOCKS_TO_FETCH - 1, - currentBlock, - ); - const newEvents = await this.processBlockRange( - fromBlock, - toBlock, - contract, - topics, - ); - newEvents.forEach((e) => events.push(...e)); - fromBlock = toBlock + 1; - } - } catch (error) { - this.logger.warn( - `Unable to process block range from: ${fromBlock} to: ${toBlock} for contract ${contractName} on blockchain: ${blockchainId}. Error: ${error.message}`, - ); - } - - return { - events: events.map((event) => ({ - contract: contractName, - event: event.event, - data: JSON.stringify( - Object.fromEntries( - Object.entries(event.args).map(([k, v]) => [ - k, - ethers.BigNumber.isBigNumber(v) ? v.toString() : v, - ]), - ), - ), - block: event.blockNumber, - blockchainId, - })), - lastCheckedBlock: toBlock, - eventsMissed, - }; - } - - getMaxNumberOfHistoricalBlocksForSync() { - if (!this.maxNumberOfHistoricalBlocksForSync) { - this.maxNumberOfHistoricalBlocksForSync = Math.round( - MAX_BLOCKCHAIN_EVENT_SYNC_OF_HISTORICAL_BLOCKS_IN_MILLS / this.getBlockTimeMillis(), - ); - } - return this.maxNumberOfHistoricalBlocksForSync; - } - - async processBlockRange(fromBlock, toBlock, contract, topics) { - const newEvents = await Promise.all( - topics.map((topic) => contract.queryFilter(topic, fromBlock, toBlock)), - ); - return newEvents; - } - - isOlderThan(timestamp, olderThanInMills) { - if (!timestamp) return true; - const timestampThirtyDaysInPast = new Date().getTime() - olderThanInMills; - return timestamp < timestampThirtyDaysInPast; - } - async isAssetStorageContract(contractAddress) { - return this.callContractFunction(this.HubContract, 'isAssetStorage(address)', [ + return this.callContractFunction(this.contracts.Hub, 'isAssetStorage(address)', [ contractAddress, ]); } - async getMinProofWindowOffsetPerc() { - return this.callContractFunction( - this.ParametersStorageContract, - 'minProofWindowOffsetPerc', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - } - - async getMaxProofWindowOffsetPerc() { - return this.callContractFunction( - this.ParametersStorageContract, - 'maxProofWindowOffsetPerc', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - } - - async generatePseudorandomUint8(assetCreator, blockNumber, blockTimestamp, limit) { - const encodedData = ethers.utils.encodePacked( - ['uint256', 'address', 'uint256'], - [blockTimestamp, assetCreator, blockNumber], - ); - const hash = ethers.utils.keccak256(encodedData); - const hashBigNumber = BigNumber.from(hash); - const hashModulo = hashBigNumber.mod(limit); - - return hashModulo.mod(256); - } - - async getAssertionIdByIndex(assetContractAddress, tokenId, index) { + async getKnowledgeCollectionMerkleRootByIndex( + assetStorageContractAddress, + knowledgeCollectionId, + index, + ) { const assetStorageContractInstance = - this.assetStorageContracts[assetContractAddress.toLowerCase()]; + this.assetStorageContracts[assetStorageContractAddress.toLowerCase()]; if (!assetStorageContractInstance) throw new Error('Unknown asset storage contract address'); - return this.callContractFunction(assetStorageContractInstance, 'getAssertionIdByIndex', [ - tokenId, + return this.callContractFunction(assetStorageContractInstance, 'getMerkleRootByIndex', [ + knowledgeCollectionId, index, ]); } - async getLatestAssertionId(assetContractAddress, tokenId) { + async getKnowledgeCollectionLatestMerkleRoot( + assetStorageContractAddress, + knowledgeCollectionId, + ) { const assetStorageContractInstance = - this.assetStorageContracts[assetContractAddress.toString().toLowerCase()]; + this.assetStorageContracts[assetStorageContractAddress.toString().toLowerCase()]; if (!assetStorageContractInstance) throw new Error('Unknown asset storage contract address'); - return this.callContractFunction(assetStorageContractInstance, 'getLatestAssertionId', [ - tokenId, + return this.callContractFunction(assetStorageContractInstance, 'getLatestMerkleRoot', [ + knowledgeCollectionId, ]); } - async getLatestTokenId(assetContractAddress) { + async getLatestKnowledgeCollectionId(assetStorageContractAddress) { const assetStorageContractInstance = - this.assetStorageContracts[assetContractAddress.toString().toLowerCase()]; + this.assetStorageContracts[assetStorageContractAddress.toString().toLowerCase()]; if (!assetStorageContractInstance) throw new Error('Unknown asset storage contract address'); - const lastTokenId = await this.callContractFunction( + const lastKnowledgeCollectionId = await this.callContractFunction( assetStorageContractInstance, - 'lastTokenId', + 'getLatestKnowledgeCollectionId', [], ); - return lastTokenId; + return lastKnowledgeCollectionId; } getAssetStorageContractAddresses() { return Object.keys(this.assetStorageContracts); } - async getAssertionIds(assetContractAddress, tokenId) { + async getKnowledgeCollectionMerkleRoots(assetStorageContractAddress, tokenId) { const assetStorageContractInstance = - this.assetStorageContracts[assetContractAddress.toString().toLowerCase()]; + this.assetStorageContracts[assetStorageContractAddress.toString().toLowerCase()]; if (!assetStorageContractInstance) throw new Error('Unknown asset storage contract address'); - return this.callContractFunction(assetStorageContractInstance, 'getAssertionIds', [ - tokenId, - ]); + return this.callContractFunction(assetStorageContractInstance, 'getMerkleRoots', [tokenId]); } - async getKnowledgeAssetOwner(assetContractAddress, tokenId) { + // async getKnowledgeAssetOwner(assetContractAddress, tokenId) { + // const assetStorageContractInstance = + // this.assetStorageContracts[assetContractAddress.toString().toLowerCase()]; + // if (!assetStorageContractInstance) + // throw new Error('Unknown asset storage contract address'); + + // return this.callContractFunction(assetStorageContractInstance, 'ownerOf', [tokenId]); + // } + + async getLatestMerkleRootPublisher(assetStorageContractAddress, knowledgeCollectionId) { const assetStorageContractInstance = - this.assetStorageContracts[assetContractAddress.toString().toLowerCase()]; + this.assetStorageContracts[assetStorageContractAddress.toString().toLowerCase()]; if (!assetStorageContractInstance) throw new Error('Unknown asset storage contract address'); - - return this.callContractFunction(assetStorageContractInstance, 'ownerOf', [tokenId]); - } - - async getUnfinalizedState(tokenId) { - return this.callContractFunction( - this.UnfinalizedStateStorageContract, - 'getUnfinalizedState', - [tokenId], - ); - } - - async getAgreementData(agreementId) { - const result = await this.callContractFunction( - this.ServiceAgreementStorageProxyContract, - 'getAgreementData', - [agreementId], - ); - if (!result) { - return null; - } - return { - startTime: result['0'].toNumber(), - epochsNumber: result['1'], - epochLength: result['2'].toNumber(), - tokenAmount: result['3'][0], - updateTokenAmount: result['3'][1], - scoreFunctionId: result['4'][0], - proofWindowOffsetPerc: result['4'][1], - }; - } - - async getAssertionSize(assertionId) { - const assertionSize = await this.callContractFunction( - this.AssertionStorageContract, - 'getAssertionSize', - [assertionId], - ); - return Number(assertionSize); - } - - async getAssertionTriplesNumber(assertionId) { - const assertionTriplesNumber = await this.callContractFunction( - this.AssertionStorageContract, - 'getAssertionTriplesNumber', - [assertionId], + const knowledgeCollectionPublisher = await this.callContractFunction( + assetStorageContractInstance, + 'getLatestMerkleRootPublisher', + [knowledgeCollectionId], ); - return Number(assertionTriplesNumber); + return knowledgeCollectionPublisher; } - async getAssertionChunksNumber(assertionId) { - const assertionChunksNumber = await this.callContractFunction( - this.AssertionStorageContract, - 'getAssertionChunksNumber', - [assertionId], + async getKnowledgeCollectionSize(assetStorageContractAddress, knowledgeCollectionId) { + const assetStorageContractInstance = + this.assetStorageContracts[assetStorageContractAddress.toString().toLowerCase()]; + if (!assetStorageContractInstance) + throw new Error('Unknown asset storage contract address'); + const knowledgeCollectionSize = await this.callContractFunction( + assetStorageContractInstance, + 'getByteSize', + [knowledgeCollectionId], ); - return Number(assertionChunksNumber); + return Number(knowledgeCollectionSize); } - async getAssertionData(assertionId) { - const assertionData = await this.callContractFunction( - this.AssertionStorageContract, - 'getAssertion', - [assertionId], + async getKnowledgeAssetsRange(assetStorageContractAddress, knowledgeCollectionId) { + const assetStorageContractInstance = + this.assetStorageContracts[assetStorageContractAddress.toString().toLowerCase()]; + if (!assetStorageContractInstance) + throw new Error('Unknown asset storage contract address'); + const knowledgeAssetsRange = await this.callContractFunction( + assetStorageContractInstance, + 'getKnowledgeAssetsRange', + [knowledgeCollectionId], ); return { - timestamp: Number(assertionData.timestamp), - size: Number(assertionData.size), - triplesNumber: Number(assertionData.triplesNumber), - chunksNumber: Number(assertionData.chunksNumber), + startTokenId: Number( + knowledgeAssetsRange[0] + .sub(BigNumber.from(knowledgeCollectionId - 1).mul('0x0f4240')) + .toString(), + ), + endTokenId: Number( + knowledgeAssetsRange[1] + .sub(BigNumber.from(knowledgeCollectionId - 1).mul('0x0f4240')) + .toString(), + ), + burned: knowledgeAssetsRange[2].map((burned) => + Number( + burned + .sub(BigNumber.from(knowledgeCollectionId - 1).mul('0x0f4240')) + .toString(), + ), + ), }; } - selectCommitManagerContract(latestStateIndex) { - return latestStateIndex === 0 - ? this.CommitManagerV1Contract - : this.CommitManagerV1U1Contract; - } - - async isCommitWindowOpen(agreementId, epoch, latestStateIndex) { - return this.callContractFunction( - this.selectCommitManagerContract(latestStateIndex), - 'isCommitWindowOpen', - [agreementId, epoch], - ); - } - - async isUpdateCommitWindowOpen(agreementId, epoch, stateIndex) { - return this.callContractFunction( - this.CommitManagerV1U1Contract, - 'isUpdateCommitWindowOpen', - [agreementId, epoch, stateIndex], - ); - } - - async getTopCommitSubmissions(agreementId, epoch, latestStateIndex) { - const args = - latestStateIndex === 0 ? [agreementId, epoch] : [agreementId, epoch, latestStateIndex]; - - const commits = await this.callContractFunction( - this.selectCommitManagerContract(latestStateIndex), - 'getTopCommitSubmissions', - args, - ); - - return commits - .filter((commit) => commit.identityId !== '0') - .map((commit) => ({ - prevIdentityId: commit.prevIdentityId, - identityId: commit.identityId, - nextIdentityId: commit.nextIdentityId, - score: commit.score, - })); - } - async getMinimumStake() { const minimumStake = await this.callContractFunction( - this.ParametersStorageContract, + this.contracts.ParametersStorage, 'minimumStake', [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, + CONTRACTS.PARAMETERS_STORAGE, ); return Number(ethers.utils.formatEther(minimumStake)); @@ -1241,175 +976,22 @@ class Web3Service { async getMaximumStake() { const maximumStake = await this.callContractFunction( - this.ParametersStorageContract, + this.contracts.ParametersStorage, 'maximumStake', [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, + CONTRACTS.PARAMETERS_STORAGE, ); return Number(ethers.utils.formatEther(maximumStake)); } - async getR2() { - const r2 = await this.callContractFunction( - this.ParametersStorageContract, - 'r2', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - return r2; - } - - async getR1() { - const r1 = await this.callContractFunction( - this.ParametersStorageContract, - 'r1', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - return r1; - } - - async getR0() { - const r0 = await this.callContractFunction( - this.ParametersStorageContract, - 'r0', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - return r0; - } - - async getFinalizationCommitsNumber() { - const finalizationCommitsNumber = await this.callContractFunction( - this.ParametersStorageContract, - 'finalizationCommitsNumber', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - return finalizationCommitsNumber; - } - - submitCommit( - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - latestStateIndex, - callback, - gasPrice, - ) { - const submitCommitArgs = [assetContractAddress, tokenId, keyword, hashFunctionId, epoch]; - let functionName = 'submitCommit((address,uint256,bytes,uint8,uint16))'; - if ( - closestNode !== undefined && - leftNeighborhoodEdge !== undefined && - rightNeighborhoodEdge !== undefined - ) { - submitCommitArgs.push(closestNode, leftNeighborhoodEdge, rightNeighborhoodEdge); - functionName = - 'submitCommit((address,uint256,bytes,uint8,uint16,uint72,uint72,uint72))'; - } - return this.queueTransaction( - this.selectCommitManagerContract(latestStateIndex), - functionName, - [submitCommitArgs], - callback, - gasPrice, - ); - } - - submitUpdateCommit( - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - closestNode, - leftNeighborhoodEdge, - rightNeighborhoodEdge, - epoch, - callback, - gasPrice, - ) { - const submitCommitArgs = [assetContractAddress, tokenId, keyword, hashFunctionId, epoch]; - let functionName = 'submitUpdateCommit((address,uint256,bytes,uint8,uint16))'; - if ( - closestNode !== undefined && - leftNeighborhoodEdge !== undefined && - rightNeighborhoodEdge !== undefined - ) { - submitCommitArgs.push(closestNode, leftNeighborhoodEdge, rightNeighborhoodEdge); - functionName = - 'submitUpdateCommit((address,uint256,bytes,uint8,uint16,uint72,uint72,uint72))'; - } - return this.queueTransaction( - this.CommitManagerV1U1Contract, - functionName, - [submitCommitArgs], - callback, - gasPrice, - ); - } - - selectProofManagerContract(latestStateIndex) { - return latestStateIndex === 0 ? this.ProofManagerV1Contract : this.ProofManagerV1U1Contract; - } - - async isProofWindowOpen(agreementId, epoch, latestStateIndex) { - return this.callContractFunction( - this.selectProofManagerContract(latestStateIndex), - 'isProofWindowOpen', - [agreementId, epoch], - ); - } - - async getChallenge(assetContractAddress, tokenId, epoch, latestStateIndex) { - const args = - latestStateIndex === 0 - ? [this.getPublicKeys()[0], assetContractAddress, tokenId, epoch] - : [assetContractAddress, tokenId, epoch]; - - const result = await this.callContractFunction( - this.selectProofManagerContract(latestStateIndex), - 'getChallenge', - args, - ); - - return { assertionId: result['0'], challenge: result['1'] }; - } - - sendProof( - assetContractAddress, - tokenId, - keyword, - hashFunctionId, - epoch, - proof, - chunkHash, - latestStateIndex, - callback, - gasPrice, - ) { - return this.queueTransaction( - this.selectProofManagerContract(latestStateIndex), - 'sendProof', - [[assetContractAddress, tokenId, keyword, hashFunctionId, epoch, proof, chunkHash]], - callback, - gasPrice, - ); - } - async getShardingTableHead() { - return this.callContractFunction(this.ShardingTableStorageContract, 'head', []); + return this.callContractFunction(this.contracts.ShardingTableStorage, 'head', []); } async getShardingTableLength() { const nodesCount = await this.callContractFunction( - this.ShardingTableStorageContract, + this.contracts.ShardingTableStorage, 'nodesCount', [], ); @@ -1418,7 +1000,7 @@ class Web3Service { async getShardingTablePage(startingIdentityId, nodesNum) { return this.callContractFunction( - this.ShardingTableContract, + this.contracts.ShardingTable, 'getShardingTable(uint72,uint72)', [startingIdentityId, nodesNum], ); @@ -1428,46 +1010,6 @@ class Web3Service { return this.getImplementationName(); } - toBigNumber(value) { - return ethers.BigNumber.from(value); - } - - keccak256(bytesLikeData) { - return ethers.utils.keccak256(bytesLikeData); - } - - sha256(bytesLikeData) { - return ethers.utils.sha256(bytesLikeData); - } - - encodePacked(types, values) { - return ethers.utils.solidityPack(types, values); - } - - convertUint8ArrayToHex(uint8Array) { - return ethers.utils.hexlify(uint8Array); - } - - convertAsciiToHex(string) { - return this.convertUint8ArrayToHex(ethers.utils.toUtf8Bytes(string)); - } - - convertHexToAscii(hexString) { - return ethers.utils.toUtf8String(hexString); - } - - convertBytesToUint8Array(bytesLikeData) { - return ethers.utils.arrayify(bytesLikeData); - } - - convertToWei(value, fromUnit = 'ether') { - return ethers.utils.parseUnits(value.toString(), fromUnit); - } - - convertFromWei(value, toUnit = 'ether') { - return ethers.utils.formatUnits(value, toUnit); - } - async healthCheck() { try { const gasPrice = await this.operationalWallets[0].getGasPrice(); @@ -1484,84 +1026,6 @@ class Web3Service { await this.initializeContracts(); } - async getUpdateCommitWindowDuration() { - const commitWindowDurationPerc = await this.callContractFunction( - this.ParametersStorageContract, - 'updateCommitWindowDuration', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - return Number(commitWindowDurationPerc); - } - - async getCommitWindowDurationPerc() { - const commitWindowDurationPerc = await this.callContractFunction( - this.ParametersStorageContract, - 'commitWindowDurationPerc', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - return Number(commitWindowDurationPerc); - } - - async getProofWindowDurationPerc() { - return this.callContractFunction( - this.ParametersStorageContract, - 'proofWindowDurationPerc', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - } - - async getEpochLength() { - const epochLength = await this.callContractFunction( - this.ParametersStorageContract, - 'epochLength', - [], - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - ); - return Number(epochLength); - } - - async isHashFunction(hashFunctionId) { - return this.callContractFunction(this.HashingProxyContract, 'isHashFunction(uint8)', [ - hashFunctionId, - ]); - } - - getScoreFunctionIds() { - return Object.keys(this.scoringFunctionsContracts); - } - - async getLog2PLDSFParams() { - const log2pldsfParams = await this.callContractFunction( - this.scoringFunctionsContracts[1], - 'getParameters', - [], - CONTRACTS.LOG2PLDSF_CONTRACT, - ); - - const params = {}; - params.distanceMappingCoefficient = log2pldsfParams['0']; - params.stakeMappingCoefficient = log2pldsfParams['1']; - - const paramNames = [ - 'multiplier', - 'logArgumentConstant', - 'a', - 'stakeExponent', - 'b', - 'c', - 'distanceExponent', - 'd', - ]; - log2pldsfParams['2'].forEach((val, index) => { - params[paramNames[index]] = val; - }); - - return params; - } - async getBlockchainTimestamp() { return Math.floor(Date.now() / 1000); } @@ -1572,83 +1036,54 @@ class Web3Service { return blockTimestamp; } - async hasPendingUpdate(tokenId) { - return this.callContractFunction(this.UnfinalizedStateStorageContract, 'hasPendingUpdate', [ - tokenId, - ]); - } - - async getAgreementScoreFunctionId(agreementId) { - return this.callContractFunction( - this.ServiceAgreementStorageProxyContract, - 'getAgreementScoreFunctionId', - [agreementId], - ); - } - - async getLinearSumParams() { - const linearSumParams = await this.callContractFunction( - this.scoringFunctionsContracts[2], - 'getParameters', - [], - CONTRACTS.LINEAR_SUM_CONTRACT, - ); - return { - distanceScaleFactor: BigNumber.from(linearSumParams[0]), - stakeScaleFactor: BigNumber.from(linearSumParams[1]), - w1: Number(linearSumParams[2]), - w2: Number(linearSumParams[3]), - }; - } - async getParanetKnowledgeAssetsCount(paranetId) { return this.callContractFunction( - this.ParanetsRegistryContract, + this.contracts.ParanetsRegistry, 'getKnowledgeAssetsCount', [paranetId], - CONTRACTS.PARANETS_REGISTRY_CONTRACT, + CONTRACTS.PARANETS_REGISTRY, ); } async getParanetKnowledgeAssetsWithPagination(paranetId, offset, limit) { return this.callContractFunction( - this.ParanetsRegistryContract, + this.contracts.ParanetsRegistry, 'getKnowledgeAssetsWithPagination', [paranetId, offset, limit], - CONTRACTS.PARANETS_REGISTRY_CONTRACT, + CONTRACTS.PARANETS_REGISTRY, ); } async getParanetMetadata(paranetId) { return this.callContractFunction( - this.ParanetsRegistryContract, + this.contracts.ParanetsRegistry, 'getParanetMetadata', [paranetId], - CONTRACTS.PARANETS_REGISTRY_CONTRACT, + CONTRACTS.PARANETS_REGISTRY, ); } - async getName(paranetId) { + async getParanetName(paranetId) { return this.callContractFunction( - this.ParanetsRegistryContract, + this.contracts.ParanetsRegistry, 'getName', [paranetId], - CONTRACTS.PARANETS_REGISTRY_CONTRACT, + CONTRACTS.PARANETS_REGISTRY, ); } async getDescription(paranetId) { return this.callContractFunction( - this.ParanetsRegistryContract, + this.contracts.ParanetsRegistry, 'getDescription', [paranetId], - CONTRACTS.PARANETS_REGISTRY_CONTRACT, + CONTRACTS.PARANETS_REGISTRY, ); } async getParanetKnowledgeAssetLocator(knowledgeAssetId) { const [knowledgeAssetStorageContract, kaTokenId] = await this.callContractFunction( - this.ParanetKnowledgeAssetsRegistryContract, + this.contracts.ParanetKnowledgeAssetsRegistry, 'getKnowledgeAssetLocator', [knowledgeAssetId], ); @@ -1657,41 +1092,73 @@ class Web3Service { return knowledgeAssetLocator; } - async getKnowledgeAssetLocatorFromParanetId(paranetId) { - const [paranetKAStorageContract, paranetKATokenId] = await this.callContractFunction( - this.ParanetsRegistryContract, - 'getParanetKnowledgeAssetLocator', - [paranetId], - ); - const tokenId = paranetKATokenId.toNumber(); - const knowledgeAssetLocator = { paranetKAStorageContract, tokenId }; - return knowledgeAssetLocator; - } - async paranetExists(paranetId) { return this.callContractFunction( - this.ParanetsRegistryContract, + this.contracts.ParanetsRegistry, 'paranetExists', [paranetId], - CONTRACTS.PARANETS_REGISTRY_CONTRACT, + CONTRACTS.PARANETS_REGISTRY, ); } - async getParanetId(knowledgeAssetId) { + async isCuratedNode(paranetId, identityId) { + return this.callContractFunction(this.contracts.ParanetsRegistry, 'isCuratedNode', [ + paranetId, + identityId, + ]); + } + + async getNodesAccessPolicy(paranetId) { + return this.callContractFunction(this.contracts.ParanetsRegistry, 'getNodesAccessPolicy', [ + paranetId, + ]); + } + + async getParanetCuratedNodes(paranetId) { return this.callContractFunction( - this.ParanetKnowledgeAssetsRegistryContract, - 'getParanetId', - [knowledgeAssetId], + this.contracts.ParanetsRegistry, + 'getCuratedNodes', + [paranetId], + CONTRACTS.PARANETS_REGISTRY, ); } - async isParanetKnowledgeAsset(knowledgeAssetId) { + async getNodeId(identityId) { + return this.callContractFunction(this.contracts.ProfileStorage, 'getNodeId', [identityId]); + } + + async signMessage(messageHash) { + const wallet = this.getRandomOperationalWallet(); + return wallet.signMessage(ethers.utils.arrayify(messageHash)); + } + + async getStakeWeightedAverageAsk() { return this.callContractFunction( - this.ParanetKnowledgeAssetsRegistryContract, - 'isParanetKnowledgeAsset', - [knowledgeAssetId], + this.contracts.AskStorage, + 'getStakeWeightedAverageAsk', + [], ); } + + async getTimeUntilNextEpoch() { + return this.callContractFunction(this.contracts.Chronos, 'timeUntilNextEpoch', []); + } + + async getEpochLength() { + return this.callContractFunction(this.contracts.Chronos, 'epochLength', []); + } + // SUPPORT FOR OLD CONTRACTS + + async getLatestAssertionId(assetContractAddress, tokenId) { + const assetStorageContractInstance = + this.assetStorageContracts[assetContractAddress.toString().toLowerCase()]; + if (!assetStorageContractInstance) + throw new Error('Unknown asset storage contract address'); + + return this.callContractFunction(assetStorageContractInstance, 'getLatestAssertionId', [ + tokenId, + ]); + } } export default Web3Service; diff --git a/src/modules/module-config-validation.js b/src/modules/module-config-validation.js index fc2cd00619..ffd5a51bab 100644 --- a/src/modules/module-config-validation.js +++ b/src/modules/module-config-validation.js @@ -12,7 +12,7 @@ class ModuleConfigValidation { if (typeof this[`validate${capitalizedName}`] === 'function') { this[`validate${capitalizedName}`](config); } else { - throw Error(`Missing validation for ${capitalizedName}`); + throw new Error(`Missing validation for ${capitalizedName}`); } } @@ -36,20 +36,85 @@ class ModuleConfigValidation { return true; } + validateBlockchainEvents(config) { + const occurences = {}; + for (const implementation of Object.values(config.implementation)) { + // eslint-disable-next-line no-continue + if (!implementation.enabled) { + continue; + } + + if (implementation.config.blockchains.length === 0) { + throw new Error( + 'Blockchains must be specified in the blockchain events service config.', + ); + } + + if ( + implementation.config.blockchains.length > + Object.keys(implementation.config.rpcEndpoints).length + ) { + throw new Error('Missing RPC edpoints in the blockchain events service config.'); + } + + if ( + implementation.config.blockchains.length > + Object.keys(implementation.config.hubContractAddress).length + ) { + throw new Error('Missing hub addresses in the blockchain events service config.'); + } + + for (const blockchain of implementation.config.blockchains) { + if (!occurences[blockchain]) { + occurences[blockchain] = 0; + } + occurences[blockchain] += 1; + + if (occurences[blockchain] > 1) { + throw new Error( + `Exactly one blockchain events service for blockchain ${blockchain} needs to be defined.`, + ); + } + + if ( + !implementation.config.rpcEndpoints[blockchain] || + implementation.config.rpcEndpoints[blockchain].length === 0 + ) { + throw new Error( + `RPC endpoint is not defined for blockchain: ${blockchain} in the blockchain events service config.`, + ); + } + + if (!implementation.config.hubContractAddress[blockchain]) { + throw new Error( + `Hub contract address is not defined for blockchain: ${blockchain} in the blockchain events service config.`, + ); + } + } + } + } + validateTripleStore(config) { const occurences = {}; for (const implementation of Object.values(config.implementation)) { // eslint-disable-next-line no-continue - if (!implementation.enabled) continue; + if (!implementation.enabled) { + continue; + } for (const repository in implementation.config.repositories) { - if (!occurences[repository]) occurences[repository] = 0; + if (!occurences[repository]) { + occurences[repository] = 0; + } occurences[repository] += 1; } } for (const repository of Object.values(TRIPLE_STORE_REPOSITORIES)) { - if (occurences[repository] !== 1) - throw Error(`Exactly one config for repository ${repository} needs to be defined.`); + if (occurences[repository] !== 1) { + throw new Error( + `Exactly one config for repository ${repository} needs to be defined.`, + ); + } } } diff --git a/src/modules/network/implementation/libp2p-service.js b/src/modules/network/implementation/libp2p-service.js index 19d1eeb9df..f1baad9f7e 100644 --- a/src/modules/network/implementation/libp2p-service.js +++ b/src/modules/network/implementation/libp2p-service.js @@ -104,17 +104,6 @@ class Libp2pService { initializationObject.peerId = this.config.peerId; this._initializeRateLimiters(); - /** - * sessions = { - * [peerId]: { - * [operationId]: { - * [keywordUuid] : { - * stream - * } - * } - * } - * } - */ this.sessions = {}; this.node = await libp2p.create(initializationObject); const peerId = this.node.peerId.toB58String(); @@ -222,12 +211,7 @@ class Libp2pService { peerIdString, ); - this.updateSessionStream( - message.header.operationId, - message.header.keywordUuid, - peerIdString, - stream, - ); + this.updateSessionStream(message.header.operationId, peerIdString, stream); if (!valid) { await this.sendMessageResponse( @@ -235,28 +219,18 @@ class Libp2pService { peerIdString, NETWORK_MESSAGE_TYPES.RESPONSES.NACK, message.header.operationId, - message.header.keywordUuid, { errorMessage: 'Invalid request message' }, ); - this.removeCachedSession( - message.header.operationId, - message.header.keywordUuid, - peerIdString, - ); + this.removeCachedSession(message.header.operationId, peerIdString); } else if (busy) { await this.sendMessageResponse( protocol, peerIdString, NETWORK_MESSAGE_TYPES.RESPONSES.BUSY, message.header.operationId, - message.header.keywordUuid, {}, ); - this.removeCachedSession( - message.header.operationId, - message.header.keywordUuid, - peerIdString, - ); + this.removeCachedSession(message.header.operationId, peerIdString); } else { this.logger.debug( `Receiving message from ${peerIdString} to ${this.config.id}: protocol: ${protocol}, messageType: ${message.header.messageType};`, @@ -266,65 +240,48 @@ class Libp2pService { }); } - updateSessionStream(operationId, keywordUuid, peerIdString, stream) { + updateSessionStream(operationId, peerIdString, stream) { this.logger.trace( `Storing new session stream for remotePeerId: ${peerIdString} with operation id: ${operationId}`, ); if (!this.sessions[peerIdString]) { this.sessions[peerIdString] = { [operationId]: { - [keywordUuid]: { - stream, - }, + stream, }, }; } else if (!this.sessions[peerIdString][operationId]) { this.sessions[peerIdString][operationId] = { - [keywordUuid]: { - stream, - }, + stream, }; } else { - this.sessions[peerIdString][operationId][keywordUuid] = { + this.sessions[peerIdString][operationId] = { stream, }; } } - getSessionStream(operationId, keywordUuid, peerIdString) { - if ( - this.sessions[peerIdString] && - this.sessions[peerIdString][operationId] && - this.sessions[peerIdString][operationId][keywordUuid] - ) { + getSessionStream(operationId, peerIdString) { + if (this.sessions[peerIdString] && this.sessions[peerIdString][operationId]) { this.logger.trace( `Session found remotePeerId: ${peerIdString}, operation id: ${operationId}`, ); - return this.sessions[peerIdString][operationId][keywordUuid].stream; + return this.sessions[peerIdString][operationId].stream; } return null; } - createStreamMessage(message, operationId, keywordUuid, messageType) { + createStreamMessage(message, operationId, messageType) { return { header: { messageType, operationId, - keywordUuid, }, data: message, }; } - async sendMessage( - protocol, - peerIdString, - messageType, - operationId, - keywordUuid, - message, - timeout, - ) { + async sendMessage(protocol, peerIdString, messageType, operationId, message, timeout) { const nackMessage = { header: { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK }, data: { @@ -366,14 +323,9 @@ class Libp2pService { const { stream } = dialResult; - this.updateSessionStream(operationId, keywordUuid, peerIdString, stream); + this.updateSessionStream(operationId, peerIdString, stream); - const streamMessage = this.createStreamMessage( - message, - operationId, - keywordUuid, - messageType, - ); + const streamMessage = this.createStreamMessage(message, operationId, messageType); this.logger.trace( `Sending message to ${peerIdString}. protocol: ${protocol}, messageType: ${messageType}, operationId: ${operationId}`, @@ -452,24 +404,17 @@ class Libp2pService { return response.message; } - async sendMessageResponse( - protocol, - peerIdString, - messageType, - operationId, - keywordUuid, - message, - ) { + async sendMessageResponse(protocol, peerIdString, messageType, operationId, message) { this.logger.debug( `Sending response from ${this.config.id} to ${peerIdString}: protocol: ${protocol}, messageType: ${messageType};`, ); - const stream = this.getSessionStream(operationId, keywordUuid, peerIdString); + const stream = this.getSessionStream(operationId, peerIdString); if (!stream) { throw Error(`Unable to find opened stream for remotePeerId: ${peerIdString}`); } - const response = this.createStreamMessage(message, operationId, keywordUuid, messageType); + const response = this.createStreamMessage(message, operationId, messageType); await this._sendMessageToStream(stream, response); } @@ -511,7 +456,7 @@ class Libp2pService { } async readMessageSink(source, isMessageValid, peerIdString) { - const message = { header: { operationId: '', keywordUuid: '' }, data: {} }; + const message = { header: { operationId: '' }, data: {} }; // we expect first buffer to be header const stringifiedHeader = (await source.next()).value; @@ -551,7 +496,6 @@ class Libp2pService { // header well formed if ( !header.operationId || - !header.keywordUuid || !header.messageType || !Object.keys(NETWORK_MESSAGE_TYPES.REQUESTS).includes(header.messageType) ) @@ -560,7 +504,7 @@ class Libp2pService { return true; } - return this.sessionExists(peerIdString, header.operationId, header.keywordUuid); + return this.sessionExists(peerIdString, header.operationId); } sessionExists() { @@ -646,9 +590,9 @@ class Libp2pService { return this.node.peerStore.get(createFromB58String(peerId)); } - removeCachedSession(operationId, keywordUuid, peerIdString) { - if (this.sessions[peerIdString]?.[operationId]?.[keywordUuid]?.stream) { - this.sessions[peerIdString][operationId][keywordUuid].stream.close(); + removeCachedSession(operationId, peerIdString) { + if (this.sessions[peerIdString]?.[operationId]?.stream) { + this.sessions[peerIdString][operationId].stream.close(); delete this.sessions[peerIdString][operationId]; this.logger.trace( `Removed session for remotePeerId: ${peerIdString}, operationId: ${operationId}.`, diff --git a/src/modules/network/network-module-manager.js b/src/modules/network/network-module-manager.js index 698c7f5697..4216734a05 100644 --- a/src/modules/network/network-module-manager.js +++ b/src/modules/network/network-module-manager.js @@ -29,36 +29,26 @@ class NetworkModuleManager extends BaseModuleManager { } } - async sendMessage( - protocol, - remotePeerId, - messageType, - operationId, - keywordUuid, - message, - timeout, - ) { + async sendMessage(protocol, remotePeerId, messageType, operationId, message, timeout) { if (this.initialized) { return this.getImplementation().module.sendMessage( protocol, remotePeerId, messageType, operationId, - keywordUuid, message, timeout, ); } } - async sendMessageResponse(protocol, remotePeerId, messageType, operationId, keyword, message) { + async sendMessageResponse(protocol, remotePeerId, messageType, operationId, message) { if (this.initialized) { return this.getImplementation().module.sendMessageResponse( protocol, remotePeerId, messageType, operationId, - keyword, message, ); } @@ -100,13 +90,9 @@ class NetworkModuleManager extends BaseModuleManager { } } - removeCachedSession(operationId, keywordUuid, remotePeerId) { + removeCachedSession(operationId, remotePeerId) { if (this.initialized) { - this.getImplementation().module.removeCachedSession( - operationId, - keywordUuid, - remotePeerId, - ); + this.getImplementation().module.removeCachedSession(operationId, remotePeerId); } } } diff --git a/src/modules/repository/implementation/sequelize/migrations/20240301095400-remove-corrupted-service-agreements-for-gnosis.js b/src/modules/repository/implementation/sequelize/migrations/20240301095400-remove-corrupted-service-agreements- for-gnosis.js similarity index 100% rename from src/modules/repository/implementation/sequelize/migrations/20240301095400-remove-corrupted-service-agreements-for-gnosis.js rename to src/modules/repository/implementation/sequelize/migrations/20240301095400-remove-corrupted-service-agreements- for-gnosis.js diff --git a/src/modules/repository/implementation/sequelize/migrations/20240923195000-create-publish-paranet.js b/src/modules/repository/implementation/sequelize/migrations/20240923195000-create-publish-paranet.js new file mode 100644 index 0000000000..c0c6cfa5f6 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20240923195000-create-publish-paranet.js @@ -0,0 +1,30 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.createTable('publish_paranet', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operation_id: { + type: Sequelize.UUID, + allowNull: false, + }, + status: { + allowNull: false, + type: Sequelize.STRING, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +} +export async function down({ context: { queryInterface } }) { + await queryInterface.dropTable('publish_paranet'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20240924161700-create-paranet-synced-asset.js b/src/modules/repository/implementation/sequelize/migrations/20240924161700-create-paranet-synced-asset.js new file mode 100644 index 0000000000..3c71386115 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20240924161700-create-paranet-synced-asset.js @@ -0,0 +1,89 @@ +export const up = async ({ context: { queryInterface, Sequelize } }) => { + await queryInterface.createTable('paranet_synced_asset', { + id: { + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER, + }, + blockchain_id: { + allowNull: false, + type: Sequelize.STRING, + }, + ual: { + allowNull: false, + type: Sequelize.STRING, + }, + paranet_ual: { + allowNull: false, + type: Sequelize.STRING, + }, + public_assertion_id: { + allowNull: true, + type: Sequelize.STRING, + }, + private_assertion_id: { + allowNull: false, + type: Sequelize.STRING, + }, + sender: { + allowNull: false, + type: Sequelize.STRING, + }, + transaction_hash: { + allowNull: false, + type: Sequelize.STRING, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); + + await queryInterface.sequelize.query(` + CREATE TRIGGER before_insert_paranet_synced_asset + BEFORE INSERT ON paranet_synced_asset + FOR EACH ROW + SET NEW.created_at = NOW(); + `); + + await queryInterface.sequelize.query(` + CREATE TRIGGER before_update_paranet_synced_asset + BEFORE UPDATE ON paranet_synced_asset + FOR EACH ROW + SET NEW.updated_at = NOW(); + `); + + await queryInterface.sequelize.query(` + CREATE INDEX idx_paranet_ual_created_at + ON paranet_synced_asset (paranet_ual, created_at); + `); + + await queryInterface.sequelize.query(` + CREATE INDEX idx_sender + ON paranet_synced_asset (sender); + `); + + await queryInterface.sequelize.query(` + CREATE INDEX idx_paranet_ual_unique + ON paranet_synced_asset (paranet_ual); + `); +}; + +export const down = async ({ context: { queryInterface } }) => { + await queryInterface.dropTable('paranet_synced_asset'); + + await queryInterface.sequelize.query(` + DROP TRIGGER IF EXISTS before_insert_paranet_synced_asset; + `); + + // Delete the before-update trigger + await queryInterface.sequelize.query(` + DROP TRIGGER IF EXISTS before_update_paranet_synced_asset; + `); +}; diff --git a/src/modules/repository/implementation/sequelize/migrations/20240924205500-create-publish-paranet-response.js b/src/modules/repository/implementation/sequelize/migrations/20240924205500-create-publish-paranet-response.js new file mode 100644 index 0000000000..13a8293f6e --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20240924205500-create-publish-paranet-response.js @@ -0,0 +1,38 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.createTable('publish_paranet_response', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operation_id: { + type: Sequelize.UUID, + allowNull: false, + }, + keyword: { + allowNull: false, + type: Sequelize.STRING, + }, + status: { + allowNull: false, + type: Sequelize.STRING, + }, + message: { + allowNull: true, + type: Sequelize.TEXT, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +} +export async function down({ context: { queryInterface } }) { + await queryInterface.dropTable('publish_paranet_response'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20240927110000-change-paranet-synced-asset-nullable-assertions.js b/src/modules/repository/implementation/sequelize/migrations/20240927110000-change-paranet-synced-asset-nullable-assertions.js new file mode 100644 index 0000000000..303d9b8ab3 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20240927110000-change-paranet-synced-asset-nullable-assertions.js @@ -0,0 +1,23 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.changeColumn('paranet_synced_asset', 'public_assertion_id', { + type: Sequelize.STRING, + allowNull: false, + }); + + await queryInterface.changeColumn('paranet_synced_asset', 'private_assertion_id', { + type: Sequelize.STRING, + allowNull: true, + }); +} + +export async function down({ context: { queryInterface, Sequelize } }) { + await queryInterface.changeColumn('paranet_synced_asset', 'public_assertion_id', { + type: Sequelize.STRING, + allowNull: true, + }); + + await queryInterface.changeColumn('paranet_synced_asset', 'private_assertion_id', { + type: Sequelize.STRING, + allowNull: false, + }); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20240930113000-add-error-message.js b/src/modules/repository/implementation/sequelize/migrations/20240930113000-add-error-message.js new file mode 100644 index 0000000000..cb0d633bd5 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20240930113000-add-error-message.js @@ -0,0 +1,10 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.addColumn('missed_paranet_asset', 'error_message', { + type: Sequelize.TEXT, + allowNull: true, + }); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.removeColumn('missed_paranet_asset', 'error_message'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241011112100-remove-knowledge-asset-id.js b/src/modules/repository/implementation/sequelize/migrations/20241011112100-remove-knowledge-asset-id.js new file mode 100644 index 0000000000..eefa3b0eed --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241011112100-remove-knowledge-asset-id.js @@ -0,0 +1,10 @@ +export async function up({ context: { queryInterface } }) { + await queryInterface.removeColumn('missed_paranet_asset', 'knowledge_asset_id'); +} + +export async function down({ context: { queryInterface, Sequelize } }) { + await queryInterface.addColumn('missed_paranet_asset', 'knowledge_asset_id', { + type: Sequelize.STRING, + allowNull: false, + }); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241014164500-paranet-synced-asset-optional-fileds.js b/src/modules/repository/implementation/sequelize/migrations/20241014164500-paranet-synced-asset-optional-fileds.js new file mode 100644 index 0000000000..8b89584c92 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241014164500-paranet-synced-asset-optional-fileds.js @@ -0,0 +1,21 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.changeColumn('paranet_synced_asset', 'sender', { + type: Sequelize.STRING, + allowNull: true, + }); + await queryInterface.changeColumn('paranet_synced_asset', 'transaction_hash', { + type: Sequelize.STRING, + allowNull: true, + }); +} + +export async function down({ context: { queryInterface, Sequelize } }) { + await queryInterface.changeColumn('paranet_synced_asset', 'sender', { + type: Sequelize.STRING, + allowNull: false, + }); + await queryInterface.changeColumn('paranet_synced_asset', 'transaction_hash', { + type: Sequelize.STRING, + allowNull: false, + }); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241023170300-add-synced-data-source.js b/src/modules/repository/implementation/sequelize/migrations/20241023170300-add-synced-data-source.js new file mode 100644 index 0000000000..5681e4ae95 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241023170300-add-synced-data-source.js @@ -0,0 +1,10 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.addColumn('paranet_synced_asset', 'data_source', { + type: Sequelize.TEXT, + allowNull: true, + }); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.removeColumn('paranet_synced_asset', 'data_source'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241105150000-change-data-source-col-type-in-paranet-synced-asset.js b/src/modules/repository/implementation/sequelize/migrations/20241105150000-change-data-source-col-type-in-paranet-synced-asset.js new file mode 100644 index 0000000000..06696b4eee --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241105150000-change-data-source-col-type-in-paranet-synced-asset.js @@ -0,0 +1,13 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.changeColumn('paranet_synced_asset', 'data_source', { + type: Sequelize.ENUM('sync', 'local_store'), + allowNull: true, + }); +} + +export async function down({ context: { queryInterface, Sequelize } }) { + await queryInterface.changeColumn('paranet_synced_asset', 'data_source', { + type: Sequelize.TEXT, + allowNull: true, + }); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241105160000-add-indexes-to-tables.js b/src/modules/repository/implementation/sequelize/migrations/20241105160000-add-indexes-to-tables.js new file mode 100644 index 0000000000..e78f89736c --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241105160000-add-indexes-to-tables.js @@ -0,0 +1,169 @@ +export async function up({ context: { queryInterface } }) { + const indexes = [ + { table: 'shard', column: ['blockchain_id'], name: 'shard_blockchain_id_index' }, + { table: 'shard', column: ['last_dialed'], name: 'last_dialed_index' }, + { + table: 'service_agreement', + column: ['blockchain_id'], + name: 'service_agreement_blockchain_id_index', + }, + { + table: 'service_agreement', + column: ['blockchain_id', 'token_id'], + name: 'blockchain_id_token_id_index', + }, + { table: 'service_agreement', column: ['token_id'], name: 'token_id_index' }, + { table: 'paranet_synced_asset', column: ['ual'], name: 'paranet_synced_asset_ual_index' }, + { + table: 'paranet_synced_asset', + column: ['paranet_ual', 'data_source'], + name: 'paranet_ual_data_source_index', + }, + { + table: 'paranet', + column: ['blockchain_id', 'paranet_id'], + name: 'blockchain_id_paranet_id_index', + }, + { table: 'missed_paranet_asset', column: ['paranet_ual'], name: 'paranet_ual_index' }, + { table: 'missed_paranet_asset', column: ['ual'], name: 'missed_paranet_asset_ual_index' }, + { table: 'event', column: ['name', 'timestamp'], name: 'name_timestamp_index' }, + { table: 'event', column: ['operation_id'], name: 'event_operation_id_index' }, + { table: 'commands', column: ['name', 'status'], name: 'name_status_index' }, + { table: 'commands', column: ['status', 'started_at'], name: 'status_started_at_index' }, + { table: 'get', column: ['operation_id'], name: 'get_operation_id_index' }, + { table: 'publish', column: ['operation_id'], name: 'publish_operation_id_index' }, + { table: 'update', column: ['operation_id'], name: 'update_operation_id_index' }, + { + table: 'publish_paranet', + column: ['operation_id'], + name: 'publish_paranet_operation_id_index', + }, + { table: 'get', column: ['created_at'], name: 'get_created_at_index' }, + { table: 'publish', column: ['created_at'], name: 'publish_created_at_index' }, + { table: 'update', column: ['created_at'], name: 'update_created_at_index' }, + { + table: 'publish_paranet', + column: ['created_at'], + name: 'publish_paranet_created_at_index', + }, + { + table: 'get_response', + column: ['operation_id'], + name: 'get_response_operation_id_index', + }, + { table: 'publish_response', column: ['operation_id'], name: 'operation_id_index' }, + { + table: 'update_response', + column: ['operation_id'], + name: 'update_response_operation_id_index', + }, + { + table: 'publish_paranet_response', + column: ['operation_id'], + name: 'publish_paranet_response_operation_id_index', + }, + { table: 'get_response', column: ['created_at'], name: 'get_response_created_at_index' }, + { + table: 'publish_response', + column: ['created_at'], + name: 'publish_response_created_at_index', + }, + { + table: 'update_response', + column: ['created_at'], + name: 'update_response_created_at_index', + }, + { + table: 'publish_paranet_response', + column: ['created_at'], + name: 'publish_paranet_response_created_at_index', + }, + { table: 'blockchain', column: ['contract'], name: 'contract_index' }, + ]; + + for (const index of indexes) { + const { table, column, name } = index; + + // eslint-disable-next-line no-await-in-loop + const [results] = await queryInterface.sequelize.query(` + SELECT COUNT(1) AS count + FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = '${table}' AND INDEX_NAME = '${name}'; + `); + + if (results[0].count === 0) { + // eslint-disable-next-line no-await-in-loop + await queryInterface.addIndex(table, column, { name }); + } + } +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.removeIndex('shard', 'shard_blockchain_id_index'); + + await queryInterface.removeIndex('shard', 'last_dialed_index'); + + await queryInterface.removeIndex('service_agreement', 'service_agreement_blockchain_id_index'); + + await queryInterface.removeIndex('service_agreement', 'blockchain_id_token_id_index'); + + await queryInterface.removeIndex('service_agreement', 'token_id_index'); + + await queryInterface.removeIndex('paranet_synced_asset', 'paranet_synced_asset_ual_index'); + + await queryInterface.removeIndex('paranet_synced_asset', 'paranet_ual_data_source_index'); + + await queryInterface.removeIndex('paranet', 'blockchain_id_paranet_id_index'); + + await queryInterface.removeIndex('missed_paranet_asset', 'paranet_ual_index'); + + await queryInterface.removeIndex('missed_paranet_asset', 'missed_paranet_asset_ual_index'); + + await queryInterface.removeIndex('event', 'name_timestamp_index'); + + await queryInterface.removeIndex('event', 'event_operation_id_index'); + + await queryInterface.removeIndex('commands', 'name_status_index'); + + await queryInterface.removeIndex('commands', 'status_started_at_index'); + + await queryInterface.removeIndex('get', 'get_operation_id_index'); + + await queryInterface.removeIndex('publish', 'publish_operation_id_index'); + + await queryInterface.removeIndex('update', 'update_operation_id_index'); + + await queryInterface.removeIndex('publish_paranet', 'publish_paranet_operation_id_index'); + + await queryInterface.removeIndex('get', 'get_created_at_index'); + + await queryInterface.removeIndex('publish', 'publish_created_at_index'); + + await queryInterface.removeIndex('update', 'update_created_at_index'); + + await queryInterface.removeIndex('publish_paranet', 'publish_paranet_created_at_index'); + + await queryInterface.removeIndex('get_response', 'get_response_operation_id_index'); + + await queryInterface.removeIndex('publish_response', 'publish_response_operation_id_index'); + + await queryInterface.removeIndex('update_response', 'update_response_operation_id_index'); + + await queryInterface.removeIndex( + 'publish_paranet_response', + 'publish_paranet_response_operation_id_index', + ); + + await queryInterface.removeIndex('get_response', 'get_response_created_at_index'); + + await queryInterface.removeIndex('publish_response', 'publish_response_created_at_index'); + + await queryInterface.removeIndex('update_response', 'update_response_created_at_index'); + + await queryInterface.removeIndex( + 'publish_paranet_response', + 'publish_paranet_response_created_at_index', + ); + + await queryInterface.removeIndex('blockchain', 'contract_index'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241125151200-rename-keyword-column-to-datasetroot-in-responses.js b/src/modules/repository/implementation/sequelize/migrations/20241125151200-rename-keyword-column-to-datasetroot-in-responses.js new file mode 100644 index 0000000000..0ac4d26f1f --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241125151200-rename-keyword-column-to-datasetroot-in-responses.js @@ -0,0 +1,9 @@ +export async function up({ context: { queryInterface } }) { + await queryInterface.renameColumn('publish_response', 'keyword', 'dataset_root'); + await queryInterface.renameColumn('get_response', 'keyword', 'dataset_root'); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.renameColumn('publish_response', 'dataset_root', 'keyword'); + await queryInterface.renameColumn('get_response', 'dataset_root', 'keyword'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241126114400-add-commands-priority.js b/src/modules/repository/implementation/sequelize/migrations/20241126114400-add-commands-priority.js new file mode 100644 index 0000000000..09e969fb8c --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241126114400-add-commands-priority.js @@ -0,0 +1,9 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.addColumn('commands', 'priority', { + type: Sequelize.BIGINT, + }); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.removeColumn('commands', 'priority'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241129120000-add-commands-is_blocking.js b/src/modules/repository/implementation/sequelize/migrations/20241129120000-add-commands-is_blocking.js new file mode 100644 index 0000000000..16c78763b9 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241129120000-add-commands-is_blocking.js @@ -0,0 +1,9 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.addColumn('commands', 'is_blocking', { + type: Sequelize.BOOLEAN, + }); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.removeColumn('commands', 'is_blocking'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241129125800-remove-datasetroot-response-table.js b/src/modules/repository/implementation/sequelize/migrations/20241129125800-remove-datasetroot-response-table.js new file mode 100644 index 0000000000..d80ed68fa0 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241129125800-remove-datasetroot-response-table.js @@ -0,0 +1,15 @@ +export async function up({ context: { queryInterface } }) { + await queryInterface.removeColumn('publish_response', 'dataset_root'); + await queryInterface.removeColumn('get_response', 'dataset_root'); +} + +export async function down({ context: { queryInterface, Sequelize } }) { + await queryInterface.addColumn('publish_response', 'dataset_root', { + type: Sequelize.STRING, + allowNull: false, + }); + await queryInterface.addColumn('get_response', 'dataset_root', { + type: Sequelize.STRING, + allowNull: false, + }); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241201152000-update-blockchain-events.js b/src/modules/repository/implementation/sequelize/migrations/20241201152000-update-blockchain-events.js new file mode 100644 index 0000000000..d4909d2cac --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241201152000-update-blockchain-events.js @@ -0,0 +1,37 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.renameColumn('blockchain_event', 'blockchain_id', 'blockchain'); + + await queryInterface.changeColumn('blockchain_event', 'block', { + type: Sequelize.BIGINT, + }); + + await queryInterface.renameColumn('blockchain_event', 'block', 'block_number'); + + await queryInterface.addColumn('blockchain_event', 'transaction_index', { + type: Sequelize.BIGINT, + }); + + await queryInterface.addColumn('blockchain_event', 'log_index', { + type: Sequelize.BIGINT, + }); + + await queryInterface.addColumn('blockchain_event', 'contract_address', { + type: Sequelize.STRING, + }); +} + +export async function down({ context: { queryInterface, Sequelize } }) { + await queryInterface.renameColumn('blockchain_event', 'block_number', 'block'); + + await queryInterface.changeColumn('blockchain_event', 'block', { + type: Sequelize.INTEGER, + }); + + await queryInterface.renameColumn('blockchain_event', 'blockchain', 'blockchain_id'); + + await queryInterface.removeColumn('blockchain_event', 'transaction_index'); + + await queryInterface.removeColumn('blockchain_event', 'log_index'); + + await queryInterface.removeColumn('blockchain_event', 'contract_address'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241202214500-update-blockchain-table.js b/src/modules/repository/implementation/sequelize/migrations/20241202214500-update-blockchain-table.js new file mode 100644 index 0000000000..ac2d1a5eb6 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241202214500-update-blockchain-table.js @@ -0,0 +1,37 @@ +export async function up({ context: { queryInterface } }) { + const tableInfo = await queryInterface.describeTable('blockchain'); + + if (tableInfo.blockchain_id) { + await queryInterface.renameColumn('blockchain', 'blockchain_id', 'blockchain'); + } + + await queryInterface.sequelize.query(` + DELETE t1 + FROM blockchain t1 + JOIN blockchain t2 + ON t1.blockchain = t2.blockchain + AND ( + t1.last_checked_block > t2.last_checked_block OR + (t1.last_checked_block = t2.last_checked_block AND t1.last_checked_timestamp > t2.last_checked_timestamp) + ); + `); + + await queryInterface.sequelize.query(` + ALTER TABLE blockchain DROP PRIMARY KEY, ADD PRIMARY KEY (blockchain); + `); + + await queryInterface.removeColumn('blockchain', 'contract'); +} + +export async function down({ context: { queryInterface, Sequelize } }) { + await queryInterface.renameColumn('blockchain', 'blockchain', 'blockchain_id'); + + await queryInterface.addColumn('blockchain', 'contract', { + type: Sequelize.STRING, + allowNull: false, + }); + + await queryInterface.sequelize.query(` + ALTER TABLE blockchain DROP PRIMARY KEY, ADD PRIMARY KEY (blockchain_id, contract); + `); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241203125000-create-finality.js b/src/modules/repository/implementation/sequelize/migrations/20241203125000-create-finality.js new file mode 100644 index 0000000000..a75c168ea8 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241203125000-create-finality.js @@ -0,0 +1,30 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.createTable('finality', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operation_id: { + type: Sequelize.UUID, + allowNull: false, + }, + status: { + allowNull: false, + type: Sequelize.STRING, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +} +export async function down({ context: { queryInterface } }) { + await queryInterface.dropTable('finality'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241203125001-create-finality-response.js b/src/modules/repository/implementation/sequelize/migrations/20241203125001-create-finality-response.js new file mode 100644 index 0000000000..dcd973bbbf --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241203125001-create-finality-response.js @@ -0,0 +1,34 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.createTable('finality_response', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operation_id: { + type: Sequelize.UUID, + allowNull: false, + }, + status: { + allowNull: false, + type: Sequelize.STRING, + }, + message: { + allowNull: true, + type: Sequelize.TEXT, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +} +export async function down({ context: { queryInterface } }) { + await queryInterface.dropTable('finality_response'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241211204400-rename-ask.js b/src/modules/repository/implementation/sequelize/migrations/20241211204400-rename-ask.js new file mode 100644 index 0000000000..954f87a84b --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241211204400-rename-ask.js @@ -0,0 +1,9 @@ +export async function up({ context: { queryInterface } }) { + await queryInterface.renameTable('finality', 'ask'); + await queryInterface.renameTable('finality_response', 'ask_response'); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.renameTable('ask', 'finality'); + await queryInterface.renameTable('ask_response', 'finality_response'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-response.js b/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-response.js new file mode 100644 index 0000000000..dcd973bbbf --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-response.js @@ -0,0 +1,34 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.createTable('finality_response', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operation_id: { + type: Sequelize.UUID, + allowNull: false, + }, + status: { + allowNull: false, + type: Sequelize.STRING, + }, + message: { + allowNull: true, + type: Sequelize.TEXT, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +} +export async function down({ context: { queryInterface } }) { + await queryInterface.dropTable('finality_response'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-status.js b/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-status.js new file mode 100644 index 0000000000..324e1c0179 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality-status.js @@ -0,0 +1,37 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.createTable('finality_status', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operation_id: { + type: Sequelize.STRING, + allowNull: false, + }, + ual: { + type: Sequelize.STRING, + }, + peer_id: { + type: Sequelize.STRING, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); + await queryInterface.addConstraint('finality_status', { + fields: ['ual', 'peer_id'], + type: 'unique', + }); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.dropTable('finality_status'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality.js b/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality.js new file mode 100644 index 0000000000..a75c168ea8 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241211205400-create-finality.js @@ -0,0 +1,30 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.createTable('finality', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operation_id: { + type: Sequelize.UUID, + allowNull: false, + }, + status: { + allowNull: false, + type: Sequelize.STRING, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +} +export async function down({ context: { queryInterface } }) { + await queryInterface.dropTable('finality'); +} diff --git a/src/modules/repository/implementation/sequelize/migrations/20241212122200-add-min-acks-reached-column.js b/src/modules/repository/implementation/sequelize/migrations/20241212122200-add-min-acks-reached-column.js new file mode 100644 index 0000000000..dbca86ceeb --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20241212122200-add-min-acks-reached-column.js @@ -0,0 +1,9 @@ +export async function up({ context: { queryInterface, Sequelize } }) { + await queryInterface.addColumn('operation_ids', 'min_acks_reached', { + type: Sequelize.BOOLEAN, + }); +} + +export async function down({ context: { queryInterface } }) { + await queryInterface.removeColumn('operation_ids', 'min_acks_reached'); +} diff --git a/src/modules/repository/implementation/sequelize/models/ask-response.js b/src/modules/repository/implementation/sequelize/models/ask-response.js new file mode 100644 index 0000000000..21f0959403 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/ask-response.js @@ -0,0 +1,22 @@ +export default (sequelize, DataTypes) => { + const askResponse = sequelize.define( + 'ask_response', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operationId: DataTypes.UUID, + status: DataTypes.STRING, + message: DataTypes.TEXT, + createdAt: DataTypes.DATE, + updatedAt: DataTypes.DATE, + }, + { underscored: true }, + ); + askResponse.associate = () => { + // associations can be defined here + }; + return askResponse; +}; diff --git a/src/modules/repository/implementation/sequelize/models/ask.js b/src/modules/repository/implementation/sequelize/models/ask.js new file mode 100644 index 0000000000..4636161cd6 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/ask.js @@ -0,0 +1,21 @@ +export default (sequelize, DataTypes) => { + const ask = sequelize.define( + 'ask', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operationId: DataTypes.UUID, + status: DataTypes.STRING, + createdAt: DataTypes.DATE, + updatedAt: DataTypes.DATE, + }, + { underscored: true }, + ); + ask.associate = () => { + // associations can be defined here + }; + return ask; +}; diff --git a/src/modules/repository/implementation/sequelize/models/blockchain-event.js b/src/modules/repository/implementation/sequelize/models/blockchain-event.js index b15537849f..40ba9cb1f6 100644 --- a/src/modules/repository/implementation/sequelize/models/blockchain-event.js +++ b/src/modules/repository/implementation/sequelize/models/blockchain-event.js @@ -8,10 +8,13 @@ export default (sequelize, DataTypes) => { autoIncrement: true, }, contract: DataTypes.STRING, - blockchainId: DataTypes.STRING, + contractAddress: DataTypes.STRING, + blockchain: DataTypes.STRING, event: DataTypes.STRING, data: DataTypes.TEXT, - block: DataTypes.INTEGER, + blockNumber: DataTypes.BIGINT, + transactionIndex: DataTypes.BIGINT, + logIndex: DataTypes.BIGINT, processed: DataTypes.BOOLEAN, createdAt: DataTypes.DATE, updatedAt: DataTypes.DATE, diff --git a/src/modules/repository/implementation/sequelize/models/blockchain.js b/src/modules/repository/implementation/sequelize/models/blockchain.js index 6bb7977805..0c2807965e 100644 --- a/src/modules/repository/implementation/sequelize/models/blockchain.js +++ b/src/modules/repository/implementation/sequelize/models/blockchain.js @@ -2,11 +2,7 @@ export default (sequelize, DataTypes) => { const blockchain = sequelize.define( 'blockchain', { - blockchainId: { - type: DataTypes.STRING, - primaryKey: true, - }, - contract: { + blockchain: { type: DataTypes.STRING, primaryKey: true, }, diff --git a/src/modules/repository/implementation/sequelize/models/commands.js b/src/modules/repository/implementation/sequelize/models/commands.js index dde59ba7f0..a0396d6d6d 100644 --- a/src/modules/repository/implementation/sequelize/models/commands.js +++ b/src/modules/repository/implementation/sequelize/models/commands.js @@ -17,12 +17,14 @@ export default (sequelize, DataTypes) => { }, name: DataTypes.STRING, data: DataTypes.JSON, + priority: DataTypes.BIGINT, + isBlocking: DataTypes.BOOLEAN, sequence: DataTypes.JSON, readyAt: DataTypes.BIGINT, delay: DataTypes.BIGINT, startedAt: DataTypes.BIGINT, deadlineAt: DataTypes.BIGINT, - period: DataTypes.INTEGER, + period: DataTypes.BIGINT, status: DataTypes.STRING, message: DataTypes.TEXT, parentId: DataTypes.UUID, diff --git a/src/modules/repository/implementation/sequelize/models/finality-response.js b/src/modules/repository/implementation/sequelize/models/finality-response.js new file mode 100644 index 0000000000..c377107691 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/finality-response.js @@ -0,0 +1,22 @@ +export default (sequelize, DataTypes) => { + const finalityResponse = sequelize.define( + 'finality_response', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operationId: DataTypes.UUID, + status: DataTypes.STRING, + message: DataTypes.TEXT, + createdAt: DataTypes.DATE, + updatedAt: DataTypes.DATE, + }, + { underscored: true }, + ); + finalityResponse.associate = () => { + // associations can be defined here + }; + return finalityResponse; +}; diff --git a/src/modules/repository/implementation/sequelize/models/finality-status.js b/src/modules/repository/implementation/sequelize/models/finality-status.js new file mode 100644 index 0000000000..41cbe2b3c5 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/finality-status.js @@ -0,0 +1,22 @@ +export default (sequelize, DataTypes) => { + const finalityStatus = sequelize.define( + 'finality_status', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operationId: DataTypes.STRING, + ual: DataTypes.STRING, + peerId: DataTypes.STRING, + createdAt: DataTypes.DATE, + updatedAt: DataTypes.DATE, + }, + { underscored: true }, + ); + finalityStatus.associate = () => { + // associations can be defined here + }; + return finalityStatus; +}; diff --git a/src/modules/repository/implementation/sequelize/models/finality.js b/src/modules/repository/implementation/sequelize/models/finality.js new file mode 100644 index 0000000000..1ee1d3cf47 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/finality.js @@ -0,0 +1,21 @@ +export default (sequelize, DataTypes) => { + const finality = sequelize.define( + 'finality', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operationId: DataTypes.UUID, + status: DataTypes.STRING, + createdAt: DataTypes.DATE, + updatedAt: DataTypes.DATE, + }, + { underscored: true }, + ); + finality.associate = () => { + // associations can be defined here + }; + return finality; +}; diff --git a/src/modules/repository/implementation/sequelize/models/get-response.js b/src/modules/repository/implementation/sequelize/models/get-response.js index 201873eb81..5c529b81ae 100644 --- a/src/modules/repository/implementation/sequelize/models/get-response.js +++ b/src/modules/repository/implementation/sequelize/models/get-response.js @@ -8,7 +8,6 @@ export default (sequelize, DataTypes) => { autoIncrement: true, }, operationId: DataTypes.UUID, - keyword: DataTypes.STRING, status: DataTypes.STRING, message: DataTypes.TEXT, createdAt: DataTypes.DATE, diff --git a/src/modules/repository/implementation/sequelize/models/missed-paranet-asset.js b/src/modules/repository/implementation/sequelize/models/missed-paranet-asset.js index 0fb068266b..c7788955df 100644 --- a/src/modules/repository/implementation/sequelize/models/missed-paranet-asset.js +++ b/src/modules/repository/implementation/sequelize/models/missed-paranet-asset.js @@ -19,9 +19,9 @@ export default (sequelize, DataTypes) => { allowNull: false, type: DataTypes.STRING, }, - knowledgeAssetId: { - allowNull: false, - type: DataTypes.STRING, + errorMessage: { + allowNull: true, + type: DataTypes.TEXT, }, createdAt: { type: DataTypes.DATE, diff --git a/src/modules/repository/implementation/sequelize/models/operation_ids.js b/src/modules/repository/implementation/sequelize/models/operation_ids.js index f26d85f5db..17fd08ac4d 100644 --- a/src/modules/repository/implementation/sequelize/models/operation_ids.js +++ b/src/modules/repository/implementation/sequelize/models/operation_ids.js @@ -11,6 +11,7 @@ export default (sequelize, DataTypes) => { }, data: DataTypes.TEXT, status: DataTypes.STRING, + minAcksReached: DataTypes.BOOLEAN, timestamp: { type: DataTypes.BIGINT, defaultValue: () => Date.now(), diff --git a/src/modules/repository/implementation/sequelize/models/paranet-synced-asset.js b/src/modules/repository/implementation/sequelize/models/paranet-synced-asset.js new file mode 100644 index 0000000000..97eb6c0a90 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/paranet-synced-asset.js @@ -0,0 +1,57 @@ +import { PARANET_SYNC_SOURCES } from '../../../../../constants/constants.js'; + +export default (sequelize, DataTypes) => { + const blockchain = sequelize.define( + 'paranet_synced_asset', + { + id: { + autoIncrement: true, + primaryKey: true, + type: DataTypes.INTEGER, + }, + blockchainId: { + allowNull: false, + type: DataTypes.STRING, + }, + ual: { + allowNull: false, + type: DataTypes.STRING, + }, + paranetUal: { + allowNull: false, + type: DataTypes.STRING, + }, + publicAssertionId: { + allowNull: true, + type: DataTypes.STRING, + }, + privateAssertionId: { + allowNull: true, + type: DataTypes.STRING, + }, + sender: { + allowNull: true, + type: DataTypes.STRING, + }, + transactionHash: { + allowNull: true, + type: DataTypes.STRING, + }, + dataSource: { + allowNull: true, + type: DataTypes.ENUM(...Object.values(PARANET_SYNC_SOURCES)), + }, + createdAt: { + type: DataTypes.DATE, + }, + updatedAt: { + type: DataTypes.DATE, + }, + }, + { underscored: true }, + ); + blockchain.associate = () => { + // associations can be defined here + }; + return blockchain; +}; diff --git a/src/modules/repository/implementation/sequelize/models/publish-paranet-response.js b/src/modules/repository/implementation/sequelize/models/publish-paranet-response.js new file mode 100644 index 0000000000..3bce635f3b --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/publish-paranet-response.js @@ -0,0 +1,22 @@ +export default (sequelize, DataTypes) => { + const publishParanetResponse = sequelize.define( + 'publish_paranet_response', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operationId: DataTypes.UUID, + status: DataTypes.STRING, + message: DataTypes.TEXT, + createdAt: DataTypes.DATE, + updatedAt: DataTypes.DATE, + }, + { underscored: true }, + ); + publishParanetResponse.associate = () => { + // associations can be defined here + }; + return publishParanetResponse; +}; diff --git a/src/modules/repository/implementation/sequelize/models/publish-paranet.js b/src/modules/repository/implementation/sequelize/models/publish-paranet.js new file mode 100644 index 0000000000..3019377398 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/publish-paranet.js @@ -0,0 +1,21 @@ +export default (sequelize, DataTypes) => { + const publishParanet = sequelize.define( + 'publish_paranet', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + operationId: DataTypes.UUID, + status: DataTypes.STRING, + createdAt: DataTypes.DATE, + updatedAt: DataTypes.DATE, + }, + { underscored: true }, + ); + publishParanet.associate = () => { + // associations can be defined here + }; + return publishParanet; +}; diff --git a/src/modules/repository/implementation/sequelize/models/publish-response.js b/src/modules/repository/implementation/sequelize/models/publish-response.js index f9b44bc5e8..ccc932b850 100644 --- a/src/modules/repository/implementation/sequelize/models/publish-response.js +++ b/src/modules/repository/implementation/sequelize/models/publish-response.js @@ -8,7 +8,6 @@ export default (sequelize, DataTypes) => { autoIncrement: true, }, operationId: DataTypes.UUID, - keyword: DataTypes.STRING, status: DataTypes.STRING, message: DataTypes.TEXT, createdAt: DataTypes.DATE, diff --git a/src/modules/repository/implementation/sequelize/models/service-agreement.js b/src/modules/repository/implementation/sequelize/models/service-agreement.js deleted file mode 100644 index b00bb300fd..0000000000 --- a/src/modules/repository/implementation/sequelize/models/service-agreement.js +++ /dev/null @@ -1,75 +0,0 @@ -import { SERVICE_AGREEMENT_SOURCES } from '../../../../../constants/constants.js'; - -export default (sequelize, DataTypes) => { - const serviceAgreement = sequelize.define( - 'service_agreement', - { - blockchainId: { - type: DataTypes.STRING, - allowNull: false, - }, - assetStorageContractAddress: { - type: DataTypes.STRING(42), - allowNull: false, - }, - tokenId: { - type: DataTypes.INTEGER.UNSIGNED, - allowNull: false, - }, - agreementId: { - type: DataTypes.STRING, - primaryKey: true, - }, - startTime: { - type: DataTypes.INTEGER.UNSIGNED, - allowNull: false, - }, - epochsNumber: { - type: DataTypes.SMALLINT.UNSIGNED, - allowNull: false, - }, - epochLength: { - type: DataTypes.INTEGER.UNSIGNED, - allowNull: false, - }, - scoreFunctionId: { - type: DataTypes.TINYINT.UNSIGNED, - allowNull: false, - }, - stateIndex: { - type: DataTypes.SMALLINT.UNSIGNED, - allowNull: false, - }, - assertionId: { - type: DataTypes.STRING, - allowNull: false, - }, - hashFunctionId: { - type: DataTypes.TINYINT.UNSIGNED, - allowNull: false, - }, - keyword: { - type: DataTypes.STRING, - allowNull: false, - }, - proofWindowOffsetPerc: { - type: DataTypes.TINYINT.UNSIGNED, - allowNull: false, - }, - dataSource: { - type: DataTypes.ENUM(...Object.values(SERVICE_AGREEMENT_SOURCES)), - }, - lastCommitEpoch: { - type: DataTypes.SMALLINT.UNSIGNED, - }, - lastProofEpoch: { - type: DataTypes.SMALLINT.UNSIGNED, - }, - }, - { underscored: true }, - ); - serviceAgreement.associate = () => { - // associations can be defined here - }; - return serviceAgreement; -}; diff --git a/src/modules/repository/implementation/sequelize/models/update-response.js b/src/modules/repository/implementation/sequelize/models/update-response.js index 40c6143c87..429f77e31b 100644 --- a/src/modules/repository/implementation/sequelize/models/update-response.js +++ b/src/modules/repository/implementation/sequelize/models/update-response.js @@ -8,7 +8,6 @@ export default (sequelize, DataTypes) => { autoIncrement: true, }, operationId: DataTypes.UUID, - keyword: DataTypes.STRING, status: DataTypes.STRING, message: DataTypes.TEXT, createdAt: DataTypes.DATE, diff --git a/src/modules/repository/implementation/sequelize/repositories/blockchain-event-repository.js b/src/modules/repository/implementation/sequelize/repositories/blockchain-event-repository.js index 92f4edf035..4bde67a877 100644 --- a/src/modules/repository/implementation/sequelize/repositories/blockchain-event-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/blockchain-event-repository.js @@ -6,7 +6,7 @@ class BlockchainEventRepository { this.model = models.blockchain_event; } - async insertBlockchainEvents(events) { + async insertBlockchainEvents(events, options) { const chunkSize = 10000; let insertedEvents = []; @@ -15,15 +15,19 @@ class BlockchainEventRepository { // eslint-disable-next-line no-await-in-loop const insertedChunk = await this.model.bulkCreate( chunk.map((event) => ({ + blockchain: event.blockchain, contract: event.contract, + contractAddress: event.contractAddress, event: event.event, data: event.data, - block: event.block, - blockchainId: event.blockchainId, + blockNumber: event.blockNumber, + transactionIndex: event.transactionIndex, + logIndex: event.logIndex, processed: false, })), { ignoreDuplicates: true, + ...options, }, ); @@ -33,49 +37,69 @@ class BlockchainEventRepository { return insertedEvents; } - async getAllUnprocessedBlockchainEvents(eventNames, blockchainId) { + async getAllUnprocessedBlockchainEvents(blockchain, eventNames, options) { return this.model.findAll({ where: { - blockchainId, + blockchain, processed: false, event: { [Sequelize.Op.in]: eventNames }, }, - order: [['block', 'asc']], + order: [ + ['blockNumber', 'asc'], + ['transactionIndex', 'asc'], + ['logIndex', 'asc'], + ], + ...options, }); } - async blockchainEventExists(contract, event, data, block, blockchainId) { - const dbEvent = await this.model.findOne({ - where: { - contract, - event, - data, - block, - blockchainId, - }, - }); - return !!dbEvent; - } - - async markBlockchainEventsAsProcessed(events) { - const idsForUpdate = events.flatMap((event) => event.id); + async markAllBlockchainEventsAsProcessed(blockchain, options) { return this.model.update( { processed: true }, { - where: { id: { [Sequelize.Op.in]: idsForUpdate } }, + where: { blockchain }, + ...options, }, ); } - async removeEvents(ids) { + async removeEvents(ids, options) { await this.model.destroy({ where: { id: { [Sequelize.Op.in]: ids }, }, + ...options, + }); + } + + async removeContractEventsAfterBlock( + blockchain, + contract, + contractAddress, + blockNumber, + transactionIndex, + options, + ) { + return this.model.destroy({ + where: { + blockchain, + contract, + contractAddress, + [Sequelize.Op.or]: [ + // Events in blocks after the given blockNumber + { blockNumber: { [Sequelize.Op.gt]: blockNumber } }, + // Events in the same blockNumber but with a higher transactionIndex + { + blockNumber, + transactionIndex: { [Sequelize.Op.gt]: transactionIndex }, + }, + ], + }, + ...options, }); } - async findProcessedEvents(timestamp, limit) { + async findProcessedEvents(timestamp, limit, options) { return this.model.findAll({ where: { processed: true, @@ -84,6 +108,7 @@ class BlockchainEventRepository { order: [['createdAt', 'asc']], raw: true, limit, + ...options, }); } } diff --git a/src/modules/repository/implementation/sequelize/repositories/blockchain-repository.js b/src/modules/repository/implementation/sequelize/repositories/blockchain-repository.js index 8d16e18026..baba9ccc3c 100644 --- a/src/modules/repository/implementation/sequelize/repositories/blockchain-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/blockchain-repository.js @@ -4,27 +4,22 @@ class BlockchainRepository { this.model = models.blockchain; } - async getLastCheckedBlock(blockchainId, contract) { + async getLastCheckedBlock(blockchain, options) { return this.model.findOne({ - where: { blockchainId, contract }, + where: { blockchain }, + ...options, }); } - async removeLastCheckedBlockForContract(contract) { - return this.model.destroy({ - where: { - contract, + async updateLastCheckedBlock(blockchain, currentBlock, timestamp, options) { + return this.model.upsert( + { + blockchain, + lastCheckedBlock: currentBlock, + lastCheckedTimestamp: timestamp, }, - }); - } - - async updateLastCheckedBlock(blockchainId, currentBlock, timestamp, contract) { - return this.model.upsert({ - blockchainId, - contract, - lastCheckedBlock: currentBlock, - lastCheckedTimestamp: timestamp, - }); + options, + ); } } diff --git a/src/modules/repository/implementation/sequelize/repositories/command-repository.js b/src/modules/repository/implementation/sequelize/repositories/command-repository.js index 44c08b6bed..a789069822 100644 --- a/src/modules/repository/implementation/sequelize/repositories/command-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/command-repository.js @@ -7,23 +7,24 @@ class CommandRepository { this.model = models.commands; } - async updateCommand(update, opts) { - await this.model.update(update, opts); + async updateCommand(update, options) { + await this.model.update(update, options); } - async destroyCommand(name) { + async destroyCommand(name, options) { await this.model.destroy({ where: { name: { [Sequelize.Op.eq]: name }, }, + ...options, }); } - async createCommand(command, opts) { - return this.model.create(command, opts); + async createCommand(command, options) { + return this.model.create(command, options); } - async getCommandsWithStatus(statusArray, excludeNameArray) { + async getCommandsWithStatus(statusArray, excludeNameArray, options) { return this.model.findAll({ where: { status: { @@ -31,26 +32,29 @@ class CommandRepository { }, name: { [Sequelize.Op.notIn]: excludeNameArray }, }, + ...options, }); } - async getCommandWithId(id) { + async getCommandWithId(id, options) { return this.model.findOne({ where: { id, }, + ...options, }); } - async removeCommands(ids) { + async removeCommands(ids, options) { await this.model.destroy({ where: { id: { [Sequelize.Op.in]: ids }, }, + ...options, }); } - async findFinalizedCommands(timestamp, limit) { + async findFinalizedCommands(timestamp, limit, options) { return this.model.findAll({ where: { status: { @@ -66,6 +70,25 @@ class CommandRepository { order: [['startedAt', 'asc']], raw: true, limit, + ...options, + }); + } + + async findUnfinalizedCommandsByName(name, options) { + return this.model.findAll({ + where: { + name, + status: { + [Sequelize.Op.notIn]: [ + COMMAND_STATUS.COMPLETED, + COMMAND_STATUS.FAILED, + COMMAND_STATUS.EXPIRED, + COMMAND_STATUS.UNKNOWN, + ], + }, + }, + raw: true, + ...options, }); } } diff --git a/src/modules/repository/implementation/sequelize/repositories/event-repository.js b/src/modules/repository/implementation/sequelize/repositories/event-repository.js index 276f83ce52..d4f3eae9e9 100644 --- a/src/modules/repository/implementation/sequelize/repositories/event-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/event-repository.js @@ -11,19 +11,31 @@ class EventRepository { this.model = models.event; } - async createEventRecord(operationId, blockchainId, name, timestamp, value1, value2, value3) { - return this.model.create({ - operationId, - blockchainId, - name, - timestamp, - value1, - value2, - value3, - }); + async createEventRecord( + operationId, + blockchainId, + name, + timestamp, + value1, + value2, + value3, + options, + ) { + return this.model.create( + { + operationId, + blockchainId, + name, + timestamp, + value1, + value2, + value3, + }, + options, + ); } - async getUnpublishedEvents() { + async getUnpublishedEvents(options) { // events without COMPLETE/FAILED status which are older than 30min // are also considered finished const minutes = 5; @@ -53,6 +65,7 @@ class EventRepository { limit: Math.floor(HIGH_TRAFFIC_OPERATIONS_NUMBER_PER_HOUR / 60) * SEND_TELEMETRY_COMMAND_FREQUENCY_MINUTES, + ...options, }); operationIds = operationIds.map((e) => e.operation_id); @@ -63,16 +76,18 @@ class EventRepository { [Sequelize.Op.in]: operationIds, }, }, + ...options, }); } - async destroyEvents(ids) { + async destroyEvents(ids, options) { await this.model.destroy({ where: { id: { [Sequelize.Op.in]: ids, }, }, + ...options, }); } } diff --git a/src/modules/repository/implementation/sequelize/repositories/finality-status-repository.js b/src/modules/repository/implementation/sequelize/repositories/finality-status-repository.js new file mode 100644 index 0000000000..53e10639d1 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/repositories/finality-status-repository.js @@ -0,0 +1,19 @@ +class FinalityStatusRepository { + constructor(models) { + this.sequelize = models.sequelize; + this.model = models.finality_status; + } + + async getFinalityAcksCount(ual, options) { + return this.model.count({ + where: { ual }, + ...options, + }); + } + + async saveFinalityAck(operationId, ual, peerId, options) { + return this.model.upsert({ operationId, ual, peerId }, options); + } +} + +export default FinalityStatusRepository; diff --git a/src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js b/src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js index 30484391ec..cd9a0c8eb0 100644 --- a/src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js @@ -1,41 +1,112 @@ +import Sequelize from 'sequelize'; + class MissedParanetAssetRepository { constructor(models) { this.sequelize = models.sequelize; this.model = models.missed_paranet_asset; } - async createMissedParanetAssetRecord(missedParanetAsset) { - return this.model.create(missedParanetAsset); + async createMissedParanetAssetRecord(missedParanetAsset, options) { + return this.model.create(missedParanetAsset, options); } - async getMissedParanetAssetsRecords(paranetUal, count = null) { + async getMissedParanetAssetsRecordsWithRetryCount( + paranetUal, + retryCountLimit, + retryDelayInMs, + limit, + options, + ) { + const now = new Date(); + const delayDate = new Date(now.getTime() - retryDelayInMs); + const queryOptions = { + attributes: [ + 'blockchainId', + 'ual', + 'paranetUal', + [Sequelize.fn('MAX', Sequelize.col('created_at')), 'latestCreatedAt'], + [Sequelize.fn('COUNT', Sequelize.col('ual')), 'retryCount'], + ], where: { paranetUal, }, + group: ['ual', 'blockchainId', 'paranetUal'], + having: Sequelize.and( + Sequelize.literal(`COUNT(ual) < ${retryCountLimit}`), + Sequelize.literal(`MAX(created_at) <= '${delayDate.toISOString()}'`), + ), + ...options, }; - if (count !== null) { - queryOptions.limit = count; + if (limit !== null) { + queryOptions.limit = limit; } return this.model.findAll(queryOptions); } - async removeMissedParanetAssetRecord(ual) { + async missedParanetAssetRecordExists(ual, options) { + const missedParanetAssetRecord = await this.model.findOne({ + where: { ual }, + ...options, + }); + + return !!missedParanetAssetRecord; + } + + async removeMissedParanetAssetRecordsByUAL(ual, options) { await this.model.destroy({ where: { ual, }, + ...options, + }); + } + + async getCountOfMissedAssetsOfParanet(paranetUal, options) { + const records = await this.model.findAll({ + attributes: ['paranet_ual', 'ual'], + where: { + paranetUal, + }, + group: ['paranet_ual', 'ual'], + ...options, }); + + return records.length; } - async getCountOfMissedAssetsOfParanet(paranetUal) { - return this.model.count({ + async getFilteredCountOfMissedAssetsOfParanet( + paranetUal, + retryCountLimit, + retryDelayInMs, + options, + ) { + const now = new Date(); + const delayDate = new Date(now.getTime() - retryDelayInMs); + + const records = await this.model.findAll({ + attributes: [ + [Sequelize.fn('MAX', Sequelize.col('created_at')), 'latestCreatedAt'], + [Sequelize.fn('COUNT', Sequelize.col('ual')), 'retryCount'], + ], where: { paranetUal, }, + group: ['paranet_ual', 'ual'], + having: { + retryCount: { + [Sequelize.Op.lt]: retryCountLimit, + }, + latestCreatedAt: { + [Sequelize.Op.lte]: delayDate, + }, + }, + ...options, }); + + return records.length; } } diff --git a/src/modules/repository/implementation/sequelize/repositories/operation-id-repository.js b/src/modules/repository/implementation/sequelize/repositories/operation-id-repository.js index 9d85d2da79..cc46114c3a 100644 --- a/src/modules/repository/implementation/sequelize/repositories/operation-id-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/operation-id-repository.js @@ -6,34 +6,49 @@ class OperationIdRepository { this.model = models.operation_ids; } - async createOperationIdRecord(handlerData) { - return this.model.create(handlerData); + async createOperationIdRecord(handlerData, options) { + return this.model.create(handlerData, options); } - async getOperationIdRecord(operationId) { + async getOperationIdRecord(operationId, options) { return this.model.findOne({ where: { operationId, }, + ...options, }); } - async updateOperationIdRecord(data, operationId) { + async updateOperationIdRecord(data, operationId, options) { await this.model.update(data, { where: { operationId, }, + ...options, }); } - async removeOperationIdRecord(timeToBeDeleted, statuses) { + async removeOperationIdRecord(timeToBeDeleted, statuses, options) { await this.model.destroy({ where: { timestamp: { [Sequelize.Op.lt]: timeToBeDeleted }, status: { [Sequelize.Op.in]: statuses }, }, + ...options, }); } + + async updateMinAcksReached(operationId, minAcksReached, options) { + await this.model.update( + { minAcksReached }, + { + where: { + operationId, + }, + ...options, + }, + ); + } } export default OperationIdRepository; diff --git a/src/modules/repository/implementation/sequelize/repositories/operation-repository.js b/src/modules/repository/implementation/sequelize/repositories/operation-repository.js index e0634aaccb..a1e6cd37c6 100644 --- a/src/modules/repository/implementation/sequelize/repositories/operation-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/operation-repository.js @@ -3,51 +3,70 @@ import { Sequelize } from 'sequelize'; class OperationRepository { constructor(models) { this.sequelize = models.sequelize; - this.models = { get: models.get, publish: models.publish, update: models.update }; + this.models = { + get: models.get, + publish: models.publish, + update: models.update, + publish_paranet: models.publish_paranet, + ask: models.ask, + finality: models.finality, + }; } - async createOperationRecord(operation, operationId, status) { - return this.models[operation].create({ - operationId, - status, - }); + async createOperationRecord(operation, operationId, status, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + return this.models[operationModel].create( + { + operationId, + status, + }, + options, + ); } - async removeOperationRecords(operation, ids) { - return this.models[operation].destroy({ + async removeOperationRecords(operation, ids, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + return this.models[operationModel].destroy({ where: { id: { [Sequelize.Op.in]: ids }, }, + ...options, }); } - async findProcessedOperations(operation, timestamp, limit) { - return this.models[`${operation}`].findAll({ + async findProcessedOperations(operation, timestamp, limit, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + return this.models[`${operationModel}`].findAll({ where: { createdAt: { [Sequelize.Op.lte]: timestamp }, }, order: [['createdAt', 'asc']], raw: true, limit, + ...options, }); } - async getOperationStatus(operation, operationId) { - return this.models[operation].findOne({ + async getOperationStatus(operation, operationId, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + return this.models[operationModel].findOne({ attributes: ['status'], where: { operationId, }, + ...options, }); } - async updateOperationStatus(operation, operationId, status) { - await this.models[operation].update( + async updateOperationStatus(operation, operationId, status, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + await this.models[operationModel].update( { status }, { where: { operationId, }, + ...options, }, ); } diff --git a/src/modules/repository/implementation/sequelize/repositories/operation-response.js b/src/modules/repository/implementation/sequelize/repositories/operation-response.js index 7c55f5d139..3d59c40f98 100644 --- a/src/modules/repository/implementation/sequelize/repositories/operation-response.js +++ b/src/modules/repository/implementation/sequelize/repositories/operation-response.js @@ -7,43 +7,55 @@ class OperationResponseRepository { get_response: models.get_response, publish_response: models.publish_response, update_response: models.update_response, + publish_paranet_response: models.publish_paranet_response, + ask_response: models.ask_response, + finality_response: models.finality_response, }; } - async createOperationResponseRecord(status, operation, operationId, keyword, message) { - await this.models[`${operation}_response`].create({ - status, - message, - operationId, - keyword, - }); + async createOperationResponseRecord(status, operation, operationId, message, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + await this.models[`${operationModel}_response`].create( + { + status, + message, + operationId, + }, + options, + ); } - async getOperationResponsesStatuses(operation, operationId) { - return this.models[`${operation}_response`].findAll({ - attributes: ['status', 'keyword'], + async getOperationResponsesStatuses(operation, operationId, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + return this.models[`${operationModel}_response`].findAll({ + attributes: ['status'], where: { operationId, }, + ...options, }); } - async findProcessedOperationResponse(timestamp, limit, operation) { - return this.models[`${operation}_response`].findAll({ + async findProcessedOperationResponse(timestamp, limit, operation, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + return this.models[`${operationModel}_response`].findAll({ where: { createdAt: { [Sequelize.Op.lte]: timestamp }, }, order: [['createdAt', 'asc']], raw: true, limit, + ...options, }); } - async removeOperationResponse(ids, operation) { - await this.models[`${operation}_response`].destroy({ + async removeOperationResponse(ids, operation, options) { + const operationModel = operation.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase(); + await this.models[`${operationModel}_response`].destroy({ where: { id: { [Sequelize.Op.in]: ids }, }, + ...options, }); } } diff --git a/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js b/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js index 94ff743e9a..af46d4e4cb 100644 --- a/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js @@ -6,7 +6,7 @@ class ParanetRepository { this.model = models.paranet; } - async createParanetRecord(name, description, paranetId, blockchainId) { + async createParanetRecord(name, description, paranetId, blockchainId, options) { return this.model.create( { name, @@ -17,56 +17,79 @@ class ParanetRepository { }, { ignoreDuplicates: true, + ...options, }, ); } - async getParanet(paranetId, blockchainId) { + async getParanet(paranetId, blockchainId, options) { return this.model.findOne({ where: { paranetId, blockchainId, }, + ...options, }); } - async updateParanetKaCount(paranetId, blockchainId, kaCount) { + async addToParanetKaCount(paranetId, blockchainId, kaCount, options) { return this.model.update( - { kaCount }, + { + kaCount: Sequelize.literal(`ka_count + ${kaCount}`), + }, { where: { paranetId, blockchainId, }, + ...options, }, ); } - async paranetExists(paranetId, blockchainId) { + async paranetExists(paranetId, blockchainId, options) { const paranetRecord = await this.model.findOne({ where: { paranetId, blockchainId, }, + ...options, }); return !!paranetRecord; } - async getParanetKnowledgeAssetsCount(paranetId, blockchainId) { + async getParanetKnowledgeAssetsCount(paranetId, blockchainId, options) { return this.model.findAll({ attributes: ['ka_count'], where: { paranetId, blockchainId, }, + ...options, }); } - async getParanetsBlockchains() { + async incrementParanetKaCount(paranetId, blockchainId, options) { + return this.model.update( + { + kaCount: Sequelize.literal(`ka_count + 1`), + }, + { + where: { + paranetId, + blockchainId, + }, + ...options, + }, + ); + } + + async getParanetsBlockchains(options) { return this.model.findAll({ attributes: [ [Sequelize.fn('DISTINCT', Sequelize.col('blockchain_id')), 'blockchain_id'], ], + ...options, }); } } diff --git a/src/modules/repository/implementation/sequelize/repositories/paranet-synced-asset-repository.js b/src/modules/repository/implementation/sequelize/repositories/paranet-synced-asset-repository.js new file mode 100644 index 0000000000..c9cde1c422 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/repositories/paranet-synced-asset-repository.js @@ -0,0 +1,57 @@ +class ParanetSyncedAssetRepository { + constructor(models) { + this.sequelize = models.sequelize; + this.model = models.paranet_synced_asset; + } + + async createParanetSyncedAssetRecord( + blockchainId, + ual, + paranetUal, + publicAssertionId, + privateAssertionId, + sender, + transactionHash, + dataSource, + options, + ) { + return this.model.create( + { + blockchainId, + ual, + paranetUal, + publicAssertionId, + privateAssertionId, + sender, + transactionHash, + dataSource, + }, + options, + ); + } + + async getParanetSyncedAssetRecordByUAL(ual, options) { + return this.model.findOne({ + where: { ual }, + ...options, + }); + } + + async getParanetSyncedAssetRecordsCountByDataSource(paranetUal, dataSource, options) { + return this.model.count({ + where: { + paranetUal, + dataSource, + }, + ...options, + }); + } + + async paranetSyncedAssetRecordExists(ual, options) { + const paranetSyncedAssetRecord = await this.getParanetSyncedAssetRecordByUAL(ual, options); + + return !!paranetSyncedAssetRecord; + } +} + +export default ParanetSyncedAssetRepository; diff --git a/src/modules/repository/implementation/sequelize/repositories/service-agreement-repository.js b/src/modules/repository/implementation/sequelize/repositories/service-agreement-repository.js deleted file mode 100644 index 844a523dcd..0000000000 --- a/src/modules/repository/implementation/sequelize/repositories/service-agreement-repository.js +++ /dev/null @@ -1,336 +0,0 @@ -import Sequelize from 'sequelize'; - -class ServiceAgreementRepository { - constructor(models) { - this.sequelize = models.sequelize; - this.model = models.service_agreement; - } - - async updateServiceAgreementEpochsNumber(agreementId, epochsNumber) { - return this.model.update( - { epochsNumber }, - { - where: { agreementId }, - }, - ); - } - - async removeServiceAgreements(agreementIds) { - return this.model.destroy({ - where: { agreementId: { [Sequelize.Op.in]: agreementIds } }, - }); - } - - async removeServiceAgreementsForBlockchain(blockchainId) { - await this.model.destroy({ - where: { - blockchainId, - }, - }); - } - - async updateServiceAgreementRecord( - blockchainId, - assetStorageContractAddress, - tokenId, - agreementId, - startTime, - epochsNumber, - epochLength, - scoreFunctionId, - proofWindowOffsetPerc, - hashFunctionId, - keyword, - assertionId, - stateIndex, - dataSource, - lastCommitEpoch, - lastProofEpoch, - ) { - return this.model.upsert({ - blockchainId, - assetStorageContractAddress, - tokenId, - agreementId, - startTime, - epochsNumber, - epochLength, - scoreFunctionId, - proofWindowOffsetPerc, - hashFunctionId, - keyword, - assertionId, - stateIndex, - dataSource, - lastCommitEpoch, - lastProofEpoch, - }); - } - - async updateServiceAgreementForTokenId(tokenId, agreementId, keyword, assertionId, stateIndex) { - return this.model.update( - { - agreementId, - keyword, - assertionId, - stateIndex, - }, - { - where: { - tokenId, - }, - }, - ); - } - - async serviceAgreementExists(blockchainId, tokenId) { - const agreementRecord = await this.model.findOne({ - where: { - blockchainId, - tokenId, - }, - }); - return !!agreementRecord; - } - - async bulkCreateServiceAgreementRecords(serviceAgreements) { - return this.model.bulkCreate(serviceAgreements, { - ignoreDuplicates: true, - }); - } - - async getServiceAgreementRecord(agreementId) { - return this.model.findOne({ - where: { - agreementId, - }, - }); - } - - async updateServiceAgreementLastCommitEpoch(agreementId, lastCommitEpoch) { - return this.model.update( - { lastCommitEpoch }, - { - where: { - agreementId, - }, - }, - ); - } - - async updateServiceAgreementLastProofEpoch(agreementId, lastProofEpoch) { - return this.model.update( - { lastProofEpoch }, - { - where: { - agreementId, - }, - }, - ); - } - - async removeServiceAgreementRecord(blockchainId, contract, tokenId) { - await this.model.destroy({ - where: { - blockchainId, - assetStorageContractAddress: contract, - tokenId, - }, - }); - } - - getEligibleAgreementsForSubmitCommit( - timestampSeconds, - blockchain, - commitWindowDurationPerc, - startTimeDelay, - ) { - const cutoffTimestamp = timestampSeconds - startTimeDelay; - const currentEpoch = `FLOOR((${timestampSeconds} - start_time) / epoch_length)`; - const currentEpochPerc = `((${timestampSeconds} - start_time) % epoch_length) / epoch_length * 100`; - - return this.model.findAll({ - attributes: { - include: [ - [Sequelize.literal(currentEpoch), 'currentEpoch'], - [ - Sequelize.cast( - Sequelize.literal(`${commitWindowDurationPerc} - ${currentEpochPerc}`), - 'DOUBLE', - ), - 'timeLeftInSubmitCommitWindow', - ], - ], - }, - where: { - blockchainId: blockchain, - start_time: { - [Sequelize.Op.lt]: cutoffTimestamp, - }, - [Sequelize.Op.or]: [ - { - lastCommitEpoch: { - [Sequelize.Op.is]: null, - }, - }, - { - lastCommitEpoch: { - [Sequelize.Op.lt]: Sequelize.literal(currentEpoch), - }, - }, - ], - [Sequelize.Op.and]: Sequelize.literal( - `${currentEpochPerc} < ${commitWindowDurationPerc}`, - ), - epochsNumber: { - [Sequelize.Op.gt]: Sequelize.literal(currentEpoch), - }, - }, - order: [ - ['scoreFunctionId', 'DESC'], - [Sequelize.col('timeLeftInSubmitCommitWindow'), 'ASC'], - ], - limit: 500, - raw: true, - }); - } - - async getEligibleAgreementsForSubmitProof( - timestampSeconds, - blockchain, - proofWindowDurationPerc, - ) { - const currentEpoch = `FLOOR((${timestampSeconds} - start_time) / epoch_length)`; - const currentEpochPerc = `((${timestampSeconds} - start_time) % epoch_length) / epoch_length * 100`; - - return this.model.findAll({ - attributes: { - include: [ - [Sequelize.literal(currentEpoch), 'currentEpoch'], - [ - Sequelize.cast( - Sequelize.literal( - `proof_window_offset_perc + ${proofWindowDurationPerc} - ${currentEpochPerc}`, - ), - 'DOUBLE', - ), - 'timeLeftInSubmitProofWindow', - ], - ], - }, - where: { - blockchainId: blockchain, - lastCommitEpoch: { - [Sequelize.Op.eq]: Sequelize.literal(currentEpoch), - }, - [Sequelize.Op.or]: [ - { - lastProofEpoch: { - [Sequelize.Op.is]: null, - }, - }, - { - lastProofEpoch: { - [Sequelize.Op.lt]: Sequelize.literal(currentEpoch), - }, - }, - ], - proofWindowOffsetPerc: { - [Sequelize.Op.lte]: Sequelize.literal(`${currentEpochPerc}`), - [Sequelize.Op.gt]: Sequelize.literal( - `${currentEpochPerc} - ${proofWindowDurationPerc}`, - ), - }, - epochsNumber: { - [Sequelize.Op.gt]: Sequelize.literal(currentEpoch), - }, - }, - order: [ - ['scoreFunctionId', 'DESC'], - [Sequelize.col('timeLeftInSubmitProofWindow'), 'ASC'], - ], - limit: 500, - raw: true, - }); - } - - async getNumberOfActiveServiceAgreements() { - return this.model.count(); - } - - async getServiceAgreements(fromTokenId, batchSize) { - return this.model.findAll({ - where: { - tokenId: { [Sequelize.Op.gte]: fromTokenId }, - }, - limit: batchSize, - order: [['token_id', 'asc']], - }); - } - - async getServiceAgreementsTokenIds(fromTokenId, blockchainId) { - return this.model.findAll({ - attributes: ['tokenId'], - where: { - tokenId: { [Sequelize.Op.gte]: fromTokenId }, - blockchainId, - }, - order: [['token_id', 'asc']], - }); - } - - async getLatestServiceAgreementTokenId(blockchainId) { - return this.model.max('tokenId', { - where: { - blockchainId, - }, - }); - } - - async getCountOfServiceAgreementsByBlockchainAndContract(blockchainId, contract) { - return this.model.count({ - where: { - blockchainId, - assetStorageContractAddress: { - [Sequelize.Op.ne]: contract, - }, - }, - }); - } - - // Sequelize destroy method doesn't support limit - async removeServiceAgreementsByBlockchainAndContract(blockchainId, contract) { - const query = ` - DELETE FROM service_agreement - WHERE blockchain_id = '${blockchainId}' - AND asset_storage_contract_address != '${contract}' - LIMIT 100000; - `; - await this.sequelize.query(query, { - type: Sequelize.QueryTypes.DELETE, - }); - } - - async findDuplicateServiceAgreements(blockchainId) { - return this.model.findAll({ - attributes: ['token_id', [Sequelize.fn('COUNT', Sequelize.col('*')), 'count']], - where: { - blockchain_id: `${blockchainId}`, - }, - group: ['token_id'], - having: Sequelize.literal('count > 1'), - }); - } - - async findServiceAgreementsByTokenIds(tokenIds, blockchainId) { - return this.model.findAll({ - where: { - tokenId: { [Sequelize.Op.in]: tokenIds }, - blockchainId, - }, - order: [['token_id']], - }); - } -} - -export default ServiceAgreementRepository; diff --git a/src/modules/repository/implementation/sequelize/repositories/shard-repository.js b/src/modules/repository/implementation/sequelize/repositories/shard-repository.js index 945aa5810a..6d34ec9984 100644 --- a/src/modules/repository/implementation/sequelize/repositories/shard-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/shard-repository.js @@ -6,20 +6,22 @@ class ShardRepository { this.model = models.shard; } - async createManyPeerRecords(peerRecords) { + async createManyPeerRecords(peerRecords, options) { return this.model.bulkCreate(peerRecords, { validate: true, updateOnDuplicate: ['ask', 'stake', 'sha256'], + ...options, }); } - async removeShardingTablePeerRecords(blockchainId) { + async removeShardingTablePeerRecords(blockchainId, options) { return this.model.destroy({ where: { blockchainId }, + ...options, }); } - async createPeerRecord(peerId, blockchainId, ask, stake, lastSeen, sha256) { + async createPeerRecord(peerId, blockchainId, ask, stake, lastSeen, sha256, options) { return this.model.create( { peerId, @@ -31,11 +33,12 @@ class ShardRepository { }, { ignoreDuplicates: true, + ...options, }, ); } - async getAllPeerRecords(blockchainId) { + async getAllPeerRecords(blockchainId, options) { const query = { where: { blockchainId, @@ -50,29 +53,44 @@ class ShardRepository { 'sha256', ], order: [['sha256', 'asc']], + ...options, }; return this.model.findAll(query); } - async getPeerRecord(peerId, blockchainId) { + async getPeerRecordsByIds(blockchainId, peerIds, options) { + return this.model.findAll({ + where: { + blockchainId, + peerId: { + [Sequelize.Op.in]: peerIds, + }, + }, + ...options, + }); + } + + async getPeerRecord(peerId, blockchainId, options) { return this.model.findOne({ where: { blockchainId, peerId, }, + ...options, }); } - async getPeersCount(blockchainId) { + async getPeersCount(blockchainId, options) { return this.model.count({ where: { blockchainId, }, + ...options, }); } - async getPeersToDial(limit, dialFrequencyMillis) { + async getPeersToDial(limit, dialFrequencyMillis, options) { const result = await this.model.findAll({ attributes: ['peer_id'], where: { @@ -84,11 +102,12 @@ class ShardRepository { group: ['peer_id', 'last_dialed'], limit, raw: true, + ...options, }); return (result ?? []).map((record) => ({ peerId: record.peer_id })); } - async updatePeerAsk(peerId, blockchainId, ask) { + async updatePeerAsk(peerId, blockchainId, ask, options) { return this.model.update( { ask }, { @@ -96,11 +115,12 @@ class ShardRepository { peerId, blockchainId, }, + ...options, }, ); } - async updatePeerStake(peerId, blockchainId, stake) { + async updatePeerStake(peerId, blockchainId, stake, options) { return this.model.update( { stake }, { @@ -108,22 +128,24 @@ class ShardRepository { peerId, blockchainId, }, + ...options, }, ); } - async updatePeerRecordLastDialed(peerId, timestamp) { + async updatePeerRecordLastDialed(peerId, timestamp, options) { return this.model.update( { lastDialed: timestamp, }, { where: { peerId }, + ...options, }, ); } - async updatePeerRecordLastSeenAndLastDialed(peerId, timestamp) { + async updatePeerRecordLastSeenAndLastDialed(peerId, timestamp, options) { return this.model.update( { lastDialed: timestamp, @@ -131,24 +153,36 @@ class ShardRepository { }, { where: { peerId }, + ...options, }, ); } - async removePeerRecord(blockchainId, peerId) { + async removePeerRecord(blockchainId, peerId, options) { await this.model.destroy({ where: { blockchainId, peerId, }, + ...options, }); } - async cleanShardingTable(blockchainId) { + async cleanShardingTable(blockchainId, options) { await this.model.destroy({ where: blockchainId ? { blockchainId } : {}, + ...options, }); } + + async isNodePartOfShard(blockchainId, peerId, options) { + const nodeIsPartOfShard = await this.model.findOne({ + where: { blockchainId, peerId }, + ...options, + }); + + return !!nodeIsPartOfShard; + } } export default ShardRepository; diff --git a/src/modules/repository/implementation/sequelize/repositories/token-repository.js b/src/modules/repository/implementation/sequelize/repositories/token-repository.js index 6c3e601267..3de7ba92a8 100644 --- a/src/modules/repository/implementation/sequelize/repositories/token-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/token-repository.js @@ -6,22 +6,25 @@ class TokenRepository { this.model = models.token; } - async saveToken(tokenId, userId, tokenName, expiresAt) { - return this.model.create({ - id: tokenId, - userId, - expiresAt, - name: tokenName, - }); + async saveToken(tokenId, userId, tokenName, expiresAt, options) { + return this.model.create( + { + id: tokenId, + userId, + expiresAt, + name: tokenName, + }, + options, + ); } - async isTokenRevoked(tokenId) { - const token = await this.model.findByPk(tokenId); + async isTokenRevoked(tokenId, options) { + const token = await this.model.findByPk(tokenId, options); return token && token.revoked; } - async getTokenAbilities(tokenId) { + async getTokenAbilities(tokenId, options) { const abilities = await this.sequelize.query( `SELECT a.name FROM token t INNER JOIN user u ON t.user_id = u.id @@ -29,7 +32,11 @@ class TokenRepository { INNER JOIN role_ability ra on r.id = ra.role_id INNER JOIN ability a on ra.ability_id = a.id WHERE t.id=$tokenId;`, - { bind: { tokenId }, type: Sequelize.QueryTypes.SELECT }, + { + bind: { tokenId }, + type: Sequelize.QueryTypes.SELECT, + ...options, + }, ); return abilities.map((e) => e.name); diff --git a/src/modules/repository/implementation/sequelize/repositories/user-repository.js b/src/modules/repository/implementation/sequelize/repositories/user-repository.js index c54a84a155..16fb043e81 100644 --- a/src/modules/repository/implementation/sequelize/repositories/user-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/user-repository.js @@ -4,11 +4,12 @@ class UserRepository { this.model = models.user; } - async getUser(username) { + async getUser(username, options) { return this.model.findOne({ where: { name: username, }, + ...options, }); } } diff --git a/src/modules/repository/implementation/sequelize/sequelize-repository.js b/src/modules/repository/implementation/sequelize/sequelize-repository.js index 90ab1c7f54..e72060f707 100644 --- a/src/modules/repository/implementation/sequelize/sequelize-repository.js +++ b/src/modules/repository/implementation/sequelize/sequelize-repository.js @@ -12,11 +12,12 @@ import ParanetRepository from './repositories/paranet-repository.js'; import OperationIdRepository from './repositories/operation-id-repository.js'; import OperationRepository from './repositories/operation-repository.js'; import OperationResponseRepository from './repositories/operation-response.js'; -import ServiceAgreementRepository from './repositories/service-agreement-repository.js'; import ShardRepository from './repositories/shard-repository.js'; import TokenRepository from './repositories/token-repository.js'; import UserRepository from './repositories/user-repository.js'; import MissedParanetAssetRepository from './repositories/missed-paranet-asset-repository.js'; +import ParanetSyncedAssetRepository from './repositories/paranet-synced-asset-repository.js'; +import FinalityStatusRepository from './repositories/finality-status-repository.js'; const __dirname = fileURLToPath(new URL('.', import.meta.url)); @@ -37,14 +38,15 @@ class SequelizeRepository { command: new CommandRepository(this.models), event: new EventRepository(this.models), paranet: new ParanetRepository(this.models), + paranet_synced_asset: new ParanetSyncedAssetRepository(this.models), missed_paranet_asset: new MissedParanetAssetRepository(this.models), operation_id: new OperationIdRepository(this.models), operation: new OperationRepository(this.models), operation_response: new OperationResponseRepository(this.models), - service_agreement: new ServiceAgreementRepository(this.models), shard: new ShardRepository(this.models), token: new TokenRepository(this.models), user: new UserRepository(this.models), + finality_status: new FinalityStatusRepository(this.models), }; } @@ -73,7 +75,7 @@ class SequelizeRepository { } async createDatabaseIfNotExists() { - const connection = await mysql.createConnection({ + const connection = mysql.createConnection({ host: process.env.SEQUELIZE_REPOSITORY_HOST, port: process.env.SEQUELIZE_REPOSITORY_PORT, user: process.env.SEQUELIZE_REPOSITORY_USER, @@ -86,7 +88,7 @@ class SequelizeRepository { } async dropDatabase() { - const connection = await mysql.createConnection({ + const connection = mysql.createConnection({ host: process.env.SEQUELIZE_REPOSITORY_HOST, port: process.env.SEQUELIZE_REPOSITORY_PORT, user: process.env.SEQUELIZE_REPOSITORY_USER, @@ -127,20 +129,23 @@ class SequelizeRepository { }); } - transaction(execFn) { - return this.models.sequelize.transaction(async (t) => execFn(t)); + async transaction(execFn) { + if (execFn) { + return this.models.sequelize.transaction(async (t) => execFn(t)); + } + return this.models.sequelize.transaction(); } getRepository(repositoryName) { return this.repositories[repositoryName]; } - async query(query) { - return this.models.sequelize.query(query); + async query(query, options) { + return this.models.sequelize.query(query, options); } - async destroyAllRecords(table) { - return this.models[table].destroy({ where: {} }); + async destroyAllRecords(table, options) { + return this.models[table].destroy({ where: {}, ...options }); } } diff --git a/src/modules/repository/repository-module-manager.js b/src/modules/repository/repository-module-manager.js index eea9d49833..92f4793043 100644 --- a/src/modules/repository/repository-module-manager.js +++ b/src/modules/repository/repository-module-manager.js @@ -12,7 +12,7 @@ class RepositoryModuleManager extends BaseModuleManager { return this.getImplementation().module.getRepository(repoName); } - transaction(execFn) { + async transaction(execFn) { if (this.initialized) { return this.getImplementation().module.transaction(execFn); } @@ -24,132 +24,165 @@ class RepositoryModuleManager extends BaseModuleManager { } } - async query(query) { + async query(query, options = {}) { if (this.initialized) { - return this.getImplementation().module.query(query); + return this.getImplementation().module.query(query, options); } } - async destroyAllRecords(table) { + async destroyAllRecords(table, options = {}) { if (this.initialized) { - return this.getImplementation().module.destroyAllRecords(table); + return this.getImplementation().module.destroyAllRecords(table, options); } } - async updateCommand(update, opts) { - return this.getRepository('command').updateCommand(update, opts); + async updateCommand(update, options = {}) { + return this.getRepository('command').updateCommand(update, options); } - async destroyCommand(name) { - return this.getRepository('command').destroyCommand(name); + async destroyCommand(name, options = {}) { + return this.getRepository('command').destroyCommand(name, options); } - async createCommand(command, opts) { - return this.getRepository('command').createCommand(command, opts); + async createCommand(command, options = {}) { + return this.getRepository('command').createCommand(command, options); } - async getCommandsWithStatus(statusArray, excludeNameArray = []) { - return this.getRepository('command').getCommandsWithStatus(statusArray, excludeNameArray); + async getCommandsWithStatus(statusArray, excludeNameArray = [], options = {}) { + return this.getRepository('command').getCommandsWithStatus( + statusArray, + excludeNameArray, + options, + ); + } + + async getCommandWithId(id, options = {}) { + return this.getRepository('command').getCommandWithId(id, options); } - async getCommandWithId(id) { - return this.getRepository('command').getCommandWithId(id); + async removeCommands(ids, options = {}) { + return this.getRepository('command').removeCommands(ids, options); } - async removeCommands(ids) { - return this.getRepository('command').removeCommands(ids); + async findFinalizedCommands(timestamp, limit, options = {}) { + return this.getRepository('command').findFinalizedCommands(timestamp, limit, options); } - async findFinalizedCommands(timestamp, limit) { - return this.getRepository('command').findFinalizedCommands(timestamp, limit); + async findUnfinalizedCommandsByName(limit, options = {}) { + return this.getRepository('command').findUnfinalizedCommandsByName(limit, options); } - async createOperationIdRecord(handlerData) { - return this.getRepository('operation_id').createOperationIdRecord(handlerData); + async createOperationIdRecord(handlerData, options = {}) { + return this.getRepository('operation_id').createOperationIdRecord(handlerData, options); } - async updateOperationIdRecord(data, operationId) { - return this.getRepository('operation_id').updateOperationIdRecord(data, operationId); + async updateOperationIdRecord(data, operationId, options = {}) { + return this.getRepository('operation_id').updateOperationIdRecord( + data, + operationId, + options, + ); } - async getOperationIdRecord(operationId) { - return this.getRepository('operation_id').getOperationIdRecord(operationId); + async getOperationIdRecord(operationId, options = {}) { + return this.getRepository('operation_id').getOperationIdRecord(operationId, options); } - async removeOperationIdRecord(timeToBeDeleted, statuses) { + async removeOperationIdRecord(timeToBeDeleted, statuses, options = {}) { return this.getRepository('operation_id').removeOperationIdRecord( timeToBeDeleted, statuses, + options, ); } - async createOperationRecord(operation, operationId, status) { + async updateMinAcksReached(operationId, minAcksReached, options = {}) { + return this.getRepository('operation_id').updateMinAcksReached( + operationId, + minAcksReached, + options, + ); + } + + async createOperationRecord(operation, operationId, status, options = {}) { return this.getRepository('operation').createOperationRecord( operation, operationId, status, + options, ); } - async removeOperationRecords(operation, ids) { - return this.getRepository('operation').removeOperationRecords(operation, ids); + async removeOperationRecords(operation, ids, options = {}) { + return this.getRepository('operation').removeOperationRecords(operation, ids, options); } - async findProcessedOperations(operation, timestamp, limit) { - return this.getRepository('operation').findProcessedOperations(operation, timestamp, limit); + async findProcessedOperations(operation, timestamp, limit, options = {}) { + return this.getRepository('operation').findProcessedOperations( + operation, + timestamp, + limit, + options, + ); } - async getOperationStatus(operation, operationId) { - return this.getRepository('operation').getOperationStatus(operation, operationId); + async getOperationStatus(operation, operationId, options = {}) { + return this.getRepository('operation').getOperationStatus(operation, operationId, options); } - async updateOperationStatus(operation, operationId, status) { + async updateOperationStatus(operation, operationId, status, options = {}) { return this.getRepository('operation').updateOperationStatus( operation, operationId, status, + options, ); } - async createOperationResponseRecord(status, operation, operationId, keyword, errorMessage) { + async createOperationResponseRecord(status, operation, operationId, errorMessage, options) { return this.getRepository('operation_response').createOperationResponseRecord( status, operation, operationId, - keyword, errorMessage, + options, ); } - async getOperationResponsesStatuses(operation, operationId) { + async getOperationResponsesStatuses(operation, operationId, options = {}) { return this.getRepository('operation_response').getOperationResponsesStatuses( operation, operationId, + options, ); } - async findProcessedOperationResponse(timestamp, limit, operation) { + async findProcessedOperationResponse(timestamp, limit, operation, options = {}) { return this.getRepository('operation_response').findProcessedOperationResponse( timestamp, limit, operation, + options, ); } - async removeOperationResponse(ids, operation) { - return this.getRepository('operation_response').removeOperationResponse(ids, operation); + async removeOperationResponse(ids, operation, options = {}) { + return this.getRepository('operation_response').removeOperationResponse( + ids, + operation, + options, + ); } - // Sharding Table - async createManyPeerRecords(peers) { - return this.getRepository('shard').createManyPeerRecords(peers); + async createManyPeerRecords(peers, options = {}) { + return this.getRepository('shard').createManyPeerRecords(peers, options); } - async removeShardingTablePeerRecords(blockchain) { - return this.getRepository('shard').removeShardingTablePeerRecords(blockchain); + async removeShardingTablePeerRecords(blockchain, options = {}) { + return this.getRepository('shard').removeShardingTablePeerRecords(blockchain, options); } - async createPeerRecord(peerId, blockchain, ask, stake, lastSeen, sha256) { + async createPeerRecord(peerId, blockchain, ask, stake, lastSeen, sha256, options = {}) { return this.getRepository('shard').createPeerRecord( peerId, blockchain, @@ -157,402 +190,323 @@ class RepositoryModuleManager extends BaseModuleManager { stake, lastSeen, sha256, + options, ); } - async getPeerRecord(peerId, blockchain) { - return this.getRepository('shard').getPeerRecord(peerId, blockchain); + async getPeerRecord(peerId, blockchain, options = {}) { + return this.getRepository('shard').getPeerRecord(peerId, blockchain, options); } - async getAllPeerRecords(blockchain) { - return this.getRepository('shard').getAllPeerRecords(blockchain); + async getAllPeerRecords(blockchain, options = {}) { + return this.getRepository('shard').getAllPeerRecords(blockchain, options); } - async getPeersCount(blockchain) { - return this.getRepository('shard').getPeersCount(blockchain); + async getPeerRecordsByIds(blockchain, peerIds, options = {}) { + return this.getRepository('shard').getPeerRecordsByIds(blockchain, peerIds, options); } - async getPeersToDial(limit, dialFrequencyMillis) { - return this.getRepository('shard').getPeersToDial(limit, dialFrequencyMillis); + async getPeersCount(blockchain, options = {}) { + return this.getRepository('shard').getPeersCount(blockchain, options); } - async removePeerRecord(blockchain, peerId) { - return this.getRepository('shard').removePeerRecord(blockchain, peerId); + async getPeersToDial(limit, dialFrequencyMillis, options = {}) { + return this.getRepository('shard').getPeersToDial(limit, dialFrequencyMillis, options); } - async updatePeerRecordLastDialed(peerId, timestamp) { - return this.getRepository('shard').updatePeerRecordLastDialed(peerId, timestamp); + async removePeerRecord(blockchain, peerId, options = {}) { + return this.getRepository('shard').removePeerRecord(blockchain, peerId, options); } - async updatePeerRecordLastSeenAndLastDialed(peerId, timestamp) { - return this.getRepository('shard').updatePeerRecordLastSeenAndLastDialed(peerId, timestamp); + async updatePeerRecordLastDialed(peerId, timestamp, options = {}) { + return this.getRepository('shard').updatePeerRecordLastDialed(peerId, timestamp, options); } - async updatePeerAsk(peerId, blockchainId, ask) { - return this.getRepository('shard').updatePeerAsk(peerId, blockchainId, ask); + async updatePeerRecordLastSeenAndLastDialed(peerId, timestamp, options = {}) { + return this.getRepository('shard').updatePeerRecordLastSeenAndLastDialed( + peerId, + timestamp, + options, + ); } - async updatePeerStake(peerId, blockchainId, stake) { - return this.getRepository('shard').updatePeerStake(peerId, blockchainId, stake); + async updatePeerAsk(peerId, blockchainId, ask, options = {}) { + return this.getRepository('shard').updatePeerAsk(peerId, blockchainId, ask, options); } - async getNeighbourhood(assertionId, r2) { - return this.getRepository('shard').getNeighbourhood(assertionId, r2); + async updatePeerStake(peerId, blockchainId, stake, options = {}) { + return this.getRepository('shard').updatePeerStake(peerId, blockchainId, stake, options); } - async cleanShardingTable(blockchainId) { - return this.getRepository('shard').cleanShardingTable(blockchainId); + async getNeighbourhood(assertionId, r2, options = {}) { + return this.getRepository('shard').getNeighbourhood(assertionId, r2, options); } - async createEventRecord( - operationId, - blockchainId, - name, - timestamp, - value1 = null, - value2 = null, - value3 = null, - ) { - return this.getRepository('event').createEventRecord( - operationId, - blockchainId, - name, - timestamp, - value1, - value2, - value3, - ); + async cleanShardingTable(blockchainId, options = {}) { + return this.getRepository('shard').cleanShardingTable(blockchainId, options); } - async getUnpublishedEvents() { - return this.getRepository('event').getUnpublishedEvents(); + async isNodePartOfShard(blockchainId, peerId, options = {}) { + return this.getRepository('shard').isNodePartOfShard(blockchainId, peerId, options); } - async destroyEvents(ids) { - return this.getRepository('event').destroyEvents(ids); + async destroyEvents(ids, options = {}) { + return this.getRepository('event').destroyEvents(ids, options); } - async getUser(username) { - return this.getRepository('user').getUser(username); + async getUser(username, options = {}) { + return this.getRepository('user').getUser(username, options); } - async saveToken(tokenId, userId, tokenName, expiresAt) { - return this.getRepository('token').saveToken(tokenId, userId, tokenName, expiresAt); + async saveToken(tokenId, userId, tokenName, expiresAt, options = {}) { + return this.getRepository('token').saveToken( + tokenId, + userId, + tokenName, + expiresAt, + options, + ); } - async isTokenRevoked(tokenId) { - return this.getRepository('token').isTokenRevoked(tokenId); + async isTokenRevoked(tokenId, options = {}) { + return this.getRepository('token').isTokenRevoked(tokenId, options); } - async getTokenAbilities(tokenId) { - return this.getRepository('token').getTokenAbilities(tokenId); + async getTokenAbilities(tokenId, options = {}) { + return this.getRepository('token').getTokenAbilities(tokenId, options); } - async insertBlockchainEvents(events) { - return this.getRepository('blockchain_event').insertBlockchainEvents(events); + async insertBlockchainEvents(events, options = {}) { + return this.getRepository('blockchain_event').insertBlockchainEvents(events, options); } - async getAllUnprocessedBlockchainEvents(eventNames, blockchainId) { + async getAllUnprocessedBlockchainEvents(blockchain, eventNames, options = {}) { return this.getRepository('blockchain_event').getAllUnprocessedBlockchainEvents( + blockchain, eventNames, - blockchainId, + options, ); } - async markBlockchainEventsAsProcessed(events) { - return this.getRepository('blockchain_event').markBlockchainEventsAsProcessed(events); - } - - async removeBlockchainEvents(contract) { - return this.getRepository('blockchain_event').removeBlockchainEvents(contract); + async markAllBlockchainEventsAsProcessed(blockchain, options = {}) { + return this.getRepository('blockchain_event').markAllBlockchainEventsAsProcessed( + blockchain, + options, + ); } - async removeEvents(ids) { - return this.getRepository('blockchain_event').removeEvents(ids); + async removeEvents(ids, options = {}) { + return this.getRepository('blockchain_event').removeEvents(ids, options); } - async findProcessedEvents(timestamp, limit) { - return this.getRepository('blockchain_event').findProcessedEvents(timestamp, limit); + async removeContractEventsAfterBlock( + blockchain, + contract, + contractAddress, + blockNumber, + transactionIndex, + options = {}, + ) { + return this.getRepository('blockchain_event').removeContractEventsAfterBlock( + blockchain, + contract, + contractAddress, + blockNumber, + transactionIndex, + options, + ); } - async removeLastCheckedBlockForContract(contract) { - return this.getRepository('blockchain').removeLastCheckedBlockForContract(contract); + async findProcessedEvents(timestamp, limit, options = {}) { + return this.getRepository('blockchain_event').findProcessedEvents( + timestamp, + limit, + options, + ); } - async getLastCheckedBlock(blockchainId, contract) { - return this.getRepository('blockchain').getLastCheckedBlock(blockchainId, contract); + async getLastCheckedBlock(blockchain, options = {}) { + return this.getRepository('blockchain').getLastCheckedBlock(blockchain, options); } - async updateLastCheckedBlock(blockchainId, currentBlock, timestamp, contract) { + async updateLastCheckedBlock(blockchain, currentBlock, timestamp, options = {}) { return this.getRepository('blockchain').updateLastCheckedBlock( - blockchainId, + blockchain, currentBlock, timestamp, - contract, + options, ); } - async getOrCreateParanetById(paranetId) { - return this.getRepository('paranet').getOrCreateParanet(paranetId); - } - - async updateParanetKaCount(paranetId, blockchainId, kaCount) { - return this.getRepository('paranet').updateParanetKaCount(paranetId, blockchainId, kaCount); - } - - async updateServiceAgreementRecord( - blockchainId, - contract, - tokenId, - agreementId, - startTime, - epochsNumber, - epochLength, - scoreFunctionId, - proofWindowOffsetPerc, - hashFunctionId, - keyword, - assertionId, - stateIndex, - dataSource, - lastCommitEpoch, - lastProofEpoch, - ) { - if (this.initialized) { - return this.getRepository('service_agreement').updateServiceAgreementRecord( - blockchainId, - contract, - tokenId, - agreementId, - startTime, - epochsNumber, - epochLength, - scoreFunctionId, - proofWindowOffsetPerc, - hashFunctionId, - keyword, - assertionId, - stateIndex, - dataSource, - lastCommitEpoch, - lastProofEpoch, - ); - } - } - - async updateServiceAgreementForTokenId(tokenId, agreementId, keyword, assertionId, stateIndex) { - if (this.initialized) { - return this.getRepository('service_agreement').updateServiceAgreementForTokenId( - tokenId, - agreementId, - keyword, - assertionId, - stateIndex, - ); - } - } - - async serviceAgreementExists(blockchain, tokenId) { - if (this.initialized) { - return this.getRepository('service_agreement').serviceAgreementExists( - blockchain, - tokenId, - ); - } - } - - async bulkCreateServiceAgreementRecords(records) { - if (this.initialized) { - return this.getRepository('service_agreement').bulkCreateServiceAgreementRecords( - records, - ); - } - } - - async getServiceAgreementRecord(agreementId) { - if (this.initialized) { - return this.getRepository('service_agreement').getServiceAgreementRecord(agreementId); - } - } - - async updateServiceAgreementLastCommitEpoch(agreementId, lastCommitEpoch) { - if (this.initialized) { - return this.getRepository('service_agreement').updateServiceAgreementLastCommitEpoch( - agreementId, - lastCommitEpoch, - ); - } - } - - async updateServiceAgreementLastProofEpoch(agreementId, lastProofEpoch) { - if (this.initialized) { - return this.getRepository('service_agreement').updateServiceAgreementLastProofEpoch( - agreementId, - lastProofEpoch, - ); - } - } - - async removeServiceAgreementRecord(blockchainId, contract, tokenId) { - if (this.initialized) { - return this.getRepository('service_agreement').removeServiceAgreementRecord( - blockchainId, - contract, - tokenId, - ); - } - } - - async getCountOfServiceAgreementsByBlockchainAndContract(blockchainId, contract) { - if (this.initialized) { - return this.getRepository( - 'service_agreement', - ).getCountOfServiceAgreementsByBlockchainAndContract(blockchainId, contract); - } - } - - async removeServiceAgreementsByBlockchainAndContract(blockchainId, contract) { - if (this.initialized) { - return this.getRepository( - 'service_agreement', - ).removeServiceAgreementsByBlockchainAndContract(blockchainId, contract); - } + async addToParanetKaCount(paranetId, blockchainId, kaCount, options = {}) { + return this.getRepository('paranet').addToParanetKaCount( + paranetId, + blockchainId, + kaCount, + options, + ); } - async getEligibleAgreementsForSubmitCommit( - timestampSeconds, - blockchain, - commitWindowDurationPerc, - ask, - startTimeDelay, - ) { - if (this.initialized) { - return this.getRepository('service_agreement').getEligibleAgreementsForSubmitCommit( - timestampSeconds, - blockchain, - commitWindowDurationPerc, - ask, - startTimeDelay, - ); - } + async createParanetRecord(name, description, paranetId, blockchainId, options = {}) { + this.getRepository('paranet').createParanetRecord( + name, + description, + paranetId, + blockchainId, + options, + ); } - async getEligibleAgreementsForSubmitProof( - timestampSeconds, - blockchain, - proofWindowDurationPerc, - ) { - if (this.initialized) { - return this.getRepository('service_agreement').getEligibleAgreementsForSubmitProof( - timestampSeconds, - blockchain, - proofWindowDurationPerc, - ); - } + async paranetExists(paranetId, blockchainId, options = {}) { + return this.getRepository('paranet').paranetExists(paranetId, blockchainId, options); } - async removeServiceAgreements(agreementIds) { - return this.getRepository('service_agreement').removeServiceAgreements(agreementIds); + async getParanet(paranetId, blockchainId, options = {}) { + return this.getRepository('paranet').getParanet(paranetId, blockchainId, options); } - async removeServiceAgreementsForBlockchain(blockchainId) { - return this.getRepository('service_agreement').removeServiceAgreementsForBlockchain( + async getParanetKnowledgeAssetsCount(paranetId, blockchainId, options = {}) { + return this.getRepository('paranet').getParanetKnowledgeAssetsCount( + paranetId, blockchainId, + options, ); } - async updateServiceAgreementEpochsNumber(agreementId, epochsNumber) { - return this.getRepository('service_agreement').updateServiceAgreementEpochsNumber( - agreementId, - epochsNumber, + async createMissedParanetAssetRecord(missedParanetAssset, options = {}) { + return this.getRepository('missed_paranet_asset').createMissedParanetAssetRecord( + missedParanetAssset, + options, ); } - async getNumberOfActiveServiceAgreements() { - return this.getRepository('service_agreement').getNumberOfActiveServiceAgreements(); - } - - async getServiceAgreements(fromTokenId, batchSize) { - return this.getRepository('service_agreement').getServiceAgreements(fromTokenId, batchSize); - } - - async getServiceAgreementsTokenIds(fromTokenId, blockchainId) { - return this.getRepository('service_agreement').getServiceAgreementsTokenIds( - fromTokenId, + async getMissedParanetAssetRecords(blockchainId, options = {}) { + return this.getRepository('missed_paranet_asset').getMissedParanetAssetRecords( blockchainId, + options, ); } - async getLatestServiceAgreementTokenId(blockchainId) { - return this.getRepository('service_agreement').getLatestServiceAgreementTokenId( - blockchainId, + async missedParanetAssetRecordExists(ual, options = {}) { + return this.getRepository('missed_paranet_asset').missedParanetAssetRecordExists( + ual, + options, ); } - async findDuplicateServiceAgreements(blockchainId) { - return this.getRepository('service_agreement').findDuplicateServiceAgreements(blockchainId); + async removeMissedParanetAssetRecordsByUAL(ual, options = {}) { + return this.getRepository('missed_paranet_asset').removeMissedParanetAssetRecordsByUAL( + ual, + options, + ); } - async findServiceAgreementsByTokenIds(tokenIds, blockchainId) { - return this.getRepository('service_agreement').findServiceAgreementsByTokenIds( - tokenIds, - blockchainId, + async getMissedParanetAssetsRecordsWithRetryCount( + paranetUal, + retryCountLimit, + retryDelayInMs, + limit = null, + options = {}, + ) { + return this.getRepository( + 'missed_paranet_asset', + ).getMissedParanetAssetsRecordsWithRetryCount( + paranetUal, + retryCountLimit, + retryDelayInMs, + limit, + options, ); } - async createParanetRecord(name, description, paranetId, blockchainId) { - this.getRepository('paranet').createParanetRecord( - name, - description, - paranetId, - blockchainId, + async getCountOfMissedAssetsOfParanet(ual, options = {}) { + return this.getRepository('missed_paranet_asset').getCountOfMissedAssetsOfParanet( + ual, + options, ); } - async paranetExists(paranetId, blockchainId) { - return this.getRepository('paranet').paranetExists(paranetId, blockchainId); + async getFilteredCountOfMissedAssetsOfParanet( + ual, + retryCountLimit, + retryDelayInMs, + options = {}, + ) { + return this.getRepository('missed_paranet_asset').getFilteredCountOfMissedAssetsOfParanet( + ual, + retryCountLimit, + retryDelayInMs, + options, + ); } - async getParanet(paranetId, blockchainId) { - return this.getRepository('paranet').getParanet(paranetId, blockchainId); + async getParanetsBlockchains(options = {}) { + return this.getRepository('paranet').getParanetsBlockchains(options); } - async getParanetKnowledgeAssetsCount(paranetId, blockchainId) { - return this.getRepository('paranet').getParanetKnowledgeAssetsCount( - paranetId, + async createParanetSyncedAssetRecord( + blockchainId, + ual, + paranetUal, + publicAssertionId, + privateAssertionId, + sender, + transactionHash, + dataSource, + options = {}, + ) { + return this.getRepository('paranet_synced_asset').createParanetSyncedAssetRecord( blockchainId, + ual, + paranetUal, + publicAssertionId, + privateAssertionId, + sender, + transactionHash, + dataSource, + options, ); } - async createMissedParanetAssetRecord(missedParanetAssset) { - return this.getRepository('missed_paranet_asset').createMissedParanetAssetRecord( - missedParanetAssset, + async getParanetSyncedAssetRecordByUAL(ual, options = {}) { + return this.getRepository('paranet_synced_asset').getParanetSyncedAssetRecordByUAL( + ual, + options, ); } - async getMissedParanetAssetRecords(blockchainId) { - return this.getRepository('missed_paranet_asset').getMissedParanetAssetRecords( - blockchainId, - ); + async getParanetSyncedAssetRecordsCountByDataSource(paranetUal, dataSource, options = {}) { + return this.getRepository( + 'paranet_synced_asset', + ).getParanetSyncedAssetRecordsCountByDataSource(paranetUal, dataSource, options); } - async removeMissedParanetAssetRecord(ual) { - return this.getRepository('missed_paranet_asset').removeMissedParanetAssetRecord(ual); + async paranetSyncedAssetRecordExists(ual, options = {}) { + return this.getRepository('paranet_synced_asset').paranetSyncedAssetRecordExists( + ual, + options, + ); } - async getMissedParanetAssetsRecords(paranetUal, count) { - return this.getRepository('missed_paranet_asset').getMissedParanetAssetsRecords( - paranetUal, - count, + async incrementParanetKaCount(paranetId, blockchainId, options = {}) { + return this.getRepository('paranet').incrementParanetKaCount( + paranetId, + blockchainId, + options, ); } - async getCountOfMissedAssetsOfParanet(ual) { - return this.getRepository('missed_paranet_asset').getCountOfMissedAssetsOfParanet(ual); + async getFinalityAcksCount(ual, options = {}) { + return this.getRepository('finality_status').getFinalityAcksCount(ual, options); } - async getParanetsBlockchains() { - return this.getRepository('paranet').getParanetsBlockchains(); + async saveFinalityAck(publishOperationId, ual, peerId, options = {}) { + return this.getRepository('finality_status').saveFinalityAck( + publishOperationId, + ual, + peerId, + options, + ); } } diff --git a/src/modules/telemetry/implementation/ot-telemetry.js b/src/modules/telemetry/implementation/ot-telemetry.js deleted file mode 100644 index c4460c7572..0000000000 --- a/src/modules/telemetry/implementation/ot-telemetry.js +++ /dev/null @@ -1,29 +0,0 @@ -import axios from 'axios'; - -class OTTelemetry { - async initialize(config, logger) { - this.config = config; - this.logger = logger; - } - - listenOnEvents(eventEmitter, onEventReceived) { - return eventEmitter.on('operation_status_changed', onEventReceived); - } - - async sendTelemetryData(nodeData, events) { - const signalingMessage = { nodeData, events }; - const config = { - method: 'post', - url: this.config.signalingServerUrl, - headers: { - 'Content-Type': 'application/json', - }, - data: JSON.stringify(signalingMessage), - }; - const response = await axios(config); - const isSuccess = response.status === 200; - return isSuccess; - } -} - -export default OTTelemetry; diff --git a/src/modules/telemetry/implementation/quest-telemetry.js b/src/modules/telemetry/implementation/quest-telemetry.js new file mode 100644 index 0000000000..13faf4fab6 --- /dev/null +++ b/src/modules/telemetry/implementation/quest-telemetry.js @@ -0,0 +1,48 @@ +import { Sender } from '@questdb/nodejs-client'; + +class QuestTelemetry { + async initialize(config, logger) { + this.config = config; + this.logger = logger; + this.localSender = Sender.fromConfig(this.config.localEndpoint); + if (this.config.sendToSignalingService) { + this.signalingServiceSender = Sender.fromConfig(this.config.signalingServiceEndpoint); + } + } + + listenOnEvents(eventEmitter, onEventReceived) { + return eventEmitter.on('operation_status_changed', onEventReceived); + } + + async sendTelemetryData( + operationId, + timestamp, + blockchainId = '', + name = '', + value1 = null, + value2 = null, + value3 = null, + ) { + try { + const table = this.localSender.table('event'); + + table.symbol('operationId', operationId || 'NULL'); + table.symbol('blockchainId', blockchainId || 'NULL'); + table.symbol('name', name || 'NULL'); + if (value1 !== null) table.symbol('value1', value1); + if (value2 !== null) table.symbol('value2', value2); + if (value3 !== null) table.symbol('value3', value3); + table.timestampColumn('timestamp', timestamp * 1000); + + await table.at(Date.now(), 'ms'); + await this.localSender.flush(); + await this.localSender.close(); + + // this.logger.info('Event telemetry successfully sent to local QuestDB'); + } catch (err) { + this.logger.error(`Error sending telemetry to local QuestDB: ${err.message}`); + } + } +} + +export default QuestTelemetry; diff --git a/src/modules/telemetry/telemetry-module-manager.js b/src/modules/telemetry/telemetry-module-manager.js index f5ef04377e..7c80fd4150 100644 --- a/src/modules/telemetry/telemetry-module-manager.js +++ b/src/modules/telemetry/telemetry-module-manager.js @@ -10,6 +10,22 @@ class TelemetryModuleManager extends BaseModuleManager { return 'telemetry'; } + async initialize() { + await super.initialize(); + + this.listenOnEvents((eventData) => { + this.sendTelemetryData( + eventData.operationId, + eventData.timestamp, + eventData.blockchainId, + eventData.lastEvent, + eventData.value1, + eventData.value2, + eventData.value3, + ); + }); + } + listenOnEvents(onEventReceived) { if (this.config.modules.telemetry.enabled && this.initialized) { return this.getImplementation().module.listenOnEvents( @@ -19,9 +35,17 @@ class TelemetryModuleManager extends BaseModuleManager { } } - async sendTelemetryData(nodeData, events) { - if (this.initialized) { - return this.getImplementation().module.sendTelemetryData(nodeData, events); + async sendTelemetryData(operationId, timestamp, blockchainId, name, value1, value2, value3) { + if (this.config.modules.telemetry.enabled && this.initialized) { + return this.getImplementation().module.sendTelemetryData( + operationId, + timestamp, + blockchainId, + name, + value1, + value2, + value3, + ); } } } diff --git a/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js b/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js index bf770bdede..e6567c5b75 100644 --- a/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js +++ b/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js @@ -19,7 +19,18 @@ class OtBlazegraph extends OtTripleStore { if (!(await this.repositoryExists(repository))) { await axios.post( `${url}/blazegraph/namespace`, - `com.bigdata.rdf.sail.truthMaintenance=false\ncom.bigdata.namespace.${name}.lex.com.bigdata.btree.BTree.branchingFactor=400\ncom.bigdata.rdf.store.AbstractTripleStore.textIndex=false\ncom.bigdata.rdf.store.AbstractTripleStore.justify=false\ncom.bigdata.namespace.${name}.spo.com.bigdata.btree.BTree.branchingFactor=1024\ncom.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers=false\ncom.bigdata.rdf.store.AbstractTripleStore.axiomsClass=com.bigdata.rdf.axioms.NoAxioms\ncom.bigdata.rdf.sail.namespace=${name}\ncom.bigdata.rdf.store.AbstractTripleStore.quads=true\ncom.bigdata.rdf.store.AbstractTripleStore.geoSpatial=false\ncom.bigdata.journal.Journal.groupCommit=false\ncom.bigdata.rdf.sail.isolatableIndices=false\n`, + `com.bigdata.rdf.sail.truthMaintenance=false\n` + + `com.bigdata.namespace.${name}.lex.com.bigdata.btree.BTree.branchingFactor=400\n` + + `com.bigdata.rdf.store.AbstractTripleStore.textIndex=false\n` + + `com.bigdata.rdf.store.AbstractTripleStore.justify=false\n` + + `com.bigdata.namespace.${name}.spo.com.bigdata.btree.BTree.branchingFactor=1024\n` + + `com.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers=false\n` + + `com.bigdata.rdf.store.AbstractTripleStore.axiomsClass=com.bigdata.rdf.axioms.NoAxioms\n` + + `com.bigdata.rdf.sail.namespace=${name}\n` + + `com.bigdata.rdf.store.AbstractTripleStore.quads=true\n` + + `com.bigdata.rdf.store.AbstractTripleStore.geoSpatial=false\n` + + `com.bigdata.journal.Journal.groupCommit=false\n` + + `com.bigdata.rdf.sail.isolatableIndices=false\n`, { headers: { 'Content-Type': 'text/plain', @@ -37,21 +48,6 @@ class OtBlazegraph extends OtTripleStore { ].sparqlEndpointUpdate = `${url}/blazegraph/namespace/${name}/sparql`; } - async insertAssertion(repository, assertionId, assertionNquads) { - const exists = await this.assertionExists(repository, assertionId); - - if (!exists) { - return axios({ - method: 'post', - url: `${this.repositories[repository].sparqlEndpointUpdate}?context-uri=assertion:${assertionId}`, - headers: { - 'Content-Type': 'text/x-nquads', - }, - data: assertionNquads, - }); - } - } - hasUnicodeCodePoints(input) { return this.unicodeRegex.test(input); } diff --git a/src/modules/triple-store/implementation/ot-fuseki/ot-fuseki.js b/src/modules/triple-store/implementation/ot-fuseki/ot-fuseki.js index 1f499d3978..f0f41d2862 100644 --- a/src/modules/triple-store/implementation/ot-fuseki/ot-fuseki.js +++ b/src/modules/triple-store/implementation/ot-fuseki/ot-fuseki.js @@ -6,23 +6,27 @@ class OtFuseki extends OtTripleStore { await super.initialize(config, logger); await Promise.all( Object.keys(this.repositories).map(async (repository) => { - const { url, name } = this.repositories[repository]; - - if (!(await this.repositoryExists(repository))) { - await axios.post( - `${url}/$/datasets?dbName=${name}&dbType=tdb`, - {}, - { - headers: { - 'Content-Type': 'text/plain', - }, - }, - ); - } + await this.createRepository(repository); }), ); } + async createRepository(repository) { + const { url, name } = this.repositories[repository]; + + if (!(await this.repositoryExists(repository))) { + await axios.post( + `${url}/$/datasets?dbName=${name}&dbType=tdb`, + {}, + { + headers: { + 'Content-Type': 'text/plain', + }, + }, + ); + } + } + initializeSparqlEndpoints(repository) { const { url, name } = this.repositories[repository]; this.repositories[repository].sparqlEndpoint = `${url}/${name}/sparql`; diff --git a/src/modules/triple-store/implementation/ot-graphdb/ot-graphdb.js b/src/modules/triple-store/implementation/ot-graphdb/ot-graphdb.js index 97745cb2cd..851d987aa7 100644 --- a/src/modules/triple-store/implementation/ot-graphdb/ot-graphdb.js +++ b/src/modules/triple-store/implementation/ot-graphdb/ot-graphdb.js @@ -10,47 +10,51 @@ class OtGraphdb extends OtTripleStore { await Promise.all( Object.keys(this.repositories).map(async (repository) => { - const { url, name } = this.repositories[repository]; - const serverConfig = new server.ServerClientConfig(url) - .setTimeout(40000) - .setHeaders({ - Accept: http.RDFMimeType.N_QUADS, - }) - .setKeepAlive(true); - const s = new server.GraphDBServerClient(serverConfig); - // eslint-disable-next-line no-await-in-loop - const exists = await s.hasRepository(name); - if (!exists) { - try { - // eslint-disable-next-line no-await-in-loop - await s.createRepository( - new repo.RepositoryConfig( - name, - '', - new Map(), - '', - 'Repo title', - repo.RepositoryType.FREE, - ), - ); - } catch (e) { - // eslint-disable-next-line no-await-in-loop - await s.createRepository( - new repo.RepositoryConfig( - name, - '', - {}, - 'graphdb:SailRepository', - 'Repo title', - 'graphdb', - ), - ); - } - } + await this.createRepository(repository); }), ); } + async createRepository(repository) { + const { url, name } = this.repositories[repository]; + const serverConfig = new server.ServerClientConfig(url) + .setTimeout(40000) + .setHeaders({ + Accept: http.RDFMimeType.N_QUADS, + }) + .setKeepAlive(true); + const s = new server.GraphDBServerClient(serverConfig); + // eslint-disable-next-line no-await-in-loop + const exists = await s.hasRepository(name); + if (!exists) { + try { + // eslint-disable-next-line no-await-in-loop + await s.createRepository( + new repo.RepositoryConfig( + name, + '', + new Map(), + '', + 'Repo title', + repo.RepositoryType.FREE, + ), + ); + } catch (e) { + // eslint-disable-next-line no-await-in-loop + await s.createRepository( + new repo.RepositoryConfig( + name, + '', + {}, + 'graphdb:SailRepository', + 'Repo title', + 'graphdb', + ), + ); + } + } + } + initializeSparqlEndpoints(repository) { const { url, name } = this.repositories[repository]; this.repositories[repository].sparqlEndpoint = `${url}/repositories/${name}`; @@ -108,6 +112,20 @@ class OtGraphdb extends OtTripleStore { ); } + async repositoryExists(repository) { + const { url, name } = this.repositories[repository]; + + const serverConfig = new server.ServerClientConfig(url) + .setTimeout(40000) + .setHeaders({ + Accept: http.RDFMimeType.N_QUADS, + }) + .setKeepAlive(true); + const s = new server.GraphDBServerClient(serverConfig); + + return s.hasRepository(name); + } + getName() { return 'GraphDB'; } diff --git a/src/modules/triple-store/implementation/ot-triple-store.js b/src/modules/triple-store/implementation/ot-triple-store.js index f15649d437..53c89af9c5 100644 --- a/src/modules/triple-store/implementation/ot-triple-store.js +++ b/src/modules/triple-store/implementation/ot-triple-store.js @@ -5,6 +5,10 @@ import { TRIPLE_STORE_CONNECT_MAX_RETRIES, TRIPLE_STORE_CONNECT_RETRY_FREQUENCY, MEDIA_TYPES, + UAL_PREDICATE, + BASE_NAMED_GRAPHS, + TRIPLE_ANNOTATION_LABEL_PREDICATE, + TRIPLES_VISIBILITY, } from '../../../constants/constants.js'; class OtTripleStore { @@ -97,172 +101,427 @@ class OtTripleStore { await Promise.all(ensureConnectionPromises); } - async assetExists(repository, ual) { - const query = `PREFIX schema: <${SCHEMA_CONTEXT}> - ASK WHERE { - GRAPH { - <${ual}> ?p ?o - } - }`; + async insetAssertionInNamedGraph(repository, namedGraph, nquads) { + const query = ` + PREFIX schema: <${SCHEMA_CONTEXT}> + INSERT DATA { + GRAPH <${namedGraph}> { + ${nquads.join('\n')} + } + } + `; - return this.ask(repository, query); + await this.queryVoid(repository, query); } - async insertAssetAssertionLink(repository, ual, assertionId) { - const assetExists = await this.assetExists(repository, ual); + async deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph(repository, namedGraph, ual) { + const query = ` + DELETE { + GRAPH <${namedGraph}> { + ?s ?p ?o . + << ?s ?p ?o >> ?annotationPredicate ?annotationValue . + } + } + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} ?annotationValue . + } + FILTER(STRSTARTS(STR(?annotationValue), "${ual}/")) - if (assetExists) { - const insertQuery = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - INSERT DATA { - GRAPH { - <${ual}> schema:assertion . + { + SELECT ?s ?p ?o (COUNT(?annotationValue) AS ?annotationCount) + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} ?annotationValue . + } } - }`; - await this.queryVoid(repository, insertQuery); - } + GROUP BY ?s ?p ?o + HAVING(?annotationCount = 1) + } + } + `; + + await this.queryVoid(repository, query); } - async deleteAssetAssertionLink(repository, ual, assertionId) { - const linkExists = await this.assetAssertionLinkExists(repository, ual, assertionId); + async getKnowledgeCollectionFromUnifiedGraph(repository, namedGraph, ual, sort) { + const query = ` + PREFIX schema: <${SCHEMA_CONTEXT}> + CONSTRUCT { ?s ?p ?o . } + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} ?ual . + FILTER(STRSTARTS(STR(?ual), "${ual}/")) + } + } + ${sort ? 'ORDER BY ?s' : ''} + `; + + return this.construct(repository, query); + } - if (linkExists) { - const deleteQuery = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - DELETE DATA { - GRAPH { - <${ual}> schema:assertion . + async getKnowledgeCollectionPublicFromUnifiedGraph(repository, namedGraph, ual, sort) { + const query = ` + PREFIX schema: <${SCHEMA_CONTEXT}> + CONSTRUCT { ?s ?p ?o } + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} ?ual . + FILTER(STRSTARTS(STR(?ual), "${ual}/")) + FILTER NOT EXISTS { + << ?s ?p ?o >> ${TRIPLE_ANNOTATION_LABEL_PREDICATE} "private" . } - }`; - await this.queryVoid(repository, deleteQuery); - } + } + } + ${sort ? 'ORDER BY ?s' : ''} + `; + + return this.construct(repository, query); + } + + async knowledgeCollectionExistsInUnifiedGraph(repository, namedGraph, ual) { + const query = ` + ASK + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} ?ual + FILTER(STRSTARTS(STR(?ual), "${ual}/")) + } + } + `; + + return this.ask(repository, query); } - async updateAssetAssertionLink(repository, ual, oldAssertionId, newAssertionId) { - const linkExists = await this.assetAssertionLinkExists(repository, ual, oldAssertionId); + async deleteUniqueKnowledgeAssetTriplesFromUnifiedGraph(repository, namedGraph, ual) { + const query = ` + DELETE { + GRAPH <${namedGraph}> { + ?s ?p ?o . + << ?s ?p ?o >> ?annotationPredicate ?annotationValue . + } + } + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} <${ual}> . + } - if (linkExists) { - const updateQuery = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - DELETE { - GRAPH { - <${ual}> schema:assertion . + { + SELECT ?s ?p ?o (COUNT(?annotationValue) AS ?annotationCount) + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} ?annotationValue . + } } - } INSERT { - GRAPH { - <${ual}> schema:assertion . + GROUP BY ?s ?p ?o + HAVING(?annotationCount = 1) + } + } + `; + + await this.queryVoid(repository, query); + } + + async getKnowledgeAssetFromUnifiedGraph(repository, namedGraph, ual) { + const query = ` + PREFIX schema: <${SCHEMA_CONTEXT}> + CONSTRUCT { ?s ?p ?o . } + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} <${ual}> . + } + } + `; + + return this.construct(repository, query); + } + + async getKnowledgeAssetPublicFromUnifiedGraph(repository, namedGraph, ual) { + const query = ` + PREFIX schema: <${SCHEMA_CONTEXT}> + CONSTRUCT { ?s ?p ?o } + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} <${ual}> . + FILTER NOT EXISTS { + << ?s ?p ?o >> ${TRIPLE_ANNOTATION_LABEL_PREDICATE} "private" . } - } WHERE { - GRAPH { - <${ual}> schema:assertion . + } + } + `; + + return this.construct(repository, query); + } + + async knowledgeAssetExistsInUnifiedGraph(repository, namedGraph, ual) { + const query = ` + ASK + WHERE { + GRAPH <${namedGraph}> { + << ?s ?p ?o >> ${UAL_PREDICATE} <${ual}> + } + } + `; + + return this.ask(repository, query); + } + + async createKnowledgeCollectionNamedGraphs(repository, uals, assetsNQuads, visibility) { + const query = ` + PREFIX schema: <${SCHEMA_CONTEXT}> + INSERT DATA { + ${uals + .map( + (ual, index) => ` + GRAPH <${ual}/${visibility}> { + ${assetsNQuads[index].join('\n')} } - }`; - await this.queryVoid(repository, updateQuery); + `, + ) + .join('\n')} + } + `; + + await this.queryVoid(repository, query); + } + + async deleteKnowledgeCollectionNamedGraphs(repository, uals) { + const query = `${uals.map((ual) => `DROP GRAPH <${ual}>`).join(';\n')};`; + + await this.queryVoid(repository, query); + } + + async getKnowledgeCollectionNamedGraphs(repository, tokenIds, ual, visibility) { + const namedGraphs = Array.from( + { length: tokenIds.endTokenId - tokenIds.startTokenId + 1 }, + (_, i) => tokenIds.startTokenId + i, + ) + .filter((id) => !tokenIds.burned.includes(id)) + .map((id) => `${ual}/${id}`); + const assertion = {}; + if (visibility === TRIPLES_VISIBILITY.PUBLIC || visibility === TRIPLES_VISIBILITY.ALL) { + const query = ` + PREFIX schema: + CONSTRUCT { + ?s ?p ?o . + } + WHERE { + GRAPH ?g { + ?s ?p ?o . + } + VALUES ?g { + ${namedGraphs + .map((graph) => `<${graph}/${TRIPLES_VISIBILITY.PUBLIC}>`) + .join('\n')} + } + }`; + assertion.public = await this.construct(repository, query); + } + if (visibility === TRIPLES_VISIBILITY.PRIVATE || visibility === TRIPLES_VISIBILITY.ALL) { + const query = ` + PREFIX schema: + CONSTRUCT { + ?s ?p ?o . + } + WHERE { + GRAPH ?g { + ?s ?p ?o . + } + VALUES ?g { + ${namedGraphs + .map((graph) => `<${graph}/${TRIPLES_VISIBILITY.PRIVATE}>`) + .join('\n')} + } + }`; + assertion.private = await this.construct(repository, query); } + + return assertion; } - async getAssetAssertionLinks(repository, ual) { - const query = `PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT ?assertion WHERE { - GRAPH { - <${ual}> schema:assertion ?assertion - } - }`; + async knowledgeCollectionNamedGraphsExist(repository, ual) { + const query = ` + ASK { + GRAPH <${ual}/1/public> { + ?s ?p ?o + } + } + `; - return this.select(repository, query); + return this.ask(repository, query); } - async assetAssertionLinkExists(repository, ual, assertionId) { + async deleteKnowledgeAssetNamedGraph(repository, ual) { + const query = ` + DROP GRAPH <${ual}> + `; + + await this.queryVoid(repository, query); + } + + async getKnowledgeAssetNamedGraph(repository, ual, visibility) { + let whereClause; + + switch (visibility) { + case TRIPLES_VISIBILITY.PUBLIC: + case TRIPLES_VISIBILITY.PRIVATE: + whereClause = ` + WHERE { + GRAPH <${ual}/${visibility}> { + ?s ?p ?o . + } + } + `; + break; + case TRIPLES_VISIBILITY.ALL: + whereClause = ` + WHERE { + { + GRAPH <${ual}/${TRIPLES_VISIBILITY.PUBLIC}> { + ?s ?p ?o . + } + } + UNION + { + GRAPH <${ual}/${TRIPLES_VISIBILITY.PRIVATE}> { + ?s ?p ?o . + } + } + } + `; + break; + default: + throw new Error(`Unsupported visibility: ${visibility}`); + } + const query = ` PREFIX schema: <${SCHEMA_CONTEXT}> + CONSTRUCT { ?s ?p ?o } + ${whereClause} + `; + + return this.construct(repository, query); + } + + async knowledgeAssetNamedGraphExists(repository, name) { + const query = ` ASK { - GRAPH { - <${ual}> schema:assertion . + GRAPH <${name}> { + ?s ?p ?o } - }`; + } + `; return this.ask(repository, query); } - async updateAssetNonAssertionMetadata(repository, ual, assetNquads) { - const updateQuery = ` + async insertKnowledgeCollectionMetadata(repository, metadataNQuads) { + const query = ` PREFIX schema: <${SCHEMA_CONTEXT}> - DELETE { - GRAPH { - <${ual}> ?p ?o . - FILTER(?p != schema:assertion) + INSERT DATA { + GRAPH <${BASE_NAMED_GRAPHS.METADATA}> { + ${metadataNQuads} + } + } + `; + + await this.queryVoid(repository, query); + } + + async deleteKnowledgeCollectionMetadata(repository, ual) { + const query = ` + DELETE + WHERE { + GRAPH <${BASE_NAMED_GRAPHS.METADATA}> { + ?ual ?p ?o . + FILTER(STRSTARTS(STR(?ual), "${ual}/")) } } - INSERT { - GRAPH { - ${assetNquads} + `; + + await this.queryVoid(repository, query); + } + + async getKnowledgeCollectionMetadata(repository, ual) { + const query = ` + CONSTRUCT { ?ual ?p ?o . } + WHERE { + GRAPH <${BASE_NAMED_GRAPHS.METADATA}> { + ?ual ?p ?o . + FILTER(STRSTARTS(STR(?ual), "${ual}/")) } } + `; + + return this.construct(repository, query); + } + + async getKnowledgeAssetMetadata(repository, ual) { + const query = ` + CONSTRUCT { <${ual}> ?p ?o . } WHERE { - GRAPH { + GRAPH <${BASE_NAMED_GRAPHS.METADATA}> { <${ual}> ?p ?o . - FILTER(?p != schema:assertion) } - }`; - await this.queryVoid(repository, updateQuery); + } + `; + + return this.construct(repository, query); } - async deleteAssetMetadata(repository, ual) { - const query = `DELETE WHERE { - GRAPH { - <${ual}> ?p ?o + async knowledgeCollectionMetadataExists(repository, ual) { + const query = ` + ASK { + GRAPH <${BASE_NAMED_GRAPHS.METADATA}> { + ?ual ?p ?o + FILTER(STRSTARTS(STR(?ual), "${ual}/")) } - };`; + } + `; - return this.queryVoid(repository, query); + return this.ask(repository, query); } - async countAssetsWithAssertionId(repository, assertionId) { - const query = `PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT (COUNT(DISTINCT ?ual) as ?count) - WHERE { - GRAPH { - ?ual schema:assertion - } - }`; - return this.select(repository, query); - } + async findAllNamedGraphsByUAL(repository, ual) { + const query = ` + SELECT DISTINCT ?g + WHERE { + GRAPH ?g { + ?s ?p ?o + } + FILTER(STRSTARTS(STR(?g), "${ual}")) + }`; - async getAssetAssertionIds(repository, ual) { - const query = `PREFIX schema: <${SCHEMA_CONTEXT}> - SELECT DISTINCT ?assertionId - WHERE { - GRAPH { - <${ual}> schema:assertion ?assertionId . - } - }`; - return this.select(repository, query); + this.select(repository, query); } - async insertAssetAssertionMetadata(repository, assetNquads) { + async findAllSubjectsWithGraphNames(repository, ual) { const query = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - INSERT DATA { - GRAPH { - ${assetNquads} + SELECT DISTINCT ?s ?g + WHERE { + GRAPH ?g { + ?s ?p ?o } + FILTER(STRSTARTS(STR(?g), "${ual}")) }`; - await this.queryVoid(repository, query); + this.select(repository, query); } - async insertAssertion(repository, assertionId, assertionNquads) { - const exists = await this.assertionExists(repository, assertionId); + async getLatestAssertionId(repository, ual) { + const query = `SELECT ?assertionId + WHERE { + GRAPH { + <${ual}> ?p ?assertionId + } + }`; - if (!exists) { - const query = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - INSERT DATA { - GRAPH { - ${assertionNquads} - } - }`; - await this.queryVoid(repository, query); - } + const data = await this.select(repository, query); + + const fullAssertionId = data?.[0]?.assertionId; + + const latestAssertionId = fullAssertionId?.replace('assertion:', ''); + + return latestAssertionId; } async construct(repository, query) { @@ -285,35 +544,6 @@ class OtTripleStore { return this.queryEngine.queryBoolean(query, this.repositories[repository].queryContext); } - async assertionExists(repository, assertionId) { - const escapedAssertionId = this.cleanEscapeCharacter(assertionId); - const query = `ASK WHERE { GRAPH { ?s ?p ?o } }`; - - return this.ask(repository, query); - } - - async deleteAssertion(repository, assertionId) { - const query = `DROP GRAPH `; - - await this.queryVoid(repository, query); - } - - async getAssertion(repository, assertionId) { - const escapedGraphName = this.cleanEscapeCharacter(assertionId); - - const query = `PREFIX schema: <${SCHEMA_CONTEXT}> - CONSTRUCT { ?s ?p ?o } - WHERE { - { - GRAPH - { - ?s ?p ?o . - } - } - }`; - return this.construct(repository, query); - } - async healthCheck() { return true; } @@ -334,10 +564,6 @@ class OtTripleStore { return response; } - cleanEscapeCharacter(query) { - return query.replace(/['|[\]\\]/g, '\\$&'); - } - async reinitialize() { const ready = await this.healthCheck(); if (!ready) { @@ -348,6 +574,30 @@ class OtTripleStore { this.implementation.initialize(this.logger); } } + + // OLD REPOSITORIES SUPPORT + + cleanEscapeCharacter(query) { + return query.replace(/['|[\]\\]/g, '\\$&'); + } + + async getV6Assertion(repository, assertionId) { + if (!assertionId) return ''; + + const escapedGraphName = this.cleanEscapeCharacter(assertionId); + + const query = `PREFIX schema: <${SCHEMA_CONTEXT}> + CONSTRUCT { ?s ?p ?o } + WHERE { + { + GRAPH + { + ?s ?p ?o . + } + } + }`; + return this.construct(repository, query); + } } export default OtTripleStore; diff --git a/src/modules/triple-store/triple-store-module-manager.js b/src/modules/triple-store/triple-store-module-manager.js index 75a0d44ad8..cde1972f0f 100644 --- a/src/modules/triple-store/triple-store-module-manager.js +++ b/src/modules/triple-store/triple-store-module-manager.js @@ -5,147 +5,236 @@ class TripleStoreModuleManager extends BaseModuleManager { return this.getImplementation().module.initializeParanetRepository(repository); } - async insertAssetAssertionMetadata(implementationName, repository, assetNquads) { + async insetAssertionInNamedGraph(implementationName, repository, namedGraph, nquads) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.insertAssetAssertionMetadata( + return this.getImplementation(implementationName).module.insetAssertionInNamedGraph( repository, - assetNquads, + namedGraph, + nquads, ); } } - async updateAssetNonAssertionMetadata(implementationName, repository, ual, assetNquads) { + async deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph( + implementationName, + repository, + namedGraph, + ual, + ) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.updateAssetMetadata( + return this.getImplementation( + implementationName, + ).module.deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph( repository, + namedGraph, ual, - assetNquads, ); } } - async deleteAssetMetadata(implementationName, repository, ual) { + async getKnowledgeCollectionFromUnifiedGraph( + implementationName, + repository, + namedGraph, + ual, + sort, + ) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.deleteAssetMetadata( + return this.getImplementation( + implementationName, + ).module.getKnowledgeCollectionFromUnifiedGraph(repository, namedGraph, ual, sort); + } + } + + async getKnowledgeCollectionPublicFromUnifiedGraph( + implementationName, + repository, + namedGraph, + ual, + sort, + ) { + if (this.getImplementation(implementationName)) { + return this.getImplementation( + implementationName, + ).module.getKnowledgeCollectionPublicFromUnifiedGraph( repository, + namedGraph, ual, + sort, ); } } - async assetExists(implementationName, repository, ual) { + async knowledgeCollectionExistsInUnifiedGraph(implementationName, repository, namedGraph, ual) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.assetExists(repository, ual); + return this.getImplementation( + implementationName, + ).module.knowledgeCollectionExistsInUnifiedGraph(repository, namedGraph, ual); } } - async insertAssetAssertionLink(implementationName, repository, ual, assertionId) { + async deleteUniqueKnowledgeAssetTriplesFromUnifiedGraph( + implementationName, + repository, + namedGraph, + ual, + ) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.insertAssetAssertionLink( - repository, - ual, - assertionId, - ); + return this.getImplementation( + implementationName, + ).module.deleteUniqueKnowledgeAssetTriplesFromUnifiedGraph(repository, namedGraph, ual); + } + } + + async getKnowledgeAssetFromUnifiedGraph(implementationName, repository, namedGraph, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation( + implementationName, + ).module.getKnowledgeAssetFromUnifiedGraph(repository, namedGraph, ual); + } + } + + async getKnowledgeAssetPublicFromUnifiedGraph(implementationName, repository, namedGraph, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation( + implementationName, + ).module.getKnowledgeAssetPublicFromUnifiedGraph(repository, namedGraph, ual); + } + } + + async knowledgeAssetExistsInUnifiedGraph(implementationName, repository, namedGraph, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation( + implementationName, + ).module.knowledgeAssetExistsInUnifiedGraph(repository, namedGraph, ual); } } - async deleteAssetAssertionLink(implementationName, repository, ual, assertionId) { + async createKnowledgeCollectionNamedGraphs( + implementationName, + repository, + uals, + assetsNQuads, + visibility, + ) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.deleteAssetAssertionLink( + return this.getImplementation( + implementationName, + ).module.createKnowledgeCollectionNamedGraphs( repository, - ual, - assertionId, + uals, + assetsNQuads, + visibility, ); } } - async updateAssetAssertionLink( + async deleteKnowledgeCollectionNamedGraphs(implementationName, repository, uals) { + if (this.getImplementation(implementationName)) { + return this.getImplementation( + implementationName, + ).module.deleteKnowledgeCollectionNamedGraphs(repository, uals); + } + } + + async getKnowledgeCollectionNamedGraphs( implementationName, repository, ual, - oldAssertionId, - newAssertionId, + tokenIds, + visibility, + sort, ) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.updateAssetAssertionLink( - repository, - ual, - oldAssertionId, - newAssertionId, - ); + return this.getImplementation( + implementationName, + ).module.getKnowledgeCollectionNamedGraphs(repository, tokenIds, ual, visibility, sort); } } - async getAssetAssertionLinks(implementationName, repository, ual) { + async knowledgeCollectionNamedGraphsExist(implementationName, repository, ual) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.getAssetAssertionLinks( + return this.getImplementation( + implementationName, + ).module.knowledgeCollectionNamedGraphsExist(repository, ual); + } + } + + async deleteKnowledgeAssetNamedGraph(implementationName, repository, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.deleteKnowledgeAssetNamedGraph( repository, ual, ); } } - async assetAssertionLinkExists(implementationName, repository, ual, assertionId) { + async getKnowledgeAssetNamedGraph(implementationName, repository, ual, visibility) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.assetAssertionLinkExists( + return this.getImplementation(implementationName).module.getKnowledgeAssetNamedGraph( repository, ual, - assertionId, + visibility, ); } } - async insertAssertion(implementationName, repository, assertionId, assertionNquads) { + async knowledgeAssetNamedGraphExists(implementationName, repository, name) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.insertAssertion( + return this.getImplementation(implementationName).module.knowledgeAssetNamedGraphExists( repository, - assertionId, - assertionNquads, + name, ); } } - async assertionExists(implementationName, repository, uri) { + async insertKnowledgeCollectionMetadata(implementationName, repository, metadataNQuads) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.assertionExists( - repository, - uri, - ); + return this.getImplementation( + implementationName, + ).module.insertKnowledgeCollectionMetadata(repository, metadataNQuads); } } - async countAssetsWithAssertionId(implementationName, repository, assertionId) { + async deleteKnowledgeCollectionMetadata(implementationName, repository, ual) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.countAssetsWithAssertionId( - repository, - assertionId, - ); + return this.getImplementation( + implementationName, + ).module.deleteKnowledgeCollectionMetadata(repository, ual); } } - async getAssetAssertionIds(implementationName, repository, ual) { + async getKnowledgeCollectionMetadata(implementationName, repository, ual) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.getAssetAssertionIds( + return this.getImplementation(implementationName).module.getKnowledgeCollectionMetadata( repository, ual, ); } } - async getAssertion(implementationName, repository, assertionId) { + async getKnowledgeAssetMetadata(implementationName, repository, ual) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.getAssertion( + return this.getImplementation(implementationName).module.getKnowledgeAssetMetadata( repository, - assertionId, + ual, ); } } - async deleteAssertion(implementationName, repository, assertionId) { + async knowledgeCollectionMetadataExists(implementationName, repository, ual) { if (this.getImplementation(implementationName)) { - return this.getImplementation(implementationName).module.deleteAssertion( + return this.getImplementation( + implementationName, + ).module.knowledgeCollectionMetadataExists(repository, ual); + } + } + + async getLatestAssertionId(implementationName, repository, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.getLatestAssertionId( repository, - assertionId, + ual, ); } } @@ -174,9 +263,39 @@ class TripleStoreModuleManager extends BaseModuleManager { } } + async findAllNamedGraphsByUAL(implementationName, repository, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.findAllNamedGraphsByUAL( + repository, + ual, + ); + } + } + + async findAllSubjectsWithGraphNames(implementationName, repository, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.findAllSubjectsWithGraphNames( + implementationName, + repository, + ual, + ); + } + } + getName() { return 'tripleStore'; } + + // OLD REPOSITORIES SUPPORT + + async getV6Assertion(implementationName, repository, assertionId) { + if (this.getImplementation(implementationName)) { + return this.getImplementation(implementationName).module.getV6Assertion( + repository, + assertionId, + ); + } + } } export default TripleStoreModuleManager; diff --git a/src/modules/validation/implementation/merkle-validation.js b/src/modules/validation/implementation/merkle-validation.js index 72980825f5..48005b5038 100644 --- a/src/modules/validation/implementation/merkle-validation.js +++ b/src/modules/validation/implementation/merkle-validation.js @@ -1,40 +1,13 @@ -import { ethers } from 'ethers'; -import { calculateRoot, getMerkleProof } from 'assertion-tools'; +import { kcTools } from 'assertion-tools'; class MerkleValidation { async initialize(config, logger) { this.config = config; this.logger = logger; - - this.hashFunctions = { - // TODO: Change this nonsense - 1: 'sha256', - }; - } - - calculateRoot(assertion) { - return calculateRoot(assertion); - } - - getMerkleProof(nquadsArray, challenge) { - return getMerkleProof(nquadsArray, challenge); - } - - async callHashFunction(hashFunctionId, data) { - const hashFunctionName = this.getHashFunctionName(hashFunctionId); - return this[hashFunctionName](data); // TODO: Change this nonsense - } - - getHashFunctionName(hashFunctionId) { - return this.hashFunctions[hashFunctionId]; } - async sha256(data) { - if (!ethers.utils.isBytesLike(data)) { - const bytesLikeData = ethers.utils.toUtf8Bytes(data); - return ethers.utils.sha256(bytesLikeData); - } - return ethers.utils.sha256(data); + async calculateRoot(assertion) { + return kcTools.calculateMerkleRoot(assertion); } } diff --git a/src/modules/validation/validation-module-manager.js b/src/modules/validation/validation-module-manager.js index 8f326905ae..b94fe06b8d 100644 --- a/src/modules/validation/validation-module-manager.js +++ b/src/modules/validation/validation-module-manager.js @@ -5,7 +5,7 @@ class ValidationModuleManager extends BaseModuleManager { return 'validation'; } - calculateRoot(assertion) { + async calculateRoot(assertion) { if (this.initialized) { if (!assertion) { throw new Error('Calculation failed: Assertion cannot be null or undefined.'); @@ -14,39 +14,6 @@ class ValidationModuleManager extends BaseModuleManager { } throw new Error('Validation module is not initialized.'); } - - getMerkleProof(assertion, index) { - if (this.initialized) { - if (!assertion) { - throw new Error('Get merkle proof failed: Assertion cannot be null or undefined.'); - } - return this.getImplementation().module.getMerkleProof(assertion, index); - } - throw new Error('Validation module is not initialized.'); - } - - getHashFunctionName(hashFunctionId) { - if (this.initialized) { - if (!hashFunctionId) { - throw new Error( - 'Getting function name failed: Function ID cannot be null or undefined.', - ); - } - return this.getImplementation().module.getHashFunctionName(hashFunctionId); - } - throw new Error('Validation module is not initialized.'); - } - - async callHashFunction(hashFunctionId, data) { - if (this.initialized) { - if (!!hashFunctionId && !!data) { - return this.getImplementation().module.callHashFunction(hashFunctionId, data); - } - throw new Error('Calling hash fn failed: Values cannot be null or undefined.'); - } else { - throw new Error('Validation module is not initialized.'); - } - } } export default ValidationModuleManager; diff --git a/src/service/ask-service.js b/src/service/ask-service.js new file mode 100644 index 0000000000..450ca76933 --- /dev/null +++ b/src/service/ask-service.js @@ -0,0 +1,111 @@ +import { Mutex } from 'async-mutex'; +import OperationService from './operation-service.js'; +import { + OPERATION_ID_STATUS, + NETWORK_PROTOCOLS, + ERROR_TYPE, + OPERATIONS, + OPERATION_REQUEST_STATUS, + ASK_BATCH_SIZE, +} from '../constants/constants.js'; + +class AskService extends OperationService { + constructor(ctx) { + super(ctx); + + this.operationName = OPERATIONS.ASK; + this.networkProtocols = NETWORK_PROTOCOLS.ASK; + this.errorType = ERROR_TYPE.ASK.ASK_ERROR; + this.completedStatuses = [ + OPERATION_ID_STATUS.ASK.ASK_FETCH_FROM_NODES_END, + OPERATION_ID_STATUS.ASK.ASK_END, + OPERATION_ID_STATUS.COMPLETED, + ]; + this.operationMutex = new Mutex(); + } + + async processResponse(command, responseStatus, responseData) { + const { operationId, blockchain, numberOfFoundNodes, leftoverNodes, batchSize } = + command.data; + + const responseStatusesFromDB = await this.getResponsesStatuses( + responseStatus, + responseData.errorMessage, + operationId, + ); + + const { completedNumber, failedNumber } = responseStatusesFromDB[operationId]; + + const totalResponses = completedNumber + failedNumber; + const isAllNodesResponded = numberOfFoundNodes === totalResponses; + const isBatchCompleted = totalResponses % batchSize === 0; + + const minimumNumberOfNodeReplications = + command.data.minimumNumberOfNodeReplications ?? numberOfFoundNodes; + + this.logger.debug( + `Processing ${ + this.operationName + } response with status: ${responseStatus} for operationId: ${operationId}. Total number of nodes: ${numberOfFoundNodes}, number of nodes in batch: ${Math.min( + numberOfFoundNodes, + batchSize, + )} number of leftover nodes: ${ + leftoverNodes.length + }, number of responses: ${totalResponses}, Completed: ${completedNumber}, Failed: ${failedNumber}`, + ); + if (responseData.errorMessage) { + this.logger.trace( + `Error message for operation id: ${operationId} : ${responseData.errorMessage}`, + ); + } + + if ( + responseStatus === OPERATION_REQUEST_STATUS.COMPLETED && + completedNumber === minimumNumberOfNodeReplications + ) { + await this.markOperationAsCompleted( + operationId, + blockchain, + { + completedNodes: completedNumber, + allNodesReplicatedData: true, + }, + [...this.completedStatuses], + ); + this.logResponsesSummary(completedNumber, failedNumber); + } else if ( + completedNumber < minimumNumberOfNodeReplications && + (isAllNodesResponded || isBatchCompleted) + ) { + const potentialCompletedNumber = completedNumber + leftoverNodes.length; + + await this.operationIdService.cacheOperationIdDataToFile(operationId, { + completedNodes: completedNumber, + allNodesReplicatedData: false, + }); + + // Still possible to meet minimumNumberOfNodeReplications, schedule leftover nodes + if ( + leftoverNodes.length > 0 && + potentialCompletedNumber >= minimumNumberOfNodeReplications + ) { + await this.scheduleOperationForLeftoverNodes(command.data, leftoverNodes); + } else { + // Not enough potential responses to meet minimumNumberOfNodeReplications, or no leftover nodes + await this.markOperationAsFailed( + operationId, + blockchain, + `Unable to replicate data on the network!`, + this.errorType, + ); + this.logResponsesSummary(completedNumber, failedNumber); + } + } + } + + getBatchSize(batchSize = null) { + return batchSize ?? ASK_BATCH_SIZE; + } +} + +export default AskService; diff --git a/src/service/blockchain-event-listener-service.js b/src/service/blockchain-event-listener-service.js deleted file mode 100644 index f0ea2fb9c7..0000000000 --- a/src/service/blockchain-event-listener-service.js +++ /dev/null @@ -1,648 +0,0 @@ -import { setTimeout } from 'timers/promises'; -import { - CONTENT_ASSET_HASH_FUNCTION_ID, - CONTRACTS, - CONTRACT_EVENT_FETCH_INTERVALS, - TRIPLE_STORE_REPOSITORIES, - NODE_ENVIRONMENTS, - PENDING_STORAGE_REPOSITORIES, - CONTRACT_EVENTS, - MAXIMUM_FETCH_EVENTS_FAILED_COUNT, - DELAY_BETWEEN_FAILED_FETCH_EVENTS_MILLIS, - CONTRACT_EVENT_TO_GROUP_MAPPING, - GROUPED_CONTRACT_EVENTS, - ZERO_BYTES32, -} from '../constants/constants.js'; - -const fetchEventsFailedCount = {}; - -const eventNames = Object.values(CONTRACT_EVENTS).flatMap((e) => e); - -class BlockchainEventListenerService { - constructor(ctx) { - this.logger = ctx.logger; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.tripleStoreService = ctx.tripleStoreService; - this.pendingStorageService = ctx.pendingStorageService; - this.ualService = ctx.ualService; - this.hashingService = ctx.hashingService; - this.serviceAgreementService = ctx.serviceAgreementService; - this.shardingTableService = ctx.shardingTableService; - this.paranetService = ctx.paranetService; - - this.eventGroupsBuffer = {}; - } - - async initialize() { - const promises = []; - for (const blockchainId of this.blockchainModuleManager.getImplementationNames()) { - this.logger.info( - `Initializing blockchain event listener for blockchain ${blockchainId}, handling missed events`, - ); - this.eventGroupsBuffer[blockchainId] = {}; - promises.push(this.fetchAndHandleBlockchainEvents(blockchainId)); - } - await Promise.all(promises); - } - - startListeningOnEvents() { - for (const blockchainId of this.blockchainModuleManager.getImplementationNames()) { - this.listenOnBlockchainEvents(blockchainId); - this.logger.info(`Event listener initialized for blockchain: '${blockchainId}'.`); - } - } - - async fetchAndHandleBlockchainEvents(blockchainId) { - const devEnvironment = - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST; - - const currentBlock = await this.blockchainModuleManager.getBlockNumber(blockchainId); - - if (devEnvironment) { - // handling sharding table node added events first for tests and local network setup - // because of race condition for node added and ask updated events - const shardingTableEvents = await this.getContractEvents( - blockchainId, - CONTRACTS.SHARDING_TABLE_CONTRACT, - currentBlock, - CONTRACT_EVENTS.SHARDING_TABLE, - ); - - await this.handleBlockchainEvents(shardingTableEvents, blockchainId); - } - - const syncContractEventsPromises = [ - this.getContractEvents( - blockchainId, - CONTRACTS.SHARDING_TABLE_CONTRACT, - currentBlock, - CONTRACT_EVENTS.SHARDING_TABLE, - ), - this.getContractEvents( - blockchainId, - CONTRACTS.STAKING_CONTRACT, - currentBlock, - CONTRACT_EVENTS.STAKING, - ), - this.getContractEvents( - blockchainId, - CONTRACTS.PROFILE_CONTRACT, - currentBlock, - CONTRACT_EVENTS.PROFILE, - ), - this.getContractEvents( - blockchainId, - CONTRACTS.COMMIT_MANAGER_V1_U1_CONTRACT, - currentBlock, - CONTRACT_EVENTS.COMMIT_MANAGER_V1, - ), - this.getContractEvents( - blockchainId, - CONTRACTS.SERVICE_AGREEMENT_V1_CONTRACT, - currentBlock, - CONTRACT_EVENTS.SERVICE_AGREEMENT_V1, - ), - this.getContractEvents( - blockchainId, - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - currentBlock, - CONTRACT_EVENTS.PARAMETERS_STORAGE, - ), - this.getContractEvents( - blockchainId, - CONTRACTS.LOG2PLDSF_CONTRACT, - currentBlock, - CONTRACT_EVENTS.LOG2PLDSF, - ), - this.getContractEvents( - blockchainId, - CONTRACTS.LINEAR_SUM_CONTRACT, - currentBlock, - CONTRACT_EVENTS.LINEAR_SUM, - ), - ]; - - if (!devEnvironment) { - syncContractEventsPromises.push( - this.getContractEvents( - blockchainId, - CONTRACTS.HUB_CONTRACT, - currentBlock, - CONTRACT_EVENTS.HUB, - ), - ); - } - const contractEvents = await Promise.all(syncContractEventsPromises); - - await this.handleBlockchainEvents( - contractEvents.flatMap((events) => events), - blockchainId, - ); - } - - listenOnBlockchainEvents(blockchainId) { - const devEnvironment = - process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVELOPMENT || - process.env.NODE_ENV === NODE_ENVIRONMENTS.TEST; - - const eventFetchInterval = devEnvironment - ? CONTRACT_EVENT_FETCH_INTERVALS.DEVELOPMENT - : CONTRACT_EVENT_FETCH_INTERVALS.MAINNET; - - let working = false; - fetchEventsFailedCount[blockchainId] = 0; - const fetchEventInterval = setInterval(async () => { - if (working) return; - try { - working = true; - await this.fetchAndHandleBlockchainEvents(blockchainId); - fetchEventsFailedCount[blockchainId] = 0; - } catch (e) { - if (fetchEventsFailedCount[blockchainId] >= MAXIMUM_FETCH_EVENTS_FAILED_COUNT) { - clearInterval(fetchEventInterval); - this.blockchainModuleManager.removeImplementation(blockchainId); - if (!this.blockchainModuleManager.getImplementationNames().length) { - this.logger.error( - `Unable to fetch new events for blockchain: ${blockchainId}. Error message: ${e.message} OT-node shutting down...`, - ); - process.exit(1); - } - this.logger.error( - `Unable to fetch new events for blockchain: ${blockchainId}. Error message: ${e.message} blockchain implementation removed.`, - ); - } - this.logger.error( - `Failed to get and process blockchain events for blockchain: ${blockchainId}. Error: ${e}`, - ); - fetchEventsFailedCount[blockchainId] += 1; - await setTimeout(DELAY_BETWEEN_FAILED_FETCH_EVENTS_MILLIS); - } finally { - working = false; - } - }, eventFetchInterval); - } - - async getContractEvents(blockchainId, contractName, currentBlock, eventsToFilter) { - const lastCheckedBlockObject = await this.repositoryModuleManager.getLastCheckedBlock( - blockchainId, - contractName, - ); - - const result = await this.blockchainModuleManager.getAllPastEvents( - blockchainId, - contractName, - eventsToFilter, - lastCheckedBlockObject?.lastCheckedBlock ?? 0, - lastCheckedBlockObject?.lastCheckedTimestamp ?? 0, - currentBlock, - ); - - await this.repositoryModuleManager.updateLastCheckedBlock( - blockchainId, - result.lastCheckedBlock, - Date.now(0), - contractName, - ); - - if (!result.eventsMissed) { - await this.shardingTableService.pullBlockchainShardingTable(blockchainId, true); - } - - return result.events; - } - - async handleBlockchainEvents(events, blockchainId) { - const eventsForProcessing = events.filter((event) => eventNames.includes(event.event)); - - if (eventsForProcessing?.length) { - this.logger.trace( - `${eventsForProcessing.length} blockchain events caught on blockchain ${blockchainId}.`, - ); - await this.repositoryModuleManager.insertBlockchainEvents(eventsForProcessing); - } - const unprocessedEvents = - await this.repositoryModuleManager.getAllUnprocessedBlockchainEvents( - eventNames, - blockchainId, - ); - - if (unprocessedEvents?.length) { - this.logger.trace( - `Processing ${unprocessedEvents.length} blockchain events on blockchain ${blockchainId}.`, - ); - let batchedEvents = {}; - let currentBlockNumber = 0; - for (const event of unprocessedEvents) { - if (event.block !== currentBlockNumber) { - // eslint-disable-next-line no-await-in-loop - await this.handleBlockBatchedEvents(batchedEvents); - batchedEvents = {}; - currentBlockNumber = event.block; - } - - // Check if event should be grouped with other event - const eventsGroupName = CONTRACT_EVENT_TO_GROUP_MAPPING[event.event]; - if (eventsGroupName) { - // Get Events Group object containing predefined events and Grouping Key (Event Argument) - const eventsGroup = GROUPED_CONTRACT_EVENTS[eventsGroupName]; - // Get value of the Grouping Key from the Event - const groupingKeyValue = JSON.parse(event.data)[eventsGroup.groupingKey]; - - if (!this.eventGroupsBuffer[blockchainId][eventsGroupName]) { - this.eventGroupsBuffer[blockchainId][eventsGroupName] = {}; - } - - if (!this.eventGroupsBuffer[blockchainId][eventsGroupName][groupingKeyValue]) { - this.eventGroupsBuffer[blockchainId][eventsGroupName][groupingKeyValue] = - []; - } - - // Push event to the buffer until Events Group is not full - this.eventGroupsBuffer[blockchainId][eventsGroupName][groupingKeyValue].push( - event, - ); - - // Mark event as processed - // TODO: There should be a smarter way to do this, because it will cause troubles - // in case node goes offline while only catched some of the events from the group - // and not all of them. Buffer will be cleared and event is already marked as processed. - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.markBlockchainEventsAsProcessed([event]); - - // When all expected Events from the Event Group are collected - if ( - this.eventGroupsBuffer[blockchainId][eventsGroupName][groupingKeyValue] - .length === eventsGroup.events.length - ) { - if (!batchedEvents[eventsGroupName]) { - batchedEvents[eventsGroupName] = []; - } - - // Add Events Group to the Processing Queue - batchedEvents[eventsGroupName].push( - this.eventGroupsBuffer[blockchainId][eventsGroupName][groupingKeyValue], - ); - - // Remove Events Group from the Buffer - delete this.eventGroupsBuffer[blockchainId][eventsGroupName][ - groupingKeyValue - ]; - } - } else if (batchedEvents[event.event]) { - batchedEvents[event.event].push(event); - } else { - batchedEvents[event.event] = [event]; - } - } - - await this.handleBlockBatchedEvents(batchedEvents); - } - } - - async handleBlockBatchedEvents(batchedEvents) { - const handleBlockEventsPromises = []; - for (const [eventName, blockEvents] of Object.entries(batchedEvents)) { - handleBlockEventsPromises.push(this.handleBlockEvents(eventName, blockEvents)); - } - // eslint-disable-next-line no-await-in-loop - await Promise.all(handleBlockEventsPromises); - } - - async handleBlockEvents(eventName, blockEvents) { - const handlerFunctionName = `handle${eventName}Events`; - if (!this[handlerFunctionName]) return; - this.logger.trace(`${blockEvents.length} ${eventName} events caught.`); - try { - await this[handlerFunctionName](blockEvents); - await this.repositoryModuleManager.markBlockchainEventsAsProcessed(blockEvents); - } catch (error) { - this.logger.warn( - `Error while processing events: ${eventName}. Error: ${error.message}`, - ); - } - } - - async handleParameterChangedEvents(blockEvents) { - for (const event of blockEvents) { - const { blockchainId, contract, data } = event; - const { parameterName, parameterValue } = JSON.parse(data); - switch (contract) { - case CONTRACTS.LOG2PLDSF_CONTRACT: - // This invalidates contracts parameter - // TODO: Create function for contract call cache invalidation - this.blockchainModuleManager.setContractCallCache( - blockchainId, - CONTRACTS.LOG2PLDSF_CONTRACT, - parameterName, - null, - ); - break; - case CONTRACTS.LINEAR_SUM_CONTRACT: - this.blockchainModuleManager.setContractCallCache( - blockchainId, - CONTRACTS.LINEAR_SUM_CONTRACT, - parameterName, - null, - ); - break; - case CONTRACTS.PARAMETERS_STORAGE_CONTRACT: - this.blockchainModuleManager.setContractCallCache( - blockchainId, - CONTRACTS.PARAMETERS_STORAGE_CONTRACT, - parameterName, - parameterValue, - ); - break; - default: - this.logger.warn( - `Unable to handle parameter changed event. Unknown contract name ${event.contract}`, - ); - } - } - } - - handleNewContractEvents(blockEvents) { - for (const event of blockEvents) { - const { contractName, newContractAddress } = JSON.parse(event.data); - this.blockchainModuleManager.initializeContract( - event.blockchainId, - contractName, - newContractAddress, - ); - } - } - - async handleContractChangedEvents(blockEvents) { - await Promise.all( - blockEvents.map(async (event) => { - const { contractName, newContractAddress } = JSON.parse(event.data); - this.blockchainModuleManager.initializeContract( - event.blockchainId, - contractName, - newContractAddress, - ); - - if (contractName === CONTRACTS.SHARDING_TABLE_CONTRACT) { - await this.shardingTableService.pullBlockchainShardingTable( - event.blockchainId, - true, - ); - } - }), - ); - } - - handleNewAssetStorageEvents(blockEvents) { - for (const event of blockEvents) { - const { newContractAddress } = JSON.parse(event.data); - this.blockchainModuleManager.initializeAssetStorageContract( - event.blockchainId, - newContractAddress, - ); - } - } - - handleAssetStorageChangedEvents(blockEvents) { - for (const event of blockEvents) { - const { newContractAddress } = JSON.parse(event.data); - this.blockchainModuleManager.initializeAssetStorageContract( - event.blockchainId, - newContractAddress, - ); - } - } - - async handleNodeAddedEvents(blockEvents) { - const peerRecords = await Promise.all( - blockEvents.map(async (event) => { - const eventData = JSON.parse(event.data); - - const nodeId = this.blockchainModuleManager.convertHexToAscii( - event.blockchainId, - eventData.nodeId, - ); - - const sha256 = await this.hashingService.callHashFunction( - CONTENT_ASSET_HASH_FUNCTION_ID, - nodeId, - ); - - this.logger.trace(`Adding peer id: ${nodeId} to sharding table.`); - return { - peerId: nodeId, - blockchainId: event.blockchainId, - ask: this.blockchainModuleManager.convertFromWei( - event.blockchainId, - eventData.ask, - ), - stake: this.blockchainModuleManager.convertFromWei( - event.blockchainId, - eventData.stake, - ), - lastSeen: new Date(0), - sha256, - }; - }), - ); - await this.repositoryModuleManager.createManyPeerRecords(peerRecords); - } - - async handleNodeRemovedEvents(blockEvents) { - await Promise.all( - blockEvents.map(async (event) => { - const eventData = JSON.parse(event.data); - - const nodeId = this.blockchainModuleManager.convertHexToAscii( - event.blockchainId, - eventData.nodeId, - ); - - this.logger.trace(`Removing peer id: ${nodeId} from sharding table.`); - - await this.repositoryModuleManager.removePeerRecord(event.blockchainId, nodeId); - }), - ); - } - - async handleStakeIncreasedEvents(blockEvents) { - await Promise.all( - blockEvents.map(async (event) => { - const eventData = JSON.parse(event.data); - - const nodeId = this.blockchainModuleManager.convertHexToAscii( - event.blockchainId, - eventData.nodeId, - ); - - this.logger.trace(`Updating stake value for peer id: ${nodeId} in sharding table.`); - - await this.repositoryModuleManager.updatePeerStake( - nodeId, - event.blockchainId, - this.blockchainModuleManager.convertFromWei( - event.blockchainId, - eventData.newStake, - ), - ); - }), - ); - } - - async handleStakeWithdrawalStartedEvents(blockEvents) { - await this.handleStakeIncreasedEvents(blockEvents); - } - - async handleAskUpdatedEvents(blockEvents) { - await Promise.all( - blockEvents.map(async (event) => { - const eventData = JSON.parse(event.data); - - const nodeId = this.blockchainModuleManager.convertHexToAscii( - event.blockchainId, - eventData.nodeId, - ); - - this.logger.trace(`Updating ask value for peer id: ${nodeId} in sharding table.`); - - await this.repositoryModuleManager.updatePeerAsk( - nodeId, - event.blockchainId, - this.blockchainModuleManager.convertFromWei(event.blockchainId, eventData.ask), - ); - }), - ); - } - - async handleServiceAgreementV1ExtendedEvents(blockEvents) { - await Promise.all( - blockEvents.map(async (event) => { - const { agreementId, epochsNumber } = JSON.parse(event.data); - - return this.repositoryModuleManager.updateServiceAgreementEpochsNumber( - agreementId, - epochsNumber, - ); - }), - ); - } - - async handleServiceAgreementV1TerminatedEvents(blockEvents) { - await this.repositoryModuleManager.removeServiceAgreements( - blockEvents.map((event) => JSON.parse(event.data).agreementId), - ); - } - - async handleStateFinalizedEvents(blockEvents) { - // todo: find a way to safely parallelize this - for (const event of blockEvents) { - const eventData = JSON.parse(event.data); - - const { tokenId, keyword, hashFunctionId, state, stateIndex } = eventData; - const blockchain = event.blockchainId; - const contract = eventData.assetContract; - this.logger.trace( - `Handling event: ${event.event} for asset with ual: ${this.ualService.deriveUAL( - blockchain, - contract, - tokenId, - )} with keyword: ${keyword}, assertion id: ${state}.`, - ); - - // eslint-disable-next-line no-await-in-loop - await Promise.all([ - this.pendingStorageService.moveAndDeletePendingState( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - PENDING_STORAGE_REPOSITORIES.PUBLIC, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - state, - stateIndex, - ), - this.pendingStorageService.moveAndDeletePendingState( - TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, - TRIPLE_STORE_REPOSITORIES.PRIVATE_HISTORY, - PENDING_STORAGE_REPOSITORIES.PRIVATE, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - state, - stateIndex, - ), - ]); - - // eslint-disable-next-line no-await-in-loop - const paranetsBlockchains = await this.repositoryModuleManager.getParanetsBlockchains(); - - if (paranetsBlockchains.includes(blockchain)) { - // eslint-disable-next-line no-await-in-loop - const knowledgeAssetId = await this.paranetService.constructKnowledgeAssetId( - blockchain, - contract, - tokenId, - ); - - // eslint-disable-next-line no-await-in-loop - const paranetId = await this.blockchainModuleManager.getParanetId( - blockchain, - knowledgeAssetId, - ); - if (paranetId && paranetId !== ZERO_BYTES32) { - // eslint-disable-next-line no-await-in-loop - const paranetExists = await this.repositoryModuleManager.paranetExists( - paranetId, - blockchain, - ); - if (paranetExists) { - const { - paranetKAStorageContract: paranetKasContract, - tokenId: paranetTokenId, - } = - // eslint-disable-next-line no-await-in-loop - await this.blockchainModuleManager.getKnowledgeAssetLocatorFromParanetId( - blockchain, - paranetId, - ); - const paranetUAL = this.ualService.deriveUAL( - blockchain, - paranetKasContract, - paranetTokenId, - ); - - // eslint-disable-next-line no-await-in-loop - const paranetAssetExists = await this.tripleStoreService.paranetAssetExists( - blockchain, - contract, - tokenId, - paranetKasContract, - paranetTokenId, - ); - - if (paranetAssetExists) { - const kaUAL = this.ualService.deriveUAL(blockchain, contract, tokenId); - - // Create a record for missing Paranet KA - // Paranet sync command will get it from network - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.createMissedParanetAssetRecord({ - blockchainId: blockchain, - ual: kaUAL, - paranetUal: paranetUAL, - knowledgeAssetId, - }); - } - } - } - } - } - } -} - -export default BlockchainEventListenerService; diff --git a/src/service/blockchain-events-service.js b/src/service/blockchain-events-service.js new file mode 100644 index 0000000000..e7ba7f03a9 --- /dev/null +++ b/src/service/blockchain-events-service.js @@ -0,0 +1,65 @@ +class BlockchainEventsService { + constructor(ctx) { + this.config = ctx.config; + this.logger = ctx.logger; + + this.blockchainEventsModuleManager = ctx.blockchainEventsModuleManager; + } + + initializeBlockchainEventsServices() { + this.blockchainEventsServicesImplementations = {}; + for (const implementationName of this.blockchainEventsModuleManager.getImplementationNames()) { + for (const blockchain in this.blockchainEventsModuleManager.getImplementation( + implementationName, + ).module.blockchains) { + this.blockchainEventsServicesImplementations[blockchain] = implementationName; + } + } + } + + getContractAddress(blockchain, contractName) { + return this.blockchainEventsModuleManager.getContractAddress( + this.blockchainEventsServicesImplementations[blockchain], + blockchain, + contractName, + ); + } + + updateContractAddress(blockchain, contractName, contractAddress) { + return this.blockchainEventsModuleManager.updateContractAddress( + this.blockchainEventsServicesImplementations[blockchain], + blockchain, + contractName, + contractAddress, + ); + } + + async getBlock(blockchain, tag = 'latest') { + return this.blockchainEventsModuleManager.getBlock( + this.blockchainEventsServicesImplementations[blockchain], + blockchain, + tag, + ); + } + + async getPastEvents( + blockchain, + contractNames, + eventsToFilter, + lastCheckedBlock, + lastCheckedTimestamp, + currentBlock, + ) { + return this.blockchainEventsModuleManager.getPastEvents( + this.blockchainEventsServicesImplementations[blockchain], + blockchain, + contractNames, + eventsToFilter, + lastCheckedBlock, + lastCheckedTimestamp, + currentBlock, + ); + } +} + +export default BlockchainEventsService; diff --git a/src/service/crypto-service.js b/src/service/crypto-service.js new file mode 100644 index 0000000000..c030bf3d22 --- /dev/null +++ b/src/service/crypto-service.js @@ -0,0 +1,70 @@ +import ethers from 'ethers'; + +class CryptoService { + constructor(ctx) { + this.config = ctx.config; + this.logger = ctx.logger; + } + + toBigNumber(value) { + return ethers.BigNumber.from(value); + } + + keccak256(data) { + if (!ethers.utils.isBytesLike(data)) { + const bytesLikeData = ethers.utils.toUtf8Bytes(data); + return ethers.utils.keccak256(bytesLikeData); + } + return ethers.utils.keccak256(data); + } + + sha256(data) { + if (!ethers.utils.isBytesLike(data)) { + const bytesLikeData = ethers.utils.toUtf8Bytes(data); + return ethers.utils.sha256(bytesLikeData); + } + return ethers.utils.sha256(data); + } + + encodePacked(types, values) { + return ethers.utils.solidityPack(types, values); + } + + keccak256EncodePacked(types, values) { + return ethers.utils.solidityKeccak256(types, values); + } + + sha256EncodePacked(types, values) { + return ethers.utils.soliditySha256(types, values); + } + + convertUint8ArrayToHex(uint8Array) { + return ethers.utils.hexlify(uint8Array); + } + + convertAsciiToHex(string) { + return this.convertUint8ArrayToHex(ethers.utils.toUtf8Bytes(string)); + } + + convertHexToAscii(hexString) { + return ethers.utils.toUtf8String(hexString); + } + + convertBytesToUint8Array(bytesLikeData) { + return ethers.utils.arrayify(bytesLikeData); + } + + convertToWei(value, fromUnit = 'ether') { + return ethers.utils.parseUnits(value.toString(), fromUnit); + } + + convertFromWei(value, toUnit = 'ether') { + return ethers.utils.formatUnits(value, toUnit); + } + + splitSignature(flatSignature) { + return ethers.utils.splitSignature(flatSignature); + } +} + +export default CryptoService; diff --git a/src/service/data-service.js b/src/service/data-service.js index 2f51a4b972..0d776b6626 100644 --- a/src/service/data-service.js +++ b/src/service/data-service.js @@ -1,49 +1,41 @@ -import jsonld from 'jsonld'; +import { kcTools } from 'assertion-tools'; import { - SCHEMA_CONTEXT, - MEDIA_TYPES, XML_DATA_TYPES, - PRIVATE_ASSERTION_PREDICATE, + PRIVATE_HASH_SUBJECT_PREFIX, + V0_PRIVATE_ASSERTION_PREDICATE, + CHUNK_BYTE_SIZE, } from '../constants/constants.js'; -const ALGORITHM = 'URDNA2015'; - class DataService { constructor(ctx) { this.config = ctx.config; this.logger = ctx.logger; - } - - async toNQuads(content, inputFormat) { - const options = { - algorithm: ALGORITHM, - format: MEDIA_TYPES.N_QUADS, - }; - - if (inputFormat) { - options.inputFormat = inputFormat; - } - - const canonized = await jsonld.canonize(content, options); - return canonized.split('\n').filter((x) => x !== ''); + this.cryptoService = ctx.cryptoService; } - async compact(content) { - const result = await jsonld.compact(content, { - '@context': SCHEMA_CONTEXT, - }); + calculateAssertionSize(assertion) { + const numberOfChunks = kcTools.calculateNumberOfChunks(assertion, CHUNK_BYTE_SIZE); + return numberOfChunks * CHUNK_BYTE_SIZE; + } - return result; + createTripleAnnotations(groupedTriples, annotationPredicate, annotations) { + return groupedTriples.flatMap((knowledgeAssetTriples, index) => + knowledgeAssetTriples.map( + (triple) => + `<< ${triple.replace(' .', '')} >> ${annotationPredicate} ${ + annotations[index] + } .`, + ), + ); } - async canonize(content) { - const nquads = await this.toNQuads(content); - if (nquads && nquads.length === 0) { - throw new Error('File format is corrupted, no n-quads extracted.'); - } + countDistinctSubjects(triples) { + return kcTools.countDistinctSubjects(triples); + } - return nquads; + groupTriplesBySubject(triples, sort = true) { + return kcTools.groupNquadsBySubject(triples, sort); } /** @@ -90,12 +82,87 @@ class DataService { getPrivateAssertionId(publicAssertion) { const privateAssertionLinkTriple = publicAssertion.filter((triple) => - triple.includes(PRIVATE_ASSERTION_PREDICATE), + triple.includes(V0_PRIVATE_ASSERTION_PREDICATE), )[0]; if (!privateAssertionLinkTriple) return; return privateAssertionLinkTriple.match(/"(.*?)"/)[1]; } + + // Asumes nobody is using PRIVATE_HASH_SUBJECT_PREFIX subject in assertion + quadsContainsPrivateRepresentations(quads) { + return ( + quads[0].split(' ')[0].startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`) || + quads[quads.length - 1].split(' ')[0].startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`) + ); + } + + generateHashFromString(string) { + return this.cryptoService.sha256EncodePacked(['string'], [string]); + } + + splitConnectedArrays(publicTriples) { + const groupedPublic = []; + let currentSubject = publicTriples[0].split(' ')[0]; + let currentSubjectHash = currentSubject.startsWith('`; + let currentKA = [publicTriples[0]]; + + for (let i = 1; i < publicTriples.length; i += 1) { + const [subject] = publicTriples[i].split(' '); + + const subjectHash = subject.startsWith('`; + + if ( + currentSubject === subject || + currentSubjectHash === subject || + subjectHash === currentSubject + ) { + currentKA.push(publicTriples[i]); + } else { + groupedPublic.push(currentKA); + currentSubject = subject; + currentSubjectHash = subjectHash; + currentKA = [publicTriples[i]]; + } + } + + // Push the last group + groupedPublic.push(currentKA); + + return groupedPublic; + } + + insertStringInSortedArray(array, str) { + // Assuming triplesArray is already sorted + let left = 0; + let right = array.length; + while (left < right) { + const mid = Math.floor((left + right) / 2); + if (array[mid].localeCompare(str) < 0) { + left = mid + 1; + } else { + right = mid; + } + } + array.splice(left, 0, str); + return left; + } + + removeDuplicateObjectsFromArray(array) { + const seen = new Set(); + return array.filter((item) => { + const key = Object.values(item).join('_'); + if (seen.has(key)) { + return false; + } + seen.add(key); + return true; + }); + } } export default DataService; diff --git a/src/service/file-service.js b/src/service/file-service.js index 34c1c68c45..59a720d5ad 100644 --- a/src/service/file-service.js +++ b/src/service/file-service.js @@ -1,10 +1,24 @@ +import os from 'os'; import path from 'path'; -import { mkdir, writeFile, readFile, unlink, stat, readdir, rm } from 'fs/promises'; +import { + mkdir, + writeFile, + readFile, + unlink, + stat, + readdir, + rm, + appendFile, + chmod, +} from 'fs/promises'; import appRootPath from 'app-root-path'; - -const MIGRATION_FOLDER_NAME = 'migrations'; - -const ARCHIVE_FOLDER_NAME = 'archive'; +import { + ARCHIVE_FOLDER, + BLS_KEY_DIRECTORY, + BLS_KEY_FILENAME, + MIGRATION_FOLDER, + NODE_ENVIRONMENTS, +} from '../constants/constants.js'; class FileService { constructor(ctx) { @@ -23,16 +37,28 @@ class FileService { * @param data * @returns {Promise} */ - async writeContentsToFile(directory, filename, data, log = true) { + async writeContentsToFile(directory, filename, data, log = true, flag = 'w') { if (log) { this.logger.debug(`Saving file with name: ${filename} in the directory: ${directory}`); } await mkdir(directory, { recursive: true }); const fullpath = path.join(directory, filename); - await writeFile(fullpath, data); + await writeFile(fullpath, data, { flag }); return fullpath; } + async appendContentsToFile(directory, filename, data, log = true) { + if (log) { + this.logger.debug(`Saving file with name: ${filename} in the directory: ${directory}`); + } + await mkdir(directory, { recursive: true }); + const fullPath = path.join(directory, filename); + + await appendFile(fullPath, data); + + return fullPath; + } + async readDirectory(dirPath) { this.logger.debug(`Reading folder at path: ${dirPath}`); try { @@ -103,11 +129,43 @@ class FileService { } } + getBinariesFolderPath() { + return path.join(appRootPath.path, 'bin'); + } + + getBinaryPath(binary) { + let binaryName = binary; + if (process.platform === 'win32') { + binaryName += '.exe'; + } + return path.join(this.getBinariesFolderPath(), process.platform, process.arch, binaryName); + } + + async makeBinaryExecutable(binary) { + const binaryPath = this.getBinaryPath(binary); + if (os.platform() !== 'win32') { + await chmod(binaryPath, '755', (err) => { + if (err) { + throw err; + } + this.logger.debug(`Permissions for binary ${binaryPath} have been set to 755.`); + }); + } + } + + getBLSSecretKeyFolderPath() { + return path.join(this.getDataFolderPath(), BLS_KEY_DIRECTORY); + } + + getBLSSecretKeyPath() { + return path.join(this.getBLSSecretKeyFolderPath(), BLS_KEY_FILENAME); + } + getDataFolderPath() { if ( - process.env.NODE_ENV === 'testnet' || - process.env.NODE_ENV === 'mainnet' || - process.env.NODE_ENV === 'devnet' + process.env.NODE_ENV === NODE_ENVIRONMENTS.DEVNET || + process.env.NODE_ENV === NODE_ENVIRONMENTS.TESTNET || + process.env.NODE_ENV === NODE_ENVIRONMENTS.MAINNET ) { return path.join(appRootPath.path, '..', this.config.appDataPath); } @@ -119,7 +177,7 @@ class FileService { } getMigrationFolderPath() { - return path.join(this.getDataFolderPath(), MIGRATION_FOLDER_NAME); + return path.join(this.getDataFolderPath(), MIGRATION_FOLDER); } getOperationIdCachePath() { @@ -130,64 +188,28 @@ class FileService { return path.join(this.getOperationIdCachePath(), operationId); } - getPendingStorageCachePath(repository) { - return path.join(this.getDataFolderPath(), 'pending_storage_cache', repository); + getPendingStorageCachePath() { + return path.join(this.getDataFolderPath(), 'pending_storage_cache'); } - getPendingStorageFolderPath(repository, blockchain, contract, tokenId) { - return path.join( - this.getPendingStorageCachePath(repository), - `${blockchain.toLowerCase()}:${contract.toLowerCase()}:${tokenId}`, - ); + getPendingStorageDocumentPath(operationId) { + return path.join(this.getPendingStorageCachePath(), operationId); } - async getPendingStorageLatestDocument(repository, blockchain, contract, tokenId) { - const pendingStorageFolder = this.getPendingStorageFolderPath( - repository, - blockchain, - contract, - tokenId, - ); - - let latestFile; - let latestMtime = 0; - try { - const files = await readdir(pendingStorageFolder); - - for (const file of files) { - const filePath = path.join(pendingStorageFolder, file); - // eslint-disable-next-line no-await-in-loop - const stats = await stat(filePath); - - if (stats.mtimeMs > latestMtime) { - latestFile = file; - latestMtime = stats.mtimeMs; - } - } - } catch (error) { - if (error.code === 'ENOENT') { - this.logger.debug(`Folder not found at path: ${pendingStorageFolder}`); - return false; - } - throw error; - } - - return latestFile ?? false; + getSignatureStorageCachePath() { + return path.join(this.getDataFolderPath(), 'signature_storage_cache'); } - async getPendingStorageDocumentPath(repository, blockchain, contract, tokenId, assertionId) { - const pendingStorageFolder = this.getPendingStorageFolderPath( - repository, - blockchain, - contract, - tokenId, - ); + getSignatureStorageFolderPath(folderName) { + return path.join(this.getSignatureStorageCachePath(), folderName); + } - return path.join(pendingStorageFolder, assertionId); + getSignatureStorageDocumentPath(folderName, operationId) { + return path.join(this.getSignatureStorageFolderPath(folderName), operationId); } getArchiveFolderPath(subFolder) { - return path.join(this.getDataFolderPath(), ARCHIVE_FOLDER_NAME, subFolder); + return path.join(this.getDataFolderPath(), ARCHIVE_FOLDER, subFolder); } getParentDirectory(filePath) { diff --git a/src/service/finality-service.js b/src/service/finality-service.js new file mode 100644 index 0000000000..a39e2087b8 --- /dev/null +++ b/src/service/finality-service.js @@ -0,0 +1,85 @@ +import { Mutex } from 'async-mutex'; +import OperationService from './operation-service.js'; +import { + OPERATION_ID_STATUS, + NETWORK_PROTOCOLS, + ERROR_TYPE, + OPERATIONS, + OPERATION_REQUEST_STATUS, + FINALITY_BATCH_SIZE, + FINALITY_MIN_NUM_OF_NODE_REPLICATIONS, +} from '../constants/constants.js'; + +class FinalityService extends OperationService { + constructor(ctx) { + super(ctx); + + this.operationName = OPERATIONS.FINALITY; + this.networkProtocols = NETWORK_PROTOCOLS.FINALITY; + this.errorType = ERROR_TYPE.FINALITY.FINALITY_ERROR; + this.completedStatuses = [ + OPERATION_ID_STATUS.FINALITY.FINALITY_FETCH_FROM_NODES_END, + OPERATION_ID_STATUS.FINALITY.FINALITY_END, + OPERATION_ID_STATUS.COMPLETED, + ]; + this.ualService = ctx.ualService; + this.tripleStoreService = ctx.tripleStoreService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.paranetService = ctx.paranetService; + this.operationMutex = new Mutex(); + } + + async processResponse(command, responseStatus, responseData) { + const { operationId, blockchain } = command.data; + + const responseStatusesFromDB = await this.getResponsesStatuses( + responseStatus, + responseData.errorMessage, + operationId, + ); + + const { completedNumber, failedNumber } = responseStatusesFromDB[operationId]; + + this.logger.debug( + `Processing ${this.operationName} response with status: ${responseStatus} for operationId: ${operationId}. ` + + `Completed: ${completedNumber}, Failed: ${failedNumber}`, + ); + if (responseData.errorMessage) { + this.logger.trace( + `Error message for operation id: ${operationId} : ${responseData.errorMessage}`, + ); + } + + if (responseStatus === OPERATION_REQUEST_STATUS.COMPLETED) { + await this.markOperationAsCompleted( + operationId, + blockchain, + { + completedNodes: 1, + allNodesReplicatedData: true, + }, + [...this.completedStatuses], + ); + this.logResponsesSummary(completedNumber, failedNumber); + } else { + await this.markOperationAsFailed( + operationId, + blockchain, + `Unable to send ACK for finalization!`, + this.errorType, + ); + this.logResponsesSummary(completedNumber, failedNumber); + } + } + + getBatchSize(batchSize = null) { + return batchSize ?? FINALITY_BATCH_SIZE; + } + + getMinAckResponses(minimumNumberOfNodeReplications = null) { + return minimumNumberOfNodeReplications ?? FINALITY_MIN_NUM_OF_NODE_REPLICATIONS; + } +} + +export default FinalityService; diff --git a/src/service/get-service.js b/src/service/get-service.js index 442692b43b..e7de8a066d 100644 --- a/src/service/get-service.js +++ b/src/service/get-service.js @@ -6,7 +6,8 @@ import { ERROR_TYPE, OPERATIONS, OPERATION_REQUEST_STATUS, - TRIPLE_STORE_REPOSITORIES, + GET_BATCH_SIZE, + GET_MIN_NUM_OF_NODE_REPLICATIONS, } from '../constants/constants.js'; class GetService extends OperationService { @@ -21,10 +22,6 @@ class GetService extends OperationService { OPERATION_ID_STATUS.GET.GET_END, OPERATION_ID_STATUS.COMPLETED, ]; - this.ualService = ctx.ualService; - this.tripleStoreService = ctx.tripleStoreService; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.paranetService = ctx.paranetService; this.operationMutex = new Mutex(); } @@ -34,41 +31,36 @@ class GetService extends OperationService { blockchain, numberOfFoundNodes, leftoverNodes, - keyword, batchSize, minAckResponses, - contract, - tokenId, assertionId, - assetSync, - stateIndex, - paranetSync, - paranetTokenId, - paranetLatestAsset, } = command.data; - const keywordsStatuses = await this.getResponsesStatuses( + const responseStatusesFromDB = await this.getResponsesStatuses( responseStatus, responseData.errorMessage, operationId, - keyword, ); - const { completedNumber, failedNumber } = keywordsStatuses[keyword]; - const numberOfResponses = completedNumber + failedNumber; + const { completedNumber, failedNumber } = responseStatusesFromDB[operationId]; + + const totalResponses = completedNumber + failedNumber; + const isAllNodesResponded = numberOfFoundNodes === totalResponses; + const isBatchCompleted = totalResponses % batchSize === 0; + this.logger.debug( `Processing ${ this.operationName - } response with status: ${responseStatus} for operationId: ${operationId}, keyword: ${keyword}. Total number of nodes: ${numberOfFoundNodes}, number of nodes in batch: ${Math.min( + } response with status: ${responseStatus} for operationId: ${operationId}. Total number of nodes: ${numberOfFoundNodes}, number of nodes in batch: ${Math.min( numberOfFoundNodes, batchSize, )} number of leftover nodes: ${ leftoverNodes.length - }, number of responses: ${numberOfResponses}, Completed: ${completedNumber}, Failed: ${failedNumber}`, + }, number of responses: ${totalResponses}, Completed: ${completedNumber}, Failed: ${failedNumber}`, ); if (responseData.errorMessage) { this.logger.trace( - `Error message for operation id: ${operationId}, keyword: ${keyword} : ${responseData.errorMessage}`, + `Error message for operation id: ${operationId} : ${responseData.errorMessage}`, ); } @@ -76,98 +68,36 @@ class GetService extends OperationService { responseStatus === OPERATION_REQUEST_STATUS.COMPLETED && completedNumber === minAckResponses ) { - await this.markOperationAsCompleted( - operationId, - blockchain, - { assertion: responseData.nquads }, - this.completedStatuses, - ); + await this.markOperationAsCompleted(operationId, blockchain, responseData, [ + ...this.completedStatuses, + ]); this.logResponsesSummary(completedNumber, failedNumber); + } else if (completedNumber < minAckResponses && (isAllNodesResponded || isBatchCompleted)) { + const potentialCompletedNumber = completedNumber + leftoverNodes.length; - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - - // Fetched old state - store it in public history repo - if (paranetSync && !paranetLatestAsset) { - this.logger.debug( - `Paranet sync: ${responseData.nquads.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, - ); - await this.tripleStoreService.localStoreAsset( - TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, - assertionId, - responseData.nquads, - blockchain, - contract, - tokenId, - keyword, - ); - } else if (assetSync) { - this.logger.debug( - `Asset sync: ${responseData.nquads.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, - ); - - await this.tripleStoreService.localStoreAsset( - TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, - assertionId, - responseData.nquads, - blockchain, - contract, - tokenId, - keyword, - ); - - // Paranet sync for latest state - if (paranetSync) { - this.logger.debug( - `Paranet sync: ${responseData.nquads.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, - ); - const paranetUAL = this.ualService.deriveUAL( - blockchain, - contract, - paranetTokenId, - ); - const paranetRepository = - this.paranetService.getParanetRepositoryName(paranetUAL); - await this.tripleStoreService.localStoreAsset( - paranetRepository, - assertionId, - responseData.nquads, - blockchain, - contract, - tokenId, - keyword, - ); - } - } - } - - if ( - completedNumber < minAckResponses && - (numberOfFoundNodes === failedNumber || failedNumber % batchSize === 0) - ) { - if (leftoverNodes.length === 0) { - this.logger.info( - `Unable to find assertion on the network for operation id: ${operationId}`, - ); - await this.markOperationAsCompleted( + // Still possible to meet minAckResponses, schedule leftover nodes + if (leftoverNodes.length > 0 && potentialCompletedNumber >= minAckResponses) { + await this.scheduleOperationForLeftoverNodes(command.data, leftoverNodes); + } else { + // Not enough potential responses to meet minAckResponses, or no leftover nodes + this.markOperationAsFailed( operationId, blockchain, - { - message: 'Unable to find assertion on the network!', - }, - this.completedStatuses, + `Unable to find assertion ${assertionId} on the network!`, + this.errorType, ); this.logResponsesSummary(completedNumber, failedNumber); - if (assetSync) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - this.logger.debug( - `ASSET_SYNC: No nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, - ); - } - } else { - await this.scheduleOperationForLeftoverNodes(command.data, leftoverNodes); } } } + + getBatchSize(batchSize = null) { + return batchSize ?? GET_BATCH_SIZE; + } + + getMinAckResponses(minimumNumberOfNodeReplications = null) { + return minimumNumberOfNodeReplications ?? GET_MIN_NUM_OF_NODE_REPLICATIONS; + } } export default GetService; diff --git a/src/service/hashing-service.js b/src/service/hashing-service.js deleted file mode 100644 index a9404ed8f9..0000000000 --- a/src/service/hashing-service.js +++ /dev/null @@ -1,31 +0,0 @@ -import { ethers } from 'ethers'; - -class HashingService { - constructor(ctx) { - this.config = ctx.config; - this.logger = ctx.logger; - - this.hashFunctions = { - 1: 'sha256', - }; - } - - callHashFunction(hashFunctionId, data) { - const hashFunctionName = this.getHashFunctionName(hashFunctionId); - return this[hashFunctionName](data); - } - - getHashFunctionName(hashFunctionId) { - return this.hashFunctions[hashFunctionId]; - } - - sha256(data) { - if (!ethers.utils.isBytesLike(data)) { - const bytesLikeData = ethers.utils.toUtf8Bytes(data); - return ethers.utils.sha256(bytesLikeData); - } - return ethers.utils.sha256(data); - } -} - -export default HashingService; diff --git a/src/service/json-schema-service.js b/src/service/json-schema-service.js index 859d9edab2..1bf802afb6 100644 --- a/src/service/json-schema-service.js +++ b/src/service/json-schema-service.js @@ -26,6 +26,7 @@ class JsonSchemaService { switch (version) { case 'v0': + case 'v1': schemaArgs.blockchainImplementationNames = this.blockchainModuleManager.getImplementationNames(); break; @@ -41,6 +42,7 @@ class JsonSchemaService { switch (version) { case 'v0': + case 'v1': schemaArgs.blockchainImplementationNames = this.blockchainModuleManager.getImplementationNames(); break; @@ -56,6 +58,7 @@ class JsonSchemaService { switch (version) { case 'v0': + case 'v1': schemaArgs.blockchainImplementationNames = this.blockchainModuleManager.getImplementationNames(); break; @@ -71,6 +74,7 @@ class JsonSchemaService { switch (version) { case 'v0': + case 'v1': break; default: throw Error(`HTTP API version: ${version} isn't supported.`); @@ -84,6 +88,7 @@ class JsonSchemaService { switch (version) { case 'v0': + case 'v1': break; default: throw Error(`HTTP API version: ${version} isn't supported.`); @@ -97,6 +102,7 @@ class JsonSchemaService { switch (version) { case 'v0': + case 'v1': schemaArgs.blockchainImplementationNames = this.blockchainModuleManager.getImplementationNames(); break; @@ -106,6 +112,36 @@ class JsonSchemaService { return this.loadSchema(version, 'local-store', schemaArgs); } + + async finalitySchema(version) { + const schemaArgs = {}; + + switch (version) { + case 'v1': + schemaArgs.blockchainImplementationNames = + this.blockchainModuleManager.getImplementationNames(); + break; + default: + throw Error(`HTTP API version: ${version} isn't supported.`); + } + + return this.loadSchema(version, 'finality', schemaArgs); + } + + async askSchema(version) { + const schemaArgs = {}; + + switch (version) { + case 'v1': + schemaArgs.blockchainImplementationNames = + this.blockchainModuleManager.getImplementationNames(); + break; + default: + throw Error(`HTTP API version: ${version} isn't supported.`); + } + + return this.loadSchema(version, 'ask', schemaArgs); + } } export default JsonSchemaService; diff --git a/src/service/operation-id-service.js b/src/service/operation-id-service.js index 8331c067ea..658d6359b1 100644 --- a/src/service/operation-id-service.js +++ b/src/service/operation-id-service.js @@ -15,12 +15,12 @@ class OperationIdService { return uuidv4(); } - async generateOperationId(status) { + async generateOperationId(status, previousOperationId = null) { const operationIdObject = await this.repositoryModuleManager.createOperationIdRecord({ status, }); const { operationId } = operationIdObject; - this.emitChangeEvent(status, operationId); + this.emitChangeEvent(status, operationId, null, previousOperationId); this.logger.debug(`Generated operation id for request ${operationId}`); return operationId; } @@ -72,8 +72,11 @@ class OperationIdService { await this.removeOperationIdCache(operationId); } - this.emitChangeEvent(status, operationId, blockchain, errorMessage, errorType); - + if (errorType) { + this.emitChangeEvent(errorType, operationId, blockchain, errorMessage, errorType); + } else { + this.emitChangeEvent(status, operationId, blockchain, errorMessage, errorType); + } await this.repositoryModuleManager.updateOperationIdRecord(response, operationId); } @@ -101,7 +104,13 @@ class OperationIdService { this.eventEmitter.emit(eventName, eventData); } - async cacheOperationIdData(operationId, data) { + async cacheOperationIdDataToMemory(operationId, data) { + this.logger.debug(`Caching data for operation id: ${operationId} in memory`); + + this.memoryCachedHandlersData[operationId] = { data, timestamp: Date.now() }; + } + + async cacheOperationIdDataToFile(operationId, data) { this.logger.debug(`Caching data for operation id: ${operationId} in file`); const operationIdCachePath = this.fileService.getOperationIdCachePath(); @@ -110,8 +119,6 @@ class OperationIdService { operationId, JSON.stringify(data), ); - - this.memoryCachedHandlersData[operationId] = { data, timestamp: Date.now() }; } async getCachedOperationIdData(operationId) { @@ -120,7 +127,9 @@ class OperationIdService { return this.memoryCachedHandlersData[operationId].data; } - this.logger.debug(`Reading operation id: ${operationId} cached data from file`); + this.logger.debug( + `Didn't manage to get cached ${operationId} data from memory, trying file`, + ); const documentPath = this.fileService.getOperationIdDocumentPath(operationId); let data; if (await this.fileService.pathExists(documentPath)) { diff --git a/src/service/operation-service.js b/src/service/operation-service.js index c2897d7222..40e53b0d4b 100644 --- a/src/service/operation-service.js +++ b/src/service/operation-service.js @@ -27,15 +27,14 @@ class OperationService { ); } - async getResponsesStatuses(responseStatus, errorMessage, operationId, keyword) { - const self = this; + async getResponsesStatuses(responseStatus, errorMessage, operationId) { let responses = 0; + const self = this; await this.operationMutex.runExclusive(async () => { await self.repositoryModuleManager.createOperationResponseRecord( responseStatus, this.operationName, operationId, - keyword, errorMessage, ); responses = await self.repositoryModuleManager.getOperationResponsesStatuses( @@ -44,34 +43,37 @@ class OperationService { ); }); - const keywordsStatuses = {}; - responses.forEach((response) => { - if (!keywordsStatuses[response.keyword]) - keywordsStatuses[response.keyword] = { failedNumber: 0, completedNumber: 0 }; + const operationIdStatuses = {}; + for (const response of responses) { + if (!operationIdStatuses[operationId]) + operationIdStatuses[operationId] = { failedNumber: 0, completedNumber: 0 }; if (response.status === OPERATION_REQUEST_STATUS.FAILED) { - keywordsStatuses[response.keyword].failedNumber += 1; + operationIdStatuses[operationId].failedNumber += 1; } else { - keywordsStatuses[response.keyword].completedNumber += 1; + operationIdStatuses[operationId].completedNumber += 1; } - }); + } - return keywordsStatuses; + return operationIdStatuses; } async markOperationAsCompleted(operationId, blockchain, responseData, endStatuses) { this.logger.info(`Finalizing ${this.operationName} for operationId: ${operationId}`); + if (responseData === null) { + await this.operationIdService.removeOperationIdCache(operationId); + } else { + await this.operationIdService.cacheOperationIdDataToMemory(operationId, responseData); + await this.operationIdService.cacheOperationIdDataToFile(operationId, responseData); + } + await this.repositoryModuleManager.updateOperationStatus( this.operationName, operationId, OPERATION_STATUS.COMPLETED, ); - if (responseData != null) { - await this.operationIdService.cacheOperationIdData(operationId, responseData); - } - for (const status of endStatuses) { // eslint-disable-next-line no-await-in-loop await this.operationIdService.updateOperationIdStatus(operationId, blockchain, status); @@ -81,6 +83,8 @@ class OperationService { async markOperationAsFailed(operationId, blockchain, message, errorType) { this.logger.info(`${this.operationName} for operationId: ${operationId} failed.`); + await this.operationIdService.removeOperationIdCache(operationId); + await this.repositoryModuleManager.updateOperationStatus( this.operationName, operationId, @@ -112,6 +116,14 @@ class OperationService { }, failed: ${failedNumber}, completed: ${completedNumber}`, ); } + + getBatchSize() { + throw Error('getBatchSize not implemented'); + } + + getMinAckResponses() { + throw Error('getMinAckResponses not implemented'); + } } export default OperationService; diff --git a/src/service/paranet-service.js b/src/service/paranet-service.js index 86b1d1e29f..ed1e7210f0 100644 --- a/src/service/paranet-service.js +++ b/src/service/paranet-service.js @@ -3,6 +3,7 @@ class ParanetService { this.blockchainModuleManager = ctx.blockchainModuleManager; this.repositoryModuleManager = ctx.repositoryModuleManager; this.ualService = ctx.ualService; + this.cryptoService = ctx.cryptoService; } async initializeParanetRecord(blockchain, paranetId) { @@ -24,35 +25,34 @@ class ParanetService { } } - constructParanetId(blockchain, contract, tokenId) { - const keyword = this.blockchainModuleManager.encodePacked( - blockchain, + constructParanetId(contract, tokenId) { + return this.cryptoService.keccak256EncodePacked( ['address', 'uint256'], [contract, tokenId], ); - - return this.blockchainModuleManager.keccak256(blockchain, keyword); } - constructKnowledgeAssetId(blockchain, contract, tokenId) { - const keyword = this.blockchainModuleManager.encodePacked( - blockchain, + constructKnowledgeAssetId(contract, tokenId) { + return this.cryptoService.keccak256EncodePacked( ['address', 'uint256'], [contract, tokenId], ); - - return this.blockchainModuleManager.keccak256(blockchain, keyword); } - getParanetRepositoryName(paranetId) { - if (this.ualService.isUAL(paranetId)) { + getParanetRepositoryName(paranetUAL) { + if (this.ualService.isUAL(paranetUAL)) { // Replace : and / with - - return paranetId.replace(/[/:]/g, '-').toLowerCase(); + return paranetUAL.replace(/[/:]/g, '-').toLowerCase(); } throw new Error( - `Unable to get Paranet repository name. Paranet id doesn't have UAL format: ${paranetId}`, + `Unable to get Paranet repository name. Paranet id doesn't have UAL format: ${paranetUAL}`, ); } + + getParanetIdFromUAL(paranetUAL) { + const { contract, tokenId } = this.ualService.resolveUAL(paranetUAL); + return this.constructParanetId(contract, tokenId); + } } export default ParanetService; diff --git a/src/service/pending-storage-service.js b/src/service/pending-storage-service.js index 1269e760f0..f049ad927a 100644 --- a/src/service/pending-storage-service.js +++ b/src/service/pending-storage-service.js @@ -1,46 +1,132 @@ +import path from 'path'; import { - CONTENT_ASSET_HASH_FUNCTION_ID, - SERVICE_AGREEMENT_SOURCES, + NETWORK_SIGNATURES_FOLDER, + PUBLISHER_NODE_SIGNATURES_FOLDER, } from '../constants/constants.js'; class PendingStorageService { constructor(ctx) { this.logger = ctx.logger; this.fileService = ctx.fileService; - this.ualService = ctx.ualService; - this.serviceAgreementService = ctx.serviceAgreementService; - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.tripleStoreService = ctx.tripleStoreService; + this.repositoryModuleManager = ctx.repositoryModuleManager; // this is not used + this.tripleStoreService = ctx.tripleStoreService; // this is not used } - async cacheAssertion( - repository, - blockchain, - contract, - tokenId, - assertionId, - assertion, - operationId, - ) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - + async cacheDataset(operationId, datasetRoot, dataset, remotePeerId) { this.logger.debug( - `Caching ${assertionId} assertion for ual: ${ual}, operation id: ${operationId} in file in ${repository} pending storage`, + `Caching ${datasetRoot} dataset root, operation id: ${operationId} in file in pending storage`, ); - const pendingStorageFolderPath = this.fileService.getPendingStorageFolderPath( - repository, - blockchain, - contract, - tokenId, + await this.fileService.writeContentsToFile( + this.fileService.getPendingStorageCachePath(), + operationId, + JSON.stringify({ + merkleRoot: datasetRoot, + assertion: dataset, + remotePeerId, + }), ); + } - await this.fileService.writeContentsToFile( - pendingStorageFolderPath, - assertionId, - JSON.stringify(assertion), + async getCachedDataset(operationId) { + this.logger.debug(`Retrieving cached dataset for ${operationId} from pending storage`); + + const filePath = this.fileService.getPendingStorageDocumentPath(operationId); + + try { + const fileContents = await this.fileService.readFile(filePath, true); + return fileContents.assertion; + } catch (error) { + this.logger.error( + `Failed to retrieve or parse cached dataset for ${operationId}: ${error.message}`, + ); + throw error; + } + } + + async removeExpiredFileCache(expirationTimeMillis, maxRemovalCount) { + this.logger.debug( + `Cleaning up expired files older than ${expirationTimeMillis} milliseconds. Max removal: ${maxRemovalCount}`, ); + + const now = Date.now(); + let removedCount = 0; + + try { + // Define the paths to the directories we want to clean + const storagePaths = [ + this.fileService.getPendingStorageCachePath(), + this.fileService.getSignatureStorageFolderPath(NETWORK_SIGNATURES_FOLDER), + this.fileService.getSignatureStorageFolderPath(PUBLISHER_NODE_SIGNATURES_FOLDER), + ]; + + const filesToDelete = []; + + // Function to collect files from the provided base path + const collectFiles = async (basePath) => { + if (!(await this.fileService.pathExists(basePath))) { + this.logger.warn(`Storage path does not exist: ${basePath}`); + return; + } + + const files = await this.fileService.readDirectory(basePath); + + // Add all files found in the directory to the filesToDelete array + files.forEach((file) => { + filesToDelete.push({ file, basePath }); + }); + }; + + // Collect files from both storage paths + for (const basePath of storagePaths) { + // eslint-disable-next-line no-await-in-loop + await collectFiles(basePath); + } + + // Function to delete an expired file + const deleteFile = async ({ file, basePath }) => { + const filePath = path.join(basePath, file); + this.logger.debug(`Attempting to delete file: ${filePath}`); + + try { + const fileStats = await this.fileService.stat(filePath); + this.logger.debug(`File stats for ${filePath}: ${JSON.stringify(fileStats)}`); + + const createdDate = fileStats.mtime; + if (createdDate.getTime() + expirationTimeMillis < now) { + await this.fileService.removeFile(filePath); + this.logger.debug(`Deleted expired file: ${filePath}`); + return true; + } + } catch (fileError) { + this.logger.warn(`Failed to process file ${filePath}: ${fileError.message}`); + } + return false; + }; + + // Process files in batches + for (let i = 0; i < filesToDelete.length; i += maxRemovalCount) { + const batch = filesToDelete.slice(i, i + maxRemovalCount); + + // eslint-disable-next-line no-await-in-loop + const deletionResults = await Promise.allSettled(batch.map(deleteFile)); + + removedCount += deletionResults.filter( + (result) => result.status === 'fulfilled' && result.value, + ).length; + + if (removedCount >= maxRemovalCount) { + this.logger.debug(`Reached max removal count: ${maxRemovalCount}`); + return removedCount; + } + } + } catch (error) { + this.logger.error(`Error during file cleanup: ${error.message}`); + throw error; + } + + this.logger.debug(`Total files removed: ${removedCount}`); + return removedCount; } async getCachedAssertion(repository, blockchain, contract, tokenId, assertionId, operationId) { @@ -50,13 +136,7 @@ class PendingStorageService { `Reading cached assertion for ual: ${ual}, assertion id: ${assertionId}, operation id: ${operationId} from file in ${repository} pending storage`, ); try { - const documentPath = await this.fileService.getPendingStorageDocumentPath( - repository, - blockchain, - contract, - tokenId, - assertionId, - ); + const documentPath = await this.fileService.getPendingStorageDocumentPath(operationId); const data = await this.fileService.readFile(documentPath, true); return data; @@ -68,14 +148,7 @@ class PendingStorageService { } } - async removeCachedAssertion( - repository, - blockchain, - contract, - tokenId, - assertionId, - operationId, - ) { + async removeCachedAssertion(repository, blockchain, contract, tokenId, operationId) { const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); this.logger.debug( @@ -83,11 +156,7 @@ class PendingStorageService { ); const pendingAssertionPath = await this.fileService.getPendingStorageDocumentPath( - repository, - blockchain, - contract, - tokenId, - assertionId, + operationId, ); await this.fileService.removeFile(pendingAssertionPath); @@ -108,170 +177,8 @@ class PendingStorageService { } } - async assetHasPendingState(repository, blockchain, contract, tokenId, assertionId) { - try { - const documentPath = await this.fileService.getPendingStorageDocumentPath( - repository, - blockchain, - contract, - tokenId, - assertionId, - ); - this.logger.trace( - `Checking if assertion exists in pending storage at path: ${documentPath}`, - ); - return this.fileService.pathExists(documentPath); - } catch (error) { - return false; - } - } - - async getPendingState(repository, blockchain, contract, tokenId) { - return this.fileService.getPendingStorageLatestDocument( - repository, - blockchain, - contract, - tokenId, - ); - } - - async moveAndDeletePendingState( - currentRepository, - historyRepository, - pendingRepository, - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - assertionId, - stateIndex, - ) { - const agreementId = this.serviceAgreementService.generateId( - blockchain, - contract, - tokenId, - keyword, - hashFunctionId, - ); - - let serviceAgreementData = await this.repositoryModuleManager.getServiceAgreementRecord( - agreementId, - ); - if (!serviceAgreementData) { - serviceAgreementData = await this.blockchainModuleManager.getAgreementData( - blockchain, - agreementId, - ); - } - - await this.repositoryModuleManager.updateServiceAgreementRecord( - blockchain, - contract, - tokenId, - agreementId, - serviceAgreementData.startTime, - serviceAgreementData.epochsNumber, - serviceAgreementData.epochLength, - serviceAgreementData.scoreFunctionId, - serviceAgreementData.proofWindowOffsetPerc, - CONTENT_ASSET_HASH_FUNCTION_ID, - keyword, - assertionId, - stateIndex, - serviceAgreementData.dataSource ?? SERVICE_AGREEMENT_SOURCES.BLOCKCHAIN, - serviceAgreementData?.lastCommitEpoch, - serviceAgreementData?.lastProofEpoch, - ); - - const assertionLinks = await this.tripleStoreService.getAssetAssertionLinks( - currentRepository, - blockchain, - contract, - tokenId, - ); - const storedAssertionIds = assertionLinks.map(({ assertion }) => - assertion.replace('assertion:', ''), - ); - - // event already handled - if (storedAssertionIds.includes(assertionId)) { - return; - } - - // move old assertions to history repository - await Promise.all( - storedAssertionIds.map((storedAssertionId) => - this.tripleStoreService.moveAsset( - currentRepository, - historyRepository, - storedAssertionId, - blockchain, - contract, - tokenId, - keyword, - ), - ), - ); - - await this.tripleStoreService.deleteAssetMetadata( - currentRepository, - blockchain, - contract, - tokenId, - ); - - const cachedData = await this.getCachedAssertion( - pendingRepository, - blockchain, - contract, - tokenId, - assertionId, - ); - - const storePromises = []; - if (cachedData?.public?.assertion) { - // insert public assertion in current repository - storePromises.push( - this.tripleStoreService.localStoreAsset( - currentRepository, - assertionId, - cachedData.public.assertion, - blockchain, - contract, - tokenId, - keyword, - ), - ); - } - - if (cachedData?.private?.assertion && cachedData?.private?.assertionId) { - // insert private assertion in current repository - storePromises.push( - this.tripleStoreService.localStoreAsset( - currentRepository, - cachedData.private.assertionId, - cachedData.private.assertion, - blockchain, - contract, - tokenId, - keyword, - ), - ); - } - - await Promise.all(storePromises); - - // remove asset from pending storage - if (cachedData) { - await this.removeCachedAssertion( - pendingRepository, - blockchain, - contract, - tokenId, - assertionId, - ); - } + async getPendingState(operationId) { + return this.fileService.getPendingStorageLatestDocument(operationId); } } diff --git a/src/service/protocol-service.js b/src/service/protocol-service.js index 919689b213..d99850e7f3 100644 --- a/src/service/protocol-service.js +++ b/src/service/protocol-service.js @@ -36,7 +36,7 @@ class ProtocolService { const prefix = `${version}Handle${capitalizedOperation}`; - return [`${prefix}InitCommand`, `${prefix}RequestCommand`]; + return [`${prefix}RequestCommand`]; } getSenderCommandSequence(protocol) { @@ -46,7 +46,7 @@ class ProtocolService { const prefix = `${version}${capitalizedOperation}`; - return [`${prefix}InitCommand`, `${prefix}RequestCommand`]; + return [`${prefix}RequestCommand`]; } } diff --git a/src/service/proximity-scoring-service.js b/src/service/proximity-scoring-service.js deleted file mode 100644 index cf62d708f4..0000000000 --- a/src/service/proximity-scoring-service.js +++ /dev/null @@ -1,198 +0,0 @@ -import { xor as uint8ArrayXor } from 'uint8arrays/xor'; -import { - HASH_RING_SIZE, - UINT40_MAX_BN, - UINT64_MAX_BN, - UINT256_MAX_BN, -} from '../constants/constants.js'; - -class ProximityScoringService { - constructor(ctx) { - this.config = ctx.config; - this.logger = ctx.logger; - - this.blockchainModuleManager = ctx.blockchainModuleManager; - - this.proximityScoreFunctionsPairs = { - 1: [this.calculateBinaryXOR.bind(this), this.log2PLDSF.bind(this)], - 2: [ - this.calculateBidirectionalProximityOnHashRing.bind(this), - this.linearSum.bind(this), - ], - }; - } - - async callProximityFunction( - blockchain, - proximityFunctionId, - peerHash, - keyHash, - ...additionalArgs - ) { - return this.proximityScoreFunctionsPairs[proximityFunctionId][0]( - blockchain, - peerHash, - keyHash, - ...additionalArgs, - ); - } - - async callScoreFunction(blockchain, scoreFunctionId, distance, stake, ...additionalArgs) { - return this.proximityScoreFunctionsPairs[scoreFunctionId][1]( - blockchain, - distance, - stake, - ...additionalArgs, - ); - } - - async calculateBinaryXOR(blockchain, peerHash, keyHash) { - const distance = uint8ArrayXor( - this.blockchainModuleManager.convertBytesToUint8Array(blockchain, peerHash), - this.blockchainModuleManager.convertBytesToUint8Array(blockchain, keyHash), - ); - - const distanceHex = await this.blockchainModuleManager.convertUint8ArrayToHex( - blockchain, - distance, - ); - - return this.blockchainModuleManager.toBigNumber(blockchain, distanceHex); - } - - async calculateBidirectionalProximityOnHashRing(blockchain, peerHash, keyHash) { - const peerPositionOnHashRing = await this.blockchainModuleManager.toBigNumber( - blockchain, - peerHash, - ); - const keyPositionOnHashRing = await this.blockchainModuleManager.toBigNumber( - blockchain, - keyHash, - ); - - const directDistance = peerPositionOnHashRing.gt(keyPositionOnHashRing) - ? peerPositionOnHashRing.sub(keyPositionOnHashRing) - : keyPositionOnHashRing.sub(peerPositionOnHashRing); - const wraparoundDistance = HASH_RING_SIZE.sub(directDistance); - - return directDistance.lt(wraparoundDistance) ? directDistance : wraparoundDistance; - } - - async log2PLDSF(blockchain, distance, stake) { - const log2PLDSFParams = await this.blockchainModuleManager.getLog2PLDSFParams(blockchain); - - const { - distanceMappingCoefficient, - stakeMappingCoefficient, - multiplier, - logArgumentConstant, - a, - stakeExponent, - b, - c, - distanceExponent, - d, - } = log2PLDSFParams; - - const mappedStake = this.blockchainModuleManager - .convertToWei(blockchain, stake) - .div(stakeMappingCoefficient); - - const mappedDistance = distance.div(distanceMappingCoefficient); - - const dividend = mappedStake.pow(stakeExponent).mul(a).add(b); - const divisor = mappedDistance.pow(distanceExponent).mul(c).add(d); - - return Math.floor( - Number(multiplier) * - Math.log2(Number(logArgumentConstant) + dividend.toNumber() / divisor.toNumber()), - ); - } - - async linearSum( - blockchain, - distance, - stake, - maxNeighborhoodDistance, - r2, - nodesNumber, - minStake, - maxStake, - ) { - const linearSumParams = await this.blockchainModuleManager.getLinearSumParams(blockchain); - const { distanceScaleFactor, stakeScaleFactor, w1, w2 } = linearSumParams; - const mappedStake = this.blockchainModuleManager.convertToWei(blockchain, stake); - const mappedMinStake = this.blockchainModuleManager.convertToWei(blockchain, minStake); - const mappedMaxStake = this.blockchainModuleManager.convertToWei(blockchain, maxStake); - - const idealMaxDistanceInNeighborhood = HASH_RING_SIZE.div(nodesNumber).mul( - Math.ceil(r2 / 2), - ); - const divisor = maxNeighborhoodDistance.lte(idealMaxDistanceInNeighborhood) - ? maxNeighborhoodDistance - : idealMaxDistanceInNeighborhood; - - const maxMultiplier = UINT256_MAX_BN.div(distance); - - let scaledDistanceScaleFactor = distanceScaleFactor; - let compensationFactor = 1; - - if (scaledDistanceScaleFactor.gt(maxMultiplier)) { - compensationFactor = scaledDistanceScaleFactor.div(maxMultiplier); - scaledDistanceScaleFactor = maxMultiplier; - } - - const scaledDistance = distance.mul(scaledDistanceScaleFactor); - const adjustedDivisor = divisor.div(compensationFactor); - - let normalizedDistance = scaledDistance.div(adjustedDivisor); - if (normalizedDistance.gt(UINT64_MAX_BN)) { - this.logger.warn( - `Invalid normalized distance: ${normalizedDistance.toString()}. Max value: ${UINT64_MAX_BN.toString()}`, - ); - normalizedDistance = normalizedDistance.mod(UINT64_MAX_BN.add(1)); - } - - let normalizedStake = stakeScaleFactor - .mul(mappedStake.sub(mappedMinStake)) - .div(mappedMaxStake.sub(mappedMinStake)); - if (normalizedStake.gt(UINT64_MAX_BN)) { - this.logger.warn( - `Invalid normalized stake: ${normalizedDistance.toString()}. Max value: ${UINT64_MAX_BN.toString()}`, - ); - normalizedStake = normalizedStake.mod(UINT64_MAX_BN.add(1)); - } - - const oneEther = await this.blockchainModuleManager.toBigNumber( - blockchain, - '1000000000000000000', - ); - - const isProximityScorePositive = oneEther.gte(normalizedDistance); - - const proximityScore = isProximityScorePositive - ? oneEther.sub(normalizedDistance).mul(w1) - : normalizedDistance.sub(oneEther).mul(w1); - const stakeScore = normalizedStake.mul(w2); - - let finalScore; - if (isProximityScorePositive) { - finalScore = proximityScore.add(stakeScore); - } else if (stakeScore.gte(proximityScore)) { - finalScore = stakeScore.sub(proximityScore); - } else { - finalScore = await this.blockchainModuleManager.toBigNumber(blockchain, 0); - } - - finalScore = this.toUint40(finalScore, oneEther.mul(w1 + w2)); - - return finalScore.toNumber(); - } - - toUint40(value, maxValue) { - const result = value.mul(UINT40_MAX_BN).div(maxValue); - return result; - } -} - -export default ProximityScoringService; diff --git a/src/service/publish-service.js b/src/service/publish-service.js index ee0c8fb169..3c8dfe1f6b 100644 --- a/src/service/publish-service.js +++ b/src/service/publish-service.js @@ -6,12 +6,14 @@ import { NETWORK_PROTOCOLS, ERROR_TYPE, OPERATIONS, - OPERATION_REQUEST_STATUS, + PUBLISH_BATCH_SIZE, + PUBLISH_MIN_NUM_OF_NODE_REPLICATIONS, } from '../constants/constants.js'; class PublishService extends OperationService { constructor(ctx) { super(ctx); + this.repositoryModuleManager = ctx.repositoryModuleManager; this.operationName = OPERATIONS.PUBLISH; this.networkProtocols = NETWORK_PROTOCOLS.STORE; @@ -30,78 +32,87 @@ class PublishService extends OperationService { blockchain, numberOfFoundNodes, leftoverNodes, - keyword, batchSize, minAckResponses, + datasetRoot, } = command.data; - const keywordsStatuses = await this.getResponsesStatuses( + const datasetRootStatus = await this.getResponsesStatuses( responseStatus, errorMessage, operationId, - keyword, ); - const { completedNumber, failedNumber } = keywordsStatuses[keyword]; - const numberOfResponses = completedNumber + failedNumber; + const { completedNumber, failedNumber } = datasetRootStatus[operationId]; + + const totalResponses = completedNumber + failedNumber; + this.logger.debug( `Processing ${ this.operationName - } response with status: ${responseStatus} for operationId: ${operationId}, keyword: ${keyword}. Total number of nodes: ${numberOfFoundNodes}, number of nodes in batch: ${Math.min( + } response with status: ${responseStatus} for operationId: ${operationId}, dataset root: ${datasetRoot}. Total number of nodes: ${numberOfFoundNodes}, number of nodes in batch: ${Math.min( numberOfFoundNodes, batchSize, )} number of leftover nodes: ${ leftoverNodes.length - }, number of responses: ${numberOfResponses}, Completed: ${completedNumber}, Failed: ${failedNumber}, minimum replication factor: ${minAckResponses}`, + }, number of responses: ${totalResponses}, Completed: ${completedNumber}, Failed: ${failedNumber}, minimum replication factor: ${minAckResponses}`, ); if (responseData.errorMessage) { this.logger.trace( - `Error message for operation id: ${operationId}, keyword: ${keyword} : ${responseData.errorMessage}`, + `Error message for operation id: ${operationId}, dataset root: ${datasetRoot} : ${responseData.errorMessage}`, + ); + } + + // Minimum replication reached, mark in the operational DB + if (completedNumber === minAckResponses) { + this.logger.debug( + `Minimum replication ${minAckResponses} reached for operationId: ${operationId}, dataset root: ${datasetRoot}`, + ); + + await this.repositoryModuleManager.updateMinAcksReached(operationId, true); + } + + // All requests sent, minimum replication reached, mark as completed + if (leftoverNodes.length === 0 && completedNumber >= minAckResponses) { + await this.markOperationAsCompleted( + operationId, + blockchain, + null, + this.completedStatuses, ); + this.logResponsesSummary(completedNumber, failedNumber); } + // All requests sent, minimum replication not reached, mark as failed + if (leftoverNodes.length === 0 && completedNumber < minAckResponses) { + this.markOperationAsFailed( + operationId, + blockchain, + 'Not replicated to enough nodes!', + this.errorType, + ); + this.logResponsesSummary(completedNumber, failedNumber); + } + + // Not all requests sent, still possible to reach minimum replication, + // schedule requests for leftover nodes + const potentialCompletedNumber = completedNumber + leftoverNodes.length; if ( - responseStatus === OPERATION_REQUEST_STATUS.COMPLETED && - completedNumber === minAckResponses - ) { - let allCompleted = true; - for (const key in keywordsStatuses) { - if (keywordsStatuses[key].completedNumber < minAckResponses) { - allCompleted = false; - break; - } - } - if (allCompleted) { - await this.markOperationAsCompleted( - operationId, - blockchain, - null, - this.completedStatuses, - ); - this.logResponsesSummary(completedNumber, failedNumber); - this.logger.info( - `${this.operationName} with operation id: ${operationId} with status: ${ - this.completedStatuses[this.completedStatuses.length - 1] - }`, - ); - } - } else if ( - completedNumber < minAckResponses && - (numberOfFoundNodes === numberOfResponses || numberOfResponses % batchSize === 0) + leftoverNodes.length > 0 && + potentialCompletedNumber >= minAckResponses && + (totalResponses - 1) % batchSize === 0 ) { - if (leftoverNodes.length === 0) { - await this.markOperationAsFailed( - operationId, - blockchain, - 'Not replicated to enough nodes!', - this.errorType, - ); - this.logResponsesSummary(completedNumber, failedNumber); - } else { - await this.scheduleOperationForLeftoverNodes(command.data, leftoverNodes); - } + await this.scheduleOperationForLeftoverNodes(command.data, leftoverNodes); } } + + getBatchSize(batchSize = null) { + return batchSize ?? PUBLISH_BATCH_SIZE; + } + + getMinAckResponses(minimumNumberOfNodeReplications = null) { + return minimumNumberOfNodeReplications ?? PUBLISH_MIN_NUM_OF_NODE_REPLICATIONS; + } } export default PublishService; diff --git a/src/service/service-agreement-service.js b/src/service/service-agreement-service.js deleted file mode 100644 index 903ca7805b..0000000000 --- a/src/service/service-agreement-service.js +++ /dev/null @@ -1,141 +0,0 @@ -class ServiceAgreementService { - constructor(ctx) { - this.logger = ctx.logger; - - this.blockchainModuleManager = ctx.blockchainModuleManager; - this.repositoryModuleManager = ctx.repositoryModuleManager; - this.shardingTableService = ctx.shardingTableService; - this.networkModuleManager = ctx.networkModuleManager; - this.hashingService = ctx.hashingService; - this.proximityScoringService = ctx.proximityScoringService; - } - - generateId(blockchain, assetTypeContract, tokenId, keyword, hashFunctionId) { - return this.hashingService.callHashFunction( - hashFunctionId, - this.blockchainModuleManager.encodePacked( - blockchain, - ['address', 'uint256', 'bytes'], - [assetTypeContract, tokenId, keyword], - ), - ); - } - - randomIntFromInterval(min, max) { - return Math.floor(Math.random() * (max - min + 1) + min); - } - - async calculateBid(blockchain, blockchainAssertionSize, agreementData, r0) { - const currentEpoch = await this.calculateCurrentEpoch( - agreementData.startTime, - agreementData.epochLength, - blockchain, - ); - - // todo: consider optimizing to take into account cases where some proofs have already been submitted - const epochsLeft = Number(agreementData.epochsNumber) - currentEpoch; - - const divisor = this.blockchainModuleManager - .toBigNumber(blockchain, r0) - .mul(epochsLeft) - .mul(blockchainAssertionSize); - - return agreementData.tokenAmount - .add(agreementData.updateTokenAmount) - .mul(1024) - .div(divisor) - .add(1); // add 1 wei because of the precision loss - } - - async calculateRank( - blockchain, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - r2, - neighbourhood, - neighbourhoodEdges, - totalNodesNumber, - minStake, - maxStake, - ) { - const peerId = this.networkModuleManager.getPeerId().toB58String(); - if (!neighbourhood.some((node) => node.peerId === peerId)) { - return; - } - - const scores = await Promise.all( - neighbourhood.map(async (node) => ({ - score: await this.calculateScore( - node.peerId, - blockchain, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - neighbourhoodEdges, - r2, - totalNodesNumber, - minStake, - maxStake, - ), - peerId: node.peerId, - })), - ); - - scores.sort((a, b) => b.score - a.score); - - return scores.findIndex((node) => node.peerId === peerId); - } - - async calculateScore( - peerId, - blockchainId, - keyword, - hashFunctionId, - proximityScoreFunctionsPairId, - neighbourhoodEdges, - r2, - totalNodesNumber, - minStake, - maxStake, - ) { - const peerRecord = await this.repositoryModuleManager.getPeerRecord(peerId, blockchainId); - const keyHash = await this.hashingService.callHashFunction(hashFunctionId, keyword); - - const hashFunctionName = this.hashingService.getHashFunctionName(hashFunctionId); - - const distance = await this.proximityScoringService.callProximityFunction( - blockchainId, - proximityScoreFunctionsPairId, - peerRecord[hashFunctionName], - keyHash, - ); - let maxNeighborhoodDistance; - if (neighbourhoodEdges) { - maxNeighborhoodDistance = neighbourhoodEdges.leftEdge.distance.gt( - neighbourhoodEdges.rightEdge.distance, - ) - ? neighbourhoodEdges.leftEdge.distance - : neighbourhoodEdges.rightEdge.distance; - } - - return this.proximityScoringService.callScoreFunction( - blockchainId, - proximityScoreFunctionsPairId, - distance, - peerRecord.stake, - maxNeighborhoodDistance, - r2, - totalNodesNumber, - minStake, - maxStake, - ); - } - - async calculateCurrentEpoch(startTime, epochLength, blockchain) { - const now = await this.blockchainModuleManager.getBlockchainTimestamp(blockchain); - return Math.floor((Number(now) - Number(startTime)) / Number(epochLength)); - } -} - -export default ServiceAgreementService; diff --git a/src/service/sharding-table-service.js b/src/service/sharding-table-service.js index 203417a3ab..d20bea388d 100644 --- a/src/service/sharding-table-service.js +++ b/src/service/sharding-table-service.js @@ -1,18 +1,4 @@ -import { - BYTES_IN_KILOBYTE, - CONTRACTS, - DEFAULT_BLOCKCHAIN_EVENT_SYNC_PERIOD_IN_MILLS, - PEER_RECORD_UPDATE_DELAY, - LOW_BID_SUGGESTION, - MED_BID_SUGGESTION, - HIGH_BID_SUGGESTION, - ALL_BID_SUGGESTION, - LOW_BID_SUGGESTION_OFFSET, - MED_BID_SUGGESTION_OFFSET, - HIGH_BID_SUGGESTION_OFFSET, - ERROR_TYPE, - BID_SUGGESTION_RANGE_ENUM, -} from '../constants/constants.js'; +import { BYTES_IN_KILOBYTE, PEER_RECORD_UPDATE_DELAY } from '../constants/constants.js'; class ShardingTableService { constructor(ctx) { @@ -20,22 +6,13 @@ class ShardingTableService { this.blockchainModuleManager = ctx.blockchainModuleManager; this.repositoryModuleManager = ctx.repositoryModuleManager; this.networkModuleManager = ctx.networkModuleManager; - this.hashingService = ctx.hashingService; - this.proximityScoringService = ctx.proximityScoringService; + this.cryptoService = ctx.cryptoService; this.memoryCachedPeerIds = {}; } async initialize() { - const pullBlockchainShardingTables = this.blockchainModuleManager - .getImplementationNames() - .map((blockchainId) => this.pullBlockchainShardingTable(blockchainId)); - await Promise.all(pullBlockchainShardingTables); - await this.networkModuleManager.onPeerConnected((connection) => { - this.logger.trace( - `Node connected to ${connection.remotePeer.toB58String()}, updating sharding table last seen and last dialed.`, - ); this.updatePeerRecordLastSeenAndLastDialed(connection.remotePeer.toB58String()).catch( (error) => { this.logger.warn(`Unable to update connected peer, error: ${error.message}`); @@ -44,25 +21,13 @@ class ShardingTableService { }); } - async pullBlockchainShardingTable(blockchainId, force = false) { - const lastCheckedBlock = await this.repositoryModuleManager.getLastCheckedBlock( - blockchainId, - CONTRACTS.SHARDING_TABLE_CONTRACT, - ); - - if ( - force || - (lastCheckedBlock?.lastCheckedTimestamp && - Date.now() - lastCheckedBlock.lastCheckedTimestamp < - DEFAULT_BLOCKCHAIN_EVENT_SYNC_PERIOD_IN_MILLS) - ) { - return; - } + async pullBlockchainShardingTable(blockchainId, transaction = null) { + const options = transaction ? { transaction } : {}; this.logger.debug( `Removing nodes from local sharding table for blockchain ${blockchainId}.`, ); - await this.repositoryModuleManager.removeShardingTablePeerRecords(blockchainId); + await this.repositoryModuleManager.removeShardingTablePeerRecords(blockchainId, options); const shardingTableLength = await this.blockchainModuleManager.getShardingTableLength( blockchainId, @@ -94,174 +59,41 @@ class ShardingTableService { `Finished pulling ${shardingTable.length} nodes from blockchain sharding table.`, ); - await this.repositoryModuleManager.createManyPeerRecords( - await Promise.all( - shardingTable.map(async (peer) => { - const nodeId = this.blockchainModuleManager.convertHexToAscii( - blockchainId, - peer.nodeId, - ); - const sha256 = await this.hashingService.callHashFunction(1, nodeId); + const newPeerRecords = await Promise.all( + shardingTable.map(async (peer) => { + const nodeId = this.cryptoService.convertHexToAscii(peer.nodeId); + const sha256 = await this.cryptoService.sha256(nodeId); - return { - peerId: nodeId, - blockchainId, - ask: this.blockchainModuleManager.convertFromWei( - blockchainId, - peer.ask, - 'ether', - ), - stake: this.blockchainModuleManager.convertFromWei( - blockchainId, - peer.stake, - 'ether', - ), - sha256, - }; - }), - ), + return { + peerId: nodeId, + blockchainId, + ask: this.cryptoService.convertFromWei(peer.ask, 'ether'), + stake: this.cryptoService.convertFromWei(peer.stake, 'ether'), + sha256, + }; + }), ); + + await this.repositoryModuleManager.createManyPeerRecords(newPeerRecords, options); } - async findNeighbourhood(blockchainId, key, r2, hashFunctionId, proximityScoreFunctionsPairId) { + async findShard(blockchainId /* filterInactive = false */) { let peers = await this.repositoryModuleManager.getAllPeerRecords(blockchainId); peers = peers.map((peer, index) => ({ ...peer.dataValues, index })); - const keyHash = await this.hashingService.callHashFunction(hashFunctionId, key); - - const sortedPeers = this.sortPeers( - blockchainId, - keyHash, - peers, - r2, - hashFunctionId, - proximityScoreFunctionsPairId, - ); - return sortedPeers; + return peers; } - async sortPeers( - blockchainId, - keyHash, - peers, - count, - hashFunctionId, - proximityScoreFunctionsPairId, - ) { - const hashFunctionName = this.hashingService.getHashFunctionName(hashFunctionId); - const peersWithDistance = await Promise.all( - peers.map(async (peer) => ({ - ...peer, - distance: await this.proximityScoringService.callProximityFunction( - blockchainId, - proximityScoreFunctionsPairId, - peer[hashFunctionName], - keyHash, - ), - })), - ); - peersWithDistance.sort((a, b) => { - if (a.distance.lt(b.distance)) { - return -1; - } - if (a.distance.gt(b.distance)) { - return 1; - } - return 0; - }); - return peersWithDistance.slice(0, count); - } - - async getBidSuggestion( - blockchainId, - epochsNumber, - assertionSize, - contentAssetStorageAddress, - firstAssertionId, - hashFunctionId, - proximityScoreFunctionsPairId, - bidSuggestionRange = LOW_BID_SUGGESTION, - ) { - const kbSize = assertionSize < BYTES_IN_KILOBYTE ? BYTES_IN_KILOBYTE : assertionSize; - const peerRecords = await this.findNeighbourhood( - blockchainId, - this.blockchainModuleManager.encodePacked( - blockchainId, - ['address', 'bytes32'], - [contentAssetStorageAddress, firstAssertionId], - ), - await this.blockchainModuleManager.getR2(blockchainId), - hashFunctionId, - proximityScoreFunctionsPairId, - ); - const r0 = await this.blockchainModuleManager.getR0(blockchainId); - // todo remove this line once we implement logic for storing assertion in publish node if it's in neighbourhood - const myPeerId = this.networkModuleManager.getPeerId().toB58String(); - const filteredPeerRecords = peerRecords.filter((peer) => peer.peerId !== myPeerId); - const sorted = filteredPeerRecords.sort((a, b) => a.ask - b.ask); - - if (bidSuggestionRange === ALL_BID_SUGGESTION) { - const allBidSuggestions = {}; - allBidSuggestions[LOW_BID_SUGGESTION] = this.calculateBidSuggestion( - LOW_BID_SUGGESTION_OFFSET, - sorted, - blockchainId, - kbSize, - epochsNumber, - r0, - ); - allBidSuggestions[MED_BID_SUGGESTION] = this.calculateBidSuggestion( - MED_BID_SUGGESTION_OFFSET, - sorted, - blockchainId, - kbSize, - epochsNumber, - r0, - ); - allBidSuggestions[HIGH_BID_SUGGESTION] = this.calculateBidSuggestion( - HIGH_BID_SUGGESTION_OFFSET, - sorted, - blockchainId, - kbSize, - epochsNumber, - r0, - ); - - return allBidSuggestions; - } - let askOffset; - switch (bidSuggestionRange) { - case LOW_BID_SUGGESTION: - askOffset = LOW_BID_SUGGESTION_OFFSET; - break; - case MED_BID_SUGGESTION: - askOffset = MED_BID_SUGGESTION_OFFSET; - break; - case HIGH_BID_SUGGESTION: - askOffset = HIGH_BID_SUGGESTION_OFFSET; - break; - default: - this.logger.error( - `${ERROR_TYPE.UNSUPPORTED_BID_SUGGESTION_RANGE_ERROR}: Supported values: ${BID_SUGGESTION_RANGE_ENUM}.`, - ); - throw Error(ERROR_TYPE.UNSUPPORTED_BID_SUGGESTION_RANGE_ERROR); - } - const bidSuggestion = this.calculateBidSuggestion( - askOffset, - sorted, - blockchainId, - kbSize, - epochsNumber, - r0, - ); - return bidSuggestion; + async isNodePartOfShard(blockchainId, peerId) { + return this.repositoryModuleManager.isNodePartOfShard(blockchainId, peerId); } + // TODO: Remove this calculateBidSuggestion(askOffset, sorted, blockchainId, kbSize, epochsNumber, r0) { const effectiveAskOffset = Math.min(askOffset, sorted.length - 1); const { ask } = sorted[effectiveAskOffset]; - const bidSuggestion = this.blockchainModuleManager - .convertToWei(blockchainId, ask) + const bidSuggestion = this.cryptoService + .convertToWei(ask) .mul(kbSize) .mul(epochsNumber) .mul(r0) @@ -359,56 +191,6 @@ class ShardingTableService { protocols: peerInfo?.protocols ?? [], }; } - - async getNeighboorhoodEdgeNodes( - neighbourhood, - blockchainId, - hashFunctionId, - proximityScoreFunctionsPairId, - key, - ) { - const keyHash = await this.hashingService.callHashFunction(hashFunctionId, key); - - const hashFunctionName = this.hashingService.getHashFunctionName(hashFunctionId); - const assetPositionOnHashRing = await this.blockchainModuleManager.toBigNumber( - blockchainId, - keyHash, - ); - const hashRing = []; - - const maxDistance = await this.proximityScoringService.callProximityFunction( - blockchainId, - proximityScoreFunctionsPairId, - neighbourhood[neighbourhood.length - 1][hashFunctionName], - keyHash, - ); - - for (const neighbour of neighbourhood) { - // eslint-disable-next-line no-await-in-loop - const neighbourPositionOnHashRing = await this.blockchainModuleManager.toBigNumber( - blockchainId, - neighbour[hashFunctionName], - ); - if (assetPositionOnHashRing.lte(neighbourPositionOnHashRing)) { - if (neighbourPositionOnHashRing.sub(assetPositionOnHashRing).lte(maxDistance)) { - hashRing.push(neighbour); - } else { - hashRing.unshift(neighbour); - } - } else if (assetPositionOnHashRing.gt(neighbourPositionOnHashRing)) { - if (assetPositionOnHashRing.sub(neighbourPositionOnHashRing).lte(maxDistance)) { - hashRing.unshift(neighbour); - } else { - hashRing.push(neighbour); - } - } - } - - return { - leftEdge: hashRing[0], - rightEdge: hashRing[hashRing.length - 1], - }; - } } export default ShardingTableService; diff --git a/src/service/signature-service.js b/src/service/signature-service.js new file mode 100644 index 0000000000..694195b0fb --- /dev/null +++ b/src/service/signature-service.js @@ -0,0 +1,47 @@ +class SignatureService { + constructor(ctx) { + this.config = ctx.config; + this.logger = ctx.logger; + + this.cryptoService = ctx.cryptoService; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.fileService = ctx.fileService; + } + + async signMessage(blockchain, messageHash) { + const flatSignature = await this.blockchainModuleManager.signMessage( + blockchain, + messageHash, + ); + const { v, r, s, _vs } = this.cryptoService.splitSignature(flatSignature); + return { v, r, s, vs: _vs }; + } + + async addSignatureToStorage(folderName, operationId, identityId, v, r, s, vs) { + await this.fileService.appendContentsToFile( + this.fileService.getSignatureStorageFolderPath(folderName), + operationId, + `${JSON.stringify({ identityId, v, r, s, vs })}\n`, + ); + } + + async getSignaturesFromStorage(folderName, operationId) { + const signatureStorageFile = this.fileService.getSignatureStorageDocumentPath( + folderName, + operationId, + ); + + const rawSignatures = await this.fileService.readFile(signatureStorageFile); + const signaturesArray = []; + for (const line of rawSignatures.split('\n')) { + const trimmedLine = line.trim(); + if (trimmedLine) { + signaturesArray.push(JSON.parse(trimmedLine)); + } + } + + return signaturesArray; + } +} + +export default SignatureService; diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 920d0ab7a3..8ab9214ac2 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -1,6 +1,13 @@ -import { formatAssertion } from 'assertion-tools'; +/* eslint-disable no-await-in-loop */ +import { setTimeout } from 'timers/promises'; +import { kcTools } from 'assertion-tools'; -import { SCHEMA_CONTEXT, TRIPLE_STORE_REPOSITORIES, MEDIA_TYPES } from '../constants/constants.js'; +import { + BASE_NAMED_GRAPHS, + TRIPLE_STORE_REPOSITORY, + TRIPLES_VISIBILITY, + PRIVATE_HASH_SUBJECT_PREFIX, +} from '../constants/constants.js'; class TripleStoreService { constructor(ctx) { @@ -8,9 +15,11 @@ class TripleStoreService { this.logger = ctx.logger; this.tripleStoreModuleManager = ctx.tripleStoreModuleManager; + this.operationIdService = ctx.operationIdService; this.ualService = ctx.ualService; this.dataService = ctx.dataService; this.paranetService = ctx.paranetService; + this.cryptoService = ctx.cryptoService; } initializeRepositories() { @@ -24,269 +33,410 @@ class TripleStoreService { } } - async localStoreAsset( + async insertKnowledgeCollection( repository, - assertionId, - assertion, - blockchain, - contract, - tokenId, - keyword, + knowledgeCollectionUAL, + triples, + retries = 1, + retryDelay = 0, ) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - this.logger.info( - `Inserting Knowledge Asset with the UAL: ${ual}, Assertion ID: ${assertionId}, ` + + `Inserting Knowledge Collection with the UAL: ${knowledgeCollectionUAL} ` + `to the Triple Store's ${repository} repository.`, ); - const currentAssetNquads = await formatAssertion({ - '@context': SCHEMA_CONTEXT, - '@id': ual, - blockchain, - contract, - tokenId, - assertion: { '@id': `assertion:${assertionId}` }, - keyword, - }); - - const oldUalConnection = await formatAssertion({ - '@context': SCHEMA_CONTEXT, - '@id': this.ualService.getUalWithoutChainId(ual, blockchain), - assertion: { '@id': `assertion:${assertionId}` }, - }); - - await Promise.all([ - this.tripleStoreModuleManager.insertAssetAssertionMetadata( - this.repositoryImplementations[repository], - repository, - currentAssetNquads.join('\n'), - ), - this.tripleStoreModuleManager.insertAssetAssertionMetadata( - this.repositoryImplementations[repository], - repository, - oldUalConnection.join('\n'), - ), - this.tripleStoreModuleManager.insertAssertion( + const existsInNamedGraphs = + await this.tripleStoreModuleManager.knowledgeCollectionNamedGraphsExist( this.repositoryImplementations[repository], repository, - assertionId, - assertion.join('\n'), - ), - ]); + knowledgeCollectionUAL, + ); - this.logger.info( - `Knowledge Asset with the UAL: ${ual}, Assertion ID: ${assertionId}, ` + - `has been successfully inserted to the Triple Store's ${repository} repository.`, - ); - } + // TODO: Add with the introduction of RDF-star mode + // const tripleAnnotations = this.dataService.createTripleAnnotations( + // knowledgeAssetsTriples, + // UAL_PREDICATE, + // knowledgeAssetsUALs.map((ual) => `<${ual}>`), + // ); + // const unifiedGraphTriples = [...triples, ...tripleAnnotations]; + const promises = []; + const publicAssertion = triples.public ?? triples; + + const filteredPublic = []; + const privateHashTriples = []; + publicAssertion.forEach((triple) => { + if (triple.startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`)) { + privateHashTriples.push(triple); + } else { + filteredPublic.push(triple); + } + }); - async moveAsset( - fromRepository, - toRepository, - assertionId, - blockchain, - contract, - tokenId, - keyword, - ) { - let assertion; - // Try-catch to prevent infinite processing loop when unexpected error is thrown while getting KA - try { - assertion = await this.getAssertion(fromRepository, assertionId); - } catch (e) { - this.logger.error(`Error while getting assertion for moving asset: ${e.message}`); - return; - } + const publicKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( + filteredPublic, + true, + ); + publicKnowledgeAssetsTriplesGrouped.push( + ...kcTools.groupNquadsBySubject(privateHashTriples, true), + ); - // copy metadata and assertion - await this.localStoreAsset( - toRepository, - assertionId, - assertion, - blockchain, - contract, - tokenId, - keyword, + const publicKnowledgeAssetsUALs = publicKnowledgeAssetsTriplesGrouped.map( + (_, index) => `${knowledgeCollectionUAL}/${index + 1}`, ); - const [assetsWithAssertionIdCount] = await this.countAssetsWithAssertionId( - fromRepository, - assertionId, + if (!existsInNamedGraphs) { + promises.push( + this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[repository], + repository, + publicKnowledgeAssetsUALs, + publicKnowledgeAssetsTriplesGrouped, + TRIPLES_VISIBILITY.PUBLIC, + ), + ); + + if (triples.private?.length) { + const privateKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( + triples.private, + true, + ); + + const privateKnowledgeAssetsUALs = []; + + const publicSubjectMap = publicKnowledgeAssetsTriplesGrouped.reduce( + (map, group, index) => { + const [publicSubject] = group[0].split(' '); + map.set(publicSubject, index); + return map; + }, + new Map(), + ); + + for (const privateTriple of privateKnowledgeAssetsTriplesGrouped) { + const [privateSubject] = privateTriple[0].split(' '); + if (publicSubjectMap.has(privateSubject)) { + const ualIndex = publicSubjectMap.get(privateSubject); + privateKnowledgeAssetsUALs.push(publicKnowledgeAssetsUALs[ualIndex]); + } else { + const privateSubjectHashed = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.cryptoService.sha256( + privateSubject.slice(1, -1), + )}>`; + if (publicSubjectMap.has(privateSubjectHashed)) { + const ualIndex = publicSubjectMap.get(privateSubjectHashed); + privateKnowledgeAssetsUALs.push(publicKnowledgeAssetsUALs[ualIndex]); + } + } + } + promises.push( + this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[repository], + repository, + privateKnowledgeAssetsUALs, + privateKnowledgeAssetsTriplesGrouped, + TRIPLES_VISIBILITY.PRIVATE, + ), + ); + } + } + const metadataTriples = publicKnowledgeAssetsUALs + .map( + (publicKnowledgeAssetUAL) => + `<${publicKnowledgeAssetUAL}> "${publicKnowledgeAssetUAL}:0" .`, + ) + .join('\n'); + + promises.push( + this.tripleStoreModuleManager.insertKnowledgeCollectionMetadata( + this.repositoryImplementations[repository], + repository, + metadataTriples, + ), ); - // delete assertion from repository if not linked to other assets - if (assetsWithAssertionIdCount?.count <= 1) { - await this.deleteAssertion(fromRepository, assertionId); + let attempts = 0; + let success = false; + + while (attempts < retries && !success) { + try { + await Promise.all(promises); + + success = true; + + this.logger.info( + `Knowledge Collection with the UAL: ${knowledgeCollectionUAL} ` + + `has been successfully inserted to the Triple Store's ${repository} repository.`, + ); + } catch (error) { + this.logger.error( + `Error during insertion of the Knowledge Collection to the Triple Store's ${repository} repository. ` + + `UAL: ${knowledgeCollectionUAL}. Error: ${error.message}`, + ); + attempts += 1; + + if (attempts < retries) { + this.logger.info( + `Retrying insertion of the Knowledge Collection with the UAL: ${knowledgeCollectionUAL} ` + + `to the Triple Store's ${repository} repository. Attempt ${ + attempts + 1 + } of ${retries} after delay of ${retryDelay} ms.`, + ); + await setTimeout(retryDelay); + } else { + this.logger.error( + `Max retries reached for the insertion of the Knowledge Collection with the UAL: ${knowledgeCollectionUAL} ` + + `to the Triple Store's ${repository} repository. Rolling back data.`, + ); + + if (!existsInNamedGraphs) { + this.logger.info( + `Rolling back Knowledge Collection with the UAL: ${knowledgeCollectionUAL} ` + + `from the Triple Store's ${repository} repository Named Graphs.`, + ); + await this.tripleStoreModuleManager.deleteKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[repository], + repository, + publicKnowledgeAssetsUALs, + ); + } + + throw new Error( + `Failed to store Knowledge Collection with the UAL: ${knowledgeCollectionUAL} ` + + `to the Triple Store's ${repository} repository after maximum retries. Error ${error}`, + ); + } + } } } - async moveAssetWithoutDelete( - fromRepository, - toRepository, - assertionId, - blockchain, - contract, - tokenId, - keyword, - ) { - let assertion; - // Try-catch to prevent infinite processing loop when unexpected error is thrown while getting KA - try { - assertion = await this.getAssertion(fromRepository, assertionId); - } catch (e) { - this.logger.error(`Error while getting assertion for moving asset: ${e.message}`); - return; + async createV6KnowledgeCollection(triplesPublic, ual, triplesPrivate = null) { + this.logger.info( + `Inserting Knowledge Collection with the UAL: ${ual} ` + + `to the Triple Store's ${TRIPLE_STORE_REPOSITORY.DKG} repository.`, + ); + const publicKnowledgeAssetsTriplesGrouped = [triplesPublic]; + const publicKnowledgeAssetsUALs = [`${ual}/1`]; + await this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], + TRIPLE_STORE_REPOSITORY.DKG, + publicKnowledgeAssetsUALs, + publicKnowledgeAssetsTriplesGrouped, + TRIPLES_VISIBILITY.PUBLIC, + ); + + if (triplesPrivate) { + const privateKnowledgeAssetsTriplesGrouped = [triplesPrivate]; + await this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], + TRIPLE_STORE_REPOSITORY.DKG, + publicKnowledgeAssetsUALs, + privateKnowledgeAssetsTriplesGrouped, + TRIPLES_VISIBILITY.PRIVATE, + ); } - // copy metadata and assertion - await this.localStoreAsset( - toRepository, - assertionId, - assertion, - blockchain, - contract, - tokenId, - keyword, + const metadataTriples = [`<${ual}> "${ual}:0" .`]; + await this.tripleStoreModuleManager.insertKnowledgeCollectionMetadata( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], + TRIPLE_STORE_REPOSITORY.DKG, + metadataTriples, ); } - async insertAssetAssertionMetadata( - repository, - blockchain, - contract, - tokenId, - assertionId, - keyword, - ) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - - this.logger.info( - `Inserting metadata for the Knowledge Asset with the UAL: ${ual}, Assertion ID: ${assertionId}, ` + - `to the Triple Store's ${repository} repository.`, + async insertUpdatedKnowledgeCollection(preUpdateUalNamedGraphs, ual, triples, firstNewKAIndex) { + const preUpdateSubjectUalMap = new Map( + preUpdateUalNamedGraphs.map((entry) => [ + entry.subject, + entry.g.split('/').slice(0, -1).join('/'), + ]), ); - const currentAssetNquads = await formatAssertion({ - '@context': SCHEMA_CONTEXT, - '@id': ual, - blockchain, - contract, - tokenId, - assertion: { '@id': `assertion:${assertionId}` }, - keyword, - }); + const publicKnowledgeAssetsTriples = this.dataService.groupTriplesBySubject( + triples.public ?? triples, + ); - await this.tripleStoreModuleManager.insertAssetAssertionMetadata( - this.repositoryImplementations[repository], - repository, - currentAssetNquads.join('\n'), + const publicKnowledgeAssetsSubjects = publicKnowledgeAssetsTriples.map( + ([triple]) => triple.split(' ')[0], ); - } + const publicKnowledgeAssetsStatesUALs = []; + let newKnowledgeAssetId = firstNewKAIndex; + for (const subject of publicKnowledgeAssetsSubjects) { + if (preUpdateSubjectUalMap.has(subject)) { + publicKnowledgeAssetsStatesUALs.push(preUpdateSubjectUalMap.get(subject)); + } else { + publicKnowledgeAssetsStatesUALs.push(`${ual}/${newKnowledgeAssetId}`); + newKnowledgeAssetId += 1; + } + } - async updateAssetNonAssertionMetadata(repository, blockchain, contract, tokenId, keyword) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + const promises = []; - this.logger.info( - `Updating Non-Assertion metadata for the Knowledge Asset with the UAL: ${ual} ` + - `in the Triple Store's ${repository} repository.`, + promises.push( + this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], + TRIPLE_STORE_REPOSITORY.DKG, + publicKnowledgeAssetsStatesUALs, + publicKnowledgeAssetsTriples, + TRIPLES_VISIBILITY.PUBLIC, + ), ); - const updatedAssetNquads = await formatAssertion({ - '@context': SCHEMA_CONTEXT, - '@id': ual, - blockchain, - contract, - tokenId, - keyword, - }); + if (triples.private?.length) { + const privateKnowledgeAssetsTriples = this.dataService.groupTriplesBySubject( + triples.private, + ); - await this.tripleStoreModuleManager.updateAssetNonAssertionMetadata( - this.repositoryImplementations[repository], - repository, - ual, - updatedAssetNquads.join('\n'), - ); + const publicSubjectsMap = new Map( + publicKnowledgeAssetsTriples.map(([triple], index) => { + const [subject] = triple.split(' '); + return [subject, index]; + }), + ); + + const privateKnowledgeAssetsStatesUALs = privateKnowledgeAssetsTriples.reduce( + (result, [triple]) => { + const [privateSubject] = triple.split(' '); // groupTriplesBySubject guarantees format + if (publicSubjectsMap.has(privateSubject)) { + result.push( + publicKnowledgeAssetsStatesUALs[publicSubjectsMap.get(privateSubject)], + ); + } + return result; + }, + [], + ); + + if (privateKnowledgeAssetsStatesUALs.length > 0) { + promises.push( + this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], + TRIPLE_STORE_REPOSITORY.DKG, + privateKnowledgeAssetsStatesUALs, + privateKnowledgeAssetsTriples, + TRIPLES_VISIBILITY.PRIVATE, + ), + ); + } + } } - async deleteAssetMetadata(repository, blockchain, contract, tokenId) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - this.logger.info( - `Deleting metadata for the Knowledge Asset with the UAL: ${ual} ` + - `from the Triple Store's ${repository} repository.`, - ); + async moveKnowledgeCollectionBetweenUnifiedGraphs(fromRepository, toRepository, ual) { + const knowledgeCollection = + await this.tripleStoreModuleManager.getKnowledgeCollectionFromUnifiedGraph( + this.repositoryImplementations[fromRepository], + fromRepository, + BASE_NAMED_GRAPHS.UNIFIED, + ual, + false, + ); - const assertionLinks = await this.getAssetAssertionLinks( - repository, - blockchain, - contract, - tokenId, - ); - const linkedAssertionIds = assertionLinks.map(({ assertion }) => - assertion.replace('assertion:', ''), - ); + // TODO: Add with the introduction of the RDF-star mode + // const knowledgeCollectionAnnotations = this.dataService.createTripleAnnotations( + // knowledgeCollection, + // UAL_PREDICATE, + // `<${ual}>`, + // ); + // const knowledgeCollectionWithAnnotations = [ + // ...knowledgeCollection, + // ...knowledgeCollectionAnnotations, + // ]; - await this.tripleStoreModuleManager.deleteAssetMetadata( - this.repositoryImplementations[repository], - repository, - ual, - ); - await this.tripleStoreModuleManager.deleteAssetMetadata( - this.repositoryImplementations[repository], - repository, - this.ualService.getUalWithoutChainId(ual, blockchain), - ); + await Promise.all([ + this.tripleStoreModuleManager.insetAssertionInNamedGraph( + this.repositoryImplementations[toRepository], + toRepository, + BASE_NAMED_GRAPHS.HISTORICAL_UNIFIED, + knowledgeCollection, + ), + this.tripleStoreModuleManager.deleteUniqueKnowledgeCollectionTriplesFromUnifiedGraph( + this.repositoryImplementations[toRepository], + toRepository, + BASE_NAMED_GRAPHS.UNIFIED, + ual, + ), + ]); + } - // Delete assertions that were linked only to this Knowledge Asset - for (const linkedAssertionId of linkedAssertionIds) { - // eslint-disable-next-line no-await-in-loop - const [assetsWithAssertionIdCount] = await this.countAssetsWithAssertionId( + async checkIfKnowledgeCollectionExistsInUnifiedGraph( + ual, + repository = TRIPLE_STORE_REPOSITORY.DKG, + ) { + const knowledgeCollectionExists = + await this.tripleStoreModuleManager.knowledgeCollectionExistsInUnifiedGraph( + this.repositoryImplementations[repository], repository, - linkedAssertionId, + BASE_NAMED_GRAPHS.UNIFIED, + ual, ); - if (assetsWithAssertionIdCount?.count === 0) { - // eslint-disable-next-line no-await-in-loop - await this.deleteAssertion(repository, linkedAssertionId); - } - } + return knowledgeCollectionExists; } - async deleteAssertion(repository, assertionId) { - this.logger.info( - `Deleting Assertion with the ID: ${assertionId} from the Triple Store's ${repository} repository.`, - ); - return this.tripleStoreModuleManager.deleteAssertion( - this.repositoryImplementations[repository], - repository, - assertionId, - ); - } + async getAssertion( + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + visibility = TRIPLES_VISIBILITY.PUBLIC, + repository = TRIPLE_STORE_REPOSITORY.DKG, + ) { + // TODO: Use stateId + let ual = `did:dkg:${blockchain}/${contract}/${knowledgeCollectionId}`; + + let nquads; + if (typeof knowledgeAssetId === 'string') { + ual = `${ual}/${knowledgeAssetId}`; + this.logger.debug(`Getting Assertion with the UAL: ${ual}.`); + nquads = await this.tripleStoreModuleManager.getKnowledgeAssetNamedGraph( + this.repositoryImplementations[repository], + repository, + // TODO: Add state with implemented update + `${ual}`, + knowledgeAssetId, + visibility, + ); + } else { + this.logger.debug(`Getting Assertion with the UAL: ${ual}.`); + nquads = await this.tripleStoreModuleManager.getKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[repository], + repository, + ual, + knowledgeAssetId, + visibility, + ); + } + if (nquads?.public) { + nquads.public = nquads.public.split('\n').filter((line) => line !== ''); + } + if (nquads?.private) { + nquads.private = nquads.private.split('\n').filter((line) => line !== ''); + } - async countAssetsWithAssertionId(repository, assertionId) { - const bindings = await this.tripleStoreModuleManager.countAssetsWithAssertionId( - this.repositoryImplementations[repository], - repository, - assertionId, + const numberOfnquads = (nquads?.public?.length ?? 0) + (nquads?.private?.length ?? 0); + + this.logger.debug( + `Assertion: ${ual} ${ + numberOfnquads ? '' : 'is not' + } found in the Triple Store's ${repository} repository.`, ); - const count = this.dataService.parseBindings(bindings); - if (count > 1) { - // since 6.1.0 in asset metadata we are storing two triples connected to assertion id - // using 2 formats of ual - so we can expect that this query returns 2 triples per asset - return Math.round(count / 2); + + if (nquads.length) { + this.logger.debug( + `Number of n-quads retrieved from the Triple Store's ${repository} repository: ${numberOfnquads}.`, + ); } - return count; + + return nquads; } - async getAssertion(repository, assertionId) { + async getV6Assertion(repository, assertionId) { this.logger.debug( `Getting Assertion with the ID: ${assertionId} from the Triple Store's ${repository} repository.`, ); - let nquads = await this.tripleStoreModuleManager.getAssertion( + const nquads = await this.tripleStoreModuleManager.getV6Assertion( this.repositoryImplementations[repository], repository, assertionId, ); - nquads = await this.dataService.toNQuads(nquads, MEDIA_TYPES.N_QUADS); this.logger.debug( `Assertion: ${assertionId} ${ @@ -303,159 +453,140 @@ class TripleStoreService { return nquads; } - async assetExists(repository, blockchain, contract, tokenId) { - return this.tripleStoreModuleManager.assetExists( - this.repositoryImplementations[repository], - repository, - this.ualService.deriveUAL(blockchain, contract, tokenId), - ); - } - - async paranetAssetExists(blockchain, kaContract, kaTokenId, paranetContract, paranetTokenId) { - const paranetUAL = this.ualService.deriveUAL(blockchain, paranetContract, paranetTokenId); - const repository = this.paranetService.getParanetRepositoryName(paranetUAL); - return this.assetExists(repository, blockchain, kaContract, kaTokenId); - } - - async insertAssetAssertionLink(repository, blockchain, contract, tokenId, assertionId) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - this.logger.info( - `Inserting Link to the Assertion with the ID: ${assertionId} for the Knowledge Asset with the UAL: ${ual} ` + - `to the Triple Store's ${repository} repository.`, - ); - - return this.tripleStoreModuleManager.insertAssetAssertionLink( - this.repositoryImplementations[repository], - repository, - ual, - assertionId, - ); - } - - async updateAssetAssertionLink( - repository, + async getAssertionMetadata( blockchain, contract, - tokenId, - oldAssertionId, - newAssertionId, + knowledgeCollectionId, + knowledgeAssetId, + repository = TRIPLE_STORE_REPOSITORY.DKG, ) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - this.logger.info( - `Updating Assertion for the Knowledge Asset with the UAL: ${ual} in the Triple Store's ${repository} repository. ` + - `Old Assertion ID: ${oldAssertionId}. New Assertion ID: ${newAssertionId}.`, - ); - - await this.tripleStoreModuleManager.updateAssetAssertionLink( - this.repositoryImplementations[repository], - repository, - ual, - oldAssertionId, - newAssertionId, - ); + const ual = `did:dkg:${blockchain}/${contract}/${knowledgeCollectionId}${ + knowledgeAssetId ? `/${knowledgeAssetId}` : '' + }`; + this.logger.debug(`Getting Assertion Metadata with the UAL: ${ual}.`); + let nquads; + if (knowledgeAssetId) { + nquads = await this.tripleStoreModuleManager.getKnowledgeAssetMetadata( + this.repositoryImplementations[repository], + repository, + ual, + ); + } else { + nquads = await this.tripleStoreModuleManager.getKnowledgeCollectionMetadata( + this.repositoryImplementations[repository], + repository, + ual, + ); + } + nquads = nquads.split('\n').filter((line) => line !== ''); - const [assetsWithAssertionIdCount] = await this.countAssetsWithAssertionId( - repository, - oldAssertionId, + this.logger.debug( + `Knowledge Asset Metadata: ${ual} ${ + nquads.length ? '' : 'is not' + } found in the Triple Store's ${repository} repository.`, ); - // Delete old assertion if it was only linked to this Knowledge Asset - if (assetsWithAssertionIdCount?.count === 0) { - await this.deleteAssertion(repository, oldAssertionId); + if (nquads.length) { + this.logger.debug( + `Number of n-quads retrieved from the Triple Store's ${repository} repository: ${nquads.length}.`, + ); } - } - async deleteAssetAssertionLink(repository, blockchain, contract, tokenId, assertionId) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - this.logger.info( - `Deleting Link to the Assertion with the ID: ${assertionId} for the Knowledge Asset with the UAL: ${ual} ` + - `from the Triple Store's ${repository} repository.`, - ); + return nquads; + } - await this.tripleStoreModuleManager.deleteAssetAssertionLink( + async getLatestAssertionId(repository, ual) { + const nquads = await this.tripleStoreModuleManager.getLatestAssertionId( this.repositoryImplementations[repository], repository, ual, - assertionId, ); - const [assetsWithAssertionIdCount] = await this.countAssetsWithAssertionId( - repository, - assertionId, - ); - - // Delete assertion if it was only linked to this Knowledge Asset - if (assetsWithAssertionIdCount?.count === 0) { - await this.deleteAssertion(repository, assertionId); - } + return nquads; } - async getAssetAssertionLinks(repository, blockchain, contract, tokenId) { - const bindings = await this.tripleStoreModuleManager.getAssetAssertionLinks( - this.repositoryImplementations[repository], + async construct(query, repository = TRIPLE_STORE_REPOSITORY.DKG) { + return this.tripleStoreModuleManager.construct( + this.repositoryImplementations[repository] ?? + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], repository, - this.ualService.deriveUAL(blockchain, contract, tokenId), + query, ); - return this.dataService.parseBindings(bindings); } - async assetAssertionLinkExists(repository, blockchain, contract, tokenId, assertionId) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - - return this.tripleStoreModuleManager.assetAssertionLinkExists( - this.repositoryImplementations[repository], - repository, + async moveToHistoricAndDeleteAssertion(ual, stateIndex) { + // Find all named graph that exist for given UAL + const ualNamedGraphs = this.tripleStoreModuleManager.findAllNamedGraphsByUAL( + TRIPLE_STORE_REPOSITORY.DKG, ual, - assertionId, ); - } + let stateNamedGraphExistInHistoric = []; + const ulaNamedGraphsWithState = []; + const checkPromises = []; + // Check if they already exist in historic + for (const ulaNamedGraph of ualNamedGraphs) { + const parts = ulaNamedGraph.split('/'); + parts[parts.length - 2] = `${parts[parts.length - 2]}:${stateIndex}`; + const ulaNamedGraphWithState = parts.join('/'); + ulaNamedGraphsWithState.push(ulaNamedGraphWithState); + checkPromises.push( + this.tripleStoreModuleManager.namedGraphExist( + TRIPLE_STORE_REPOSITORY.DKG_HISTORIC, + ulaNamedGraphWithState, + ), + ); + } + stateNamedGraphExistInHistoric = await Promise.all(checkPromises); + // const insertPromises = []; + + // Insert them in UAL:latestStateIndex - 1 named graph in historic + for (const [index, promiseResult] of stateNamedGraphExistInHistoric.entries()) { + if (!promiseResult) { + const nquads = await this.tripleStoreModuleManager.getAssertionFromNamedGraph( + TRIPLE_STORE_REPOSITORY.DKG, + ualNamedGraphs[index], + ); + await this.tripleStoreModuleManager.insetAssertionInNamedGraph( + TRIPLE_STORE_REPOSITORY.DKG_HISTORIC, + ulaNamedGraphsWithState[index], + nquads, + ); + } + } - async assertionExists(repository, assertionId) { - return this.tripleStoreModuleManager.assertionExists( - this.repositoryImplementations[repository], - repository, - assertionId, + await this.tripleStoreModuleManager.deleteKnowledgeCollectionNamedGraphs( + TRIPLE_STORE_REPOSITORY.DKG, + ualNamedGraphs, ); + + return ualNamedGraphs; } - async construct(repository, query) { - return this.tripleStoreModuleManager.construct( + async getKnowledgeAssetNamedGraph(repository, ual, visibility) { + return this.tripleStoreModuleManager.getKnowledgeAssetNamedGraph( this.repositoryImplementations[repository], repository, - query, + ual, + visibility, ); } - async select(repository, query) { + async select(query, repository = TRIPLE_STORE_REPOSITORY.DKG) { return this.tripleStoreModuleManager.select( - this.repositoryImplementations[repository], + this.repositoryImplementations[repository] ?? + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], repository, query, ); } - async queryVoid(repository, query) { + async queryVoid(repository, query, namedGraphs = null, labels = null) { return this.tripleStoreModuleManager.queryVoid( this.repositoryImplementations[repository], repository, - query, + this.buildQuery(query, namedGraphs, labels), ); } - - async queryVoidAllRepositories(query) { - const queryPromises = []; - for (const repository in TRIPLE_STORE_REPOSITORIES) { - queryPromises.push( - this.tripleStoreModuleManager.queryVoid( - this.repositoryImplementations[repository], - TRIPLE_STORE_REPOSITORIES[repository], - query, - ), - ); - } - - return Promise.all(queryPromises); - } } export default TripleStoreService; diff --git a/src/service/ual-service.js b/src/service/ual-service.js index f3f2b35266..37741e7929 100644 --- a/src/service/ual-service.js +++ b/src/service/ual-service.js @@ -4,6 +4,7 @@ class UALService { this.logger = ctx.logger; this.blockchainModuleManager = ctx.blockchainModuleManager; + this.cryptoService = ctx.cryptoService; } deriveUAL(blockchain, contract, tokenId) { @@ -14,6 +15,14 @@ class UALService { isUAL(ual) { if (!ual.startsWith('did:dkg:')) return false; const parts = ual.replace('did:', '').replace('dkg:', '').split('/'); + parts.push(...parts.pop().split(':')); + if (parts.length === 4) { + return ( + this.isContract(parts[1]) && + !Number.isNaN(Number(parts[2])) && + !Number.isNaN(Number(parts[3])) + ); + } if (parts.length === 3) { // eslint-disable-next-line no-restricted-globals return this.isContract(parts[1]) && !Number.isNaN(Number(parts[2])); @@ -36,6 +45,29 @@ class UALService { resolveUAL(ual) { const parts = ual.replace('did:', '').replace('dkg:', '').split('/'); + // TODO: Resolve UAL with state + // parts.push(...parts.pop().split(':')); + if (parts.length === 4) { + const contract = parts[1]; + if (!this.isContract(contract)) { + throw new Error(`Invalid contract format: ${contract}`); + } + let blockchainName = parts[0]; + if (blockchainName.split(':').length === 1) { + for (const implementation of this.blockchainModuleManager.getImplementationNames()) { + if (implementation.split(':')[0] === blockchainName) { + blockchainName = implementation; + break; + } + } + } + return { + blockchain: blockchainName, + contract, + knowledgeCollectionId: Number(parts[2]), + knowledgeAssetId: Number(parts[3]), + }; + } if (parts.length === 3) { const contract = parts[1]; if (!this.isContract(contract)) { @@ -50,7 +82,11 @@ class UALService { } } } - return { blockchain: blockchainName, contract, tokenId: Number(parts[2]) }; + return { + blockchain: blockchainName, + contract, + knowledgeCollectionId: Number(parts[2]), + }; } if (parts.length === 2) { const parts2 = parts[0].split(':'); @@ -85,17 +121,22 @@ class UALService { return contractRegex.test(contract); } - async calculateLocationKeyword(blockchain, contract, tokenId, assertionId = null) { + // TODO: Do we need still need this + async calculateLocationKeyword( + blockchain, + contract, + knowledgeCollectionId, + assertionId = null, + ) { const firstAssertionId = assertionId ?? - (await this.blockchainModuleManager.getAssertionIdByIndex( + (await this.blockchainModuleManager.getKnowledgeCollectionMerkleRootByIndex( blockchain, contract, - tokenId, + knowledgeCollectionId, 0, )); - return this.blockchainModuleManager.encodePacked( - blockchain, + return this.cryptoService.encodePacked( ['address', 'bytes32'], [contract, firstAssertionId], ); diff --git a/src/service/update-service.js b/src/service/update-service.js index d3c371fa1c..0ee39c6e1d 100644 --- a/src/service/update-service.js +++ b/src/service/update-service.js @@ -6,13 +6,14 @@ import { NETWORK_PROTOCOLS, ERROR_TYPE, OPERATIONS, - OPERATION_REQUEST_STATUS, } from '../constants/constants.js'; class UpdateService extends OperationService { constructor(ctx) { super(ctx); + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.operationName = OPERATIONS.UPDATE; this.networkProtocols = NETWORK_PROTOCOLS.UPDATE; this.errorType = ERROR_TYPE.UPDATE.UPDATE_ERROR; @@ -30,76 +31,73 @@ class UpdateService extends OperationService { blockchain, numberOfFoundNodes, leftoverNodes, - keyword, batchSize, minAckResponses, + datasetRoot, } = command.data; - const keywordsStatuses = await this.getResponsesStatuses( + const datasetRootStatus = await this.getResponsesStatuses( responseStatus, errorMessage, operationId, - keyword, ); - const { completedNumber, failedNumber } = keywordsStatuses[keyword]; - const numberOfResponses = completedNumber + failedNumber; + const { completedNumber, failedNumber } = datasetRootStatus[operationId]; + + const totalResponses = completedNumber + failedNumber; + this.logger.debug( `Processing ${ this.operationName - } response with status: ${responseStatus} for operationId: ${operationId}, keyword: ${keyword}. Total number of nodes: ${numberOfFoundNodes}, number of nodes in batch: ${Math.min( + } response with status: ${responseStatus} for operationId: ${operationId}. Total number of nodes: ${numberOfFoundNodes}, number of nodes in batch: ${Math.min( numberOfFoundNodes, batchSize, )} number of leftover nodes: ${ leftoverNodes.length - }, number of responses: ${numberOfResponses}, Completed: ${completedNumber}, Failed: ${failedNumber}, minimum replication factor: ${minAckResponses}`, + }, number of responses: ${totalResponses}, Completed: ${completedNumber}, Failed: ${failedNumber}, minimum replication factor: ${minAckResponses}`, ); if (responseData.errorMessage) { this.logger.trace( - `Error message for operation id: ${operationId}, keyword: ${keyword} : ${responseData.errorMessage}`, + `Error message for operation id: ${operationId} : ${responseData.errorMessage}`, + ); + } + + // Minimum replication reached, mark in the operational DB + if (completedNumber === minAckResponses) { + this.logger.debug( + `Minimum replication ${minAckResponses} reached for operationId: ${operationId}, dataset root: ${datasetRoot}`, + ); + + await this.repositoryModuleManager.updateMinAcksReached(operationId, true); + } + + // All requests sent, minimum replication reached, mark as completed + if (leftoverNodes.length === 0 && completedNumber >= minAckResponses) { + await this.markOperationAsCompleted( + operationId, + blockchain, + null, + this.completedStatuses, + ); + this.logResponsesSummary(completedNumber, failedNumber); + } + + // All requests sent, minimum replication not reached, mark as failed + if (leftoverNodes.length === 0 && completedNumber < minAckResponses) { + this.markOperationAsFailed( + operationId, + blockchain, + 'Not replicated to enough nodes!', + this.errorType, ); + this.logResponsesSummary(completedNumber, failedNumber); } - if ( - responseStatus === OPERATION_REQUEST_STATUS.COMPLETED && - completedNumber === minAckResponses - ) { - let allCompleted = true; - for (const key in keywordsStatuses) { - if (keywordsStatuses[key].completedNumber < minAckResponses) { - allCompleted = false; - break; - } - } - if (allCompleted) { - await this.markOperationAsCompleted( - operationId, - blockchain, - null, - this.completedStatuses, - ); - this.logResponsesSummary(completedNumber, failedNumber); - this.logger.info( - `${this.operationName} with operation id: ${operationId} with status: ${ - this.completedStatuses[this.completedStatuses.length - 1] - }`, - ); - } - } else if ( - completedNumber < minAckResponses && - (numberOfFoundNodes === numberOfResponses || numberOfResponses % batchSize === 0) - ) { - if (leftoverNodes.length === 0) { - await this.markOperationAsFailed( - operationId, - blockchain, - 'Not replicated to enough nodes!', - this.errorType, - ); - this.logResponsesSummary(completedNumber, failedNumber); - } else { - await this.scheduleOperationForLeftoverNodes(command.data, leftoverNodes); - } + // Not all requests sent, still possible to reach minimum replication, + // schedule requests for leftover nodes + const potentialCompletedNumber = completedNumber + leftoverNodes.length; + if (leftoverNodes.length > 0 && potentialCompletedNumber >= minAckResponses) { + await this.scheduleOperationForLeftoverNodes(command.data, leftoverNodes); } } } diff --git a/src/service/validation-service.js b/src/service/validation-service.js index 6782ddbc36..2ac58c7331 100644 --- a/src/service/validation-service.js +++ b/src/service/validation-service.js @@ -1,5 +1,4 @@ -import { assertionMetadata } from 'assertion-tools'; -import { BYTES_IN_KILOBYTE, ZERO_ADDRESS } from '../constants/constants.js'; +import { ZERO_ADDRESS, PRIVATE_ASSERTION_PREDICATE, ZERO_BYTES32 } from '../constants/constants.js'; class ValidationService { constructor(ctx) { @@ -16,7 +15,7 @@ class ValidationService { let isValid = true; try { - const result = await this.blockchainModuleManager.getKnowledgeAssetOwner( + const result = await this.blockchainModuleManager.getLatestMerkleRootPublisher( blockchain, contract, tokenId, @@ -31,62 +30,97 @@ class ValidationService { return isValid; } + async validateUalV6(blockchain, contract, tokenId) { + this.logger.info( + `Validating UAL: did:dkg:${blockchain.toLowerCase()}/${contract.toLowerCase()}/${tokenId}`, + ); + + let isValid = true; + try { + const result = await this.blockchainModuleManager.getLatestAssertionId( + blockchain, + contract, + tokenId, + ); + if (!result || result === ZERO_BYTES32) { + isValid = false; + } + } catch (err) { + isValid = false; + } + + return isValid; + } + async validateAssertion(assertionId, blockchain, assertion) { this.logger.info(`Validating assertionId: ${assertionId}`); - this.validateAssertionId(assertion, assertionId); - const blockchainAssertionData = await this.blockchainModuleManager.getAssertionData( - blockchain, - assertionId, - ); - this.validateAssertionSize(blockchainAssertionData.size, assertion); - this.validateTriplesNumber(blockchainAssertionData.triplesNumber, assertion); - this.validateChunkSize(blockchainAssertionData.chunksNumber, assertion); + await this.validateDatasetRoot(assertion, assertionId); this.logger.info(`Assertion integrity validated! AssertionId: ${assertionId}`); } - validateAssertionSize(blockchainAssertionSize, assertion) { - const blockchainAssertionSizeInKb = blockchainAssertionSize / BYTES_IN_KILOBYTE; - if (blockchainAssertionSizeInKb > this.config.maximumAssertionSizeInKb) { - throw Error( - `The size of the received assertion exceeds the maximum limit allowed.. Maximum allowed assertion size in kb: ${this.config.maximumAssertionSizeInKb}, assertion size read from blockchain in kb: ${blockchainAssertionSizeInKb}`, + async validateDatasetRootOnBlockchain( + knowledgeCollectionMerkleRoot, + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, + ) { + const blockchainAssertionRoot = + await this.blockchainModuleManager.getKnowledgeCollectionLatestMerkleRoot( + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, ); - } - const assertionSize = assertionMetadata.getAssertionSizeInBytes(assertion); - if (blockchainAssertionSize !== assertionSize) { - // todo after corrective component is implemented, update this logic - this.logger.warn( - `Invalid assertion size, value read from blockchain: ${blockchainAssertionSize}, calculated: ${assertionSize}`, + + if (knowledgeCollectionMerkleRoot !== blockchainAssertionRoot) { + throw new Error( + `Merkle Root validation failed. Merkle Root on chain: ${blockchainAssertionRoot}; Calculated Merkle Root: ${knowledgeCollectionMerkleRoot}`, ); } } - validateTriplesNumber(blockchainTriplesNumber, assertion) { - const triplesNumber = assertionMetadata.getAssertionTriplesNumber(assertion); - if (blockchainTriplesNumber !== triplesNumber) { - throw Error( - `Invalid triples number, value read from blockchain: ${blockchainTriplesNumber}, calculated: ${triplesNumber}`, - ); - } + // Used to validate assertion node received through network get + async validateDatasetOnBlockchain( + assertion, + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, + ) { + const knowledgeCollectionMerkleRoot = await this.validationModuleManager.calculateRoot( + assertion, + ); + + await this.validateDatasetRootOnBlockchain( + knowledgeCollectionMerkleRoot, + blockchain, + assetStorageContractAddress, + knowledgeCollectionId, + ); } - validateChunkSize(blockchainChunksNumber, assertion) { - const chunksNumber = assertionMetadata.getAssertionChunksNumber(assertion); - if (blockchainChunksNumber !== chunksNumber) { - throw Error( - `Invalid chunks number, value read from blockchain: ${blockchainChunksNumber}, calculated size: ${chunksNumber}`, + async validateDatasetRoot(dataset, datasetRoot) { + const calculatedDatasetRoot = await this.validationModuleManager.calculateRoot(dataset); + + if (datasetRoot !== calculatedDatasetRoot) { + throw new Error( + `Merkle Root validation failed. Received Merkle Root: ${datasetRoot}; Calculated Merkle Root: ${calculatedDatasetRoot}`, ); } } - validateAssertionId(assertion, assertionId) { - const calculatedAssertionId = this.validationModuleManager.calculateRoot(assertion); + async validatePrivateMerkleRoot(publicAssertion, privateAssertion) { + const privateAssertionTriple = publicAssertion.find((triple) => + triple.includes(PRIVATE_ASSERTION_PREDICATE), + ); + + if (privateAssertionTriple) { + const privateAssertionRoot = privateAssertionTriple.split(' ')[2].slice(1, -1); - if (assertionId !== calculatedAssertionId) { - // todo after corrective component is implemented, update this logic - this.logger.warn( - `Invalid assertion id. Received value: ${assertionId}, calculated: ${calculatedAssertionId}`, + await this.validateDatasetRoot(privateAssertion, privateAssertionRoot); + } else { + throw new Error( + `Merkle Root validation failed. Private Merkle Root not present in public assertion.`, ); } } diff --git a/test/bdd/steps/lib/local-blockchain.mjs b/test/bdd/steps/lib/local-blockchain.mjs index b686cec378..e51d591cff 100644 --- a/test/bdd/steps/lib/local-blockchain.mjs +++ b/test/bdd/steps/lib/local-blockchain.mjs @@ -5,9 +5,6 @@ import { readFile } from 'fs/promises'; import { exec, execSync } from 'child_process'; const Hub = JSON.parse((await readFile('node_modules/dkg-evm-module/abi/Hub.json')).toString()); -const HubController = JSON.parse( - (await readFile('node_modules/dkg-evm-module/abi/HubController.json')).toString(), -); const ParametersStorage = JSON.parse( (await readFile('node_modules/dkg-evm-module/abi/ParametersStorage.json')).toString(), ); @@ -79,22 +76,6 @@ class LocalBlockchain { this.hubContract = new ethers.Contract(hubContractAddress, Hub, wallet); await this.provider.ready; - const hubControllerAddress = await this.hubContract.owner(); - this.HubControllerContract = new ethers.Contract( - hubControllerAddress, - HubController, - wallet, - ); - - const parametersStorageAddress = await this.hubContract.getContractAddress( - 'ParametersStorage', - ); - this.ParametersStorageInterface = new ethers.utils.Interface(ParametersStorage); - - await this.setParametersStorageParams( - parametersStorageAddress, - testParametersStorageParams, - ); } async stop() { @@ -118,7 +99,7 @@ class LocalBlockchain { [params[parameter]], ); // eslint-disable-next-line no-await-in-loop - await this.HubControllerContract.forwardCall(parametersStorageAddress, encodedData); + await this.hubContract.forwardCall(parametersStorageAddress, encodedData); } } @@ -128,7 +109,7 @@ class LocalBlockchain { const parametersStorageAddress = await this.hubContract.getContractAddress( 'ParametersStorage', ); - await this.HubControllerContract.forwardCall(parametersStorageAddress, encodedData); + await this.hubContract.forwardCall(parametersStorageAddress, encodedData); } async setR1(r1) { @@ -137,7 +118,7 @@ class LocalBlockchain { const parametersStorageAddress = await this.hubContract.getContractAddress( 'ParametersStorage', ); - await this.HubControllerContract.forwardCall(parametersStorageAddress, encodedData); + await this.hubContract.forwardCall(parametersStorageAddress, encodedData); } async setFinalizationCommitsNumber(commitsNumber) { @@ -149,7 +130,7 @@ class LocalBlockchain { const parametersStorageAddress = await this.hubContract.getContractAddress( 'ParametersStorage', ); - await this.HubControllerContract.forwardCall(parametersStorageAddress, encodedData); + await this.hubContract.forwardCall(parametersStorageAddress, encodedData); } } diff --git a/test/unit/mock/operation-id-service-mock.js b/test/unit/mock/operation-id-service-mock.js index 7e7a728857..9ce690d859 100644 --- a/test/unit/mock/operation-id-service-mock.js +++ b/test/unit/mock/operation-id-service-mock.js @@ -3,7 +3,9 @@ class OperationIdServiceMock { this.repositoryModuleManager = ctx.repositoryModuleManager; } - cacheOperationIdData(operationId, data) {} + cacheOperationIdDataToFile(operationId, data) {} + + cacheOperationIdDataToMemory(operationId, data) {} async updateOperationIdStatus( operationId, diff --git a/test/unit/mock/repository-module-manager-mock.js b/test/unit/mock/repository-module-manager-mock.js index ff6aa93168..fc9a4b418b 100644 --- a/test/unit/mock/repository-module-manager-mock.js +++ b/test/unit/mock/repository-module-manager-mock.js @@ -130,14 +130,13 @@ class RepositoryModuleManagerMock { ); } - async createOperationResponseRecord(status, operation, operationId, keyword, errorMessage) { + async createOperationResponseRecord(status, operation, operationId, errorMessage) { this.responseStatuses = [ ...this.responseStatuses, { id: this.responseStatuses[this.responseStatuses.length - 1].id + 1, status, operationId, - keyword, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), }, diff --git a/test/unit/modules/triple-store/triple-store.test.js b/test/unit/modules/triple-store/triple-store.test.js index 9209cf8bc3..ec75ee10a4 100644 --- a/test/unit/modules/triple-store/triple-store.test.js +++ b/test/unit/modules/triple-store/triple-store.test.js @@ -20,14 +20,14 @@ async function _insertAndGet(content) { const assertion = await formatAssertion(content); const assertionId = calculateRoot(assertion); - await tripleStoreModuleManager.insertAssertion( + await tripleStoreModuleManager.insertKnowledgeAssets( implementationName, TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, assertionId, assertion.join('\n'), ); - const nquads = await tripleStoreModuleManager.getAssertion( + const nquads = await tripleStoreModuleManager.getKnowledgeCollection( implementationName, TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, assertionId, diff --git a/test/unit/modules/validation/validation-module-manager.test.js b/test/unit/modules/validation/validation-module-manager.test.js index 4cabe5041a..4e2306d1f0 100644 --- a/test/unit/modules/validation/validation-module-manager.test.js +++ b/test/unit/modules/validation/validation-module-manager.test.js @@ -49,8 +49,8 @@ describe.only('Validation module manager', async () => { }); it('validate successful root hash calculation, expect to be matched', async () => { - const expectedRootHash = calculateRoot(assertion); - const calculatedRootHash = validationManager.calculateRoot(assertion); + const expectedRootHash = await calculateRoot(assertion); + const calculatedRootHash = await validationManager.calculateRoot(assertion); assert(expect(calculatedRootHash).to.exist); expect(calculatedRootHash).to.equal(expectedRootHash); @@ -60,7 +60,7 @@ describe.only('Validation module manager', async () => { validationManager.initialized = false; try { - validationManager.calculateRoot(assertion); + await validationManager.calculateRoot(assertion); } catch (error) { expect(error.message).to.equal('Validation module is not initialized.'); } @@ -76,7 +76,7 @@ describe.only('Validation module manager', async () => { }); it('successful getting merkle proof hash', async () => { - const calculatedMerkleHash = validationManager.getMerkleProof(assertion, 0); + const calculatedMerkleHash = await validationManager.getMerkleProof(assertion, 0); assert(expect(calculatedMerkleHash).to.exist); expect(calculatedMerkleHash).to.be.instanceof(Object); @@ -88,19 +88,20 @@ describe.only('Validation module manager', async () => { validationManager.initialized = false; try { - validationManager.getMerkleProof(assertion, 0); + await validationManager.getMerkleProof(assertion, 0); } catch (error) { expect(error.message).to.equal('Validation module is not initialized.'); } }); - it('failed merkle prof hash calculation when assertion is null or undefined', async () => { - invalidValues.forEach((value) => { - expect(() => validationManager.getMerkleProof(value, 0)).to.throw( + it('failed merkle proof hash calculation when assertion is null or undefined', async () => { + for (const value of invalidValues) { + // eslint-disable-next-line no-await-in-loop + expect(await validationManager.getMerkleProof(value, 0)).to.be.rejectedWith( Error, 'Get merkle proof failed: Assertion cannot be null or undefined.', ); - }); + } }); it('validate getting function name', async () => { diff --git a/tools/knowledge-assets-distribution-simulation/mocks/blockchain-module-manager-mock.js b/tools/knowledge-assets-distribution-simulation/mocks/blockchain-module-manager-mock.js deleted file mode 100644 index 3f78ef96ba..0000000000 --- a/tools/knowledge-assets-distribution-simulation/mocks/blockchain-module-manager-mock.js +++ /dev/null @@ -1,58 +0,0 @@ -import { ethers } from 'ethers'; - -class BlockchainModuleManagerMock { - convertBytesToUint8Array(blockchain, bytesLikeData) { - return ethers.utils.arrayify(bytesLikeData); - } - - convertUint8ArrayToHex(blockchain, uint8Array) { - return ethers.utils.hexlify(uint8Array); - } - - convertFromWei(value, toUnit = 'ether') { - return ethers.utils.formatUnits(value, toUnit); - } - - convertToWei(blockchain, value, fromUnit = 'ether') { - return ethers.utils.parseUnits(value.toString(), fromUnit); - } - - toBigNumber(blockchain, value) { - return ethers.BigNumber.from(value); - } - - getMinimumStake(blockchain) { - return 50000; - } - - getMaximumStake(blockchain) { - return 1000000; - } - - getLog2PLDSFParams(blockchain) { - return { - distanceMappingCoefficient: - '115792089237316195423570985008687907853269984665640564039457584007913129639', - stakeMappingCoefficient: `${Math.floor(5000000 / 200000)}000000000000000000`, - multiplier: 10000, - logArgumentConstant: 1, - a: 1, - stakeExponent: 1, - b: 0, - c: 1, - distanceExponent: 2, - d: 1, - }; - } - - getLinearSumParams(blockchain) { - return { - distanceScaleFactor: ethers.utils.parseEther('1'), - stakeScaleFactor: ethers.utils.parseEther('1'), - w1: 1, - w2: 1, - }; - } -} - -export default BlockchainModuleManagerMock; diff --git a/tools/knowledge-assets-distribution-simulation/simulation.js b/tools/knowledge-assets-distribution-simulation/simulation.js deleted file mode 100644 index 1bab2dbfd4..0000000000 --- a/tools/knowledge-assets-distribution-simulation/simulation.js +++ /dev/null @@ -1,582 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -/* eslint-disable no-await-in-loop */ -import 'dotenv/config'; -import crypto from 'crypto'; -import DeepExtend from 'deep-extend'; -import rc from 'rc'; -import fs from 'fs-extra'; -import D3Node from 'd3-node'; -import * as d3 from 'd3'; -import sharp from 'sharp'; -import { readFile } from 'fs/promises'; -import { createRequire } from 'module'; -import { create as createLibP2PKey, createFromPrivKey } from 'peer-id'; -import { HASH_RING_SIZE, UINT128_MAX_BN } from '../../src/constants/constants.js'; -import BlockchainModuleManagerMock from './mocks/blockchain-module-manager-mock.js'; -import HashingService from '../../src/service/hashing-service.js'; -import ProximityScoringService from '../../src/service/proximity-scoring-service.js'; -import Logger from '../../src/logger/logger.js'; - -const require = createRequire(import.meta.url); -const configjson = require('../../config/config.json'); -const pjson = require('../../package.json'); - -function getConfig() { - let config; - let userConfig; - - if (process.env.USER_CONFIG_PATH) { - const configurationFilename = process.env.USER_CONFIG_PATH; - const pathSplit = configurationFilename.split('/'); - userConfig = JSON.parse(fs.readFileSync(configurationFilename)); - userConfig.configFilename = pathSplit[pathSplit.length - 1]; - } - - const defaultConfig = JSON.parse(JSON.stringify(configjson[process.env.NODE_ENV])); - - if (userConfig) { - config = DeepExtend(defaultConfig, userConfig); - } else { - config = rc(pjson.name, defaultConfig); - } - - if (!config.configFilename) { - config.configFilename = '.origintrail_noderc'; - } - return config; -} - -function getLogger() { - return new Logger('debug'); -} - -const config = getConfig(); -const logger = getLogger(); -const blockchain = 'hardhat1:31337'; -const blockchainModuleManagerMock = new BlockchainModuleManagerMock(); -const hashingService = new HashingService({ config, logger }); -const proximityScoringService = new ProximityScoringService({ - config, - logger, - blockchainModuleManager: blockchainModuleManagerMock, -}); - -function generateRandomNumber(min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; -} - -function generateRandomHashes(numberOfHashes) { - const hashes = []; - - for (let i = 0; i < numberOfHashes; i += 1) { - const randomString = crypto.randomBytes(20).toString('hex'); - const hash = `0x${crypto.createHash('sha256').update(randomString).digest('hex')}`; - hashes.push(hash); - } - - return numberOfHashes === 1 ? hashes[0] : hashes; -} - -async function generateRandomNodes( - numberOfNodes, - stakeMin = 50000, - stakeMax = 2000000, - hashFunctionId = 1, -) { - const nodes = []; - - for (let i = 0; i < numberOfNodes; i += 1) { - const libp2pPrivKey = (await createLibP2PKey({ bits: 1024, keyType: 'RSA' })).toJSON() - .privKey; - const nodeId = (await createFromPrivKey(libp2pPrivKey)).toB58String(); - const sha256 = await hashingService.callHashFunction(hashFunctionId, nodeId); - const stake = String(generateRandomNumber(stakeMin, stakeMax)); - - nodes.push({ nodeId, sha256, stake }); - } - - return nodes; -} - -async function readJsonFromFile(filePath) { - try { - const data = await readFile(filePath, 'utf8'); - return JSON.parse(data); - } catch (error) { - logger.error(`Error reading file: ${error.stack}`); - throw error; - } -} - -function convertSvgToJpg(svgString, outputImageName) { - sharp(Buffer.from(svgString)) - .flatten({ background: '#FFFFFF' }) - .jpeg({ quality: 100 }) - .toBuffer() - .then((buffer) => { - fs.writeFile( - `tools/knowledge-assets-distribution-simulation/plots/${outputImageName}.jpg`, - buffer, - (err) => { - if (err) { - logger.error(`Error saving the JPG file: ${err.stack}`); - } else { - logger.info( - `Plot saved as "tools/knowledge-assets-distribution-simulation/plots/${outputImageName}.jpg"`, - ); - } - }, - ); - }) - .catch((error) => { - logger.error('Error converting SVG to JPG:', error); - }); -} - -function generateStakeDistributionPlot(data, outputImageName) { - logger.info('Generating Node-Stake Distribution Plot.'); - - const d3n = new D3Node(); - const margin = { top: 60, right: 30, bottom: 60, left: 90 }; - const width = 2000 - margin.left - margin.right; - const height = 1000 - margin.top - margin.bottom; - - data.sort((a, b) => d3.descending(a.stake, b.stake)); - - const svg = d3n - .createSVG(width + margin.left + margin.right, height + margin.top + margin.bottom) - .append('g') - .attr('transform', `translate(${margin.left},${margin.top})`); - - svg.append('text') - .attr('x', width / 2) - .attr('y', 0 - margin.top / 2) - .attr('text-anchor', 'middle') - .style('font-size', '20px') - .style('text-decoration', 'underline') - .text('Node-Stake Distribution Plot'); - - const x = d3 - .scaleBand() - .range([0, width]) - .domain(data.map((_, i) => i + 1)) - .padding(0.2); - - svg.append('text') - .attr('transform', `translate(${width / 2}, ${height + margin.top - 20})`) - .style('text-anchor', 'middle') - .text('Node Index'); - - const y = d3 - .scaleLinear() - .domain([0, Math.round(d3.max(data.map((node) => node.stake)) * 1.1)]) - .range([height, 0]); - - svg.append('text') - .attr('transform', 'rotate(-90)') - .attr('y', 0 - margin.left) - .attr('x', 0 - height / 2) - .attr('dy', '1em') - .style('text-anchor', 'middle') - .text('Stake'); - - svg.selectAll('rect') - .data(data) - .enter() - .append('rect') - .attr('x', (_, i) => x(i + 1)) - .attr('width', x.bandwidth()) - .attr('y', (d) => y(d.stake)) - .attr('height', (d) => height - y(d.stake)) - .attr('fill', 'steelblue'); - - svg.append('g') - .attr('transform', `translate(0, ${height})`) - .call(d3.axisBottom(x)) - .selectAll('text') - .style('text-anchor', 'end') - .attr('dx', '-.8em') - .attr('dy', '.15em') - .attr('transform', 'rotate(-65)'); - - svg.append('g').call(d3.axisLeft(y)); - - convertSvgToJpg(d3n.svgString(), outputImageName); -} - -function generateScatterPlot(data, metric, outputImageName) { - const d3n = new D3Node(); - const margin = { top: 60, right: 30, bottom: 60, left: 60 }; - const width = 2000 - margin.left - margin.right; - const height = 1000 - margin.top - margin.bottom; - - const svg = d3n - .createSVG(width + margin.left + margin.right, height + margin.top + margin.bottom) - .append('g') - .attr('transform', `translate(${margin.left},${margin.top})`); - - svg.append('text') - .attr('x', width / 2) - .attr('y', 0 - margin.top / 2) - .attr('text-anchor', 'middle') - .style('font-size', '20px') - .style('text-decoration', 'underline') - .text(`Stake / KAs ${metric[0].toUpperCase() + metric.slice(1)} Relation Plot`); - - const minStake = d3.min(data.map((node) => node.stake)); - const maxStake = d3.max(data.map((node) => node.stake)); - - const x = d3 - .scaleLinear() - .domain([Math.round(minStake * 0.9), Math.round(maxStake * 1.1)]) - .range([0, width]); - - svg.append('text') - .attr('transform', `translate(${width / 2}, ${height + margin.top - 20})`) - .style('text-anchor', 'middle') - .text('Stake'); - - const minKAsNum = d3.min(data.map((node) => node[metric])); - const maxKAsNum = d3.max(data.map((node) => node[metric])); - - const y = d3 - .scaleLinear() - .domain([Math.round(minKAsNum * 0.9), Math.round(maxKAsNum * 1.1)]) - .range([height, 0]); - - svg.append('text') - .attr('transform', 'rotate(-90)') - .attr('y', 0 - margin.left) - .attr('x', 0 - height / 2) - .attr('dy', '1em') - .style('text-anchor', 'middle') - .text(`Knowledge Assets ${metric}`); - - svg.append('g').attr('transform', `translate(0, ${height})`).call(d3.axisBottom(x).ticks(15)); - - svg.append('g').call(d3.axisLeft(y).ticks(30)); - - svg.append('g') - .selectAll('dot') - .data(data) - .enter() - .append('circle') - .attr('cx', (d) => x(d.stake)) - .attr('cy', (d) => y(d[metric])) - .attr('r', 5) - .style('fill', '#69b3a2'); - - svg.append('line') - .style('stroke', 'red') - .style('stroke-width', 2) - .style('stroke-dasharray', '3, 3') - .attr('x1', 0) - .attr('y1', y(minKAsNum)) - .attr('x2', width) - .attr('y2', y(minKAsNum)); - - svg.append('line') - .style('stroke', 'red') - .style('stroke-width', 2) - .style('stroke-dasharray', '3, 3') - .attr('x1', 0) - .attr('y1', y(maxKAsNum)) - .attr('x2', width) - .attr('y2', y(maxKAsNum)); - - convertSvgToJpg(d3n.svgString(), outputImageName); -} - -function generateBoxPlot(data, metric, outputImageName) { - const d3n = new D3Node(); - const margin = { top: 60, right: 30, bottom: 60, left: 60 }; - const width = 2000 - margin.left - margin.right; - const height = 1000 - margin.top - margin.bottom; - - const svg = d3n - .createSVG(width + margin.left + margin.right, height + margin.top + margin.bottom) - .append('g') - .attr('transform', `translate(${margin.left},${margin.top})`); - - svg.append('text') - .attr('x', width / 2) - .attr('y', 0 - margin.top / 2) - .attr('text-anchor', 'middle') - .style('font-size', '20px') - .style('text-decoration', 'underline') - .text(`${metric[0].toUpperCase() + metric.slice(1)} Distribution Plot`); - - const groupedData = d3.group(data, (d) => d.nodeId); - const valuesPerNode = Array.from(groupedData.values(), (d) => d.map((item) => item[metric])); - - const x = d3 - .scaleBand() - .domain(valuesPerNode.map((_, i) => i)) - .range([0, width]); - - svg.append('text') - .attr('transform', `translate(${width / 2}, ${height + margin.top - 20})`) - .style('text-anchor', 'middle') - .text('Node Index'); - - const y = d3 - .scaleLinear() - .domain([0, d3.max(data, (d) => d[metric])]) - .nice() - .range([height, 0]); - - svg.append('text') - .attr('transform', 'rotate(-90)') - .attr('y', 0 - margin.left) - .attr('x', 0 - height / 2) - .attr('dy', '1em') - .style('text-anchor', 'middle') - .text(metric[0].toUpperCase() + metric.slice(1)); - - svg.append('g') - .attr('transform', `translate(0, ${height})`) - .call(d3.axisBottom(x)) - .selectAll('text') - .style('text-anchor', 'end') - .attr('dx', '-.8em') - .attr('dy', '.15em') - .attr('transform', 'rotate(-65)'); - - svg.append('g').call(d3.axisLeft(y).ticks(30)); - - const boxWidth = x.bandwidth() - 3; - - valuesPerNode.forEach((d, i) => { - const box = svg - .append('g') - .attr('transform', `translate(${x(i) + (x.bandwidth() - boxWidth) / 2},0)`); - - const q1 = d3.quantile(d, 0.25); - const median = d3.quantile(d, 0.5); - const q3 = d3.quantile(d, 0.75); - const iqr = q3 - q1; - const lowerLimit = q1 - 1.5 * iqr; - const upperLimit = q3 + 1.5 * iqr; - - const lowerWhisker = d3.max([d3.min(data, (n) => n[metric]), lowerLimit]); - const upperWhisker = d3.min([d3.max(data, (n) => n[metric]), upperLimit]); - - box.append('rect') - .attr('y', y(q3)) - .attr('height', y(q1) - y(q3)) - .attr('width', boxWidth) - .style('fill', '#69b3a2'); - - box.append('line') - .attr('y1', y(median)) - .attr('y2', y(median)) - .attr('x1', 0) - .attr('x2', boxWidth) - .style('stroke', 'black') - .style('width', 80); - - box.append('line') - .attr('y1', y(lowerWhisker)) - .attr('y2', y(upperWhisker)) - .attr('x1', boxWidth / 2) - .attr('x2', boxWidth / 2) - .style('stroke', 'black'); - - box.append('line') - .attr('y1', y(lowerWhisker)) - .attr('y2', y(lowerWhisker)) - .attr('x1', boxWidth * 0.25) - .attr('x2', boxWidth * 0.75) - .style('stroke', 'black'); - - box.append('line') - .attr('y1', y(upperWhisker)) - .attr('y2', y(upperWhisker)) - .attr('x1', boxWidth * 0.25) - .attr('x2', boxWidth * 0.75) - .style('stroke', 'black'); - }); - - convertSvgToJpg(d3n.svgString(), outputImageName); -} - -async function runSimulation( - mode, - filePath, - numberOfNodes, - numberOfKAs, - proximityScoreFunctionsPairId, - r0 = 3, - r2 = 20, -) { - let nodes = []; - - if (mode === 'load') { - nodes = await readJsonFromFile(filePath); - } else if (mode === 'generate') { - nodes = await generateRandomNodes(numberOfNodes); - } else { - logger.error(`Invalid mode: ${mode}. Use "load" or "generate".`); - return; - } - - logger.info( - `Running simulation in '${mode}' mode with ${nodes.length} nodes and ${numberOfKAs} KAs.`, - ); - - generateStakeDistributionPlot( - nodes.map((node) => ({ ...node, stake: Number(node.stake) })), - `${mode}-${nodes.length}-${numberOfKAs}-${proximityScoreFunctionsPairId}-nodes-stake-distribution`, - ); - - const knowledgeAssets = generateRandomHashes(numberOfKAs); - const metrics = []; - const replicas = {}; - - for (const node of nodes) { - replicas[node.nodeId] = { - stake: Number(node.stake), - replicated: 0, - won: 0, - }; - } - - const nodesNumber = nodes.length; - let IDEAL_MAX_DISTANCE_IN_NEIGHBORHOOD; - - if (proximityScoreFunctionsPairId === 2) { - IDEAL_MAX_DISTANCE_IN_NEIGHBORHOOD = HASH_RING_SIZE.div(nodesNumber).mul(10); - } - - const linearSumParams = blockchainModuleManagerMock.getLinearSumParams(blockchain); - const { distanceScaleFactor } = linearSumParams; - const minimumStake = blockchainModuleManagerMock.getMinimumStake(blockchain); - const maximumStake = blockchainModuleManagerMock.getMaximumStake(blockchain); - - for (const key of knowledgeAssets) { - const nodesWithDistances = await Promise.all( - nodes.map(async (node) => { - const distance = await proximityScoringService.callProximityFunction( - blockchain, - proximityScoreFunctionsPairId, - node.sha256, - key, - ); - - return { ...node, distance }; - }), - ); - - const nodesSortedByDistance = nodesWithDistances - .sort((a, b) => a.distance.sub(b.distance)) - .slice(0, r2); - - const maxDistanceInNeighborhood = - nodesSortedByDistance[nodesSortedByDistance.length - 1].distance; - const maxDistance = - maxDistanceInNeighborhood > IDEAL_MAX_DISTANCE_IN_NEIGHBORHOOD - ? IDEAL_MAX_DISTANCE_IN_NEIGHBORHOOD - : maxDistanceInNeighborhood; - - for (const node of nodesSortedByDistance) { - replicas[node.nodeId].replicated += 1; - } - - const nodesWithScores = await Promise.all( - nodesSortedByDistance.map(async (node) => { - const score = await proximityScoringService.callScoreFunction( - blockchain, - proximityScoreFunctionsPairId, - node.distance, - node.stake, - maxDistance, - r2, - nodesNumber, - minimumStake, - maximumStake, - ); - - let dividend = node.distance; - let divisor = maxDistance; - if (dividend.gt(UINT128_MAX_BN) || divisor.gt(UINT128_MAX_BN)) { - dividend = dividend.div(distanceScaleFactor); - divisor = divisor.div(distanceScaleFactor); - } - - const divResult = dividend.mul(distanceScaleFactor).div(divisor); - - const mappedDistance = - parseFloat(divResult.toString()) / parseFloat(distanceScaleFactor.toString()); - const mappedStake = (node.stake - minimumStake) / (maximumStake - minimumStake); - - metrics.push({ nodeId: node.nodeId, mappedDistance, mappedStake, score }); - - return { ...node, score }; - }), - ); - - const nodesSortedByScore = nodesWithScores.sort((a, b) => b.score - a.score); - - for (const [index, node] of nodesSortedByScore.entries()) { - if (index < r0) { - replicas[node.nodeId].won += 1; - } else { - break; - } - } - } - - generateScatterPlot( - Object.values(replicas), - 'replicated', - `${mode}-${nodes.length}-${numberOfKAs}-${proximityScoreFunctionsPairId}-stake-replications-relation`, - ); - generateScatterPlot( - Object.values(replicas), - 'won', - `${mode}-${nodes.length}-${numberOfKAs}-${proximityScoreFunctionsPairId}-stake-wins-relation`, - ); - - generateBoxPlot( - metrics, - 'mappedDistance', - `${mode}-${nodes.length}-${numberOfKAs}-${proximityScoreFunctionsPairId}-mapped-distances-distribution`, - ); - generateBoxPlot( - metrics, - 'score', - `${mode}-${nodes.length}-${numberOfKAs}-${proximityScoreFunctionsPairId}-scores-distribution`, - ); -} - -const args = process.argv.slice(2); -const mode = args[0]; -const filePath = mode === 'load' ? args[1] : undefined; -const numberOfNodes = mode === 'generate' ? parseInt(args[1], 10) : undefined; -const numberOfKAs = parseInt(args[2], 10); -const proximityScoreFunctionsPairId = parseInt(args[3], 10); - -logger.info(`mode: ${mode}`); -logger.info(`filePath: ${filePath}`); -logger.info(`numberOfNodes: ${numberOfNodes}`); -logger.info(`numberOfKAs: ${numberOfKAs}`); -logger.info(`proximityScoreFunctionsPairId: ${proximityScoreFunctionsPairId}`); - -if ( - (mode === 'load' && !filePath) || - (mode === 'generate' && numberOfNodes === undefined) || - numberOfKAs === undefined || - proximityScoreFunctionsPairId === undefined -) { - logger.error('Incorrect arguments. Please provide the correct format.'); - logger.error( - 'To load nodes list from the JSON file: node simulate.js load ', - ); - logger.error( - 'To generate random nodes: node simulate.js generate ', - ); -} else { - runSimulation(mode, filePath, numberOfNodes, numberOfKAs, proximityScoreFunctionsPairId).catch( - (error) => logger.error(`Simulation error: ${error.stack}`), - ); -} diff --git a/tools/local-network-setup/.origintrail_noderc_template.json b/tools/local-network-setup/.origintrail_noderc_template.json index 6b976bfe90..9beb566dad 100644 --- a/tools/local-network-setup/.origintrail_noderc_template.json +++ b/tools/local-network-setup/.origintrail_noderc_template.json @@ -27,15 +27,15 @@ "package": "./triple-store/implementation/ot-blazegraph/ot-blazegraph.js", "config": { "repositories": { - "privateCurrent": { + "dkg": { "url": "http://localhost:9999", - "name": "private-current", + "name": "dkg", "username": "admin", "password": "" }, - "privateHistory": { + "privateCurrent": { "url": "http://localhost:9999", - "name": "private-history", + "name": "private-current", "username": "admin", "password": "" }, @@ -44,12 +44,6 @@ "name": "public-current", "username": "admin", "password": "" - }, - "publicHistory": { - "url": "http://localhost:9999", - "name": "public-history", - "username": "admin", - "password": "" } } } @@ -59,27 +53,9 @@ "package": "./triple-store/implementation/ot-fuseki/ot-fuseki.js", "config": { "repositories": { - "privateCurrent": { + "dkg": { "url": "http://localhost:3030", - "name": "private-current", - "username": "admin", - "password": "" - }, - "privateHistory": { - "url": "http://localhost:3030", - "name": "private-history", - "username": "admin", - "password": "" - }, - "publicCurrent": { - "url": "http://localhost:3030", - "name": "public-current", - "username": "admin", - "password": "" - }, - "publicHistory": { - "url": "http://localhost:3030", - "name": "public-history", + "name": "dkg", "username": "admin", "password": "" } @@ -91,27 +67,9 @@ "package": "./triple-store/implementation/ot-graphdb/ot-graphdb.js", "config": { "repositories": { - "privateCurrent": { + "dkg": { "url": "http://localhost:7200", - "name": "private-current", - "username": "admin", - "password": "" - }, - "privateHistory": { - "url": "http://localhost:7200", - "name": "private-history", - "username": "admin", - "password": "" - }, - "publicCurrent": { - "url": "http://localhost:7200", - "name": "public-current", - "username": "admin", - "password": "" - }, - "publicHistory": { - "url": "http://localhost:7200", - "name": "public-history", + "name": "dkg", "username": "admin", "password": "" } @@ -162,6 +120,26 @@ } } } + }, + "blockchainEvents": { + "enabled": true, + "implementation": { + "ot-ethers": { + "enabled": true, + "package": "./blockchain-events/implementation/ot-ethers/ot-ethers.js", + "config": { + "blockchains": ["hardhat1:31337", "hardhat2:31337"], + "rpcEndpoints": { + "hardhat1:31337": ["http://localhost:8545"], + "hardhat2:31337": ["http://localhost:9545"] + }, + "hubContractAddress": { + "hardhat1:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "hardhat2:31337": "0x5FbDB2315678afecb367f032d93F642f64180aa3" + } + } + } + } } }, "auth": { diff --git a/tools/local-network-setup/README.md b/tools/local-network-setup/README.md index ef5a075faf..74736f6f92 100644 --- a/tools/local-network-setup/README.md +++ b/tools/local-network-setup/README.md @@ -1,6 +1,6 @@ # DKG local network setup tool -This tool will help you set up a local DKG v6 network running with the Hardhat blockchain. It is useful for development and testing purposes and is used internally by the OriginTrail core developers. +This tool will help you set up a local DKG V8 network running with the Hardhat blockchain. It is useful for development and testing purposes and is used internally by the OriginTrail core developers.
**Note: This tool is an internal tool used by the OriginTrail team and thus is developed for our workflow, meaning that it currently only supports MacOS and Linux**, but we encourage you to adapt it for your workflow as well. @@ -10,7 +10,7 @@ This tool will help you set up a local DKG v6 network running with the Hardhat b - An installed and running triplestore (graph database) - We recommend testing with Blazegraph. In order to download Blazegraph, please visit their official [website](https://blazegraph.com/). Alternatively other triple stores can be used (GraphBD or and other RDF native graph databases) - An installed and running MySQL server -- You should have installed npm and Node.js (v16) +- You should have installed npm and Node.js (v20) # Setup instructions @@ -19,7 +19,7 @@ In order to run the local network you fist need to clone the "ot-node" repositor ## 1. CLONE OT-NODE REPOSITORY & INSTALL DEPENDENCIES -After cloning the **ot-node** repository, please checkout to "v6/develop" branch and install dependencies by running: +After cloning the **ot-node** repository, please checkout to "v8/develop" branch and install dependencies by running: ```bash git clone https://github.com/OriginTrail/ot-node.git && cd ot-node/ && npm install && cd .. diff --git a/tools/local-network-setup/generate-config-files.js b/tools/local-network-setup/generate-config-files.js index 1d9bf3cada..86abba9de3 100644 --- a/tools/local-network-setup/generate-config-files.js +++ b/tools/local-network-setup/generate-config-files.js @@ -122,8 +122,7 @@ function generateBlockchainConfig(templateBlockchainConfig, nodeIndex) { ], evmManagementWalletPublicKey: publicKeysManagementWallet[nodeIndex + 1], evmManagementWalletPrivateKey: privateKeysManagementWallet[nodeIndex + 1], - sharesTokenName: `LocalNode${nodeIndex + 1}`, - sharesTokenSymbol: `LN${nodeIndex + 1}`, + nodeName: `LocalNode${nodeIndex + 1}`, }; // TODO: Don't use string diff --git a/tools/local-network-setup/setup-linux-environment.sh b/tools/local-network-setup/setup-linux-environment.sh index 6aba854ee5..0726f59798 100755 --- a/tools/local-network-setup/setup-linux-environment.sh +++ b/tools/local-network-setup/setup-linux-environment.sh @@ -48,13 +48,13 @@ then echo ================================ echo ====== Starting hardhat1 ====== echo ================================ - sh -c "cd $pathToOtNode && node tools/local-network-setup/run-local-blockchain.js 8545 :v2" & + sh -c "cd $pathToOtNode && node tools/local-network-setup/run-local-blockchain.js 8545 " & echo Waiting for hardhat to start and contracts deployment echo ================================ echo ====== Starting hardhat 2 ====== echo ================================ - sh -c "cd $pathToOtNode && node tools/local-network-setup/run-local-blockchain.js 9545 :v2" & + sh -c "cd $pathToOtNode && node tools/local-network-setup/run-local-blockchain.js 9545 " & echo Waiting for hardhat to start and contracts deployment fi diff --git a/tools/local-network-setup/setup-macos-environment.sh b/tools/local-network-setup/setup-macos-environment.sh index b7f0dba41a..2238d3757e 100755 --- a/tools/local-network-setup/setup-macos-environment.sh +++ b/tools/local-network-setup/setup-macos-environment.sh @@ -51,7 +51,7 @@ then osascript -e "tell app \"Terminal\" do script \"cd $pathToOtNode - node tools/local-network-setup/run-local-blockchain.js 8545 :v2\" + node tools/local-network-setup/run-local-blockchain.js 8545 \" end tell" echo Waiting for hardhat to start and contracts deployment @@ -61,7 +61,7 @@ then osascript -e "tell app \"Terminal\" do script \"cd $pathToOtNode - node tools/local-network-setup/run-local-blockchain.js 9545 :v2\" + node tools/local-network-setup/run-local-blockchain.js 9545 \" end tell" echo Waiting for hardhat to start and contracts deployment fi diff --git a/v8-data-migration/abi/ContentAssetStorage.json b/v8-data-migration/abi/ContentAssetStorage.json new file mode 100644 index 0000000000..b93183199d --- /dev/null +++ b/v8-data-migration/abi/ContentAssetStorage.json @@ -0,0 +1,706 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "hubAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "assetAssertionId", + "type": "bytes32" + } + ], + "name": "assertionExists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "deleteAssertionIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "deleteAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "generateTokenId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAssertionIdByIndex", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getAssertionIds", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getAssertionIdsLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "assertionIndex", + "type": "uint256" + } + ], + "name": "getAssertionIssuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getAsset", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "immutable_", + "type": "bool" + }, + { + "internalType": "bytes32[]", + "name": "assertionIds", + "type": "bytes32[]" + } + ], + "internalType": "struct ContentAssetStructs.Asset", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getLatestAssertionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hub", + "outputs": [ + { + "internalType": "contract Hub", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isMutable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "issuers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + } + ], + "name": "pushAssertionId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "setAssertionIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "immutable_", + "type": "bool" + } + ], + "name": "setMutability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/v8-data-migration/abi/ContentAssetStorageV2.json b/v8-data-migration/abi/ContentAssetStorageV2.json new file mode 100644 index 0000000000..418789efdc --- /dev/null +++ b/v8-data-migration/abi/ContentAssetStorageV2.json @@ -0,0 +1,782 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "hubAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "NoMintedAssets", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_fromTokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_toTokenId", + "type": "uint256" + } + ], + "name": "BatchMetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "assetAssertionId", + "type": "bytes32" + } + ], + "name": "assertionExists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "deleteAssertionIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "deleteAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "generateTokenId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAssertionIdByIndex", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getAssertionIds", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getAssertionIdsLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "assertionIndex", + "type": "uint256" + } + ], + "name": "getAssertionIssuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getAsset", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "immutable_", + "type": "bool" + }, + { + "internalType": "bytes32[]", + "name": "assertionIds", + "type": "bytes32[]" + } + ], + "internalType": "struct ContentAssetStructs.Asset", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getLatestAssertionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hub", + "outputs": [ + { + "internalType": "contract Hub", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isMutable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "issuers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastTokenId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + } + ], + "name": "pushAssertionId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "assertionId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "setAssertionIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "immutable_", + "type": "bool" + } + ], + "name": "setMutability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tokenBaseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/v8-data-migration/blockchain-utils.js b/v8-data-migration/blockchain-utils.js new file mode 100644 index 0000000000..fdc81cf1ab --- /dev/null +++ b/v8-data-migration/blockchain-utils.js @@ -0,0 +1,94 @@ +import { ethers } from 'ethers'; +import { BLOCKCHAINS, ABIs, CONTENT_ASSET_STORAGE_CONTRACT } from './constants.js'; +import { + validateProvider, + validateStorageContractAddress, + validateStorageContractName, + validateStorageContractAbi, + validateBlockchainDetails, +} from './validation.js'; +import logger from './logger.js'; + +function maskRpcUrl(url) { + // Validation + if (!url || typeof url !== 'string') { + throw new Error(`URL is not defined or it is not a string. URL: ${url}`); + } + + if (url.includes('apiKey')) { + return url.split('apiKey')[0]; + } + return url; +} + +// Initialize rpc +export async function initializeRpc(rpcEndpoint) { + // Validation + if (!rpcEndpoint || typeof rpcEndpoint !== 'string') { + logger.error( + `RPC endpoint is not defined or it is not a string. RPC endpoint: ${rpcEndpoint}`, + ); + process.exit(1); + } + // initialize all possible providers + const Provider = ethers.providers.JsonRpcProvider; + + try { + const provider = new Provider(rpcEndpoint); + // eslint-disable-next-line no-await-in-loop + await provider.getNetwork(); + logger.info(`Connected to the blockchain RPC: ${maskRpcUrl(rpcEndpoint)}.`); + return provider; + } catch (e) { + logger.error(`Unable to connect to the blockchain RPC: ${maskRpcUrl(rpcEndpoint)}.`); + process.exit(1); + } +} + +export async function getStorageContractAndAddress( + provider, + storageContractAddress, + storageContractName, + storageContractAbi, +) { + // Validation + validateProvider(provider); + validateStorageContractAddress(storageContractAddress); + validateStorageContractName(storageContractName); + validateStorageContractAbi(storageContractAbi); + + logger.info( + `Initializing asset contract: ${storageContractName} with address: ${storageContractAddress}`, + ); + // initialize asset contract + const storageContract = new ethers.Contract( + storageContractAddress, + storageContractAbi, + provider, + ); + + logger.info( + `Contract ${storageContractName} initialized with address: ${storageContractAddress}`, + ); + return storageContract; +} + +export async function getContentAssetStorageContract(provider, blockchainDetails) { + // Validation + validateProvider(provider); + validateBlockchainDetails(blockchainDetails); + + const contentAssetStorageContarct = + blockchainDetails.NAME === BLOCKCHAINS.NEUROWEB_TESTNET.NAME || + blockchainDetails.NAME === BLOCKCHAINS.NEUROWEB_MAINNET.NAME + ? ABIs.ContentAssetStorage + : ABIs.ContentAssetStorageV2; + const storageContract = await getStorageContractAndAddress( + provider, + blockchainDetails.CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS, + CONTENT_ASSET_STORAGE_CONTRACT, + contentAssetStorageContarct, + ); + + return storageContract; +} diff --git a/v8-data-migration/constants.js b/v8-data-migration/constants.js new file mode 100644 index 0000000000..b467e701d8 --- /dev/null +++ b/v8-data-migration/constants.js @@ -0,0 +1,94 @@ +import { createRequire } from 'module'; + +// Triple store constants +export const SCHEMA_CONTEXT = 'http://schema.org/'; +export const METADATA_NAMED_GRAPH = 'metadata:graph'; +export const PRIVATE_ASSERTION_ONTOLOGY = + ''; +export const TRIPLE_STORE_CONNECT_MAX_RETRIES = 10; +export const TRIPLE_STORE_CONNECT_RETRY_FREQUENCY = 10; +export const N_QUADS = 'application/n-quads'; +export const OT_BLAZEGRAPH = 'ot-blazegraph'; +export const OT_FUSEKI = 'ot-fuseki'; +export const OT_GRAPHDB = 'ot-graphdb'; +export const PRIVATE_CURRENT = 'privateCurrent'; +export const PUBLIC_CURRENT = 'publicCurrent'; +export const DKG_REPOSITORY = 'dkg'; +export const VISIBILITY = { + PUBLIC: 'public', + PRIVATE: 'private', +}; +export const BATCH_SIZE = 50; + +export const DEFAULT_CONFIG_PATH = '/root/ot-node/current/config/config.json'; +export const NODERC_CONFIG_PATH = '/root/ot-node/.origintrail_noderc'; +export const DATA_MIGRATION_DIR = '/root/ot-node/data/data-migration'; +export const LOG_DIR = '/root/ot-node/data/data-migration/logs'; +export const ENV_PATH = '/root/ot-node/current/.env'; +export const MIGRATION_DIR = '/root/ot-node/data/migrations/'; +export const MIGRATION_PROGRESS_FILE = 'v8DataMigration'; + +export const DB_URLS = { + testnet: 'https://hosting.origin-trail.network/csv/testnet.db', + mainnet: 'https://hosting.origin-trail.network/csv/mainnet.db', +}; + +const require = createRequire(import.meta.url); + +export const ABIs = { + ContentAssetStorageV2: require('./abi/ContentAssetStorageV2.json'), + ContentAssetStorage: require('./abi/ContentAssetStorage.json'), +}; + +export const BLOCKCHAINS = { + BASE_DEVNET: { + ID: 'base:84532', + ENV: 'devnet', + NAME: 'base_devnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0xBe08A25dcF2B68af88501611e5456571f50327B4', + }, + BASE_TESTNET: { + ID: 'base:84532', + ENV: 'testnet', + NAME: 'base_testnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0x9e3071Dc0730CB6dd0ce42969396D716Ea33E7e1', + }, + BASE_MAINNET: { + ID: 'base:8453', + ENV: 'mainnet', + NAME: 'base_mainnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0x3bdfA81079B2bA53a25a6641608E5E1E6c464597', + }, + GNOSIS_DEVNET: { + ID: 'gnosis:10200', + ENV: 'devnet', + NAME: 'gnosis_devnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0x3db64dD0Ac054610d1e2Af9Cca0fbCB1A7f4C2d8', + }, + GNOSIS_TESTNET: { + ID: 'gnosis:10200', + ENV: 'testnet', + NAME: 'gnosis_testnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0xeA3423e02c8d231532dab1BCE5D034f3737B3638', + }, + GNOSIS_MAINNET: { + ID: 'gnosis:100', + ENV: 'mainnet', + NAME: 'gnosis_mainnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0xf81a8C0008DE2DCdb73366Cf78F2b178616d11DD', + }, + NEUROWEB_TESTNET: { + ID: 'otp:20430', + ENV: 'testnet', + NAME: 'neuroweb_testnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0x1A061136Ed9f5eD69395f18961a0a535EF4B3E5f', + }, + NEUROWEB_MAINNET: { + ID: 'otp:2043', + ENV: 'mainnet', + NAME: 'neuroweb_mainnet', + CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS: '0x5cAC41237127F94c2D21dAe0b14bFeFa99880630', + }, +}; + +export const CONTENT_ASSET_STORAGE_CONTRACT = 'ContentAssetStorage'; diff --git a/v8-data-migration/logger.js b/v8-data-migration/logger.js new file mode 100644 index 0000000000..10a1e07d31 --- /dev/null +++ b/v8-data-migration/logger.js @@ -0,0 +1,67 @@ +import pino from 'pino'; +import fs from 'fs'; +import { LOG_DIR } from './constants.js'; + +// Ensure logs directory exists +if (!fs.existsSync(LOG_DIR)) { + fs.mkdirSync(LOG_DIR, { recursive: true }); + + if (!fs.existsSync(LOG_DIR)) { + throw new Error( + `Something went wrong. Directory: ${LOG_DIR} does not exist after creation.`, + ); + } +} + +const timers = new Map(); + +const baseLogger = pino({ + transport: { + targets: [ + { + target: 'pino-pretty', + level: 'info', + options: { + colorize: true, + translateTime: 'yyyy-mm-dd HH:MM:ss', + }, + }, + { + target: 'pino-pretty', + level: 'info', + options: { + destination: `${LOG_DIR}/migration.log`, + colorize: false, + translateTime: 'yyyy-mm-dd HH:MM:ss', + }, + }, + ], + }, +}); + +// Create enhanced logger with proper method binding +const logger = { + // Bind all methods from the base logger + info: baseLogger.info.bind(baseLogger), + error: baseLogger.error.bind(baseLogger), + warn: baseLogger.warn.bind(baseLogger), + debug: baseLogger.debug.bind(baseLogger), + + // Add our custom timing methods + time(label) { + timers.set(label, performance.now()); + }, + timeEnd(label) { + const start = timers.get(label); + if (!start) { + this.warn(`Timer '${label}' does not exist`); + return; + } + const duration = (performance.now() - start).toFixed(3); + timers.delete(label); + this.info(`${label}: ${duration}ms`); + return duration; + }, +}; + +export default logger; diff --git a/v8-data-migration/run-data-migration.sh b/v8-data-migration/run-data-migration.sh new file mode 100644 index 0000000000..3b8d1c243b --- /dev/null +++ b/v8-data-migration/run-data-migration.sh @@ -0,0 +1,3 @@ +cd /root/ot-node/current/v8-data-migration/ && +npm rebuild sqlite3 && +nohup node v8-data-migration.js > /root/ot-node/data/nohup.out 2>&1 & \ No newline at end of file diff --git a/v8-data-migration/sqlite-utils.js b/v8-data-migration/sqlite-utils.js new file mode 100644 index 0000000000..3bc682fb22 --- /dev/null +++ b/v8-data-migration/sqlite-utils.js @@ -0,0 +1,143 @@ +import sqlite3 from 'sqlite3'; +import { open } from 'sqlite'; +import path from 'path'; +import { DATA_MIGRATION_DIR } from './constants.js'; +import logger from './logger.js'; + +export class SqliteDatabase { + constructor() { + this.db = null; + } + + async initialize() { + if (this.db) { + return; + } + + const dbPath = path.join(DATA_MIGRATION_DIR, `${process.env.NODE_ENV}.db`); + + this.db = await open({ + filename: dbPath, + driver: sqlite3.Database, + }); + + if (!this.db) { + logger.error('Failed to initialize SQLite database'); + process.exit(1); + } + } + + async getTableExists(blockchainName) { + this._validateConnection(); + this._validateBlockchainName(blockchainName); + + const tableExists = await this.db.get( + `SELECT name FROM sqlite_master WHERE type='table' AND name=?`, + [blockchainName], + ); + + return tableExists; + } + + async getBatchOfUnprocessedTokenIds(blockchainName, batchSize) { + this._validateConnection(); + this._validateBlockchainName(blockchainName); + + const rows = await this.db.all( + ` + SELECT token_id, ual, assertion_id + FROM ${blockchainName} + WHERE processed = 0 + LIMIT ? + `, + batchSize, + ); + + const batchData = {}; + rows.forEach((row) => { + batchData[row.token_id] = { + ual: row.ual, + assertionId: row.assertion_id, + processed: 'false', + }; + }); + + return batchData; + } + + async markRowsAsProcessed(blockchainName, tokenIds) { + this._validateConnection(); + this._validateBlockchainName(blockchainName); + + const placeholders = tokenIds.map(() => '?').join(','); + await this.db.run( + ` + UPDATE ${blockchainName} + SET processed = 1 + WHERE token_id IN (${placeholders}) + `, + tokenIds, + ); + } + + async getHighestTokenId(blockchainName) { + this._validateConnection(); + this._validateBlockchainName(blockchainName); + + const result = await this.db.get(`SELECT MAX(token_id) as max_id FROM ${blockchainName}`); + return result.max_id; + } + + async getUnprocessedCount(blockchainName) { + this._validateConnection(); + this._validateBlockchainName(blockchainName); + + const result = await this.db.get(` + SELECT COUNT(*) as count + FROM ${blockchainName} + WHERE processed = 0 + `); + return result.count; + } + + async insertAssertion(blockchainName, tokenId, ual, assertionId) { + this._validateConnection(); + this._validateBlockchainName(blockchainName); + + try { + await this.db.run( + `INSERT OR IGNORE INTO ${blockchainName} (token_id, ual, assertion_id, processed) VALUES (?, ?, ?, 1)`, + [tokenId, ual, assertionId], + ); + return true; + } catch (error) { + logger.error(`Error inserting assertion into ${blockchainName} table:`, error.message); + return false; + } + } + + async close() { + if (this.db) { + await this.db.close(); + this.db = null; + } + } + + _validateConnection() { + if (!this.db) { + logger.error('Database not initialized. Call initialize() first.'); + process.exit(1); + } + } + + _validateBlockchainName(blockchainName) { + if (!blockchainName) { + logger.error('Blockchain name is required'); + process.exit(1); + } + } +} + +// Export a single instance +const sqliteDb = new SqliteDatabase(); +export default sqliteDb; diff --git a/v8-data-migration/triple-store-utils.js b/v8-data-migration/triple-store-utils.js new file mode 100644 index 0000000000..8e68989bde --- /dev/null +++ b/v8-data-migration/triple-store-utils.js @@ -0,0 +1,697 @@ +import { setTimeout } from 'timers/promises'; +import axios from 'axios'; +import { + OT_BLAZEGRAPH, + OT_FUSEKI, + OT_GRAPHDB, + N_QUADS, + SCHEMA_CONTEXT, + PRIVATE_ASSERTION_ONTOLOGY, + PUBLIC_CURRENT, + PRIVATE_CURRENT, + DKG_REPOSITORY, + VISIBILITY, + METADATA_NAMED_GRAPH, + TRIPLE_STORE_CONNECT_MAX_RETRIES, + TRIPLE_STORE_CONNECT_RETRY_FREQUENCY, +} from './constants.js'; +import { + validateTripleStoreConfig, + validateTripleStoreRepositories, + validateTripleStoreImplementation, + validateRepository, + validateQuery, + validateAssertionId, + validateTokenId, + validateAssertion, + validateUal, +} from './validation.js'; +import logger from './logger.js'; + +export function getTripleStoreData(tripleStoreConfig) { + // Validation + validateTripleStoreConfig(tripleStoreConfig); + + let tripleStoreImplementation; + const tripleStoreRepositories = {}; + + for (const [implementationName, implementationDetails] of Object.entries( + tripleStoreConfig.implementation, + )) { + if (implementationDetails.enabled) { + tripleStoreImplementation = implementationName; + for (const [repository, repositoryDetails] of Object.entries( + implementationDetails.config.repositories, + )) { + if ( + repository === PRIVATE_CURRENT || + repository === PUBLIC_CURRENT || + repository === DKG_REPOSITORY + ) { + tripleStoreRepositories[repository] = repositoryDetails; + } + } + break; + } + } + + return { tripleStoreImplementation, tripleStoreRepositories }; +} + +// Initialize sparql endpoints +function initializeSparqlEndpoints(tripleStoreRepositories, repository, tripleStoreImplementation) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateTripleStoreImplementation(tripleStoreImplementation); + + const { url, name } = tripleStoreRepositories[repository]; + const updatedTripleStoreRepositories = tripleStoreRepositories; + + switch (tripleStoreImplementation) { + case OT_BLAZEGRAPH: + updatedTripleStoreRepositories[ + repository + ].sparqlEndpoint = `${url}/blazegraph/namespace/${name}/sparql`; + updatedTripleStoreRepositories[ + repository + ].sparqlEndpointUpdate = `${url}/blazegraph/namespace/${name}/sparql`; + break; + case OT_FUSEKI: + updatedTripleStoreRepositories[repository].sparqlEndpoint = `${url}/${name}/sparql`; + updatedTripleStoreRepositories[ + repository + ].sparqlEndpointUpdate = `${url}/${name}/update`; + break; + case OT_GRAPHDB: + updatedTripleStoreRepositories[ + repository + ].sparqlEndpoint = `${url}/repositories/${name}`; + updatedTripleStoreRepositories[ + repository + ].sparqlEndpointUpdate = `${url}/repositories/${name}/statements`; + break; + default: + throw new Error('Invalid triple store name in initializeSparqlEndpoints'); + } + + return updatedTripleStoreRepositories; +} + +export function initializeRepositories(tripleStoreRepositories, tripleStoreImplementation) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateTripleStoreImplementation(tripleStoreImplementation); + + let updatedTripleStoreRepositories = tripleStoreRepositories; + for (const repository in tripleStoreRepositories) { + logger.info(`Initializing a triple store repository: ${repository}`); + updatedTripleStoreRepositories = initializeSparqlEndpoints( + updatedTripleStoreRepositories, + repository, + tripleStoreImplementation, + ); + } + + return updatedTripleStoreRepositories; +} + +export function initializeContexts(tripleStoreRepositories) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + + const updatedTripleStoreRepositories = tripleStoreRepositories; + + for (const repository in updatedTripleStoreRepositories) { + const sources = [ + { + type: 'sparql', + value: updatedTripleStoreRepositories[repository].sparqlEndpoint, + }, + ]; + + updatedTripleStoreRepositories[repository].updateContext = { + sources, + destination: { + type: 'sparql', + value: updatedTripleStoreRepositories[repository].sparqlEndpointUpdate, + }, + }; + updatedTripleStoreRepositories[repository].queryContext = { + sources, + }; + } + + return updatedTripleStoreRepositories; +} + +export async function healthCheck(tripleStoreRepositories, repository, tripleStoreImplementation) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateTripleStoreImplementation(tripleStoreImplementation); + + switch (tripleStoreImplementation) { + case OT_BLAZEGRAPH: { + try { + const response = await axios.get( + `${tripleStoreRepositories[repository].url}/blazegraph/status`, + {}, + ); + if (response.data !== null) { + return true; + } + return false; + } catch (e) { + logger.error(`Health check failed for repository ${repository}:`, e); + return false; + } + } + case OT_FUSEKI: { + try { + const response = await axios.get( + `${tripleStoreRepositories[repository].url}/$/ping`, + {}, + ); + if (response.data !== null) { + return true; + } + return false; + } catch (e) { + logger.error(`Health check failed for repository ${repository}:`, e); + return false; + } + } + case OT_GRAPHDB: { + const { url, username, password } = tripleStoreRepositories[repository]; + try { + const response = await axios.get( + `${url}/repositories/${repository}/health`, + {}, + { + auth: { + username, + password, + }, + }, + ); + if (response.data.status === 'green') { + return true; + } + return false; + } catch (e) { + if (e.response && e.response.status === 404) { + // Expected error: GraphDB is up but has not created node0 repository + // Ot-node will create repo in initialization + return true; + } + logger.error(`Health check failed for repository ${repository}:`, e); + return false; + } + } + default: + throw new Error('Invalid triple store name in healthCheck'); + } +} + +export async function ensureConnections(tripleStoreRepositories, tripleStoreImplementation) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateTripleStoreImplementation(tripleStoreImplementation); + + const ensureConnectionPromises = Object.keys(tripleStoreRepositories).map( + async (repository) => { + let ready = await healthCheck( + tripleStoreRepositories, + repository, + tripleStoreImplementation, + ); + let retries = 0; + while (!ready && retries < TRIPLE_STORE_CONNECT_MAX_RETRIES) { + retries += 1; + logger.warn( + `Cannot connect to Triple store repository: ${repository}, located at: ${tripleStoreRepositories[repository].url} retry number: ${retries}/${TRIPLE_STORE_CONNECT_MAX_RETRIES}. Retrying in ${TRIPLE_STORE_CONNECT_RETRY_FREQUENCY} seconds.`, + ); + /* eslint-disable no-await-in-loop */ + await setTimeout(TRIPLE_STORE_CONNECT_RETRY_FREQUENCY * 1000); + ready = await healthCheck( + tripleStoreRepositories, + repository, + tripleStoreImplementation, + ); + } + if (retries === TRIPLE_STORE_CONNECT_MAX_RETRIES) { + logger.error( + `Triple Store repository: ${repository} not available, max retries reached.`, + ); + process.exit(1); + } + }, + ); + + await Promise.all(ensureConnectionPromises); +} + +// blazegraph only +function hasUnicodeCodePoints(input) { + const unicodeRegex = /(? { + const codePoint = parseInt(hex, 16); + return String.fromCodePoint(codePoint); + }); + + return decodedString; +} + +export async function _executeQuery( + tripleStoreRepositories, + repository, + tripleStoreImplementation, + query, + mediaType, +) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateTripleStoreImplementation(tripleStoreImplementation); + validateQuery(query); + + if (!mediaType) { + logger.error(`[VALIDATION ERROR] Media type is not defined. Media type: ${mediaType}`); + process.exit(1); + } + + const response = await axios.post( + tripleStoreRepositories[repository].sparqlEndpoint, + new URLSearchParams({ + query, + }), + { + headers: { + Accept: mediaType, + }, + }, + ); + + let { data } = response; + + if (tripleStoreImplementation === OT_BLAZEGRAPH) { + // Handle Blazegraph special characters corruption + if (hasUnicodeCodePoints(data)) { + data = decodeUnicodeCodePoints(data); + } + } + + return data; +} + +export async function construct( + tripleStoreRepositories, + repository, + tripleStoreImplementation, + query, +) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateTripleStoreImplementation(tripleStoreImplementation); + validateQuery(query); + + return _executeQuery( + tripleStoreRepositories, + repository, + tripleStoreImplementation, + query, + N_QUADS, + ); +} + +function cleanEscapeCharacter(query) { + return query.replace(/['|[\]\\]/g, '\\$&'); +} + +export async function getAssertion( + tripleStoreRepositories, + repository, + tripleStoreImplementation, + assertionId, +) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateTripleStoreImplementation(tripleStoreImplementation); + validateAssertionId(assertionId); + + const escapedGraphName = cleanEscapeCharacter(assertionId); + const query = `PREFIX schema: <${SCHEMA_CONTEXT}> + CONSTRUCT { ?s ?p ?o } + WHERE { + { + GRAPH + { + ?s ?p ?o . + } + } + }`; + return construct(tripleStoreRepositories, repository, tripleStoreImplementation, query); +} + +export function extractPrivateAssertionId(publicAssertion) { + // Validation + validateAssertion(publicAssertion); + + const split = publicAssertion.split(PRIVATE_ASSERTION_ONTOLOGY); + if (split.length <= 1 || !split[1].includes('"') || !split[1].includes('0x')) { + return null; + } + const input = split[1]; + const openingQuoteIndex = input.indexOf('"') + 1; + const closingQuoteIndex = input.indexOf('"', openingQuoteIndex); + const privateAssertionId = input.substring(openingQuoteIndex, closingQuoteIndex).trim(); + if (!privateAssertionId || !privateAssertionId.includes('0x')) { + return null; + } + return privateAssertionId; +} + +export async function getAssertionFromV6TripleStore( + tripleStoreRepositories, + tripleStoreImplementation, + tokenId, + ualAssertionIdData, +) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateTripleStoreImplementation(tripleStoreImplementation); + validateTokenId(tokenId); + + if ( + !ualAssertionIdData || + typeof ualAssertionIdData !== 'object' || + !ualAssertionIdData.assertionId || + !ualAssertionIdData.ual + ) { + logger.error( + `[VALIDATION ERROR] Ual assertion ID data is not properly defined or it is not an object. Ual assertion ID data: ${ualAssertionIdData}`, + ); + process.exit(1); + } + + const { assertionId, ual } = ualAssertionIdData; + let success = false; + let publicAssertion = null; + let privateAssertion = null; + + try { + // First try to fetch public data from private current repository + publicAssertion = await getAssertion( + tripleStoreRepositories, + PRIVATE_CURRENT, + tripleStoreImplementation, + assertionId, + ); + + // Check if public assertion is found in private current repository + if (publicAssertion) { + success = true; + // Check if assertion contains a private assertion + if (publicAssertion.includes(PRIVATE_ASSERTION_ONTOLOGY)) { + // Extract the private assertionId from the publicAssertion if it exists + const privateAssertionId = extractPrivateAssertionId(publicAssertion); + if (!privateAssertionId) { + logger.warn( + `There was a problem while extracting the private assertionId from public assertion: ${publicAssertion}. Extracted privateAssertionId: ${privateAssertionId}`, + ); + success = false; + return { tokenId, ual, publicAssertion, privateAssertion, success }; + } + + privateAssertion = await getAssertion( + tripleStoreRepositories, + PRIVATE_CURRENT, + tripleStoreImplementation, + privateAssertionId, + ); + + // If private assertionId exists but assertion could not be fetched + if (!privateAssertion) { + logger.warn( + `Private assertion with id ${privateAssertionId} could not be fetched from ${PRIVATE_CURRENT} repository even though it should exist`, + ); + } + } + } else { + publicAssertion = await getAssertion( + tripleStoreRepositories, + PUBLIC_CURRENT, + tripleStoreImplementation, + assertionId, + ); + success = true; + } + } catch (e) { + logger.error( + `Error fetching assertion from triple store for tokenId: ${tokenId}, assertionId: ${assertionId}, error: ${e}`, + ); + success = false; + } + + return { + tokenId, + ual, + publicAssertion, + privateAssertion, + success, + assertionId, + }; +} + +export function processContent(str) { + return str + .split('\n') + .map((line) => line.trim()) + .filter((line) => line !== ''); +} + +async function ask(tripleStoreRepositories, repository, query) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateQuery(query); + try { + const response = await axios.post( + tripleStoreRepositories[repository].sparqlEndpoint, + new URLSearchParams({ + query, + }), + { + headers: { + Accept: 'application/json', + }, + }, + ); + + return response.data.boolean; + } catch (e) { + logger.error( + `Error while doing ASK query: ${query} in repository: ${repository}. Error: ${e.message}`, + ); + return false; + } +} + +export async function getKnowledgeCollectionNamedGraphsExist( + tokenId, + tripleStoreRepositories, + knowledgeAssetUal, + privateAssertion, +) { + const askQueries = []; + askQueries.push(` + FILTER EXISTS { + GRAPH <${knowledgeAssetUal}/${VISIBILITY.PUBLIC}> { + ?s ?p ?o + } + } + `); + if (privateAssertion) { + askQueries.push(` + FILTER EXISTS { + GRAPH <${knowledgeAssetUal}/${VISIBILITY.PRIVATE}> { + ?s ?p ?o + } + } + `); + } + askQueries.push(` + FILTER EXISTS { + GRAPH <${METADATA_NAMED_GRAPH}> { + <${knowledgeAssetUal}> ?p ?o . + } + } + `); + + const combinedQuery = ` + ASK { + ${askQueries.join('\n')} + } + `; + + const exists = await ask(tripleStoreRepositories, DKG_REPOSITORY, combinedQuery); + + return { tokenId, exists }; +} + +export async function queryVoid(tripleStoreRepositories, repository, query) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateQuery(query); + + await axios.post(tripleStoreRepositories[repository].sparqlEndpointUpdate, query, { + headers: { + 'Content-Type': 'application/sparql-update', + }, + }); +} + +function hasSpecialCharactersInIRI(assertion) { + const lines = assertion.split('\n'); + // {, }, |, ^, `, and \ without u or U + // eslint-disable-next-line no-useless-escape + const iriPattern = /<[^>]*(?:[\s{}\|^`]|\\(?![uU]))[^>]*>/; + + return lines.some((line) => { + // Split quad into subject, predicate, object (ignore graph if present) + const parts = line.trim().split(' '); + + // Check each part only if it starts with < and ends with > + return parts.some((part) => { + if (part.startsWith('<') && part.endsWith('>')) { + return iriPattern.test(part); + } + return false; + }); + }); +} + +export async function insertAssertionsIntoV8UnifiedRepository( + v6Assertions, + tripleStoreRepositories, +) { + // Insert into new repository + const successfullyProcessed = []; + const assertionsToCheck = []; + const insertQueries = []; + for (const assertion of v6Assertions) { + const { tokenId, ual, publicAssertion, privateAssertion } = assertion; + + // Assertion with assertionId does not exist in triple store. Continue + if (!publicAssertion) { + successfullyProcessed.push(tokenId); + continue; + } + + if (hasSpecialCharactersInIRI(publicAssertion)) { + logger.warn( + `Public assertion with tokenId: ${tokenId} contains illegal characters in IRI. Skipping... + Public assertion: ${publicAssertion}`, + ); + successfullyProcessed.push(tokenId); + continue; + } + + const knowledgeAssetUal = `${ual}/1`; + + const publicNQuads = processContent(publicAssertion); + insertQueries.push(` + GRAPH <${knowledgeAssetUal}/${VISIBILITY.PUBLIC}> { + ${publicNQuads.join('\n')} + } + `); + + if (privateAssertion) { + const privateNQuads = processContent(privateAssertion); + insertQueries.push(` + GRAPH <${knowledgeAssetUal}/${VISIBILITY.PRIVATE}> { + ${privateNQuads.join('\n')} + } + `); + } + + const metadataNQuads = `<${knowledgeAssetUal}> "${knowledgeAssetUal}:0" .`; + insertQueries.push(` + GRAPH <${METADATA_NAMED_GRAPH}> { + ${metadataNQuads} + } + `); + + assertionsToCheck.push(assertion); + } + + if (insertQueries.length > 0) { + const combinedQuery = ` + PREFIX schema: <${SCHEMA_CONTEXT}> + INSERT DATA { + ${insertQueries.join('\n')} + } + `; + + logger.time(`INSERTING ${assertionsToCheck.length} ASSERTIONS INTO V8 TRIPLE STORE`); + await queryVoid(tripleStoreRepositories, DKG_REPOSITORY, combinedQuery); + logger.timeEnd(`INSERTING ${assertionsToCheck.length} ASSERTIONS INTO V8 TRIPLE STORE`); + } + + return { successfullyProcessed, assertionsToCheck }; +} + +export async function knowledgeCollectionNamedGraphExists( + tripleStoreRepositories, + repository, + ual, + visibility, +) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateUal(ual); + if (!visibility || !Object.values(VISIBILITY).includes(visibility)) { + throw new Error( + `Visibility is not defined or it is not a valid visibility. Visibility: ${visibility}`, + ); + } + + const query = ` + ASK { + GRAPH ?g { + ?s ?p ?o + } + FILTER(STRSTARTS(STR(?g), "${ual}/${visibility}")) + } + `; + + return ask(tripleStoreRepositories, repository, query); +} + +export async function knowledgeAssetMetadataExists(tripleStoreRepositories, repository, ual) { + // Validation + validateTripleStoreRepositories(tripleStoreRepositories); + validateRepository(repository); + validateUal(ual); + + const query = ` + ASK { + GRAPH <${METADATA_NAMED_GRAPH}> { + <${ual}> ?p ?o . + } + } + `; + + return ask(tripleStoreRepositories, repository, query); +} diff --git a/v8-data-migration/v8-data-migration-utils.js b/v8-data-migration/v8-data-migration-utils.js new file mode 100644 index 0000000000..2a8f1731c6 --- /dev/null +++ b/v8-data-migration/v8-data-migration-utils.js @@ -0,0 +1,75 @@ +import fs from 'fs'; +import path from 'path'; +import { + NODERC_CONFIG_PATH, + MIGRATION_PROGRESS_FILE, + DEFAULT_CONFIG_PATH, + MIGRATION_DIR, +} from './constants.js'; +import { validateConfig } from './validation.js'; +import logger from './logger.js'; + +export function initializeConfig() { + const configPath = path.resolve(NODERC_CONFIG_PATH); + const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); + validateConfig(config); + return config; +} + +export function initializeDefaultConfig() { + const configPath = path.resolve(DEFAULT_CONFIG_PATH); + const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); + validateConfig(config); + return config; +} + +export function ensureDirectoryExists(dirPath) { + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + logger.info(`Created directory: ${dirPath}`); + + if (!fs.existsSync(dirPath)) { + logger.error( + `Something went wrong. Directory: ${dirPath} does not exist after creation.`, + ); + process.exit(1); + } + } +} + +export function ensureMigrationProgressFileExists() { + ensureDirectoryExists(MIGRATION_DIR); + const migrationProgressFilePath = path.join(MIGRATION_DIR, MIGRATION_PROGRESS_FILE); + + if (!fs.existsSync(migrationProgressFilePath)) { + fs.writeFileSync(migrationProgressFilePath, ''); + logger.info(`Created migration progress file: ${migrationProgressFilePath}`); + if (!fs.existsSync(migrationProgressFilePath)) { + throw new Error( + `Something went wrong. Progress file: ${migrationProgressFilePath} does not exist after creation.`, + ); + } + } else { + logger.info(`Migration progress file already exists: ${migrationProgressFilePath}.`); + logger.info('Checking if migration is already successful...'); + const fileContent = fs.readFileSync(migrationProgressFilePath, 'utf8'); + if (fileContent === 'MIGRATED') { + logger.info('Migration is already successful. Exiting...'); + process.exit(0); + } + } +} + +export function markMigrationAsSuccessfull() { + // Construct the full path to the migration progress file + const migrationProgressFilePath = path.join(MIGRATION_DIR, MIGRATION_PROGRESS_FILE); + + // open file + const file = fs.openSync(migrationProgressFilePath, 'w'); + + // write MIGRATED + fs.writeSync(file, 'MIGRATED'); + + // close file + fs.closeSync(file); +} diff --git a/v8-data-migration/v8-data-migration.js b/v8-data-migration/v8-data-migration.js new file mode 100644 index 0000000000..4eb43361c3 --- /dev/null +++ b/v8-data-migration/v8-data-migration.js @@ -0,0 +1,543 @@ +import path from 'path'; +import fs from 'fs'; +import { createRequire } from 'module'; +import dotenv from 'dotenv'; +import axios from 'axios'; +import { BATCH_SIZE, ENV_PATH, BLOCKCHAINS, DATA_MIGRATION_DIR, DB_URLS } from './constants.js'; +import { + initializeConfig, + initializeDefaultConfig, + ensureDirectoryExists, + ensureMigrationProgressFileExists, + markMigrationAsSuccessfull, +} from './v8-data-migration-utils.js'; +import { + getAssertionFromV6TripleStore, + insertAssertionsIntoV8UnifiedRepository, + getTripleStoreData, + initializeRepositories, + initializeContexts, + ensureConnections, + getKnowledgeCollectionNamedGraphsExist, +} from './triple-store-utils.js'; +import { getContentAssetStorageContract, initializeRpc } from './blockchain-utils.js'; +import { + validateBlockchainName, + validateBlockchainDetails, + validateTokenId, + validateTripleStoreRepositories, + validateTripleStoreImplementation, + validateBatchData, +} from './validation.js'; +import sqliteDb from './sqlite-utils.js'; +import logger from './logger.js'; + +dotenv.config({ path: ENV_PATH, override: true }); + +const require = createRequire(import.meta.url); +const { setTimeout } = require('timers/promises'); + +const successfulInsertsSet = new Set(); +const totalInsertsSet = new Set(); + +async function processAndInsertNewerAssertions( + blockchainDetails, + blockchainName, + highestTokenId, + tripleStoreRepositories, + tripleStoreImplementation, + rpcEndpoints, +) { + // Validation + validateBlockchainName(blockchainName); + validateBlockchainDetails(blockchainDetails); + validateTokenId(highestTokenId); + validateTripleStoreRepositories(tripleStoreRepositories); + validateTripleStoreImplementation(tripleStoreImplementation); + + const provider = await initializeRpc(rpcEndpoints[0]); + const storageContract = await getContentAssetStorageContract(provider, blockchainDetails); + let assertionExists = true; + let newTokenId = highestTokenId; + + /* eslint-disable no-await-in-loop */ + while (assertionExists) { + // increase the tokenId by 1 + newTokenId += 1; + logger.info(`Fetching assertion for tokenId: ${newTokenId}`); + + // construct new ual + const newUal = `did:dkg:${blockchainDetails.ID}/${blockchainDetails.CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS}/${newTokenId}`; + + const assertionIds = await storageContract.getAssertionIds(newTokenId); + if (assertionIds.length === 0) { + logger.info( + `You have processed all assertions on ${blockchainName}. Moving to the next blockchain...`, + ); + assertionExists = false; + break; + } + + // Get the latest assertionId + const assertionId = assertionIds[assertionIds.length - 1]; + + const assertion = await getAssertionFromV6TripleStore( + tripleStoreRepositories, + tripleStoreImplementation, + newTokenId, + { + assertionId, + ual: newUal, + }, + ); + + if (!assertion.success) { + logger.error( + `Assertion with assertionId ${assertionId} exists in V6 triple store but could not be fetched. Retrying...`, + ); + newTokenId -= 1; + continue; + } + + const { successfullyProcessed, assertionsToCheck } = + await insertAssertionsIntoV8UnifiedRepository([assertion], tripleStoreRepositories); + + if (successfullyProcessed.length > 0) { + logger.info( + `Assertion with assertionId ${assertionId} does not exist in V6 triple store.`, + ); + } + + if (assertionsToCheck.length > 0) { + const { tokenId, ual, privateAssertion } = assertionsToCheck[0]; + const knowledgeAssetUal = `${ual}/1`; + logger.time(`GETTING KNOWLEDGE COLLECTION NAMED GRAPHS EXIST FOR 1 ASSERTION`); + // eslint-disable-next-line no-await-in-loop + const { exists } = await getKnowledgeCollectionNamedGraphsExist( + tokenId, + tripleStoreRepositories, + knowledgeAssetUal, + privateAssertion, + ); + logger.timeEnd(`GETTING KNOWLEDGE COLLECTION NAMED GRAPHS EXIST FOR 1 ASSERTION`); + + if (!exists) { + logger.error( + `Assertion with assertionId ${assertionId} was inserted but its KA named graph does not exist. Retrying...`, + ); + newTokenId -= 1; + continue; + } + + logger.info( + `Successfully inserted public/private assertions into V8 triple store for tokenId: ${newTokenId}`, + ); + + successfulInsertsSet.add(assertionId); + totalInsertsSet.add(newTokenId); + } + + const inserted = await sqliteDb.insertAssertion( + blockchainName, + newTokenId, + newUal, + assertionId, + ); + if (!inserted) { + logger.error( + `Assertion with assertionId ${assertionId} could not be inserted. Retrying...`, + ); + newTokenId -= 1; + continue; + } + logger.info( + `Assertion with tokenId ${newTokenId} inserted into db and marked as processed.`, + ); + } +} + +async function processAndInsertAssertions( + v6Assertions, + tripleStoreRepositories, + tripleStoreImplementation, +) { + // Validation + if (!v6Assertions || !Array.isArray(v6Assertions)) { + throw new Error( + `v6Assertions is not defined or it is not an array. V6 assertions: ${v6Assertions}`, + ); + } + validateTripleStoreRepositories(tripleStoreRepositories); + validateTripleStoreImplementation(tripleStoreImplementation); + + const { successfullyProcessed, assertionsToCheck } = + await insertAssertionsIntoV8UnifiedRepository(v6Assertions, tripleStoreRepositories); + + logger.info( + `Number of assertions that do not exist in V6 triple store: ${successfullyProcessed.length}`, + ); + + logger.info(`Verifying V8 triple store insertions for ${assertionsToCheck.length} assertions`); + + const promises = []; + for (const assertion of assertionsToCheck) { + const { tokenId, ual, privateAssertion } = assertion; + const knowledgeAssetUal = `${ual}/1`; + + promises.push( + getKnowledgeCollectionNamedGraphsExist( + tokenId, + tripleStoreRepositories, + knowledgeAssetUal, + privateAssertion, + ), + ); + } + + logger.time( + `GETTING KNOWLEDGE COLLECTION NAMED GRAPHS EXIST FOR ${promises.length} ASSERTIONS`, + ); + const results = await Promise.all(promises); + logger.timeEnd( + `GETTING KNOWLEDGE COLLECTION NAMED GRAPHS EXIST FOR ${promises.length} ASSERTIONS`, + ); + + const successfulInserts = results + .filter((result) => result.exists) + .map((result) => result.tokenId); + + // Find the assertion associated with the tokenId + successfulInserts.forEach((tokenId) => { + const assertionInserted = assertionsToCheck.find( + (assertion) => assertion.tokenId === tokenId, + ); + if (assertionInserted) { + successfulInsertsSet.add(assertionInserted.assertionId); + } + }); + + successfulInserts.forEach((tokenId) => { + totalInsertsSet.add(tokenId); + }); + + logger.info(`Number of successfully inserted assertions: ${successfulInserts.length}`); + + successfullyProcessed.push(...successfulInserts); + logger.info(`Successfully processed assertions: ${successfullyProcessed.length}`); + + return successfullyProcessed; +} + +async function getAssertionsInBatch( + batchKeys, + batchData, + tripleStoreRepositories, + tripleStoreImplementation, +) { + // Validation + if (!batchKeys || !Array.isArray(batchKeys)) { + logger.error(`Batch keys is not defined or it is not an array. Batch keys: ${batchKeys}`); + process.exit(1); + } + validateBatchData(batchData); + validateTripleStoreRepositories(tripleStoreRepositories); + validateTripleStoreImplementation(tripleStoreImplementation); + + const batchPromises = []; + for (const tokenId of batchKeys) { + batchPromises.push( + getAssertionFromV6TripleStore( + tripleStoreRepositories, + tripleStoreImplementation, + tokenId, + batchData[tokenId], + ), + ); + } + + const batchResults = await Promise.all(batchPromises); + + // Get all successful assertions + const v6Assertions = batchResults.filter((result) => result.success); + + return v6Assertions; +} + +async function main() { + ensureMigrationProgressFileExists(); + + // Make sure data/data-migration directory exists + ensureDirectoryExists(DATA_MIGRATION_DIR); + + // initialize noderc config + const config = initializeConfig(); + + // initialize default config + const defaultConfig = initializeDefaultConfig(); + + // Initialize blockchain config + const blockchainConfig = config.modules.blockchain; + if (!blockchainConfig || !blockchainConfig.implementation) { + logger.error('Invalid configuration for blockchain.'); + process.exit(1); + } + + logger.info('TRIPLE STORE INITIALIZATION START'); + + // Initialize triple store config + const tripleStoreConfig = config.modules.tripleStore; + if (!tripleStoreConfig || !tripleStoreConfig.implementation) { + logger.error('Invalid configuration for triple store.'); + process.exit(1); + } + + const tripleStoreData = getTripleStoreData(tripleStoreConfig); + // eslint-disable-next-line prefer-destructuring + const tripleStoreImplementation = tripleStoreData.tripleStoreImplementation; + // eslint-disable-next-line prefer-destructuring + let tripleStoreRepositories = tripleStoreData.tripleStoreRepositories; + + if (Object.keys(tripleStoreRepositories).length !== 3) { + logger.error( + `Triple store repositories are not initialized correctly. Expected 3 repositories, got: ${ + Object.keys(tripleStoreRepositories).length + }`, + ); + process.exit(1); + } + + // Initialize repositories + tripleStoreRepositories = initializeRepositories( + tripleStoreRepositories, + tripleStoreImplementation, + ); + + // Initialize contexts + tripleStoreRepositories = initializeContexts(tripleStoreRepositories); + + // Ensure connections + await ensureConnections(tripleStoreRepositories, tripleStoreImplementation); + + // Check if db exists and if it doesn't download it to the relevant directory + const dbFilePath = path.join(DATA_MIGRATION_DIR, `${process.env.NODE_ENV}.db`); + if (!fs.existsSync(dbFilePath)) { + logger.info( + `DB file for ${process.env.NODE_ENV} does not exist in ${DATA_MIGRATION_DIR}. Downloading it...`, + ); + // Fetch the db file from the remote server + logger.info( + `Fetching ${process.env.NODE_ENV}.db file from ${ + DB_URLS[process.env.NODE_ENV] + }. This may take a while...`, + ); + logger.time(`Database file downloading time`); + const writer = fs.createWriteStream(dbFilePath); + const response = await axios({ + url: DB_URLS[process.env.NODE_ENV], + method: 'GET', + responseType: 'stream', + }); + + // Pipe the response stream to the file + response.data.pipe(writer); + // Wait for the file to finish downloading + try { + await new Promise((resolve, reject) => { + let downloadComplete = false; + + response.data.on('end', () => { + downloadComplete = true; + }); + + writer.on('finish', resolve); + writer.on('error', (err) => + reject(new Error(`Write stream error: ${err.message}`)), + ); + response.data.on('error', (err) => + reject(new Error(`Download stream error: ${err.message}`)), + ); + response.data.on('close', () => { + if (!downloadComplete) { + reject(new Error('Download stream closed before completing')); + } + }); + }); + } catch (error) { + logger.error(`Critical error during download: ${error.message}`); + logger.error('Terminating process to prevent data corruption'); + process.exit(1); + } + logger.timeEnd(`Database file downloading time`); + + if (!fs.existsSync(dbFilePath)) { + throw new Error(`DB file for ${process.env.NODE_ENV} could not be created.`); + } + } + + // Initialize SQLite database once before processing blockchains + logger.info('Initializing SQLite database'); + await sqliteDb.initialize(); + + try { + // make sure blockchains are always migrated in this order - base, gnosis, neuroweb + const sortedBlockchains = Object.keys(blockchainConfig.implementation).sort(); + // Iterate through all chains + for (const blockchain of sortedBlockchains) { + logger.time(`PROCESSING TIME FOR ${blockchain}`); + let processed = 0; + const blockchainImplementation = blockchainConfig.implementation[blockchain]; + if (!blockchainImplementation.enabled) { + logger.info(`Blockchain ${blockchain} is not enabled. Skipping...`); + continue; + } + const rpcEndpoints = blockchainImplementation?.config?.rpcEndpoints + ? blockchainImplementation.config.rpcEndpoints + : defaultConfig[process.env.NODE_ENV].modules.blockchain.implementation[blockchain] + .config.rpcEndpoints; + if (!Array.isArray(rpcEndpoints) || rpcEndpoints.length === 0) { + logger.error(`RPC endpoints are not defined for blockchain ${blockchain}.`); + process.exit(1); + } + + let blockchainName; + let blockchainDetails; + for (const [, details] of Object.entries(BLOCKCHAINS)) { + if (details.ID === blockchain && details.ENV === process.env.NODE_ENV) { + blockchainName = details.NAME; + blockchainDetails = details; + break; + } + } + + if (!blockchainName) { + logger.error( + `Blockchain ${blockchain} not found. Make sure you have the correct blockchain ID and correct NODE_ENV in .env file.`, + ); + process.exit(1); + } + + const tableExists = await sqliteDb.getTableExists(blockchainName); + + if (!tableExists) { + logger.error(`Required table "${blockchainName}" does not exist in the database`); + process.exit(1); + } + + const highestTokenId = await sqliteDb.getHighestTokenId(blockchainName); + if (!highestTokenId) { + logger.error( + `Something went wrong. Could not fetch highest tokenId for ${blockchainName}.`, + ); + process.exit(1); + } + logger.info(`Total amount of tokenIds: ${highestTokenId}`); + + const tokenIdsToProcessCount = await sqliteDb.getUnprocessedCount(blockchainName); + logger.info(`Amount of tokenIds left to process: ${tokenIdsToProcessCount}`); + + // Process tokens in batches + while (true) { + logger.time('BATCH PROCESSING TIME'); + + const batchData = await sqliteDb.getBatchOfUnprocessedTokenIds( + blockchainName, + BATCH_SIZE, + ); + const batchKeys = Object.keys(batchData); + + if (batchKeys.length === 0) { + logger.info('No more unprocessed tokenIds found. Moving on...'); + logger.timeEnd('BATCH PROCESSING TIME'); + break; + } + + logger.info(`Processing batch: ${batchKeys}`); + + try { + logger.time('FETCHING V6 ASSERTIONS'); + const v6Assertions = await getAssertionsInBatch( + batchKeys, + batchData, + tripleStoreRepositories, + tripleStoreImplementation, + ); + logger.timeEnd('FETCHING V6 ASSERTIONS'); + + if (v6Assertions.length === 0) { + throw new Error( + `Something went wrong. Could not get any V6 assertions in batch ${batchKeys}`, + ); + } + + logger.info(`Number of V6 assertions to process: ${v6Assertions.length}`); + + const successfullyProcessed = await processAndInsertAssertions( + v6Assertions, + tripleStoreRepositories, + tripleStoreImplementation, + ); + + if (successfullyProcessed.length === 0) { + throw new Error( + `Could not insert any assertions out of ${v6Assertions.length}`, + ); + } + + logger.info( + `Successfully processed/inserted assertions: ${successfullyProcessed.length}. Marking rows as processed in db...`, + ); + + await sqliteDb.markRowsAsProcessed(blockchainName, successfullyProcessed); + processed += successfullyProcessed.length; + + logger.info( + `[PROGRESS] for ${blockchainName}: ${( + (processed / tokenIdsToProcessCount) * + 100 + ).toFixed(2)}%. Total processed: ${processed}/${tokenIdsToProcessCount}`, + ); + + // Pause for 500ms to deload the triple store + await setTimeout(500); + } catch (error) { + logger.error(`Error processing batch: ${error}. Pausing for 5 seconds...`); + await setTimeout(5000); + } + } + + logger.timeEnd(`PROCESSING TIME FOR ${blockchain}`); + + logger.time(`PROCESS AND INSERT NEWER ASSERTIONS FOR ${blockchainName}`); + // If newer (unprocessed) assertions exist on-chain, fetch them and insert them into the V8 triple store repository + // eslint-disable-next-line no-await-in-loop + await processAndInsertNewerAssertions( + blockchainDetails, + blockchainName, + highestTokenId, + tripleStoreRepositories, + tripleStoreImplementation, + rpcEndpoints, + ); + logger.timeEnd(`PROCESS AND INSERT NEWER ASSERTIONS FOR ${blockchainName}`); + + logger.info( + `Total amount of unique successfully inserted assertions for ${blockchainName}: ${successfulInsertsSet.size}`, + ); + logger.info( + `Total amount of assertions inserted for ${blockchainName}: ${totalInsertsSet.size}`, + ); + } + } finally { + // Close database connection after all blockchains are processed + await sqliteDb.close(); + } + + markMigrationAsSuccessfull(); + + logger.info( + `Total amount of unique successfully inserted assertions: ${successfulInsertsSet.size}`, + ); + logger.info(`Total amount of assertions inserted: ${totalInsertsSet.size}`); +} + +main(); diff --git a/v8-data-migration/validation.js b/v8-data-migration/validation.js new file mode 100644 index 0000000000..42b14e2b96 --- /dev/null +++ b/v8-data-migration/validation.js @@ -0,0 +1,160 @@ +import logger from './logger.js'; + +export function validateConfig(config) { + if (!config || typeof config !== 'object') { + logger.error( + `[VALIDATION ERROR] Config is not defined or it is not an object. Config: ${config}`, + ); + process.exit(1); + } +} + +export function validateBlockchainName(blockchainName) { + if (!blockchainName || typeof blockchainName !== 'string') { + logger.error( + `[VALIDATION ERROR] Blockchain name is defined or it is not a string. Blockchain name: ${blockchainName}`, + ); + process.exit(1); + } +} + +export function validateBlockchainDetails(blockchainDetails) { + if ( + !blockchainDetails || + typeof blockchainDetails !== 'object' || + !Object.keys(blockchainDetails).includes('ID') || + !Object.keys(blockchainDetails).includes('ENV') || + !Object.keys(blockchainDetails).includes('NAME') || + !Object.keys(blockchainDetails).includes('CONTENT_ASSET_STORAGE_CONTRACT_ADDRESS') + ) { + logger.error( + `[VALIDATION ERROR] Blockchain details is defined or it is not an object. Blockchain details: ${blockchainDetails}`, + ); + process.exit(1); + } +} + +export function validateTokenId(tokenId) { + if (typeof tokenId !== 'string' && typeof tokenId !== 'number') { + logger.error( + `[VALIDATION ERROR] Token ID is not a string or number. Token ID: ${tokenId}. Type: ${typeof tokenId}`, + ); + process.exit(1); + } +} + +export function validateUal(ual) { + if (!ual.startsWith('did:dkg:') || typeof ual !== 'string') { + logger.error(`[VALIDATION ERROR] UAL is not a valid UAL. UAL: ${ual}`); + process.exit(1); + } +} + +export function validateTripleStoreRepositories(tripleStoreRepositories) { + if (!tripleStoreRepositories || typeof tripleStoreRepositories !== 'object') { + logger.error( + `[VALIDATION ERROR] Triple store repositories is not defined or it is not an object. Triple store repositories: ${tripleStoreRepositories}`, + ); + process.exit(1); + } +} + +export function validateTripleStoreImplementation(tripleStoreImplementation) { + if (!tripleStoreImplementation || typeof tripleStoreImplementation !== 'string') { + logger.error( + `[VALIDATION ERROR] Triple store implementation is not defined or it is not a string. Triple store implementation: ${tripleStoreImplementation}`, + ); + process.exit(1); + } +} + +export function validateTripleStoreConfig(tripleStoreConfig) { + if (!tripleStoreConfig || typeof tripleStoreConfig !== 'object') { + logger.error( + `[VALIDATION ERROR] Triple store config is not defined or it is not an object. Triple store config: ${tripleStoreConfig}`, + ); + process.exit(1); + } +} + +export function validateRepository(repository) { + if (!repository || typeof repository !== 'string') { + logger.error( + `[VALIDATION ERROR] Repository is not defined or it is not a string. Repository: ${repository}`, + ); + process.exit(1); + } +} + +export function validateQuery(query) { + if (!query || typeof query !== 'string') { + logger.error( + `[VALIDATION ERROR] Query is not defined or it is not a string. Query: ${query}`, + ); + process.exit(1); + } +} + +export function validateAssertionId(assertionId) { + if (!assertionId || typeof assertionId !== 'string') { + logger.error( + `[VALIDATION ERROR] Assertion ID is not defined or it is not a string. Assertion ID: ${assertionId}`, + ); + process.exit(1); + } +} + +export function validateAssertion(assertion) { + if (!assertion || typeof assertion !== 'string') { + logger.error( + `[VALIDATION ERROR] Assertion is not defined or it is not a string. Assertion: ${assertion}`, + ); + process.exit(1); + } +} + +// BLOCKCHAIN +export function validateProvider(provider) { + if (!provider || typeof provider !== 'object') { + logger.error( + `[VALIDATION ERROR] Provider is not defined or it is not an object. Provider: ${provider}`, + ); + process.exit(1); + } +} + +export function validateStorageContractAddress(storageContractAddress) { + if (!storageContractAddress || typeof storageContractAddress !== 'string') { + logger.error( + `[VALIDATION ERROR] Storage contract address is not defined or it is not a string. Storage contract address: ${storageContractAddress}`, + ); + process.exit(1); + } +} + +export function validateStorageContractName(storageContractName) { + if (!storageContractName || typeof storageContractName !== 'string') { + logger.error( + `[VALIDATION ERROR] Storage contract name is not defined or it is not a string. Storage contract name: ${storageContractName}`, + ); + process.exit(1); + } +} + +export function validateStorageContractAbi(storageContractAbi) { + if (!storageContractAbi || typeof storageContractAbi !== 'object') { + logger.error( + `[VALIDATION ERROR] Storage contract ABI is not defined or it is not an object. Storage contract ABI: ${storageContractAbi}`, + ); + process.exit(1); + } +} + +export function validateBatchData(batchData) { + if (!batchData || typeof batchData !== 'object') { + logger.error( + `[VALIDATION ERROR] Batch data is not defined or it is not an object. Batch data: ${batchData}`, + ); + process.exit(1); + } +}