From a302b5b4e25b4f19711c8989efa31ea8d2018a60 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Mon, 22 Jan 2024 12:39:55 +1300 Subject: [PATCH 01/31] feat: Add new ABIs --- abi/AuthorityFactory.json | 114 ++++++++++ abi/Marketplace.json | 175 +++++++++++++++ abi/ValidatorNodeProvider.json | 391 +++++++++++++++++++++++++++++++++ 3 files changed, 680 insertions(+) create mode 100644 abi/AuthorityFactory.json create mode 100644 abi/Marketplace.json create mode 100644 abi/ValidatorNodeProvider.json diff --git a/abi/AuthorityFactory.json b/abi/AuthorityFactory.json new file mode 100644 index 0000000..b7b9344 --- /dev/null +++ b/abi/AuthorityFactory.json @@ -0,0 +1,114 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract Authority", + "name": "authority", + "type": "address" + } + ], + "name": "AuthorityCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_authorityOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "calculateAuthorityAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "newAuthority", + "outputs": [ + { + "internalType": "contract Authority", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "newAuthority", + "outputs": [ + { + "internalType": "contract Authority", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_authorityOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "newAuthority", + "outputs": [ + { + "internalType": "contract Authority", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_authorityOwner", + "type": "address" + } + ], + "name": "newAuthority", + "outputs": [ + { + "internalType": "contract Authority", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/Marketplace.json b/abi/Marketplace.json new file mode 100644 index 0000000..4b06fb5 --- /dev/null +++ b/abi/Marketplace.json @@ -0,0 +1,175 @@ +[ + { + "inputs": [ + { + "internalType": "contract ENS", + "name": "_ens", + "type": "address" + }, + { + "internalType": "contract ICartesiDAppFactory", + "name": "_factory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IReaderNodeProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "payee", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "ReaderNodeProviderCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IValidatorNodeProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IConsensus", + "name": "consensus", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "payee", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "ValidatorNodeProviderCreated", + "type": "event" + }, + { + "inputs": [], + "name": "ens", + "outputs": [ + { + "internalType": "contract ENS", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract ICartesiDAppFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_payee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "newReaderNodeProvider", + "outputs": [ + { + "internalType": "contract IReaderNodeProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IConsensus", + "name": "_consensus", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_payee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "newValidatorNodeProvider", + "outputs": [ + { + "internalType": "contract IValidatorNodeProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/ValidatorNodeProvider.json b/abi/ValidatorNodeProvider.json new file mode 100644 index 0000000..68713f9 --- /dev/null +++ b/abi/ValidatorNodeProvider.json @@ -0,0 +1,391 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "contract ENS", + "name": "_ens", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_payee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + }, + { + "internalType": "contract ICartesiDAppFactory", + "name": "_factory", + "type": "address" + }, + { + "internalType": "contract IConsensus", + "name": "_consensus", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "dapp", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "FinancialRunway", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "dapp", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "location", + "type": "string" + } + ], + "name": "MachineLocation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "consensus", + "outputs": [ + { + "internalType": "contract IConsensus", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_time", + "type": "uint256" + } + ], + "name": "cost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dappOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_templateHash", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "_location", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_initialRunway", + "type": "uint256" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "contract CartesiDApp", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ens", + "outputs": [ + { + "internalType": "contract ENS", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICartesiDApp", + "name": "_dapp", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_time", + "type": "uint256" + } + ], + "name": "extendRunway", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract ICartesiDAppFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "payee", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICartesiDApp", + "name": "dapp", + "type": "address" + }, + { + "internalType": "string", + "name": "location", + "type": "string" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICartesiDApp", + "name": "", + "type": "address" + } + ], + "name": "runway", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "setName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file From 10332d1440f7d0593587b01af481d681196bbdb2 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Mon, 22 Jan 2024 12:41:37 +1300 Subject: [PATCH 02/31] feat: Add new graphQL entities --- schema.graphql | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/schema.graphql b/schema.graphql index f18fa49..8d58db6 100644 --- a/schema.graphql +++ b/schema.graphql @@ -1,3 +1,25 @@ +type Authority @entity @cardinality(value: 5) { + id: ID! +} + +type ValidatorNodeProvider @entity @cardinality(value: 100) { + id: ID! + authority: Authority! + token: Token! + payee: String! + price: BigInt! + paused: Boolean! + nodes: [ValidatorNode!] @derivedFrom(field: "provider") +} + +type ValidatorNode @entity @cardinality(value: 100) { + id: ID! + application: Application! + provider: ValidatorNodeProvider! + runway: BigInt + location: String +} + type ApplicationFactory @entity @cardinality(value: 5) { id: ID! applications: [Application!] @derivedFrom(field: "factory") From c471b14f7f371e85d81711445a41973e409cd37e Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Mon, 22 Jan 2024 12:42:05 +1300 Subject: [PATCH 03/31] chore: Bump dependencies and update vitest config --- package-lock.json | 3842 +++++++++++++++++++++++++++++---------------- package.json | 28 +- vitest.config.ts | 9 +- 3 files changed, 2517 insertions(+), 1362 deletions(-) diff --git a/package-lock.json b/package-lock.json index d8fec77..397922a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,37 +10,37 @@ "license": "Apache-2.0", "dependencies": { "@cartesi/rollups": "1.0.0", - "@subsquid/archive-registry": "^3.2.0", - "@subsquid/evm-processor": "^1.4.0", + "@subsquid/archive-registry": "^3.3.0", + "@subsquid/evm-processor": "^1.13.0", "@subsquid/file-store": "^2.0.0", - "@subsquid/graphql-server": "^4.2.0", + "@subsquid/graphql-server": "^4.5.0", "@subsquid/logger": "^1.3.0", - "@subsquid/typeorm-migration": "^1.2.0", - "@subsquid/typeorm-store": "^1.2.0", + "@subsquid/typeorm-migration": "^1.3.0", + "@subsquid/typeorm-store": "^1.2.6", "dotenv": "^16.1.4", - "ethers": "^6.5.1", + "ethers": "^6.10.0", "pg": "^8.11.0", "shelljs": "^0.8.5", "type-graphql": "^1.2.0-rc.1", - "typeorm": "^0.3.16", + "typeorm": "^0.3.19", "yargs": "^17.7.2" }, "devDependencies": { "@subsquid/cli": "latest", - "@subsquid/evm-typegen": "^3.2.0", - "@subsquid/typeorm-codegen": "^1.2.0", - "@types/node": "^18.16.17", - "@types/react": "18.2.20", - "@vitest/coverage-v8": "^0.34.4", + "@subsquid/evm-typegen": "^3.2.4", + "@subsquid/typeorm-codegen": "^1.3.3", + "@types/node": "^18.19.7", + "@types/react": "^18.2.48", + "@vitest/coverage-v8": "^1.2.0", "npm-run-all": "^4.1.5", - "typescript": "~5.1.3", - "vitest": "^0.34.4" + "typescript": "^5.1.3", + "vitest": "^1.2.0" } }, "node_modules/@adraffy/ens-normalize": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", - "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" }, "node_modules/@ampproject/remapping": { "version": "2.2.1", @@ -292,10 +292,19 @@ "node": ">=4" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -386,10 +395,23 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/runtime": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -397,6 +419,20 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -439,10 +475,26 @@ "node": ">=12" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", "cpu": [ "arm" ], @@ -456,9 +508,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", "cpu": [ "arm64" ], @@ -472,9 +524,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", "cpu": [ "x64" ], @@ -488,9 +540,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", "cpu": [ "arm64" ], @@ -504,9 +556,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", "cpu": [ "x64" ], @@ -520,9 +572,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", "cpu": [ "arm64" ], @@ -536,9 +588,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", "cpu": [ "x64" ], @@ -552,9 +604,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", "cpu": [ "arm" ], @@ -568,9 +620,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", "cpu": [ "arm64" ], @@ -584,9 +636,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", "cpu": [ "ia32" ], @@ -600,9 +652,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", "cpu": [ "loong64" ], @@ -616,9 +668,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", "cpu": [ "mips64el" ], @@ -632,9 +684,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", "cpu": [ "ppc64" ], @@ -648,9 +700,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", "cpu": [ "riscv64" ], @@ -664,9 +716,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", "cpu": [ "s390x" ], @@ -680,9 +732,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", "cpu": [ "x64" ], @@ -696,9 +748,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", "cpu": [ "x64" ], @@ -712,9 +764,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", "cpu": [ "x64" ], @@ -728,9 +780,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", "cpu": [ "x64" ], @@ -744,9 +796,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", "cpu": [ "arm64" ], @@ -760,9 +812,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", "cpu": [ "ia32" ], @@ -776,9 +828,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", "cpu": [ "x64" ], @@ -804,24 +856,15 @@ "dev": true }, "node_modules/@graphql-tools/merge": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", - "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz", + "integrity": "sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==", "dependencies": { - "@graphql-tools/utils": "^9.2.1", + "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" @@ -841,6 +884,18 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, + "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/schema": { "version": "9.0.19", "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", @@ -867,58 +922,36 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/mock/node_modules/value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", - "engines": { - "node": ">=12" - } - }, "node_modules/@graphql-tools/schema": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz", - "integrity": "sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz", + "integrity": "sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==", "dependencies": { - "@graphql-tools/merge": "8.3.1", - "@graphql-tools/utils": "8.9.0", + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/schema/node_modules/@graphql-tools/merge": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz", - "integrity": "sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==", - "dependencies": { - "@graphql-tools/utils": "8.9.0", - "tslib": "^2.4.0" + "value-or-promise": "^1.0.12" }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/utils": { - "version": "8.13.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.13.1.tgz", - "integrity": "sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==", + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.12.tgz", + "integrity": "sha512-+yS1qlFwXlwU3Gv8ek/h2aJ95quog4yF22haC11M0zReMSTddbGJZ5yXKkE3sXoY2BcL1utilSFjylJ9uXpSNQ==", "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", + "dset": "^3.1.2", "tslib": "^2.4.0" }, + "engines": { + "node": ">=16.0.0" + }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } @@ -940,7 +973,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -957,7 +989,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -969,7 +1000,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -980,14 +1010,12 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1004,7 +1032,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1019,7 +1046,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1138,27 +1164,27 @@ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, - "node_modules/@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "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/" - } - ] + "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==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -1975,7 +2001,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -2035,6 +2060,175 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", + "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", + "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", + "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", + "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", + "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", + "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", + "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", + "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", + "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", + "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", + "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", + "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", + "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sigstore/bundle": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", @@ -2340,9 +2534,9 @@ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" }, "node_modules/@subsquid/archive-registry": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/archive-registry/-/archive-registry-3.2.0.tgz", - "integrity": "sha512-qEzFODDVwEx+3cdmk4LPAKoLzjcBcqvhhLovEWOUKxN+S9SZaOWYHf7yq1pi48X6nUSVLmK7rofBx+pS4hIU7Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@subsquid/archive-registry/-/archive-registry-3.3.0.tgz", + "integrity": "sha512-moXnGNOSmKMHyuDvUiOHbpL7IePSo4XZOW9OnzESIND64eGxlKusIsCi8Nth1DgzbE/UTTFeNJvYKu0v7SOIqw==", "dependencies": { "@subsquid/util-internal": "^1.0.0", "commander": "^10.0.0", @@ -2433,81 +2627,89 @@ } }, "node_modules/@subsquid/evm-processor": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@subsquid/evm-processor/-/evm-processor-1.8.2.tgz", - "integrity": "sha512-JMVSx/ZHooidVFb7PPR5hjesGItf31Lf9TDJaP8GixoXJd+YoRQbZZXe0kJvcewtHjzGqMK07j6gbJPiJcXzpg==", - "dependencies": { - "@subsquid/http-client": "^1.3.0", - "@subsquid/logger": "^1.3.0", - "@subsquid/rpc-client": "^4.4.1", - "@subsquid/util-internal": "^2.5.1", - "@subsquid/util-internal-archive-client": "^0.0.0", - "@subsquid/util-internal-hex": "^1.2.0", - "@subsquid/util-internal-processor-tools": "^2.0.0" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@subsquid/evm-processor/-/evm-processor-1.13.0.tgz", + "integrity": "sha512-5zHobJwUeqKcRbceP8wECCmRM7HSPL3ybINH/ZFGco8xA5dUFkTnsdR1UqubXxRfQ8J+1NHrMJv1eKo32bR8lQ==", + "dependencies": { + "@subsquid/http-client": "^1.3.2", + "@subsquid/logger": "^1.3.2", + "@subsquid/rpc-client": "^4.6.0", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-archive-client": "^0.1.0", + "@subsquid/util-internal-hex": "^1.2.2", + "@subsquid/util-internal-ingest-tools": "^1.1.0", + "@subsquid/util-internal-processor-tools": "^4.0.0", + "@subsquid/util-internal-range": "^0.1.0", + "@subsquid/util-internal-validation": "^0.1.0", + "@subsquid/util-timeout": "^2.3.2" } }, "node_modules/@subsquid/evm-processor/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, - "node_modules/@subsquid/evm-processor/node_modules/@subsquid/util-internal-archive-client": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-archive-client/-/util-internal-archive-client-0.0.0.tgz", - "integrity": "sha512-tsVxjiFSq3SZUP2RQOTF6ca1ZeKhlpcIb0kb+KPbUaOv13H2YNo9vjG1RpW+f4/Sr7ARo7EOkIOgQb9t+u/2VQ==", + "node_modules/@subsquid/evm-processor/node_modules/@subsquid/util-internal-processor-tools": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-processor-tools/-/util-internal-processor-tools-4.0.0.tgz", + "integrity": "sha512-2azcdJIQQSDKAra0ct0QGCp4cYnsdbqOeIroIdvnOxs4HhOp6XkXEMg/NQ2tRGVW8yJEmn2bUvd5i8S1WBjDZA==", + "dependencies": { + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-counters": "^1.3.2", + "@subsquid/util-internal-prometheus-server": "^1.2.2", + "@subsquid/util-internal-range": "^0.1.0", + "prom-client": "^14.2.0" + } + }, + "node_modules/@subsquid/evm-processor/node_modules/@subsquid/util-internal-range": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.1.0.tgz", + "integrity": "sha512-+pJeJyH0oetqu2eRwOkP7NCSaCGzLpCCNpS9Fwi968RL+LfWSKn+wGUX6Ulf0afSslvrQ/34ZtyWdjyya1AGxA==", "dependencies": { - "@subsquid/http-client": "^1.3.0", - "@subsquid/util-internal": "^2.5.1", - "@subsquid/util-internal-range": "^0.0.0" - }, - "peerDependencies": { - "@subsquid/logger": "^1.3.0" - }, - "peerDependenciesMeta": { - "@subsquid/logger": { - "optional": true - } + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-binary-heap": "^1.0.0" } }, "node_modules/@subsquid/evm-typegen": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@subsquid/evm-typegen/-/evm-typegen-3.2.2.tgz", - "integrity": "sha512-DzjzUwjJNJM74skZCuYPMKYhvDg2KLRdt1ooiOpgH91zEmcS8wx70dtdOtQxDIDm1Bbt/pfS3Yntq7CjbeI2/g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@subsquid/evm-typegen/-/evm-typegen-3.2.4.tgz", + "integrity": "sha512-yw0yCm4+8bmWDf8kqbxvp4dZGzoRKEqXkNGdPTz52icAVaCsq7Ih2a8Nq51rfQNwXEP20uoUPCrltC/qKxMu9A==", "dev": true, "dependencies": { - "@subsquid/http-client": "^1.2.0", - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.4.0", - "@subsquid/util-internal-code-printer": "^1.2.0", - "@subsquid/util-internal-commander": "^1.3.0", - "commander": "^11.0.0" + "@subsquid/http-client": "^1.3.2", + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-code-printer": "^1.2.2", + "@subsquid/util-internal-commander": "^1.3.2", + "commander": "^11.1.0" }, "bin": { "squid-evm-typegen": "bin/run.js" }, "peerDependencies": { - "ethers": "^6.6.5" + "ethers": "^6.9.0" } }, "node_modules/@subsquid/evm-typegen/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==", "dev": true }, "node_modules/@subsquid/evm-typegen/node_modules/@subsquid/util-internal-commander": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.0.tgz", - "integrity": "sha512-ZSPzYjNZ/k/6qDa7xdrCgXkq/whYnVPLF8nX+35aAgrM+ShX7XUg/Dq6u0rW3u3sfWcKzsNFHbFB8SzjWN5StA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.2.tgz", + "integrity": "sha512-9/1vI1dmGQMp5wjN6hb94VCnSosT+caob33tAesFaIdqLzqQlDtlTSRq1TFFossAgtsEJFi7GiQ8i31L/gaxSQ==", "dev": true, "peerDependencies": { - "commander": "^11.0.0" + "commander": "^11.1.0" } }, "node_modules/@subsquid/evm-typegen/node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "engines": { "node": ">=16" @@ -2537,33 +2739,34 @@ "integrity": "sha512-C89mus6IXnNi0xMQrZqUFBZwLj8tbuq9lye8Gq/lHmmERAUpi6UsWEyLdJLx2mneZzF3JtY8eNiiZ16jmjtvfw==" }, "node_modules/@subsquid/graphql-server": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/graphql-server/-/graphql-server-4.3.0.tgz", - "integrity": "sha512-Ws2uHJyhgNgo3uJZQ4XYKAPvnOGJ3wXq/XhcX/b3z2OeiCv89daB+V6Lzf6nBsVBg9D2Ev0vNWIVRKJQbEn+mA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@subsquid/graphql-server/-/graphql-server-4.5.0.tgz", + "integrity": "sha512-SKCq6qF8FGrsrzFpjLzyDf3Cbcp4e8Z2M+t6Er3en7WLY3jZtdEGf3HbfCH6ukhQoJ72lUSNsESdwEoazOslRA==", "dependencies": { "@apollo/utils.keyvadapter": "~1.1.2", "@apollo/utils.keyvaluecache": "~1.0.2", - "@graphql-tools/merge": "^8", - "@graphql-tools/schema": "^8", - "@graphql-tools/utils": "^8", + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/schema": "^10.0.2", + "@graphql-tools/utils": "^10.0.11", "@keyv/redis": "~2.5.8", - "@subsquid/logger": "^1.3.0", - "@subsquid/openreader": "^4.4.0", - "@subsquid/typeorm-config": "^3.3.0", - "@subsquid/util-internal": "^2.5.0", - "@subsquid/util-internal-commander": "^1.3.0", - "@subsquid/util-internal-http-server": "^1.2.0", - "apollo-server-core": "^3.12.0", - "apollo-server-express": "^3.12.0", + "@subsquid/logger": "^1.3.2", + "@subsquid/openreader": "^4.5.0", + "@subsquid/typeorm-config": "^4.1.0", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-commander": "^1.3.2", + "@subsquid/util-internal-http-server": "^1.2.2", + "@subsquid/util-internal-ts-node": "^0.0.0", + "apollo-server-core": "^3.13.0", + "apollo-server-express": "^3.13.0", "apollo-server-plugin-response-cache": "~3.7.1", - "commander": "^11.0.0", - "dotenv": "^16.1.4", + "commander": "^11.1.0", + "dotenv": "^16.3.1", "express": "^4.18.2", "graphql": "^15.8.0", - "graphql-ws": "^5.13.1", - "keyv": "~4.5.2", - "pg": "^8.11.0", - "ws": "^8.13.0" + "graphql-ws": "^5.14.2", + "keyv": "~4.5.4", + "pg": "^8.11.3", + "ws": "^8.14.2" }, "bin": { "squid-graphql-server": "bin/run.js" @@ -2572,7 +2775,7 @@ "@subsquid/big-decimal": "^1.0.0", "class-validator": "^0.14.0", "type-graphql": "^1.2.0-rc.1", - "typeorm": "^0.3.16" + "typeorm": "^0.3.17" }, "peerDependenciesMeta": { "@subsquid/big-decimal": { @@ -2590,40 +2793,40 @@ } }, "node_modules/@subsquid/graphql-server/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "node_modules/@subsquid/graphql-server/node_modules/@subsquid/util-internal-commander": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.0.tgz", - "integrity": "sha512-ZSPzYjNZ/k/6qDa7xdrCgXkq/whYnVPLF8nX+35aAgrM+ShX7XUg/Dq6u0rW3u3sfWcKzsNFHbFB8SzjWN5StA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.2.tgz", + "integrity": "sha512-9/1vI1dmGQMp5wjN6hb94VCnSosT+caob33tAesFaIdqLzqQlDtlTSRq1TFFossAgtsEJFi7GiQ8i31L/gaxSQ==", "peerDependencies": { - "commander": "^11.0.0" + "commander": "^11.1.0" } }, "node_modules/@subsquid/graphql-server/node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "engines": { "node": ">=16" } }, "node_modules/@subsquid/http-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/http-client/-/http-client-1.3.0.tgz", - "integrity": "sha512-GV31imnZf1dYsbZmuXyIMtdSYtVSm06m05T0fjl+ilnOQRvafAx1rMmKVy9INksZwssVQZ/9EHC+Wy8DPw8Oeg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/http-client/-/http-client-1.3.2.tgz", + "integrity": "sha512-N9fXB2TCYzzT4CNoTibpgk4lMFNU463/ZQcSstPPMIpZA9QdDjY+mNdjLTi8L+4DzimgjEbwYfLQX5aINYvkMA==", "dependencies": { - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.5.1", - "node-fetch": "^3.3.1" + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "node-fetch": "^3.3.2" } }, "node_modules/@subsquid/http-client/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "node_modules/@subsquid/http-client/node_modules/node-fetch": { "version": "3.3.2", @@ -2653,28 +2856,28 @@ } }, "node_modules/@subsquid/openreader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@subsquid/openreader/-/openreader-4.4.0.tgz", - "integrity": "sha512-MiHu+PQH4frnF8RPd4F1WwdPzaaA3trBM1VuzN5cTEPPt8vBF4A1BIL78Qq1HH/HH+yLriNjmA7/IVaAFjsfgw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@subsquid/openreader/-/openreader-4.5.0.tgz", + "integrity": "sha512-A07K1TM0YY2iZjJcY2qD0jXco1S7D00OfqAnN4tqxVtj4ddLJVZ3bLIAHn7r3P3JB4iT+3daBNTTa17vH1k2XA==", "dependencies": { - "@graphql-tools/merge": "^8", + "@graphql-tools/merge": "^9.0.1", "@subsquid/graphiql-console": "^0.3.0", - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.5.0", - "@subsquid/util-internal-commander": "^1.3.0", - "@subsquid/util-internal-hex": "^1.2.0", - "@subsquid/util-internal-http-server": "^1.2.0", - "@subsquid/util-naming": "^1.2.0", - "apollo-server-core": "^3.12.0", - "apollo-server-express": "^3.12.0", - "commander": "^11.0.0", - "deep-equal": "^2.2.1", + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-commander": "^1.3.2", + "@subsquid/util-internal-hex": "^1.2.2", + "@subsquid/util-internal-http-server": "^1.2.2", + "@subsquid/util-naming": "^1.2.2", + "apollo-server-core": "^3.13.0", + "apollo-server-express": "^3.13.0", + "commander": "^11.1.0", + "deep-equal": "^2.2.3", "express": "^4.18.2", "graphql": "^15.8.0", - "graphql-parse-resolve-info": "^4.13.0", - "graphql-ws": "^5.13.1", - "pg": "^8.11.0", - "ws": "^8.13.0" + "graphql-parse-resolve-info": "^4.14.0", + "graphql-ws": "^5.14.2", + "pg": "^8.11.3", + "ws": "^8.14.2" }, "bin": { "openreader": "bin/main.js" @@ -2689,84 +2892,86 @@ } }, "node_modules/@subsquid/openreader/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "node_modules/@subsquid/openreader/node_modules/@subsquid/util-internal-commander": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.0.tgz", - "integrity": "sha512-ZSPzYjNZ/k/6qDa7xdrCgXkq/whYnVPLF8nX+35aAgrM+ShX7XUg/Dq6u0rW3u3sfWcKzsNFHbFB8SzjWN5StA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.2.tgz", + "integrity": "sha512-9/1vI1dmGQMp5wjN6hb94VCnSosT+caob33tAesFaIdqLzqQlDtlTSRq1TFFossAgtsEJFi7GiQ8i31L/gaxSQ==", "peerDependencies": { - "commander": "^11.0.0" + "commander": "^11.1.0" } }, "node_modules/@subsquid/openreader/node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "engines": { "node": ">=16" } }, "node_modules/@subsquid/rpc-client": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@subsquid/rpc-client/-/rpc-client-4.4.1.tgz", - "integrity": "sha512-ZnqmJUDdj4OsZZLVHAqXhPF4vijut54PwNdLg8MlfCU4gX99oYwB/wvtulVuJckNLiXDQ3ka+CDLe/MWV2svIA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@subsquid/rpc-client/-/rpc-client-4.6.0.tgz", + "integrity": "sha512-fVTsVOag6Ge7hRqV+st9p+E+BgQa5PPu1uJns5IXSrRtIuAuy++w0OsB3WNA+EC8DZarpllxi7I3snzJpis/xQ==", "dependencies": { - "@subsquid/http-client": "^1.2.1", - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.5.0", + "@subsquid/http-client": "^1.3.2", + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", "@subsquid/util-internal-binary-heap": "^1.0.0", - "@subsquid/util-internal-counters": "^1.3.0", + "@subsquid/util-internal-counters": "^1.3.2", "websocket": "^1.0.34" } }, "node_modules/@subsquid/rpc-client/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "node_modules/@subsquid/typeorm-codegen": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-codegen/-/typeorm-codegen-1.3.1.tgz", - "integrity": "sha512-hHMbJvYZ9wJFnsK+NgOAC9jv1bawsss1eCrUBI3NMoCJ9xeEZOdx13eQAI+8OAPXedqCx4v0PLFZZOlAKc1/7w==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-codegen/-/typeorm-codegen-1.3.3.tgz", + "integrity": "sha512-6k1oRWnaBNX4GZX737dvZll925uZKt2or/oXNaQRnHAmrCISkIEz7dYkl6PFfppYuardch41FBSFmOQaovPCXw==", "dev": true, "dependencies": { - "@subsquid/openreader": "^4.3.1", - "@subsquid/util-internal": "^2.4.0", - "@subsquid/util-internal-code-printer": "^1.2.0", - "@subsquid/util-naming": "^1.2.0", - "commander": "^11.0.0" + "@subsquid/openreader": "^4.4.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-code-printer": "^1.2.2", + "@subsquid/util-naming": "^1.2.2", + "commander": "^11.1.0" }, "bin": { "squid-typeorm-codegen": "bin/run.js" } }, "node_modules/@subsquid/typeorm-codegen/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==", "dev": true }, "node_modules/@subsquid/typeorm-codegen/node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "engines": { "node": ">=16" } }, "node_modules/@subsquid/typeorm-config": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-config/-/typeorm-config-3.3.0.tgz", - "integrity": "sha512-DJXoAQnVooEdEU3vxL33I5WRJRRPy9t+15rP17kGMkXGLuPAc0hpelJGSO5Ze9csn/IytwrZUWG6y2I2Q81nyQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-config/-/typeorm-config-4.1.0.tgz", + "integrity": "sha512-onZsHQIypCTRguOeec1Gmm+6EPlTg63QNE7Y74nrbBb4sabZtrK3K+EQJId4KIdk/kxA2Wi/g5H/VDNZNFSe9A==", "dependencies": { - "@subsquid/util-naming": "^1.2.0" + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal-ts-node": "^0.0.0", + "@subsquid/util-naming": "^1.2.2" }, "peerDependencies": { - "typeorm": "^0.3.16" + "typeorm": "^0.3.17" }, "peerDependenciesMeta": { "typeorm": { @@ -2775,15 +2980,16 @@ } }, "node_modules/@subsquid/typeorm-migration": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-migration/-/typeorm-migration-1.2.1.tgz", - "integrity": "sha512-aMo4hmqzwmFHLrdu1PXm3bGiRSodyjgmnETmnYiI11g+FbVWwTuJ3P1jBY9hrRFEr6iGb2+pYVRMme75XoNzTw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-migration/-/typeorm-migration-1.3.0.tgz", + "integrity": "sha512-+xyOvN5asKdSEUMjKRuuwLDaOSRBBCRc2LIVdsyv5nnXXcmtOShfQsHQNX9EdKD2xx4cH2bnD7ol3PY63Q2xQw==", "dependencies": { - "@subsquid/typeorm-config": "^3.2.0", - "@subsquid/util-internal": "^2.4.0", - "@subsquid/util-internal-code-printer": "^1.2.0", - "commander": "^11.0.0", - "dotenv": "^16.1.4" + "@subsquid/typeorm-config": "^4.1.0", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-code-printer": "^1.2.2", + "@subsquid/util-internal-ts-node": "^0.0.0", + "commander": "^11.1.0", + "dotenv": "^16.3.1" }, "bin": { "squid-typeorm-migration": "bin/squid-typeorm-migration", @@ -2793,43 +2999,75 @@ "squid-typeorm-migration-revert": "bin/squid-typeorm-migration-revert" }, "peerDependencies": { - "typeorm": "^0.3.16" + "typeorm": "^0.3.17" } }, "node_modules/@subsquid/typeorm-migration/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "node_modules/@subsquid/typeorm-migration/node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "engines": { "node": ">=16" } }, "node_modules/@subsquid/typeorm-store": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-store/-/typeorm-store-1.2.2.tgz", - "integrity": "sha512-pp2PvmK51KzpWlGQxDzqoxNnAr5vcMYlA0NLRUM3xHnqlkxwgIrJLRqwmAOYlOiQp0YHqqdFbjtraJXjftCiHA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-store/-/typeorm-store-1.2.6.tgz", + "integrity": "sha512-fsQTEf9QUXny1qb3qEoH5U3aPYhOtN7fE+3K62w6qVK0h+/PJAtS0w16MeYtDlEQbzYud8ttmVSagV1A93qnRA==", "dependencies": { - "@subsquid/typeorm-config": "^3.3.0", - "@subsquid/util-internal": "^2.5.0" + "@subsquid/typeorm-config": "^4.0.0", + "@subsquid/util-internal": "^3.0.0" }, "peerDependencies": { - "typeorm": "^0.3.16" + "typeorm": "^0.3.17" } }, "node_modules/@subsquid/typeorm-store/node_modules/@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" + }, + "node_modules/@subsquid/util-internal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-1.1.0.tgz", + "integrity": "sha512-O6m666RDcWEw4vb3bmeNZKlAa1rGOHQvS0nhZFTBXnxZpqK/pU5N0jrQ7X/3is0pY2RKxFoxTurZjhv4QdxtqA==" + }, + "node_modules/@subsquid/util-internal-archive-client": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-archive-client/-/util-internal-archive-client-0.1.0.tgz", + "integrity": "sha512-bXFNZvXduKzG3NjPLmFPU5B+r+UHXT45Yr5YOpgD9sZvrHbNc/n877jSEt1qnzUJKnTl1hxtXlXvpwIBEjKT3Q==", + "dependencies": { + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-range": "^0.1.0" + }, + "peerDependencies": { + "@subsquid/http-client": "^1.3.2", + "@subsquid/logger": "^1.3.2" + }, + "peerDependenciesMeta": { + "@subsquid/logger": { + "optional": true + } + } + }, + "node_modules/@subsquid/util-internal-archive-client/node_modules/@subsquid/util-internal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, - "node_modules/@subsquid/util-internal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-1.1.0.tgz", - "integrity": "sha512-O6m666RDcWEw4vb3bmeNZKlAa1rGOHQvS0nhZFTBXnxZpqK/pU5N0jrQ7X/3is0pY2RKxFoxTurZjhv4QdxtqA==" + "node_modules/@subsquid/util-internal-archive-client/node_modules/@subsquid/util-internal-range": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.1.0.tgz", + "integrity": "sha512-+pJeJyH0oetqu2eRwOkP7NCSaCGzLpCCNpS9Fwi968RL+LfWSKn+wGUX6Ulf0afSslvrQ/34ZtyWdjyya1AGxA==", + "dependencies": { + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-binary-heap": "^1.0.0" + } }, "node_modules/@subsquid/util-internal-binary-heap": { "version": "1.0.0", @@ -2837,9 +3075,9 @@ "integrity": "sha512-88auuc8yNFmCZugmJSTYzS7WM/nN2obKGQCgrl8Jty5rJUFbqazGSi8icqftKhv6MPtUMJ3PSTRLiTFXAUGnAA==" }, "node_modules/@subsquid/util-internal-code-printer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-code-printer/-/util-internal-code-printer-1.2.0.tgz", - "integrity": "sha512-UZgNiYs5C/aSBYXXi9LgWyjJ2Uy/0uYowNq8Hx4OhraJq8OoqS5Ef0K/RMf7+4tpgvuArocJUcpvtRCKWewvbA==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-code-printer/-/util-internal-code-printer-1.2.2.tgz", + "integrity": "sha512-uerf8T/FU4bxxhat09MgRrdmwifLwV+tO7QvlMvZ5ccwaVrJjHs+0/LY/h1e9YowH3+ZtwPqjYrd5tNOHWX8wA==" }, "node_modules/@subsquid/util-internal-config": { "version": "1.0.1", @@ -2852,9 +3090,9 @@ } }, "node_modules/@subsquid/util-internal-counters": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-counters/-/util-internal-counters-1.3.0.tgz", - "integrity": "sha512-/Eeu9d3gW50nFSp49PDYrioIJdczR+wPlXBCe8EIMTUFEySIhhxFPB7y4JqL2pnUrK2UqAgyKoTx0diqP6fdxA==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-counters/-/util-internal-counters-1.3.2.tgz", + "integrity": "sha512-GxpOIL36JXSo0KdOT7k6CsI4DY804rn/X7pTdfKhych0ReHaDghnwNyvgb7Njv9euEHWUt4MxXbfQ9YrbpPDng==" }, "node_modules/@subsquid/util-internal-hex": { "version": "1.2.2", @@ -2862,13 +3100,45 @@ "integrity": "sha512-E43HVqf23jP5hvtWF9GsiN8luANjnJ1daR2SVTwaIUAYU/uNjv1Bi6tHz2uexlflBhyxAgBDmHgunXZ45wQTIw==" }, "node_modules/@subsquid/util-internal-http-server": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-http-server/-/util-internal-http-server-1.2.0.tgz", - "integrity": "sha512-eaOreTdStkB405Lg07CNmoi7BmUVYyHLsNiMcvH+CUyiqI4dwkGd5JwXJek+GbEvaixiKF3t7Km/SX8bH2BJEA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-http-server/-/util-internal-http-server-1.2.2.tgz", + "integrity": "sha512-B2SOSz8frUkXarbsELljew25iXFFyATEtS8NV31xKUXmhYfPklqrcF4YNJ/aLlfCtVOiR042YKVZDx2T8RbN6w==", "dependencies": { "stoppable": "^1.1.0" } }, + "node_modules/@subsquid/util-internal-ingest-tools": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-ingest-tools/-/util-internal-ingest-tools-1.1.0.tgz", + "integrity": "sha512-Zk5IPrclv+OrAV6EFQWGQS86YfN51/tLKKW137VzFPCWNEBSPCXu5lYe/hCwwW34k+gtf5TYLb3s69d2P1e/lg==", + "dependencies": { + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-range": "^0.1.0" + }, + "peerDependencies": { + "@subsquid/util-internal-archive-client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@subsquid/util-internal-archive-client": { + "optional": true + } + } + }, + "node_modules/@subsquid/util-internal-ingest-tools/node_modules/@subsquid/util-internal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" + }, + "node_modules/@subsquid/util-internal-ingest-tools/node_modules/@subsquid/util-internal-range": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.1.0.tgz", + "integrity": "sha512-+pJeJyH0oetqu2eRwOkP7NCSaCGzLpCCNpS9Fwi968RL+LfWSKn+wGUX6Ulf0afSslvrQ/34ZtyWdjyya1AGxA==", + "dependencies": { + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-binary-heap": "^1.0.0" + } + }, "node_modules/@subsquid/util-internal-json": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@subsquid/util-internal-json/-/util-internal-json-1.2.2.tgz", @@ -2881,6 +3151,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@subsquid/util-internal-processor-tools/-/util-internal-processor-tools-2.0.0.tgz", "integrity": "sha512-QEeCoXZ9/OvLKytVW9tGTxOb2h1NxW4o9UFteWEEMhsDh11cHQ2TVn+kynQ5OPLIq1cXZZD0NmYGN1pRD11y/Q==", + "peer": true, "dependencies": { "@subsquid/logger": "^1.3.0", "@subsquid/util-internal": "^2.4.0", @@ -2893,14 +3164,15 @@ "node_modules/@subsquid/util-internal-processor-tools/node_modules/@subsquid/util-internal": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "peer": true }, "node_modules/@subsquid/util-internal-prometheus-server": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-prometheus-server/-/util-internal-prometheus-server-1.2.0.tgz", - "integrity": "sha512-VvYAg1qUK3aDmPNMNsjjXFgSt8iOZ4B6A+QTLAdkZO9r+aOU5rSAe6r03BpxKSwgBqGH40RNhi8pn2w5zShQ0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-prometheus-server/-/util-internal-prometheus-server-1.2.2.tgz", + "integrity": "sha512-KOjokVhs+qJOZSkM+NPZ/XE5bGvEGGJkVbMaJJfaZ+UfZQPQDfVJrI2rPV5D9FwzctxKG9b7lPArryBIUsgrZw==", "dependencies": { - "@subsquid/util-internal-http-server": "^1.2.0" + "@subsquid/util-internal-http-server": "^1.2.2" }, "peerDependencies": { "prom-client": "^14.2.0" @@ -2910,6 +3182,7 @@ "version": "0.0.0", "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.0.0.tgz", "integrity": "sha512-faj70/0jk/of0VFIbrVUlzRPEGNWZTApwetBF0EP1UfW09349Q5LowqCtbuC0TYHQtnm7Qvz5rBG5K0bFGI8Lw==", + "peer": true, "dependencies": { "@subsquid/util-internal": "^2.4.0", "@subsquid/util-internal-binary-heap": "^1.0.0" @@ -2918,17 +3191,41 @@ "node_modules/@subsquid/util-internal-range/node_modules/@subsquid/util-internal": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "peer": true + }, + "node_modules/@subsquid/util-internal-ts-node": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-ts-node/-/util-internal-ts-node-0.0.0.tgz", + "integrity": "sha512-VBnrKrkNcqbT3hMLrjpEPuwMAihFhW9oUmK53bccBCCXrUiATNUblQD2S4IWd9/UBO5Q33ohpbE9sAodDq2DXw==" + }, + "node_modules/@subsquid/util-internal-validation": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-validation/-/util-internal-validation-0.1.0.tgz", + "integrity": "sha512-Lds60OAfXRPRxSKpIimeV3lGJzqU6nWE8qZBfw5t0GPKagb5VipUt9vq98IO4M4gRBQOUP0rrBDkiWsrGufK7A==", + "peerDependencies": { + "@subsquid/logger": "^1.3.2" + }, + "peerDependenciesMeta": { + "@subsquid/logger": { + "optional": true + } + } }, "node_modules/@subsquid/util-naming": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-naming/-/util-naming-1.2.0.tgz", - "integrity": "sha512-mFFFh3CLd4IOm5OIl0tyhGvL6s+LQqtGgq8mD4oCZuzC2IhRNJ7D1KAv8JTZsxzOhHfLeibF2xvdN5jBwSLEyg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-naming/-/util-naming-1.2.2.tgz", + "integrity": "sha512-NveXOiAbWiWkWd3Iv2jEwSAKvQHOG/HfIsPmmNab8TPX/XgJ6J5Ngx6lHEiqs746m4sOhZ2yipxKAEDgrERaxA==", "dependencies": { "camelcase": "^6.3.0", "inflected": "^2.1.0" } }, + "node_modules/@subsquid/util-timeout": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-timeout/-/util-timeout-2.3.2.tgz", + "integrity": "sha512-DVUnuiWAX7/4ZvbzuHENUShEEV4G0M38mQ/+R8DpHxwpCSrtEaSRaUMwdyUSn/WVqR7wo9+jkLCxFjE5feCURQ==" + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -3000,9 +3297,9 @@ } }, "node_modules/@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", "dependencies": { "@types/node": "*" } @@ -3016,21 +3313,6 @@ "@types/node": "*" } }, - "node_modules/@types/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, "node_modules/@types/cli-progress": { "version": "3.11.2", "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.2.tgz", @@ -3041,9 +3323,9 @@ } }, "node_modules/@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { "@types/node": "*" } @@ -3053,6 +3335,12 @@ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/expect": { "version": "1.20.4", "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", @@ -3096,14 +3384,14 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/lodash": { @@ -3118,9 +3406,9 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz", + "integrity": "sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==" }, "node_modules/@types/minimatch": { "version": "5.1.2", @@ -3128,9 +3416,12 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "node_modules/@types/node": { - "version": "18.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" + "version": "18.19.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.7.tgz", + "integrity": "sha512-IGRJfoNX10N/PfrReRZ1br/7SQ+2vF/tK3KXNwzXz82D32z5dMQEoOlFew18nLSN+vMNcLY4GrKfzwi/yWI8/w==", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -3145,19 +3436,19 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==" + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", - "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -3177,9 +3468,9 @@ "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==" }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -3231,52 +3522,54 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.4.tgz", - "integrity": "sha512-TZ5ghzhmg3COQqfBShL+zRQEInHmV9TSwghTdfkHpCTyTOr+rxo6x41vCNcVfWysWULtqtBVpY6YFNovxnESfA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.2.0.tgz", + "integrity": "sha512-YvX8ULTUm1+zkvkl14IqXYGxE1h13OXKPoDsxazARKlp4YLrP28hHEBdplaU7ZTN/Yn6zy6Z3JadWNRJwcmyrQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@bcoe/v8-coverage": "^0.2.3", - "istanbul-lib-coverage": "^3.2.0", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.5", - "magic-string": "^0.30.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.2", "picocolors": "^1.0.0", - "std-env": "^3.3.3", + "std-env": "^3.5.0", "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.1.0" + "v8-to-istanbul": "^9.2.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": ">=0.32.0 <1" + "vitest": "^1.0.0" } }, "node_modules/@vitest/expect": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.4.tgz", - "integrity": "sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.0.tgz", + "integrity": "sha512-H+2bHzhyvgp32o7Pgj2h9RTHN0pgYaoi26Oo3mE+dCi1PAqV31kIIVfTbqMO3Bvshd5mIrJLc73EwSRrbol9Lw==", "dev": true, "dependencies": { - "@vitest/spy": "0.34.4", - "@vitest/utils": "0.34.4", - "chai": "^4.3.7" + "@vitest/spy": "1.2.0", + "@vitest/utils": "1.2.0", + "chai": "^4.3.10" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.4.tgz", - "integrity": "sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.0.tgz", + "integrity": "sha512-vaJkDoQaNUTroT70OhM0NPznP7H3WyRwt4LvGwCVYs/llLaqhoSLnlIhUClZpbF5RgAee29KRcNz0FEhYcgxqA==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.4", - "p-limit": "^4.0.0", + "@vitest/utils": "1.2.0", + "p-limit": "^5.0.0", "pathe": "^1.1.1" }, "funding": { @@ -3284,15 +3577,15 @@ } }, "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dev": true, "dependencies": { "yocto-queue": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3311,40 +3604,41 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.4.tgz", - "integrity": "sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.0.tgz", + "integrity": "sha512-P33EE7TrVgB3HDLllrjK/GG6WSnmUtWohbwcQqmm7TAk9AVHpdgf7M3F3qRHKm6vhr7x3eGIln7VH052Smo6Kw==", "dev": true, "dependencies": { - "magic-string": "^0.30.1", + "magic-string": "^0.30.5", "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.4.tgz", - "integrity": "sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.0.tgz", + "integrity": "sha512-MNxSAfxUaCeowqyyGwC293yZgk7cECZU9wGb8N1pYQ0yOn/SIr8t0l9XnGRdQZvNV/ZHBYu6GO/W3tj5K3VN1Q==", "dev": true, "dependencies": { - "tinyspy": "^2.1.1" + "tinyspy": "^2.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.4.tgz", - "integrity": "sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-FyD5bpugsXlwVpTcGLDf3wSPYy8g541fQt14qtzo8mJ4LdEpDKZ9mQy2+qdJm2TZRpjY5JLXihXCgIxiRJgi5g==", "dev": true, "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -3381,9 +3675,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "devOptional": true, "bin": { "acorn": "bin/acorn" @@ -3393,9 +3687,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "devOptional": true, "engines": { "node": ">=0.4.0" @@ -3562,10 +3856,9 @@ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" }, "node_modules/apollo-server-core": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", - "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", - "deprecated": "The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.13.0.tgz", + "integrity": "sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg==", "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", "@apollo/utils.logger": "^1.0.0", @@ -3598,6 +3891,43 @@ "graphql": "^15.3.0 || ^16.0.0" } }, + "node_modules/apollo-server-core/node_modules/@graphql-tools/merge": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz", + "integrity": "sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==", + "dependencies": { + "@graphql-tools/utils": "8.9.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/apollo-server-core/node_modules/@graphql-tools/schema": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz", + "integrity": "sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==", + "dependencies": { + "@graphql-tools/merge": "8.3.1", + "@graphql-tools/utils": "8.9.0", + "tslib": "^2.4.0", + "value-or-promise": "1.0.11" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/apollo-server-core/node_modules/@graphql-tools/utils": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", + "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/apollo-server-core/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3609,6 +3939,14 @@ "node": ">=10" } }, + "node_modules/apollo-server-core/node_modules/value-or-promise": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", + "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", + "engines": { + "node": ">=12" + } + }, "node_modules/apollo-server-env": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", @@ -3634,10 +3972,9 @@ } }, "node_modules/apollo-server-express": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", - "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", - "deprecated": "The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.13.0.tgz", + "integrity": "sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g==", "dependencies": { "@types/accepts": "^1.3.5", "@types/body-parser": "1.19.2", @@ -3645,7 +3982,7 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.12.1", + "apollo-server-core": "^3.13.0", "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", @@ -4292,9 +4629,9 @@ } }, "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -4431,12 +4768,13 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4467,18 +4805,18 @@ } }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -4523,10 +4861,13 @@ "dev": true }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "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, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -4954,9 +5295,9 @@ } }, "node_modules/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==", + "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 }, "node_modules/cookie": { @@ -4996,6 +5337,17 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "devOptional": true }, + "node_modules/cross-inspect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -5067,6 +5419,7 @@ "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -5087,6 +5440,11 @@ "node": "*" } }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5140,14 +5498,14 @@ } }, "node_modules/deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dependencies": { "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", @@ -5157,11 +5515,14 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5188,6 +5549,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -5328,11 +5702,18 @@ "x256": ">=0.0.1" } }, + "node_modules/dset": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/easy-table": { "version": "1.2.0", @@ -5575,9 +5956,9 @@ } }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", "dev": true, "hasInstallScript": true, "bin": { @@ -5587,28 +5968,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" } }, "node_modules/escalade": { @@ -5649,6 +6031,15 @@ "node": ">=4" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -5658,9 +6049,9 @@ } }, "node_modules/ethers": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", - "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", + "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", "funding": [ { "type": "individual", @@ -5672,9 +6063,9 @@ } ], "dependencies": { - "@adraffy/ens-normalize": "1.9.2", - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.7.1", + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", "@types/node": "18.15.13", "aes-js": "4.0.0-beta.5", "tslib": "2.4.0", @@ -6180,7 +6571,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6196,7 +6586,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6210,7 +6599,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -6219,7 +6607,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6231,7 +6618,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -6240,7 +6626,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "engines": { "node": ">=14" }, @@ -6252,7 +6637,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6357,9 +6741,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", @@ -6416,23 +6803,23 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "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, "engines": { "node": "*" } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6518,6 +6905,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6605,9 +6993,9 @@ } }, "node_modules/graphql-parse-resolve-info": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/graphql-parse-resolve-info/-/graphql-parse-resolve-info-4.13.0.tgz", - "integrity": "sha512-VVJ1DdHYcR7hwOGQKNH+QTzuNgsLA8l/y436HtP9YHoX6nmwXRWq3xWthU3autMysXdm0fQUbhTZCx0W9ICozw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/graphql-parse-resolve-info/-/graphql-parse-resolve-info-4.14.0.tgz", + "integrity": "sha512-5Fbquh3IZMciLYgtiWeFxAeZOwpPyonhbaN05fzL/Gll0HS0hMqJh1Q88NQLHiASD6//cJ3LTXLncuajRqsUcA==", "dependencies": { "debug": "^4.1.1", "tslib": "^2.0.1" @@ -6656,9 +7044,9 @@ } }, "node_modules/graphql-ws": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.0.tgz", - "integrity": "sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.3.tgz", + "integrity": "sha512-F/i2xNIVbaEF2xWggID0X/UZQa2V8kqKDPO8hwmu53bVOcTL7uNkxnexeEgSCVxYBQUTUNEI8+e4LO1FOhKPKQ==", "engines": { "node": ">=10" }, @@ -6724,11 +7112,11 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6776,6 +7164,17 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/here": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/here/-/here-0.0.2.tgz", @@ -7540,13 +7939,12 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "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, "engines": { "node": ">=8" @@ -7626,10 +8024,9 @@ "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", - "dev": true, + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7776,9 +8173,9 @@ "dev": true }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dependencies": { "json-buffer": "3.0.1" } @@ -7893,10 +8290,14 @@ } }, "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, "engines": { "node": ">=14" }, @@ -8001,12 +8402,12 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { @@ -8018,9 +8419,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -8029,6 +8430,17 @@ "node": ">=12" } }, + "node_modules/magicast": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "source-map-js": "^1.0.2" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -8366,6 +8778,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8538,15 +8951,15 @@ } }, "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", "dev": true, "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", + "acorn": "^8.11.3", + "pathe": "^1.1.2", "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "ufo": "^1.3.2" } }, "node_modules/ms": { @@ -8618,9 +9031,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -8751,9 +9164,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -9940,7 +10353,6 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -9956,7 +10368,6 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, "engines": { "node": "14 || >=16.14" } @@ -9965,7 +10376,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -9985,9 +10395,9 @@ } }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "node_modules/pathval": { @@ -10171,9 +10581,9 @@ "dev": true }, "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "dev": true, "funding": [ { @@ -10190,7 +10600,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -11151,16 +11561,17 @@ "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -11297,18 +11708,34 @@ } }, "node_modules/rollup": { - "version": "3.29.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.1.tgz", - "integrity": "sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", + "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", "fsevents": "~2.3.2" } }, @@ -11505,6 +11932,34 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -12117,9 +12572,9 @@ } }, "node_modules/std-env": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", - "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, "node_modules/stop-iteration-iterator": { @@ -12175,7 +12630,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12263,7 +12717,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12737,24 +13190,24 @@ "dev": true }, "node_modules/tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", "dev": true }, "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", + "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true, "engines": { "node": ">=14.0.0" @@ -12778,6 +13231,15 @@ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13324,19 +13786,19 @@ } }, "node_modules/typeorm": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.17.tgz", - "integrity": "sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.19.tgz", + "integrity": "sha512-OGelrY5qEoAU80mR1iyvmUHiKCPUydL6xp6bebXzS7jyv/X70Gp/jBWRAfF4qGOfy2A7orMiGRfwsBUNbEL65g==", "dependencies": { "@sqltools/formatter": "^1.2.5", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "chalk": "^4.1.2", "cli-highlight": "^2.1.11", - "date-fns": "^2.29.3", + "dayjs": "^1.11.9", "debug": "^4.3.4", "dotenv": "^16.0.3", - "glob": "^8.1.0", + "glob": "^10.3.10", "mkdirp": "^2.1.3", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", @@ -13358,13 +13820,13 @@ "peerDependencies": { "@google-cloud/spanner": "^5.18.0", "@sap/hana-client": "^2.12.25", - "better-sqlite3": "^7.1.2 || ^8.0.0", + "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", - "mongodb": "^5.2.0", - "mssql": "^9.1.1", + "mongodb": "^5.8.0", + "mssql": "^9.1.1 || ^10.0.1", "mysql2": "^2.2.5 || ^3.0.1", - "oracledb": "^5.1.0", + "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", @@ -13451,6 +13913,27 @@ "ieee754": "^1.2.1" } }, + "node_modules/typeorm/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typeorm/node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -13470,6 +13953,28 @@ } ] }, + "node_modules/typeorm/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/typescript": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", @@ -13484,9 +13989,9 @@ } }, "node_modules/ufo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.0.tgz", - "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", "dev": true }, "node_modules/unbox-primitive": { @@ -13504,6 +14009,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -13640,23 +14150,23 @@ "devOptional": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -13692,9 +14202,9 @@ } }, "node_modules/value-or-promise": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", - "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", "engines": { "node": ">=12" } @@ -13750,29 +14260,29 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -13805,82 +14315,79 @@ } }, "node_modules/vite-node": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.4.tgz", - "integrity": "sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.0.tgz", + "integrity": "sha512-ETnQTHeAbbOxl7/pyBck9oAPZZZo+kYnFt1uQDD+hPReOc+wCjXw4r4jHriBRuVDB5isHmPXxrfc1yJnfBERqg==", "dev": true, "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/vitest": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.4.tgz", - "integrity": "sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.0.tgz", + "integrity": "sha512-Ixs5m7BjqvLHXcibkzKRQUvD/XLw0E3rvqaCMlrm/0LMsA0309ZqYvTlPzkhh81VlEyVZXFlwWnkhb6/UMtcaQ==", "dev": true, "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.4", - "@vitest/runner": "0.34.4", - "@vitest/snapshot": "0.34.4", - "@vitest/spy": "0.34.4", - "@vitest/utils": "0.34.4", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", + "@vitest/expect": "1.2.0", + "@vitest/runner": "1.2.0", + "@vitest/snapshot": "1.2.0", + "@vitest/spy": "1.2.0", + "@vitest/utils": "1.2.0", + "acorn-walk": "^8.3.1", "cac": "^6.7.14", - "chai": "^4.3.7", + "chai": "^4.3.10", "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.4", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.2.0", "why-is-node-running": "^2.2.2" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "^1.0.0", + "@vitest/ui": "^1.0.0", "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" + "jsdom": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, + "@types/node": { + "optional": true + }, "@vitest/browser": { "optional": true }, @@ -13892,18 +14399,202 @@ }, "jsdom": { "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true } } }, + "node_modules/vitest/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vitest/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/vitest/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/vitest/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/npm-run-path/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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/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, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vitest/node_modules/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==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vitest/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vitest/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/vitest/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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/walk-up-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", @@ -13920,9 +14611,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "engines": { "node": ">= 8" } @@ -14033,12 +14724,12 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -14117,7 +14808,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14168,9 +14858,9 @@ } }, "node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -15694,9 +16384,9 @@ }, "dependencies": { "@adraffy/ens-normalize": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", - "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" }, "@ampproject/remapping": { "version": "2.2.1", @@ -15886,10 +16576,16 @@ } } }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/highlight": { @@ -15961,14 +16657,32 @@ } } }, + "@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true + }, "@babel/runtime": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dev": true, "requires": { "regenerator-runtime": "^0.14.0" } }, + "@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -16005,157 +16719,164 @@ "@jridgewell/trace-mapping": "0.3.9" } }, + "@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "dev": true, + "optional": true + }, "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", "dev": true, "optional": true }, @@ -16172,23 +16893,12 @@ "dev": true }, "@graphql-tools/merge": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", - "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz", + "integrity": "sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==", "requires": { - "@graphql-tools/utils": "^9.2.1", + "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - } - } } }, "@graphql-tools/mock": { @@ -16202,6 +16912,15 @@ "tslib": "^2.4.0" }, "dependencies": { + "@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "requires": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + } + }, "@graphql-tools/schema": { "version": "9.0.19", "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", @@ -16221,49 +16940,28 @@ "@graphql-typed-document-node/core": "^3.1.1", "tslib": "^2.4.0" } - }, - "value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==" } } }, "@graphql-tools/schema": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz", - "integrity": "sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz", + "integrity": "sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==", "requires": { - "@graphql-tools/merge": "8.3.1", - "@graphql-tools/utils": "8.9.0", + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "dependencies": { - "@graphql-tools/merge": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz", - "integrity": "sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==", - "requires": { - "@graphql-tools/utils": "8.9.0", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/utils": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", - "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", - "requires": { - "tslib": "^2.4.0" - } - } + "value-or-promise": "^1.0.12" } }, "@graphql-tools/utils": { - "version": "8.13.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.13.1.tgz", - "integrity": "sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==", + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.12.tgz", + "integrity": "sha512-+yS1qlFwXlwU3Gv8ek/h2aJ95quog4yF22haC11M0zReMSTddbGJZ5yXKkE3sXoY2BcL1utilSFjylJ9uXpSNQ==", "requires": { + "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", + "dset": "^3.1.2", "tslib": "^2.4.0" } }, @@ -16282,7 +16980,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "requires": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -16295,26 +16992,22 @@ "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "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 + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, "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 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -16325,7 +17018,6 @@ "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" } @@ -16334,7 +17026,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -16431,15 +17122,18 @@ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "requires": { + "@noble/hashes": "1.3.2" + } }, - "@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==" + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -17161,7 +17855,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true }, "@protobufjs/aspromise": { @@ -17218,6 +17911,97 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", + "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", + "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", + "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", + "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", + "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", + "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", + "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", + "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", + "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", + "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", + "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", + "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", + "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "dev": true, + "optional": true + }, "@sigstore/bundle": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", @@ -17456,9 +18240,9 @@ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" }, "@subsquid/archive-registry": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/archive-registry/-/archive-registry-3.2.0.tgz", - "integrity": "sha512-qEzFODDVwEx+3cdmk4LPAKoLzjcBcqvhhLovEWOUKxN+S9SZaOWYHf7yq1pi48X6nUSVLmK7rofBx+pS4hIU7Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@subsquid/archive-registry/-/archive-registry-3.3.0.tgz", + "integrity": "sha512-moXnGNOSmKMHyuDvUiOHbpL7IePSo4XZOW9OnzESIND64eGxlKusIsCi8Nth1DgzbE/UTTFeNJvYKu0v7SOIqw==", "requires": { "@subsquid/util-internal": "^1.0.0", "commander": "^10.0.0", @@ -17542,67 +18326,83 @@ } }, "@subsquid/evm-processor": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@subsquid/evm-processor/-/evm-processor-1.8.2.tgz", - "integrity": "sha512-JMVSx/ZHooidVFb7PPR5hjesGItf31Lf9TDJaP8GixoXJd+YoRQbZZXe0kJvcewtHjzGqMK07j6gbJPiJcXzpg==", - "requires": { - "@subsquid/http-client": "^1.3.0", - "@subsquid/logger": "^1.3.0", - "@subsquid/rpc-client": "^4.4.1", - "@subsquid/util-internal": "^2.5.1", - "@subsquid/util-internal-archive-client": "^0.0.0", - "@subsquid/util-internal-hex": "^1.2.0", - "@subsquid/util-internal-processor-tools": "^2.0.0" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@subsquid/evm-processor/-/evm-processor-1.13.0.tgz", + "integrity": "sha512-5zHobJwUeqKcRbceP8wECCmRM7HSPL3ybINH/ZFGco8xA5dUFkTnsdR1UqubXxRfQ8J+1NHrMJv1eKo32bR8lQ==", + "requires": { + "@subsquid/http-client": "^1.3.2", + "@subsquid/logger": "^1.3.2", + "@subsquid/rpc-client": "^4.6.0", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-archive-client": "^0.1.0", + "@subsquid/util-internal-hex": "^1.2.2", + "@subsquid/util-internal-ingest-tools": "^1.1.0", + "@subsquid/util-internal-processor-tools": "^4.0.0", + "@subsquid/util-internal-range": "^0.1.0", + "@subsquid/util-internal-validation": "^0.1.0", + "@subsquid/util-timeout": "^2.3.2" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, - "@subsquid/util-internal-archive-client": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-archive-client/-/util-internal-archive-client-0.0.0.tgz", - "integrity": "sha512-tsVxjiFSq3SZUP2RQOTF6ca1ZeKhlpcIb0kb+KPbUaOv13H2YNo9vjG1RpW+f4/Sr7ARo7EOkIOgQb9t+u/2VQ==", + "@subsquid/util-internal-processor-tools": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-processor-tools/-/util-internal-processor-tools-4.0.0.tgz", + "integrity": "sha512-2azcdJIQQSDKAra0ct0QGCp4cYnsdbqOeIroIdvnOxs4HhOp6XkXEMg/NQ2tRGVW8yJEmn2bUvd5i8S1WBjDZA==", + "requires": { + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-counters": "^1.3.2", + "@subsquid/util-internal-prometheus-server": "^1.2.2", + "@subsquid/util-internal-range": "^0.1.0", + "prom-client": "^14.2.0" + } + }, + "@subsquid/util-internal-range": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.1.0.tgz", + "integrity": "sha512-+pJeJyH0oetqu2eRwOkP7NCSaCGzLpCCNpS9Fwi968RL+LfWSKn+wGUX6Ulf0afSslvrQ/34ZtyWdjyya1AGxA==", "requires": { - "@subsquid/http-client": "^1.3.0", - "@subsquid/util-internal": "^2.5.1", - "@subsquid/util-internal-range": "^0.0.0" + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-binary-heap": "^1.0.0" } } } }, "@subsquid/evm-typegen": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@subsquid/evm-typegen/-/evm-typegen-3.2.2.tgz", - "integrity": "sha512-DzjzUwjJNJM74skZCuYPMKYhvDg2KLRdt1ooiOpgH91zEmcS8wx70dtdOtQxDIDm1Bbt/pfS3Yntq7CjbeI2/g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@subsquid/evm-typegen/-/evm-typegen-3.2.4.tgz", + "integrity": "sha512-yw0yCm4+8bmWDf8kqbxvp4dZGzoRKEqXkNGdPTz52icAVaCsq7Ih2a8Nq51rfQNwXEP20uoUPCrltC/qKxMu9A==", "dev": true, "requires": { - "@subsquid/http-client": "^1.2.0", - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.4.0", - "@subsquid/util-internal-code-printer": "^1.2.0", - "@subsquid/util-internal-commander": "^1.3.0", - "commander": "^11.0.0" + "@subsquid/http-client": "^1.3.2", + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-code-printer": "^1.2.2", + "@subsquid/util-internal-commander": "^1.3.2", + "commander": "^11.1.0" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==", "dev": true }, "@subsquid/util-internal-commander": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.0.tgz", - "integrity": "sha512-ZSPzYjNZ/k/6qDa7xdrCgXkq/whYnVPLF8nX+35aAgrM+ShX7XUg/Dq6u0rW3u3sfWcKzsNFHbFB8SzjWN5StA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.2.tgz", + "integrity": "sha512-9/1vI1dmGQMp5wjN6hb94VCnSosT+caob33tAesFaIdqLzqQlDtlTSRq1TFFossAgtsEJFi7GiQ8i31L/gaxSQ==", "dev": true, "requires": {} }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true } } @@ -17630,67 +18430,68 @@ "integrity": "sha512-C89mus6IXnNi0xMQrZqUFBZwLj8tbuq9lye8Gq/lHmmERAUpi6UsWEyLdJLx2mneZzF3JtY8eNiiZ16jmjtvfw==" }, "@subsquid/graphql-server": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/graphql-server/-/graphql-server-4.3.0.tgz", - "integrity": "sha512-Ws2uHJyhgNgo3uJZQ4XYKAPvnOGJ3wXq/XhcX/b3z2OeiCv89daB+V6Lzf6nBsVBg9D2Ev0vNWIVRKJQbEn+mA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@subsquid/graphql-server/-/graphql-server-4.5.0.tgz", + "integrity": "sha512-SKCq6qF8FGrsrzFpjLzyDf3Cbcp4e8Z2M+t6Er3en7WLY3jZtdEGf3HbfCH6ukhQoJ72lUSNsESdwEoazOslRA==", "requires": { "@apollo/utils.keyvadapter": "~1.1.2", "@apollo/utils.keyvaluecache": "~1.0.2", - "@graphql-tools/merge": "^8", - "@graphql-tools/schema": "^8", - "@graphql-tools/utils": "^8", + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/schema": "^10.0.2", + "@graphql-tools/utils": "^10.0.11", "@keyv/redis": "~2.5.8", - "@subsquid/logger": "^1.3.0", - "@subsquid/openreader": "^4.4.0", - "@subsquid/typeorm-config": "^3.3.0", - "@subsquid/util-internal": "^2.5.0", - "@subsquid/util-internal-commander": "^1.3.0", - "@subsquid/util-internal-http-server": "^1.2.0", - "apollo-server-core": "^3.12.0", - "apollo-server-express": "^3.12.0", + "@subsquid/logger": "^1.3.2", + "@subsquid/openreader": "^4.5.0", + "@subsquid/typeorm-config": "^4.1.0", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-commander": "^1.3.2", + "@subsquid/util-internal-http-server": "^1.2.2", + "@subsquid/util-internal-ts-node": "^0.0.0", + "apollo-server-core": "^3.13.0", + "apollo-server-express": "^3.13.0", "apollo-server-plugin-response-cache": "~3.7.1", - "commander": "^11.0.0", - "dotenv": "^16.1.4", + "commander": "^11.1.0", + "dotenv": "^16.3.1", "express": "^4.18.2", "graphql": "^15.8.0", - "graphql-ws": "^5.13.1", - "keyv": "~4.5.2", - "pg": "^8.11.0", - "ws": "^8.13.0" + "graphql-ws": "^5.14.2", + "keyv": "~4.5.4", + "pg": "^8.11.3", + "ws": "^8.14.2" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "@subsquid/util-internal-commander": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.0.tgz", - "integrity": "sha512-ZSPzYjNZ/k/6qDa7xdrCgXkq/whYnVPLF8nX+35aAgrM+ShX7XUg/Dq6u0rW3u3sfWcKzsNFHbFB8SzjWN5StA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.2.tgz", + "integrity": "sha512-9/1vI1dmGQMp5wjN6hb94VCnSosT+caob33tAesFaIdqLzqQlDtlTSRq1TFFossAgtsEJFi7GiQ8i31L/gaxSQ==", "requires": {} }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==" } } }, "@subsquid/http-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/http-client/-/http-client-1.3.0.tgz", - "integrity": "sha512-GV31imnZf1dYsbZmuXyIMtdSYtVSm06m05T0fjl+ilnOQRvafAx1rMmKVy9INksZwssVQZ/9EHC+Wy8DPw8Oeg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/http-client/-/http-client-1.3.2.tgz", + "integrity": "sha512-N9fXB2TCYzzT4CNoTibpgk4lMFNU463/ZQcSstPPMIpZA9QdDjY+mNdjLTi8L+4DzimgjEbwYfLQX5aINYvkMA==", "requires": { - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.5.1", - "node-fetch": "^3.3.1" + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "node-fetch": "^3.3.2" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "node-fetch": { "version": "3.3.2", @@ -17715,140 +18516,143 @@ } }, "@subsquid/openreader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@subsquid/openreader/-/openreader-4.4.0.tgz", - "integrity": "sha512-MiHu+PQH4frnF8RPd4F1WwdPzaaA3trBM1VuzN5cTEPPt8vBF4A1BIL78Qq1HH/HH+yLriNjmA7/IVaAFjsfgw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@subsquid/openreader/-/openreader-4.5.0.tgz", + "integrity": "sha512-A07K1TM0YY2iZjJcY2qD0jXco1S7D00OfqAnN4tqxVtj4ddLJVZ3bLIAHn7r3P3JB4iT+3daBNTTa17vH1k2XA==", "requires": { - "@graphql-tools/merge": "^8", + "@graphql-tools/merge": "^9.0.1", "@subsquid/graphiql-console": "^0.3.0", - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.5.0", - "@subsquid/util-internal-commander": "^1.3.0", - "@subsquid/util-internal-hex": "^1.2.0", - "@subsquid/util-internal-http-server": "^1.2.0", - "@subsquid/util-naming": "^1.2.0", - "apollo-server-core": "^3.12.0", - "apollo-server-express": "^3.12.0", - "commander": "^11.0.0", - "deep-equal": "^2.2.1", + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-commander": "^1.3.2", + "@subsquid/util-internal-hex": "^1.2.2", + "@subsquid/util-internal-http-server": "^1.2.2", + "@subsquid/util-naming": "^1.2.2", + "apollo-server-core": "^3.13.0", + "apollo-server-express": "^3.13.0", + "commander": "^11.1.0", + "deep-equal": "^2.2.3", "express": "^4.18.2", "graphql": "^15.8.0", - "graphql-parse-resolve-info": "^4.13.0", - "graphql-ws": "^5.13.1", - "pg": "^8.11.0", - "ws": "^8.13.0" + "graphql-parse-resolve-info": "^4.14.0", + "graphql-ws": "^5.14.2", + "pg": "^8.11.3", + "ws": "^8.14.2" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "@subsquid/util-internal-commander": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.0.tgz", - "integrity": "sha512-ZSPzYjNZ/k/6qDa7xdrCgXkq/whYnVPLF8nX+35aAgrM+ShX7XUg/Dq6u0rW3u3sfWcKzsNFHbFB8SzjWN5StA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-commander/-/util-internal-commander-1.3.2.tgz", + "integrity": "sha512-9/1vI1dmGQMp5wjN6hb94VCnSosT+caob33tAesFaIdqLzqQlDtlTSRq1TFFossAgtsEJFi7GiQ8i31L/gaxSQ==", "requires": {} }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==" } } }, "@subsquid/rpc-client": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@subsquid/rpc-client/-/rpc-client-4.4.1.tgz", - "integrity": "sha512-ZnqmJUDdj4OsZZLVHAqXhPF4vijut54PwNdLg8MlfCU4gX99oYwB/wvtulVuJckNLiXDQ3ka+CDLe/MWV2svIA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@subsquid/rpc-client/-/rpc-client-4.6.0.tgz", + "integrity": "sha512-fVTsVOag6Ge7hRqV+st9p+E+BgQa5PPu1uJns5IXSrRtIuAuy++w0OsB3WNA+EC8DZarpllxi7I3snzJpis/xQ==", "requires": { - "@subsquid/http-client": "^1.2.1", - "@subsquid/logger": "^1.3.0", - "@subsquid/util-internal": "^2.5.0", + "@subsquid/http-client": "^1.3.2", + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", "@subsquid/util-internal-binary-heap": "^1.0.0", - "@subsquid/util-internal-counters": "^1.3.0", + "@subsquid/util-internal-counters": "^1.3.2", "websocket": "^1.0.34" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" } } }, "@subsquid/typeorm-codegen": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-codegen/-/typeorm-codegen-1.3.1.tgz", - "integrity": "sha512-hHMbJvYZ9wJFnsK+NgOAC9jv1bawsss1eCrUBI3NMoCJ9xeEZOdx13eQAI+8OAPXedqCx4v0PLFZZOlAKc1/7w==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-codegen/-/typeorm-codegen-1.3.3.tgz", + "integrity": "sha512-6k1oRWnaBNX4GZX737dvZll925uZKt2or/oXNaQRnHAmrCISkIEz7dYkl6PFfppYuardch41FBSFmOQaovPCXw==", "dev": true, "requires": { - "@subsquid/openreader": "^4.3.1", - "@subsquid/util-internal": "^2.4.0", - "@subsquid/util-internal-code-printer": "^1.2.0", - "@subsquid/util-naming": "^1.2.0", - "commander": "^11.0.0" + "@subsquid/openreader": "^4.4.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-code-printer": "^1.2.2", + "@subsquid/util-naming": "^1.2.2", + "commander": "^11.1.0" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==", "dev": true }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true } } }, "@subsquid/typeorm-config": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-config/-/typeorm-config-3.3.0.tgz", - "integrity": "sha512-DJXoAQnVooEdEU3vxL33I5WRJRRPy9t+15rP17kGMkXGLuPAc0hpelJGSO5Ze9csn/IytwrZUWG6y2I2Q81nyQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-config/-/typeorm-config-4.1.0.tgz", + "integrity": "sha512-onZsHQIypCTRguOeec1Gmm+6EPlTg63QNE7Y74nrbBb4sabZtrK3K+EQJId4KIdk/kxA2Wi/g5H/VDNZNFSe9A==", "requires": { - "@subsquid/util-naming": "^1.2.0" + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal-ts-node": "^0.0.0", + "@subsquid/util-naming": "^1.2.2" } }, "@subsquid/typeorm-migration": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-migration/-/typeorm-migration-1.2.1.tgz", - "integrity": "sha512-aMo4hmqzwmFHLrdu1PXm3bGiRSodyjgmnETmnYiI11g+FbVWwTuJ3P1jBY9hrRFEr6iGb2+pYVRMme75XoNzTw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-migration/-/typeorm-migration-1.3.0.tgz", + "integrity": "sha512-+xyOvN5asKdSEUMjKRuuwLDaOSRBBCRc2LIVdsyv5nnXXcmtOShfQsHQNX9EdKD2xx4cH2bnD7ol3PY63Q2xQw==", "requires": { - "@subsquid/typeorm-config": "^3.2.0", - "@subsquid/util-internal": "^2.4.0", - "@subsquid/util-internal-code-printer": "^1.2.0", - "commander": "^11.0.0", - "dotenv": "^16.1.4" + "@subsquid/typeorm-config": "^4.1.0", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-code-printer": "^1.2.2", + "@subsquid/util-internal-ts-node": "^0.0.0", + "commander": "^11.1.0", + "dotenv": "^16.3.1" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==" } } }, "@subsquid/typeorm-store": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@subsquid/typeorm-store/-/typeorm-store-1.2.2.tgz", - "integrity": "sha512-pp2PvmK51KzpWlGQxDzqoxNnAr5vcMYlA0NLRUM3xHnqlkxwgIrJLRqwmAOYlOiQp0YHqqdFbjtraJXjftCiHA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@subsquid/typeorm-store/-/typeorm-store-1.2.6.tgz", + "integrity": "sha512-fsQTEf9QUXny1qb3qEoH5U3aPYhOtN7fE+3K62w6qVK0h+/PJAtS0w16MeYtDlEQbzYud8ttmVSagV1A93qnRA==", "requires": { - "@subsquid/typeorm-config": "^3.3.0", - "@subsquid/util-internal": "^2.5.0" + "@subsquid/typeorm-config": "^4.0.0", + "@subsquid/util-internal": "^3.0.0" }, "dependencies": { "@subsquid/util-internal": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" } } }, @@ -17857,15 +18661,40 @@ "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-1.1.0.tgz", "integrity": "sha512-O6m666RDcWEw4vb3bmeNZKlAa1rGOHQvS0nhZFTBXnxZpqK/pU5N0jrQ7X/3is0pY2RKxFoxTurZjhv4QdxtqA==" }, + "@subsquid/util-internal-archive-client": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-archive-client/-/util-internal-archive-client-0.1.0.tgz", + "integrity": "sha512-bXFNZvXduKzG3NjPLmFPU5B+r+UHXT45Yr5YOpgD9sZvrHbNc/n877jSEt1qnzUJKnTl1hxtXlXvpwIBEjKT3Q==", + "requires": { + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-range": "^0.1.0" + }, + "dependencies": { + "@subsquid/util-internal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" + }, + "@subsquid/util-internal-range": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.1.0.tgz", + "integrity": "sha512-+pJeJyH0oetqu2eRwOkP7NCSaCGzLpCCNpS9Fwi968RL+LfWSKn+wGUX6Ulf0afSslvrQ/34ZtyWdjyya1AGxA==", + "requires": { + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-binary-heap": "^1.0.0" + } + } + } + }, "@subsquid/util-internal-binary-heap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@subsquid/util-internal-binary-heap/-/util-internal-binary-heap-1.0.0.tgz", "integrity": "sha512-88auuc8yNFmCZugmJSTYzS7WM/nN2obKGQCgrl8Jty5rJUFbqazGSi8icqftKhv6MPtUMJ3PSTRLiTFXAUGnAA==" }, "@subsquid/util-internal-code-printer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-code-printer/-/util-internal-code-printer-1.2.0.tgz", - "integrity": "sha512-UZgNiYs5C/aSBYXXi9LgWyjJ2Uy/0uYowNq8Hx4OhraJq8OoqS5Ef0K/RMf7+4tpgvuArocJUcpvtRCKWewvbA==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-code-printer/-/util-internal-code-printer-1.2.2.tgz", + "integrity": "sha512-uerf8T/FU4bxxhat09MgRrdmwifLwV+tO7QvlMvZ5ccwaVrJjHs+0/LY/h1e9YowH3+ZtwPqjYrd5tNOHWX8wA==" }, "@subsquid/util-internal-config": { "version": "1.0.1", @@ -17878,9 +18707,9 @@ } }, "@subsquid/util-internal-counters": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-counters/-/util-internal-counters-1.3.0.tgz", - "integrity": "sha512-/Eeu9d3gW50nFSp49PDYrioIJdczR+wPlXBCe8EIMTUFEySIhhxFPB7y4JqL2pnUrK2UqAgyKoTx0diqP6fdxA==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-counters/-/util-internal-counters-1.3.2.tgz", + "integrity": "sha512-GxpOIL36JXSo0KdOT7k6CsI4DY804rn/X7pTdfKhych0ReHaDghnwNyvgb7Njv9euEHWUt4MxXbfQ9YrbpPDng==" }, "@subsquid/util-internal-hex": { "version": "1.2.2", @@ -17888,13 +18717,39 @@ "integrity": "sha512-E43HVqf23jP5hvtWF9GsiN8luANjnJ1daR2SVTwaIUAYU/uNjv1Bi6tHz2uexlflBhyxAgBDmHgunXZ45wQTIw==" }, "@subsquid/util-internal-http-server": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-http-server/-/util-internal-http-server-1.2.0.tgz", - "integrity": "sha512-eaOreTdStkB405Lg07CNmoi7BmUVYyHLsNiMcvH+CUyiqI4dwkGd5JwXJek+GbEvaixiKF3t7Km/SX8bH2BJEA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-http-server/-/util-internal-http-server-1.2.2.tgz", + "integrity": "sha512-B2SOSz8frUkXarbsELljew25iXFFyATEtS8NV31xKUXmhYfPklqrcF4YNJ/aLlfCtVOiR042YKVZDx2T8RbN6w==", "requires": { "stoppable": "^1.1.0" } }, + "@subsquid/util-internal-ingest-tools": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-ingest-tools/-/util-internal-ingest-tools-1.1.0.tgz", + "integrity": "sha512-Zk5IPrclv+OrAV6EFQWGQS86YfN51/tLKKW137VzFPCWNEBSPCXu5lYe/hCwwW34k+gtf5TYLb3s69d2P1e/lg==", + "requires": { + "@subsquid/logger": "^1.3.2", + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-range": "^0.1.0" + }, + "dependencies": { + "@subsquid/util-internal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-3.0.0.tgz", + "integrity": "sha512-aGPTiLF21N9f67DgHS4PBR8d6mdvXHTOIhr2mFQPX7GQCgZhNlCZDM/1Sqn+teJawCy3w6Y9f6KOtVbN4T5SFQ==" + }, + "@subsquid/util-internal-range": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.1.0.tgz", + "integrity": "sha512-+pJeJyH0oetqu2eRwOkP7NCSaCGzLpCCNpS9Fwi968RL+LfWSKn+wGUX6Ulf0afSslvrQ/34ZtyWdjyya1AGxA==", + "requires": { + "@subsquid/util-internal": "^3.0.0", + "@subsquid/util-internal-binary-heap": "^1.0.0" + } + } + } + }, "@subsquid/util-internal-json": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@subsquid/util-internal-json/-/util-internal-json-1.2.2.tgz", @@ -17907,6 +18762,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@subsquid/util-internal-processor-tools/-/util-internal-processor-tools-2.0.0.tgz", "integrity": "sha512-QEeCoXZ9/OvLKytVW9tGTxOb2h1NxW4o9UFteWEEMhsDh11cHQ2TVn+kynQ5OPLIq1cXZZD0NmYGN1pRD11y/Q==", + "peer": true, "requires": { "@subsquid/logger": "^1.3.0", "@subsquid/util-internal": "^2.4.0", @@ -17919,22 +18775,24 @@ "@subsquid/util-internal": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "peer": true } } }, "@subsquid/util-internal-prometheus-server": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-internal-prometheus-server/-/util-internal-prometheus-server-1.2.0.tgz", - "integrity": "sha512-VvYAg1qUK3aDmPNMNsjjXFgSt8iOZ4B6A+QTLAdkZO9r+aOU5rSAe6r03BpxKSwgBqGH40RNhi8pn2w5zShQ0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-prometheus-server/-/util-internal-prometheus-server-1.2.2.tgz", + "integrity": "sha512-KOjokVhs+qJOZSkM+NPZ/XE5bGvEGGJkVbMaJJfaZ+UfZQPQDfVJrI2rPV5D9FwzctxKG9b7lPArryBIUsgrZw==", "requires": { - "@subsquid/util-internal-http-server": "^1.2.0" + "@subsquid/util-internal-http-server": "^1.2.2" } }, "@subsquid/util-internal-range": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/@subsquid/util-internal-range/-/util-internal-range-0.0.0.tgz", "integrity": "sha512-faj70/0jk/of0VFIbrVUlzRPEGNWZTApwetBF0EP1UfW09349Q5LowqCtbuC0TYHQtnm7Qvz5rBG5K0bFGI8Lw==", + "peer": true, "requires": { "@subsquid/util-internal": "^2.4.0", "@subsquid/util-internal-binary-heap": "^1.0.0" @@ -17943,19 +18801,36 @@ "@subsquid/util-internal": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@subsquid/util-internal/-/util-internal-2.5.1.tgz", - "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==" + "integrity": "sha512-URBBCWP/cXuNhFP8B5Qsm6qaft1CIoWRhx8mCL1gDxasLWmPEnLC2eMHfMvU0CtF9mYKyXV2SjCf4BK9tQJ92g==", + "peer": true } } }, + "@subsquid/util-internal-ts-node": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-ts-node/-/util-internal-ts-node-0.0.0.tgz", + "integrity": "sha512-VBnrKrkNcqbT3hMLrjpEPuwMAihFhW9oUmK53bccBCCXrUiATNUblQD2S4IWd9/UBO5Q33ohpbE9sAodDq2DXw==" + }, + "@subsquid/util-internal-validation": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@subsquid/util-internal-validation/-/util-internal-validation-0.1.0.tgz", + "integrity": "sha512-Lds60OAfXRPRxSKpIimeV3lGJzqU6nWE8qZBfw5t0GPKagb5VipUt9vq98IO4M4gRBQOUP0rrBDkiWsrGufK7A==", + "requires": {} + }, "@subsquid/util-naming": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@subsquid/util-naming/-/util-naming-1.2.0.tgz", - "integrity": "sha512-mFFFh3CLd4IOm5OIl0tyhGvL6s+LQqtGgq8mD4oCZuzC2IhRNJ7D1KAv8JTZsxzOhHfLeibF2xvdN5jBwSLEyg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-naming/-/util-naming-1.2.2.tgz", + "integrity": "sha512-NveXOiAbWiWkWd3Iv2jEwSAKvQHOG/HfIsPmmNab8TPX/XgJ6J5Ngx6lHEiqs746m4sOhZ2yipxKAEDgrERaxA==", "requires": { "camelcase": "^6.3.0", "inflected": "^2.1.0" } }, + "@subsquid/util-timeout": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@subsquid/util-timeout/-/util-timeout-2.3.2.tgz", + "integrity": "sha512-DVUnuiWAX7/4ZvbzuHENUShEEV4G0M38mQ/+R8DpHxwpCSrtEaSRaUMwdyUSn/WVqR7wo9+jkLCxFjE5feCURQ==" + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -18014,9 +18889,9 @@ } }, "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", "requires": { "@types/node": "*" } @@ -18030,21 +18905,6 @@ "@types/node": "*" } }, - "@types/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", - "dev": true - }, - "@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, "@types/cli-progress": { "version": "3.11.2", "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.2.tgz", @@ -18055,9 +18915,9 @@ } }, "@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "requires": { "@types/node": "*" } @@ -18067,6 +18927,12 @@ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "@types/expect": { "version": "1.20.4", "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", @@ -18110,14 +18976,14 @@ } }, "@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "@types/lodash": { @@ -18132,9 +18998,9 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz", + "integrity": "sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==" }, "@types/minimatch": { "version": "5.1.2", @@ -18142,9 +19008,12 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "@types/node": { - "version": "18.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" + "version": "18.19.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.7.tgz", + "integrity": "sha512-IGRJfoNX10N/PfrReRZ1br/7SQ+2vF/tK3KXNwzXz82D32z5dMQEoOlFew18nLSN+vMNcLY4GrKfzwi/yWI8/w==", + "requires": { + "undici-types": "~5.26.4" + } }, "@types/normalize-package-data": { "version": "2.4.1", @@ -18159,19 +19028,19 @@ "dev": true }, "@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==" + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "@types/react": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", - "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", "dev": true, "requires": { "@types/prop-types": "*", @@ -18191,9 +19060,9 @@ "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==" }, "@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "requires": { "@types/http-errors": "*", "@types/mime": "*", @@ -18245,50 +19114,52 @@ } }, "@vitest/coverage-v8": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.4.tgz", - "integrity": "sha512-TZ5ghzhmg3COQqfBShL+zRQEInHmV9TSwghTdfkHpCTyTOr+rxo6x41vCNcVfWysWULtqtBVpY6YFNovxnESfA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.2.0.tgz", + "integrity": "sha512-YvX8ULTUm1+zkvkl14IqXYGxE1h13OXKPoDsxazARKlp4YLrP28hHEBdplaU7ZTN/Yn6zy6Z3JadWNRJwcmyrQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.1", "@bcoe/v8-coverage": "^0.2.3", - "istanbul-lib-coverage": "^3.2.0", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.5", - "magic-string": "^0.30.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.2", "picocolors": "^1.0.0", - "std-env": "^3.3.3", + "std-env": "^3.5.0", "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.1.0" + "v8-to-istanbul": "^9.2.0" } }, "@vitest/expect": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.4.tgz", - "integrity": "sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.0.tgz", + "integrity": "sha512-H+2bHzhyvgp32o7Pgj2h9RTHN0pgYaoi26Oo3mE+dCi1PAqV31kIIVfTbqMO3Bvshd5mIrJLc73EwSRrbol9Lw==", "dev": true, "requires": { - "@vitest/spy": "0.34.4", - "@vitest/utils": "0.34.4", - "chai": "^4.3.7" + "@vitest/spy": "1.2.0", + "@vitest/utils": "1.2.0", + "chai": "^4.3.10" } }, "@vitest/runner": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.4.tgz", - "integrity": "sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.0.tgz", + "integrity": "sha512-vaJkDoQaNUTroT70OhM0NPznP7H3WyRwt4LvGwCVYs/llLaqhoSLnlIhUClZpbF5RgAee29KRcNz0FEhYcgxqA==", "dev": true, "requires": { - "@vitest/utils": "0.34.4", - "p-limit": "^4.0.0", + "@vitest/utils": "1.2.0", + "p-limit": "^5.0.0", "pathe": "^1.1.1" }, "dependencies": { "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dev": true, "requires": { "yocto-queue": "^1.0.0" @@ -18303,34 +19174,35 @@ } }, "@vitest/snapshot": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.4.tgz", - "integrity": "sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.0.tgz", + "integrity": "sha512-P33EE7TrVgB3HDLllrjK/GG6WSnmUtWohbwcQqmm7TAk9AVHpdgf7M3F3qRHKm6vhr7x3eGIln7VH052Smo6Kw==", "dev": true, "requires": { - "magic-string": "^0.30.1", + "magic-string": "^0.30.5", "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "pretty-format": "^29.7.0" } }, "@vitest/spy": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.4.tgz", - "integrity": "sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.0.tgz", + "integrity": "sha512-MNxSAfxUaCeowqyyGwC293yZgk7cECZU9wGb8N1pYQ0yOn/SIr8t0l9XnGRdQZvNV/ZHBYu6GO/W3tj5K3VN1Q==", "dev": true, "requires": { - "tinyspy": "^2.1.1" + "tinyspy": "^2.2.0" } }, "@vitest/utils": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.4.tgz", - "integrity": "sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-FyD5bpugsXlwVpTcGLDf3wSPYy8g541fQt14qtzo8mJ4LdEpDKZ9mQy2+qdJm2TZRpjY5JLXihXCgIxiRJgi5g==", "dev": true, "requires": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" } }, "abbrev": { @@ -18358,15 +19230,15 @@ } }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "devOptional": true }, "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "devOptional": true }, "aes-js": { @@ -18497,9 +19369,9 @@ } }, "apollo-server-core": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", - "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.13.0.tgz", + "integrity": "sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg==", "requires": { "@apollo/utils.keyvaluecache": "^1.0.1", "@apollo/utils.logger": "^1.0.0", @@ -18526,6 +19398,34 @@ "whatwg-mimetype": "^3.0.0" }, "dependencies": { + "@graphql-tools/merge": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz", + "integrity": "sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==", + "requires": { + "@graphql-tools/utils": "8.9.0", + "tslib": "^2.4.0" + } + }, + "@graphql-tools/schema": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz", + "integrity": "sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==", + "requires": { + "@graphql-tools/merge": "8.3.1", + "@graphql-tools/utils": "8.9.0", + "tslib": "^2.4.0", + "value-or-promise": "1.0.11" + } + }, + "@graphql-tools/utils": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz", + "integrity": "sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==", + "requires": { + "tslib": "^2.4.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -18533,6 +19433,11 @@ "requires": { "yallist": "^4.0.0" } + }, + "value-or-promise": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", + "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==" } } }, @@ -18551,9 +19456,9 @@ "requires": {} }, "apollo-server-express": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", - "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.13.0.tgz", + "integrity": "sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g==", "requires": { "@types/accepts": "^1.3.5", "@types/body-parser": "1.19.2", @@ -18561,7 +19466,7 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.12.1", + "apollo-server-core": "^3.13.0", "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", @@ -19066,9 +19971,9 @@ "dev": true }, "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "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" } @@ -19173,12 +20078,13 @@ } }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" } }, "camelcase": { @@ -19197,18 +20103,18 @@ } }, "chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "requires": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" } }, "chalk": { @@ -19243,10 +20149,13 @@ "dev": true }, "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true + "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" + } }, "chownr": { "version": "1.1.4", @@ -19580,9 +20489,9 @@ "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==", + "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 }, "cookie": { @@ -19616,6 +20525,14 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "devOptional": true }, + "cross-inspect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "requires": { + "tslib": "^2.4.0" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -19677,6 +20594,7 @@ "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, "requires": { "@babel/runtime": "^7.21.0" } @@ -19687,6 +20605,11 @@ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -19724,14 +20647,14 @@ } }, "deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "requires": { "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", @@ -19741,11 +20664,11 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" } }, "deep-extend": { @@ -19763,6 +20686,16 @@ "clone": "^1.0.2" } }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -19866,11 +20799,15 @@ "x256": ">=0.0.1" } }, + "dset": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==" + }, "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "easy-table": { "version": "1.2.0", @@ -20076,33 +21013,34 @@ } }, "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" } }, "escalade": { @@ -20127,19 +21065,28 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "ethers": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", - "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", + "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", "requires": { - "@adraffy/ens-normalize": "1.9.2", - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.7.1", + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", "@types/node": "18.15.13", "aes-js": "4.0.0-beta.5", "tslib": "2.4.0", @@ -20561,7 +21508,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -20571,7 +21517,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -20581,14 +21526,12 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "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==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -20596,20 +21539,17 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -20685,9 +21625,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { "version": "1.1.6", @@ -20729,20 +21669,20 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "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.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -20801,6 +21741,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -20861,9 +21802,9 @@ "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==" }, "graphql-parse-resolve-info": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/graphql-parse-resolve-info/-/graphql-parse-resolve-info-4.13.0.tgz", - "integrity": "sha512-VVJ1DdHYcR7hwOGQKNH+QTzuNgsLA8l/y436HtP9YHoX6nmwXRWq3xWthU3autMysXdm0fQUbhTZCx0W9ICozw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/graphql-parse-resolve-info/-/graphql-parse-resolve-info-4.14.0.tgz", + "integrity": "sha512-5Fbquh3IZMciLYgtiWeFxAeZOwpPyonhbaN05fzL/Gll0HS0hMqJh1Q88NQLHiASD6//cJ3LTXLncuajRqsUcA==", "requires": { "debug": "^4.1.1", "tslib": "^2.0.1" @@ -20894,9 +21835,9 @@ } }, "graphql-ws": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.0.tgz", - "integrity": "sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.3.tgz", + "integrity": "sha512-F/i2xNIVbaEF2xWggID0X/UZQa2V8kqKDPO8hwmu53bVOcTL7uNkxnexeEgSCVxYBQUTUNEI8+e4LO1FOhKPKQ==", "requires": {} }, "grouped-queue": { @@ -20941,11 +21882,11 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "requires": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" } }, "has-proto": { @@ -20972,6 +21913,14 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "here": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/here/-/here-0.0.2.tgz", @@ -21525,13 +22474,12 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "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-report": { @@ -21592,10 +22540,9 @@ "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" }, "jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", - "dev": true, + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -21713,9 +22660,9 @@ "dev": true }, "keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "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" } @@ -21810,10 +22757,14 @@ } }, "local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } }, "locate-path": { "version": "5.0.0", @@ -21896,12 +22847,12 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "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.0" + "get-func-name": "^2.0.1" } }, "lru-cache": { @@ -21910,14 +22861,25 @@ "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==" }, "magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, + "magicast": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", + "dev": true, + "requires": { + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "source-map-js": "^1.0.2" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -22164,6 +23126,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "requires": { "brace-expansion": "^2.0.1" } @@ -22288,15 +23251,15 @@ } }, "mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", "dev": true, "requires": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", + "acorn": "^8.11.3", + "pathe": "^1.1.2", "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "ufo": "^1.3.2" } }, "ms": { @@ -22361,9 +23324,9 @@ } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "natural-orderby": { @@ -22551,9 +23514,9 @@ } }, "node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==" + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==" }, "nopt": { "version": "2.1.2", @@ -23361,7 +24324,6 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, "requires": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -23370,14 +24332,12 @@ "lru-cache": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==" }, "minipass": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==" } } }, @@ -23393,9 +24353,9 @@ "dev": true }, "pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "pathval": { @@ -23531,12 +24491,12 @@ "dev": true }, "postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "dev": true, "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -24265,16 +25225,17 @@ "regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" } }, "remove-trailing-separator": { @@ -24370,11 +25331,25 @@ } }, "rollup": { - "version": "3.29.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.1.tgz", - "integrity": "sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==", - "dev": true, - "requires": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", + "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@types/estree": "1.0.5", "fsevents": "~2.3.2" } }, @@ -24519,6 +25494,28 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "requires": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -24988,9 +25985,9 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "std-env": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", - "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, "stop-iteration-iterator": { @@ -25032,7 +26029,6 @@ "version": "npm:string-width@4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25095,7 +26091,6 @@ "version": "npm:strip-ansi@6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -25488,21 +26483,21 @@ "dev": true }, "tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", "dev": true }, "tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", + "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", "dev": true }, "tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true }, "tmp": { @@ -25520,6 +26515,12 @@ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -25924,19 +26925,19 @@ } }, "typeorm": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.17.tgz", - "integrity": "sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.19.tgz", + "integrity": "sha512-OGelrY5qEoAU80mR1iyvmUHiKCPUydL6xp6bebXzS7jyv/X70Gp/jBWRAfF4qGOfy2A7orMiGRfwsBUNbEL65g==", "requires": { "@sqltools/formatter": "^1.2.5", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "chalk": "^4.1.2", "cli-highlight": "^2.1.11", - "date-fns": "^2.29.3", + "dayjs": "^1.11.9", "debug": "^4.3.4", "dotenv": "^16.0.3", - "glob": "^8.1.0", + "glob": "^10.3.10", "mkdirp": "^2.1.3", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", @@ -25954,10 +26955,35 @@ "ieee754": "^1.2.1" } }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" } } }, @@ -25968,9 +26994,9 @@ "devOptional": true }, "ufo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.0.tgz", - "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", "dev": true }, "unbox-primitive": { @@ -25985,6 +27011,11 @@ "which-boxed-primitive": "^1.0.2" } }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -26091,20 +27122,20 @@ "devOptional": true }, "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "dependencies": { "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -26139,9 +27170,9 @@ "peer": true }, "value-or-promise": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", - "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==" + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==" }, "vary": { "version": "1.1.2", @@ -26184,61 +27215,179 @@ } }, "vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", "dev": true, "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" } }, "vite-node": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.4.tgz", - "integrity": "sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.0.tgz", + "integrity": "sha512-ETnQTHeAbbOxl7/pyBck9oAPZZZo+kYnFt1uQDD+hPReOc+wCjXw4r4jHriBRuVDB5isHmPXxrfc1yJnfBERqg==", "dev": true, "requires": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0" } }, "vitest": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.4.tgz", - "integrity": "sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.0.tgz", + "integrity": "sha512-Ixs5m7BjqvLHXcibkzKRQUvD/XLw0E3rvqaCMlrm/0LMsA0309ZqYvTlPzkhh81VlEyVZXFlwWnkhb6/UMtcaQ==", "dev": true, "requires": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.4", - "@vitest/runner": "0.34.4", - "@vitest/snapshot": "0.34.4", - "@vitest/spy": "0.34.4", - "@vitest/utils": "0.34.4", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", + "@vitest/expect": "1.2.0", + "@vitest/runner": "1.2.0", + "@vitest/snapshot": "1.2.0", + "@vitest/spy": "1.2.0", + "@vitest/utils": "1.2.0", + "acorn-walk": "^8.3.1", "cac": "^6.7.14", - "chai": "^4.3.7", + "chai": "^4.3.10", "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.4", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.2.0", "why-is-node-running": "^2.2.2" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + } + }, + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "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 + }, + "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 + }, + "npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "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==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "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 + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "walk-up-path": { @@ -26257,9 +27406,9 @@ } }, "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==" }, "webidl-conversions": { "version": "3.0.1", @@ -26351,12 +27500,12 @@ } }, "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "requires": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -26410,7 +27559,6 @@ "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -26449,9 +27597,9 @@ } }, "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} }, "x256": { diff --git a/package.json b/package.json index 8857287..290629f 100644 --- a/package.json +++ b/package.json @@ -32,30 +32,30 @@ }, "dependencies": { "@cartesi/rollups": "1.0.0", - "@subsquid/archive-registry": "^3.2.0", - "@subsquid/evm-processor": "^1.4.0", + "@subsquid/archive-registry": "^3.3.0", + "@subsquid/evm-processor": "^1.13.0", "@subsquid/file-store": "^2.0.0", - "@subsquid/graphql-server": "^4.2.0", + "@subsquid/graphql-server": "^4.5.0", "@subsquid/logger": "^1.3.0", - "@subsquid/typeorm-migration": "^1.2.0", - "@subsquid/typeorm-store": "^1.2.0", + "@subsquid/typeorm-migration": "^1.3.0", + "@subsquid/typeorm-store": "^1.2.6", "dotenv": "^16.1.4", - "ethers": "^6.5.1", + "ethers": "^6.10.0", "pg": "^8.11.0", "shelljs": "^0.8.5", "type-graphql": "^1.2.0-rc.1", - "typeorm": "^0.3.16", + "typeorm": "^0.3.19", "yargs": "^17.7.2" }, "devDependencies": { "@subsquid/cli": "latest", - "@subsquid/evm-typegen": "^3.2.0", - "@subsquid/typeorm-codegen": "^1.2.0", - "@types/node": "^18.16.17", - "@types/react": "18.2.20", - "@vitest/coverage-v8": "^0.34.4", + "@subsquid/evm-typegen": "^3.2.4", + "@subsquid/typeorm-codegen": "^1.3.3", + "@types/node": "^18.19.7", + "@types/react": "^18.2.48", + "@vitest/coverage-v8": "^1.2.0", "npm-run-all": "^4.1.5", - "typescript": "~5.1.3", - "vitest": "^0.34.4" + "typescript": "^5.1.3", + "vitest": "^1.2.0" } } diff --git a/vitest.config.ts b/vitest.config.ts index b45e693..cb66294 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -4,8 +4,15 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { coverage: { + all: false, reporter: ['text', 'lcov'], - exclude: ['src/abi', 'src/model', 'tests/'], + exclude: [ + 'src/abi/**', + 'src/model/**', + 'tests/', + 'db/**', + 'preloaders/**', + ], }, } as UserConfig, }); From b0f899aa04e0d9dd4e4672c77fa95667c17af612 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Mon, 22 Jan 2024 14:23:06 +1300 Subject: [PATCH 04/31] refactor: Replace deprecated processor config --- src/config.ts | 37 ++++++++++++++++++++++----------- src/processor.ts | 6 +++++- tests/processor.test.ts | 46 +++++++++++++++++++++++------------------ 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/config.ts b/src/config.ts index 0f6e658..d27e227 100644 --- a/src/config.ts +++ b/src/config.ts @@ -4,7 +4,7 @@ import CartesiDAppFactorySepolia from '@cartesi/rollups/deployments/sepolia/Cart import InputBoxSepolia from '@cartesi/rollups/deployments/sepolia/InputBox.json'; import mainnet from '@cartesi/rollups/export/abi/mainnet.json'; import { lookupArchive } from '@subsquid/archive-registry'; -import { DataSource } from '@subsquid/evm-processor'; +import { GatewaySettings, RpcEndpointSettings } from '@subsquid/evm-processor'; // addresses are the same on all chains export const CartesiDAppFactoryAddress = @@ -16,7 +16,10 @@ export const ERC721PortalAddress = mainnet.contracts.ERC721Portal.address.toLowerCase(); export type ProcessorConfig = { - dataSource: DataSource; + settings: { + gateway?: GatewaySettings; + rpcEndpoint: RpcEndpointSettings; + }; from: number; finalityConfirmation?: number; }; @@ -26,9 +29,13 @@ export const getConfig = (chainId: number): ProcessorConfig => { switch (chainId) { case 1: // mainnet return { - dataSource: { - archive: lookupArchive('eth-mainnet'), - chain: process.env[RPC_URL] ?? 'https://rpc.ankr.com/eth', + settings: { + gateway: { + url: lookupArchive('eth-mainnet'), + }, + rpcEndpoint: { + url: process.env[RPC_URL] ?? 'https://rpc.ankr.com/eth', + }, }, from: Math.min( CartesiDAppFactoryMainnet.receipt.blockNumber, @@ -37,11 +44,15 @@ export const getConfig = (chainId: number): ProcessorConfig => { }; case 11155111: // sepolia return { - dataSource: { - archive: lookupArchive('sepolia'), - chain: - process.env[RPC_URL] ?? - 'https://rpc.ankr.com/eth_sepolia', + settings: { + gateway: { + url: lookupArchive('sepolia'), + }, + rpcEndpoint: { + url: + process.env[RPC_URL] ?? + 'https://rpc.ankr.com/eth_sepolia', + }, }, from: Math.min( CartesiDAppFactorySepolia.receipt.blockNumber, @@ -50,8 +61,10 @@ export const getConfig = (chainId: number): ProcessorConfig => { }; case 31337: // anvil return { - dataSource: { - chain: process.env[RPC_URL] ?? 'http://127.0.0.1:8545', + settings: { + rpcEndpoint: { + url: process.env[RPC_URL] ?? 'http://127.0.0.1:8545', + }, }, from: 0, }; diff --git a/src/processor.ts b/src/processor.ts index d404185..e7a7a46 100644 --- a/src/processor.ts +++ b/src/processor.ts @@ -25,7 +25,7 @@ export const createProcessor = (chainId: number): EvmBatchProcessor => { const applicationMetadata = loadApplications(chainId); const config = getConfig(chainId); let processor = new EvmBatchProcessor() - .setDataSource(config.dataSource) + .setRpcEndpoint(config.settings.rpcEndpoint) .setFinalityConfirmation(config.finalityConfirmation ?? 10) .setFields({ transaction: { @@ -48,6 +48,10 @@ export const createProcessor = (chainId: number): EvmBatchProcessor => { transaction: true, }); + processor = config.settings.gateway + ? processor.setGateway(config.settings.gateway) + : processor; + if (applicationMetadata !== null) { processor = processor .addLog({ diff --git a/tests/processor.test.ts b/tests/processor.test.ts index a3c0fa9..c83dc69 100644 --- a/tests/processor.test.ts +++ b/tests/processor.test.ts @@ -8,7 +8,8 @@ vi.mock('@subsquid/evm-processor', async () => { const actualMods = await vi.importActual('@subsquid/evm-processor'); const EvmBatchProcessor = vi.fn(); - EvmBatchProcessor.prototype.setDataSource = vi.fn().mockReturnThis(); + EvmBatchProcessor.prototype.setRpcEndpoint = vi.fn().mockReturnThis(); + EvmBatchProcessor.prototype.setGateway = vi.fn().mockReturnThis(); EvmBatchProcessor.prototype.setFinalityConfirmation = vi .fn() .mockReturnThis(); @@ -49,9 +50,12 @@ describe('Processor creation', () => { const processor = createProcessor(sepolia); const applicationMetadata = loadApplications(sepolia); - expect(processor.setDataSource).toHaveBeenCalledWith({ - archive: 'https://v2.archive.subsquid.io/network/ethereum-sepolia', - chain: 'https://rpc.ankr.com/eth_sepolia', + expect(processor.setGateway).toHaveBeenCalledWith({ + url: 'https://v2.archive.subsquid.io/network/ethereum-sepolia', + }); + + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'https://rpc.ankr.com/eth_sepolia', }); expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); @@ -108,8 +112,9 @@ describe('Processor creation', () => { test('Required configs for local/anvil', () => { const processor = createProcessor(local); - expect(processor.setDataSource).toHaveBeenCalledWith({ - chain: 'http://127.0.0.1:8545', + expect(processor.setGateway).not.toHaveBeenCalled(); + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'http://127.0.0.1:8545', }); expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); @@ -154,9 +159,12 @@ describe('Processor creation', () => { const processor = createProcessor(mainnet); const applicationMetadata = loadApplications(mainnet); - expect(processor.setDataSource).toHaveBeenCalledWith({ - archive: 'https://v2.archive.subsquid.io/network/ethereum-mainnet', - chain: 'https://rpc.ankr.com/eth', + expect(processor.setGateway).toHaveBeenCalledWith({ + url: 'https://v2.archive.subsquid.io/network/ethereum-mainnet', + }); + + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'https://rpc.ankr.com/eth', }); expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); @@ -212,38 +220,36 @@ describe('Processor creation', () => { }); }); - test('Set correct chain for sepolia based on environment var', () => { + test('Set correct rpc-endpoint for sepolia based on environment var', () => { const myRPCNodeURL = 'https://my-custom-sepolia-node/v3/api'; vi.stubEnv('RPC_URL_11155111', myRPCNodeURL); const processor = createProcessor(sepolia); - expect(processor.setDataSource).toHaveBeenCalledWith({ - archive: 'https://v2.archive.subsquid.io/network/ethereum-sepolia', - chain: 'https://my-custom-sepolia-node/v3/api', + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'https://my-custom-sepolia-node/v3/api', }); }); - test('Set correct chain for mainnet based on environment var', () => { + test('Set correct rpc-endpoint for mainnet based on environment var', () => { const myRPCNodeURL = 'https://my-custom-mainnet-node/v3/api'; vi.stubEnv('RPC_URL_1', myRPCNodeURL); const processor = createProcessor(mainnet); - expect(processor.setDataSource).toHaveBeenCalledWith({ - archive: 'https://v2.archive.subsquid.io/network/ethereum-mainnet', - chain: 'https://my-custom-mainnet-node/v3/api', + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'https://my-custom-mainnet-node/v3/api', }); }); - test('Set correct chain for local/anvil based on environment var', () => { + test('Set correct rpc-endpoint for local/anvil based on environment var', () => { const myRPCNodeURL = 'https://my-custom-local-node:9000'; vi.stubEnv('RPC_URL_31337', myRPCNodeURL); const processor = createProcessor(local); - expect(processor.setDataSource).toHaveBeenCalledWith({ - chain: 'https://my-custom-local-node:9000', + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'https://my-custom-local-node:9000', }); }); }); From e0fcab4047ab3ba3fc49003b163af50dac9f47c9 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 08:09:25 +1300 Subject: [PATCH 05/31] feat: Add Authority handler. --- src/handlers/AuthorityCreated.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/handlers/AuthorityCreated.ts diff --git a/src/handlers/AuthorityCreated.ts b/src/handlers/AuthorityCreated.ts new file mode 100644 index 0000000..d31ed6c --- /dev/null +++ b/src/handlers/AuthorityCreated.ts @@ -0,0 +1,26 @@ +import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; +import { Store } from '@subsquid/typeorm-store'; +import { events as AuthorityFactoryEvents } from '../abi/AuthorityFactory'; +import { AuthorityFactoryAddress } from '../config'; +import { Authority } from '../model'; +import Handler from './Handler'; + +export default class AuthorityCreated implements Handler { + constructor(private authorityStorage: Map) {} + + async handle(log: Log, _block: BlockData, ctx: DataHandlerContext) { + if ( + log.address === AuthorityFactoryAddress && + log.topics[0] === AuthorityFactoryEvents.AuthorityCreated.topic + ) { + const { authority } = + AuthorityFactoryEvents.AuthorityCreated.decode(log); + + ctx.log.info(`${authority} (Authority) stored`); + const id = authority.toLowerCase(); + this.authorityStorage.set(id, new Authority({ id })); + } + + return true; + } +} From 287278b2a223c4a58c28fc0351fcaf990e506d03 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 16:49:56 +1300 Subject: [PATCH 06/31] feat: Update config and processor setup. --- src/config.ts | 4 ++ src/processor.ts | 29 +++++++++ tests/processor.test.ts | 140 +++++++++++++++++++++++++--------------- 3 files changed, 120 insertions(+), 53 deletions(-) diff --git a/src/config.ts b/src/config.ts index d27e227..cf96f8a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -14,6 +14,10 @@ export const ERC20PortalAddress = export const InputBoxAddress = mainnet.contracts.InputBox.address.toLowerCase(); export const ERC721PortalAddress = mainnet.contracts.ERC721Portal.address.toLowerCase(); +export const AuthorityFactoryAddress = + '0x519421Bd7843e0D1E2F280490962850e31c86087'.toLowerCase(); +export const MarketplaceAddress = + '0xB6dd5307629186A5d16611AAC1A14CdE9EA49f57'.toLowerCase(); export type ProcessorConfig = { settings: { diff --git a/src/processor.ts b/src/processor.ts index e7a7a46..bab2f93 100644 --- a/src/processor.ts +++ b/src/processor.ts @@ -6,12 +6,17 @@ import { Log as _Log, Transaction as _Transaction, } from '@subsquid/evm-processor'; +import { events as AuthorityFactoryEvents } from './abi/AuthorityFactory'; import { events as CartesiDApp } from './abi/CartesiDApp'; import { events as CartesiDAppFactory } from './abi/CartesiDAppFactory'; import { events as InputBox } from './abi/InputBox'; +import { events as MarketplaceEvents } from './abi/Marketplace'; +import { events as ValidatorNodeProviderEvents } from './abi/ValidatorNodeProvider'; import { + AuthorityFactoryAddress, CartesiDAppFactoryAddress, InputBoxAddress, + MarketplaceAddress, getConfig, } from './config'; import { loadApplications } from './utils'; @@ -46,6 +51,30 @@ export const createProcessor = (chainId: number): EvmBatchProcessor => { address: [InputBoxAddress], topic0: [InputBox.InputAdded.topic], transaction: true, + }) + .addLog({ + address: [AuthorityFactoryAddress], + topic0: [AuthorityFactoryEvents.AuthorityCreated.topic], + }) + .addLog({ + address: [MarketplaceAddress], + topic0: [MarketplaceEvents.ValidatorNodeProviderCreated.topic], + }) + .addLog({ + topic0: [ValidatorNodeProviderEvents.MachineLocation.topic], + transaction: true, + }) + .addLog({ + topic0: [ValidatorNodeProviderEvents.FinancialRunway.topic], + transaction: true, + }) + .addLog({ + topic0: [ValidatorNodeProviderEvents.Paused.topic], + transaction: true, + }) + .addLog({ + topic0: [ValidatorNodeProviderEvents.Unpaused.topic], + transaction: true, }); processor = config.settings.gateway diff --git a/tests/processor.test.ts b/tests/processor.test.ts index c83dc69..fe8de2b 100644 --- a/tests/processor.test.ts +++ b/tests/processor.test.ts @@ -1,5 +1,6 @@ +import { EvmBatchProcessor } from '@subsquid/evm-processor'; import { afterEach } from 'node:test'; -import { MockInstance, beforeEach, describe, expect, test, vi } from 'vitest'; +import { beforeEach, describe, expect, test, vi } from 'vitest'; import { CartesiDAppFactoryAddress } from '../src/config'; import { createProcessor } from '../src/processor'; import { loadApplications } from '../src/utils'; @@ -71,24 +72,13 @@ describe('Processor creation', () => { from: 3963384, }); - const addLog = processor.addLog as unknown as MockInstance; + expect(processor.addLog).toHaveBeenCalledTimes(10); - expect(addLog).toHaveBeenCalledTimes(4); - expect(addLog.mock.calls[0][0]).toEqual({ - address: ['0x7122cd1221c20892234186facfe8615e6743ab02'], - topic0: [ - '0xe73165c2d277daf8713fd08b40845cb6bb7a20b2b543f3d35324a475660fcebd', - ], - }); - expect(addLog.mock.calls[1][0]).toEqual({ - address: ['0x59b22d57d4f067708ab0c00552767405926dc768'], - topic0: [ - '0x6aaa400068bf4ca337265e2a1e1e841f66b8597fd5b452fdc52a44bed28a0784', - ], - transaction: true, - }); + addLogExpectation(processor); - expect(addLog.mock.calls[2][0]).toEqual({ + const addLog = vi.mocked(processor.addLog); + + expect(addLog.mock.calls[8][0]).toEqual({ address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', @@ -100,11 +90,13 @@ describe('Processor creation', () => { transaction: true, }); - expect(addLog.mock.calls[3][0]).toEqual({ + expect(addLog.mock.calls[9][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], - range: { from: applicationMetadata?.height! + 1 }, + range: { + from: applicationMetadata?.height! + 1, + }, transaction: true, }); }); @@ -130,24 +122,13 @@ describe('Processor creation', () => { from: 0, }); - const addLog = processor.addLog as unknown as MockInstance; + expect(processor.addLog).toHaveBeenCalledTimes(9); - expect(addLog).toHaveBeenCalledTimes(3); - expect(addLog.mock.calls[0][0]).toEqual({ - address: ['0x7122cd1221c20892234186facfe8615e6743ab02'], - topic0: [ - '0xe73165c2d277daf8713fd08b40845cb6bb7a20b2b543f3d35324a475660fcebd', - ], - }); - expect(addLog.mock.calls[1][0]).toEqual({ - address: ['0x59b22d57d4f067708ab0c00552767405926dc768'], - topic0: [ - '0x6aaa400068bf4ca337265e2a1e1e841f66b8597fd5b452fdc52a44bed28a0784', - ], - transaction: true, - }); + addLogExpectation(processor); - expect(addLog.mock.calls[2][0]).toEqual({ + const addLog = vi.mocked(processor.addLog); + + expect(addLog.mock.calls[8][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], @@ -156,8 +137,8 @@ describe('Processor creation', () => { }); test('Required configs for mainnet', () => { - const processor = createProcessor(mainnet); const applicationMetadata = loadApplications(mainnet); + const processor = createProcessor(mainnet); expect(processor.setGateway).toHaveBeenCalledWith({ url: 'https://v2.archive.subsquid.io/network/ethereum-mainnet', @@ -180,24 +161,13 @@ describe('Processor creation', () => { from: 17784733, }); - const addLog = processor.addLog as unknown as MockInstance; + expect(processor.addLog).toHaveBeenCalledTimes(10); - expect(addLog).toHaveBeenCalledTimes(4); - expect(addLog.mock.calls[0][0]).toEqual({ - address: ['0x7122cd1221c20892234186facfe8615e6743ab02'], - topic0: [ - '0xe73165c2d277daf8713fd08b40845cb6bb7a20b2b543f3d35324a475660fcebd', - ], - }); - expect(addLog.mock.calls[1][0]).toEqual({ - address: ['0x59b22d57d4f067708ab0c00552767405926dc768'], - topic0: [ - '0x6aaa400068bf4ca337265e2a1e1e841f66b8597fd5b452fdc52a44bed28a0784', - ], - transaction: true, - }); + addLogExpectation(processor); - expect(addLog.mock.calls[2][0]).toEqual({ + const addLog = vi.mocked(processor.addLog); + + expect(addLog.mock.calls[8][0]).toEqual({ address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', @@ -209,7 +179,7 @@ describe('Processor creation', () => { transaction: true, }); - expect(addLog.mock.calls[3][0]).toEqual({ + expect(addLog.mock.calls[9][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], @@ -252,4 +222,68 @@ describe('Processor creation', () => { url: 'https://my-custom-local-node:9000', }); }); + + /** + * Common addLog expectations + * @param processor + */ + function addLogExpectation(processor: EvmBatchProcessor) { + const addLog = vi.mocked(processor.addLog); + + expect(addLog.mock.calls[0][0]).toEqual({ + address: ['0x7122cd1221c20892234186facfe8615e6743ab02'], + topic0: [ + '0xe73165c2d277daf8713fd08b40845cb6bb7a20b2b543f3d35324a475660fcebd', + ], + }); + expect(addLog.mock.calls[1][0]).toEqual({ + address: ['0x59b22d57d4f067708ab0c00552767405926dc768'], + topic0: [ + '0x6aaa400068bf4ca337265e2a1e1e841f66b8597fd5b452fdc52a44bed28a0784', + ], + transaction: true, + }); + + expect(addLog.mock.calls[2][0]).toEqual({ + address: ['0x519421bd7843e0d1e2f280490962850e31c86087'], + topic0: [ + '0xdca1fad70bee4ba7a4e17a1c6e99e657d2251af7a279124758bc01588abe2d2f', + ], + }); + + expect(addLog.mock.calls[3][0]).toEqual({ + address: ['0xb6dd5307629186a5d16611aac1a14cde9ea49f57'], + topic0: [ + '0x0e2b88107197b560f03a59714a3b7fcced2035fc2f645c44f71491f96c003541', + ], + }); + + expect(addLog.mock.calls[4][0]).toEqual({ + topic0: [ + '0x22f244e839c97faca31341c9c2bb7a09f94a81fb309a36a85c8465bafeb69ffc', + ], + transaction: true, + }); + + expect(addLog.mock.calls[5][0]).toEqual({ + topic0: [ + '0x206c488a3e590d91a82467a0072d112dfe901a99ae561b30c89ff2509fadde35', + ], + transaction: true, + }); + + expect(addLog.mock.calls[6][0]).toEqual({ + topic0: [ + '0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258', + ], + transaction: true, + }); + + expect(addLog.mock.calls[7][0]).toEqual({ + topic0: [ + '0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa', + ], + transaction: true, + }); + } }); From 5c1d8ffe8e52c938bcd3e50795aaf9e25a0a43e8 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 16:50:35 +1300 Subject: [PATCH 07/31] feat: Add new migration --- db/migrations/1706166961258-Data.js | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 db/migrations/1706166961258-Data.js diff --git a/db/migrations/1706166961258-Data.js b/db/migrations/1706166961258-Data.js new file mode 100644 index 0000000..d3e6cd9 --- /dev/null +++ b/db/migrations/1706166961258-Data.js @@ -0,0 +1,31 @@ +module.exports = class Data1706166961258 { + name = 'Data1706166961258' + + async up(db) { + await db.query(`CREATE TABLE "authority" ("id" character varying NOT NULL, CONSTRAINT "PK_b0f9bb35ff132fc6bd92d0582ce" PRIMARY KEY ("id"))`) + await db.query(`CREATE TABLE "validator_node" ("id" character varying NOT NULL, "runway" numeric, "location" text, "application_id" character varying, "provider_id" character varying, CONSTRAINT "PK_cc0fae80b68d3c7e4929b846da8" PRIMARY KEY ("id"))`) + await db.query(`CREATE INDEX "IDX_620ac06bbf5dcf4692fcd7d6da" ON "validator_node" ("application_id") `) + await db.query(`CREATE INDEX "IDX_ca05fc469559790a26dd6bca6b" ON "validator_node" ("provider_id") `) + await db.query(`CREATE TABLE "validator_node_provider" ("id" character varying NOT NULL, "payee" text NOT NULL, "price" numeric NOT NULL, "paused" boolean NOT NULL, "authority_id" character varying, "token_id" character varying, CONSTRAINT "PK_ca05fc469559790a26dd6bca6be" PRIMARY KEY ("id"))`) + await db.query(`CREATE INDEX "IDX_0551b931f1793eeaad67e0b254" ON "validator_node_provider" ("authority_id") `) + await db.query(`CREATE INDEX "IDX_ba5f3d920d2961e583599fbfda" ON "validator_node_provider" ("token_id") `) + await db.query(`ALTER TABLE "validator_node" ADD CONSTRAINT "FK_620ac06bbf5dcf4692fcd7d6da0" FOREIGN KEY ("application_id") REFERENCES "application"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + await db.query(`ALTER TABLE "validator_node" ADD CONSTRAINT "FK_ca05fc469559790a26dd6bca6be" FOREIGN KEY ("provider_id") REFERENCES "validator_node_provider"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + await db.query(`ALTER TABLE "validator_node_provider" ADD CONSTRAINT "FK_0551b931f1793eeaad67e0b254d" FOREIGN KEY ("authority_id") REFERENCES "authority"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + await db.query(`ALTER TABLE "validator_node_provider" ADD CONSTRAINT "FK_ba5f3d920d2961e583599fbfdae" FOREIGN KEY ("token_id") REFERENCES "token"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + } + + async down(db) { + await db.query(`DROP TABLE "authority"`) + await db.query(`DROP TABLE "validator_node"`) + await db.query(`DROP INDEX "public"."IDX_620ac06bbf5dcf4692fcd7d6da"`) + await db.query(`DROP INDEX "public"."IDX_ca05fc469559790a26dd6bca6b"`) + await db.query(`DROP TABLE "validator_node_provider"`) + await db.query(`DROP INDEX "public"."IDX_0551b931f1793eeaad67e0b254"`) + await db.query(`DROP INDEX "public"."IDX_ba5f3d920d2961e583599fbfda"`) + await db.query(`ALTER TABLE "validator_node" DROP CONSTRAINT "FK_620ac06bbf5dcf4692fcd7d6da0"`) + await db.query(`ALTER TABLE "validator_node" DROP CONSTRAINT "FK_ca05fc469559790a26dd6bca6be"`) + await db.query(`ALTER TABLE "validator_node_provider" DROP CONSTRAINT "FK_0551b931f1793eeaad67e0b254d"`) + await db.query(`ALTER TABLE "validator_node_provider" DROP CONSTRAINT "FK_ba5f3d920d2961e583599fbfdae"`) + } +} From ac7c37b9a21e579cf879cb34d58ba0bb2bc52301 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 16:52:26 +1300 Subject: [PATCH 08/31] feat: Add ValidatorNodeProvider event handlers + helper. --- src/handlers/ValidatorNodeProviderCreated.ts | 64 +++++++++++++++++++ src/handlers/ValidatorNodeProviderPaused.ts | 24 +++++++ src/handlers/ValidatorNodeProviderUnpaused.ts | 24 +++++++ src/handlers/helpers/TokenHelper.ts | 31 +++++++++ 4 files changed, 143 insertions(+) create mode 100644 src/handlers/ValidatorNodeProviderCreated.ts create mode 100644 src/handlers/ValidatorNodeProviderPaused.ts create mode 100644 src/handlers/ValidatorNodeProviderUnpaused.ts create mode 100644 src/handlers/helpers/TokenHelper.ts diff --git a/src/handlers/ValidatorNodeProviderCreated.ts b/src/handlers/ValidatorNodeProviderCreated.ts new file mode 100644 index 0000000..8afd7c4 --- /dev/null +++ b/src/handlers/ValidatorNodeProviderCreated.ts @@ -0,0 +1,64 @@ +import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; +import { Store } from '@subsquid/typeorm-store'; +import { events as MarketplaceEvents } from '../abi/Marketplace'; +import { MarketplaceAddress } from '../config'; +import { Authority, Token, ValidatorNodeProvider } from '../model'; +import Handler from './Handler'; +import TokenHelper from './helpers/TokenHelper'; + +export default class ValidatorNodeProviderCreated implements Handler { + constructor( + private authorities: Map, + private providers: Map, + private tokens: Map, + ) {} + + async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { + if ( + log.address === MarketplaceAddress && + log.topics[0] === + MarketplaceEvents.ValidatorNodeProviderCreated.topic + ) { + let { provider, consensus, token, payee, price } = + MarketplaceEvents.ValidatorNodeProviderCreated.decode(log); + const tokenId = token.toLowerCase(); + const providerId = provider.toLowerCase(); + const authorityId = consensus.toLowerCase(); + let authority = + this.authorities.get(authorityId) ?? + (await ctx.store.get(Authority, authorityId)); + + let tokenInstance = + this.tokens.get(tokenId) ?? + (await ctx.store.get(Token, tokenId)); + + if (!authority) { + authority = new Authority({ id: authorityId }); + this.authorities.set(authorityId, authority); + } + + if (!tokenInstance) { + tokenInstance = await TokenHelper.createToken( + tokenId, + ctx, + block, + ); + this.tokens.set(tokenId, tokenInstance); + } + + ctx.log.info(`${providerId} (ValidatorNodeProvider) stored`); + this.providers.set( + providerId, + new ValidatorNodeProvider({ + id: providerId, + token: tokenInstance, + authority, + payee: payee.toLowerCase(), + price, + }), + ); + } + + return true; + } +} diff --git a/src/handlers/ValidatorNodeProviderPaused.ts b/src/handlers/ValidatorNodeProviderPaused.ts new file mode 100644 index 0000000..30f0bbb --- /dev/null +++ b/src/handlers/ValidatorNodeProviderPaused.ts @@ -0,0 +1,24 @@ +import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; +import { Store } from '@subsquid/typeorm-store'; +import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; +import { ValidatorNodeProvider } from '../model'; +import Handler from './Handler'; + +export default class ValidatorNodeProviderPaused implements Handler { + constructor(private providers: Map) {} + + async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { + if (log.topics[0] === ValidatorNodeProviderEvents.Paused.topic) { + const address = log.address.toLowerCase(); + const provider = + this.providers.get(address) ?? + (await ctx.store.get(ValidatorNodeProvider, address)); + + if (provider) { + provider.paused = true; + this.providers.set(address, provider); + } + } + return true; + } +} diff --git a/src/handlers/ValidatorNodeProviderUnpaused.ts b/src/handlers/ValidatorNodeProviderUnpaused.ts new file mode 100644 index 0000000..eb3fad1 --- /dev/null +++ b/src/handlers/ValidatorNodeProviderUnpaused.ts @@ -0,0 +1,24 @@ +import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; +import { Store } from '@subsquid/typeorm-store'; +import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; +import { ValidatorNodeProvider } from '../model'; +import Handler from './Handler'; + +export default class validatorNodeProviderUnpaused implements Handler { + constructor(private providers: Map) {} + + async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { + if (log.topics[0] === ValidatorNodeProviderEvents.Unpaused.topic) { + const address = log.address.toLowerCase(); + const provider = + this.providers.get(address) ?? + (await ctx.store.get(ValidatorNodeProvider, address)); + + if (provider) { + provider.paused = false; + this.providers.set(address, provider); + } + } + return true; + } +} diff --git a/src/handlers/helpers/TokenHelper.ts b/src/handlers/helpers/TokenHelper.ts new file mode 100644 index 0000000..b7078ee --- /dev/null +++ b/src/handlers/helpers/TokenHelper.ts @@ -0,0 +1,31 @@ +import { BlockData, DataHandlerContext } from '@subsquid/evm-processor'; +import { Store } from '@subsquid/typeorm-store'; +import { Contract as ERC20 } from '../../abi/ERC20'; +import { Token } from '../../model'; + +export default class TokenHelper { + static async createToken( + address: string, + ctx: DataHandlerContext, + block: BlockData<{}>, + ) { + const token = new ERC20(ctx, block.header, address); + const [name, symbol, decimals] = await Promise.allSettled([ + token.name(), + token.symbol(), + token.decimals(), + ]).then( + (results) => + results.map((r) => + r.status === 'fulfilled' ? r.value : undefined, + ) as [string?, string?, number?], + ); + + return new Token({ + id: address.toString(), + name, + symbol, + decimals, + }); + } +} From 00e72a7069987dc610e014afb2f9ba39175ed774 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 16:53:00 +1300 Subject: [PATCH 09/31] feat: Add ValidatorNode event handlers --- src/handlers/ValidatorNodeFinancialRunway.ts | 50 ++++++++++++++++++++ src/handlers/ValidatorNodeMachineLocation.ts | 50 ++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 src/handlers/ValidatorNodeFinancialRunway.ts create mode 100644 src/handlers/ValidatorNodeMachineLocation.ts diff --git a/src/handlers/ValidatorNodeFinancialRunway.ts b/src/handlers/ValidatorNodeFinancialRunway.ts new file mode 100644 index 0000000..acffbbf --- /dev/null +++ b/src/handlers/ValidatorNodeFinancialRunway.ts @@ -0,0 +1,50 @@ +import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; +import { Store } from '@subsquid/typeorm-store'; +import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; +import { Application, ValidatorNode, ValidatorNodeProvider } from '../model'; +import Handler from './Handler'; + +export default class ValidatorNodeFinancialRunway implements Handler { + constructor( + private apps: Map, + private nodes: Map, + private providers: Map, + ) {} + + async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { + if ( + log.topics[0] === ValidatorNodeProviderEvents.FinancialRunway.topic + ) { + const providerAddress = log.address.toLowerCase(); + const provider = + this.providers.get(providerAddress) ?? + (await ctx.store.get(ValidatorNodeProvider, providerAddress)); + + if (provider) { + const { dapp, until } = + ValidatorNodeProviderEvents.FinancialRunway.decode(log); + const appId = dapp.toLowerCase(); + const nodeId = `${providerAddress}-${appId}`; + let node = + this.nodes.get(nodeId) ?? + (await ctx.store.get(ValidatorNode, nodeId)); + + if (!node) { + const application = + this.apps.get(appId) ?? + (await ctx.store.get(Application, appId)); + node = new ValidatorNode({ + id: nodeId, + provider, + application, + }); + } + node.runway = until; + + this.nodes.set(nodeId, node); + } + } + + return true; + } +} diff --git a/src/handlers/ValidatorNodeMachineLocation.ts b/src/handlers/ValidatorNodeMachineLocation.ts new file mode 100644 index 0000000..86a2c1c --- /dev/null +++ b/src/handlers/ValidatorNodeMachineLocation.ts @@ -0,0 +1,50 @@ +import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; +import { Store } from '@subsquid/typeorm-store'; +import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; +import { Application, ValidatorNode, ValidatorNodeProvider } from '../model'; +import Handler from './Handler'; + +export default class ValidatorNodeMachineLocation implements Handler { + constructor( + private apps: Map, + private nodes: Map, + private providers: Map, + ) {} + + async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { + if ( + log.topics[0] === ValidatorNodeProviderEvents.MachineLocation.topic + ) { + const providerAddress = log.address.toLowerCase(); + const provider = + this.providers.get(providerAddress) ?? + (await ctx.store.get(ValidatorNodeProvider, providerAddress)); + + if (provider) { + const { dapp, location } = + ValidatorNodeProviderEvents.MachineLocation.decode(log); + const appId = dapp.toLowerCase(); + const nodeId = `${providerAddress}-${appId}`; + let node = + this.nodes.get(nodeId) ?? + (await ctx.store.get(ValidatorNode, nodeId)); + + if (!node) { + const application = + this.apps.get(appId) ?? + (await ctx.store.get(Application, appId)); + node = new ValidatorNode({ + id: nodeId, + provider, + application, + }); + } + node.location = location; + + this.nodes.set(nodeId, node); + } + } + + return true; + } +} From bcc1f5fe60e01b43288aa4836eea353f4d3eb914 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 17:29:50 +1300 Subject: [PATCH 10/31] feat: Add new handlers and maps into EventHandler. --- src/handlers/EventHandler.ts | 56 +++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/handlers/EventHandler.ts b/src/handlers/EventHandler.ts index ac39c24..b2b9cdc 100644 --- a/src/handlers/EventHandler.ts +++ b/src/handlers/EventHandler.ts @@ -3,16 +3,25 @@ import { Store } from '@subsquid/typeorm-store'; import { Application, ApplicationFactory, + Authority, Erc20Deposit, Erc721Deposit, Input, NFT, Token, + ValidatorNode, + ValidatorNodeProvider, } from '../model'; import ApplicationCreated from './ApplicationCreated'; +import AuthorityCreated from './AuthorityCreated'; import Handler from './Handler'; import InputAdded from './InputAdded'; import OwnershipTransferred from './OwnershipTransferred'; +import ValidatorNodeFinancialRunway from './ValidatorNodeFinancialRunway'; +import ValidatorNodeMachineLocation from './ValidatorNodeMachineLocation'; +import ValidatorNodeProviderCreated from './ValidatorNodeProviderCreated'; +import ValidatorNodeProviderPaused from './ValidatorNodeProviderPaused'; +import validatorNodeProviderUnpaused from './ValidatorNodeProviderUnpaused'; export default class EventHandler { private readonly tokens: Map; @@ -22,9 +31,18 @@ export default class EventHandler { private readonly factories: Map; private readonly nfts: Map; private readonly erc721Deposits: Map; + private readonly authorities: Map; + private readonly validatorNodeProviders: Map; + private readonly validatorNodes: Map; private readonly applicationCreated: Handler; private readonly inputAdded: Handler; private readonly ownershipTransferred: Handler; + private readonly authorityCreated: Handler; + private readonly validatorNodeProviderCreated: Handler; + private readonly validatorNodeProviderPaused: Handler; + private readonly validatorNodeProviderUnpaused: Handler; + private readonly validatorNodeFinancialRunway: Handler; + private readonly validatorNodeMachineLocation: Handler; constructor() { this.tokens = new Map(); @@ -34,11 +52,14 @@ export default class EventHandler { this.factories = new Map(); this.nfts = new Map(); this.erc721Deposits = new Map(); + this.authorities = new Map(); + this.validatorNodeProviders = new Map(); + this.validatorNodes = new Map(); + this.applicationCreated = new ApplicationCreated( this.factories, this.applications, ); - this.inputAdded = new InputAdded( this.tokens, this.deposits, @@ -49,12 +70,42 @@ export default class EventHandler { ); this.ownershipTransferred = new OwnershipTransferred(this.applications); + + this.authorityCreated = new AuthorityCreated(this.authorities); + this.validatorNodeProviderCreated = new ValidatorNodeProviderCreated( + this.authorities, + this.validatorNodeProviders, + this.tokens, + ); + + this.validatorNodeProviderPaused = new ValidatorNodeProviderPaused( + this.validatorNodeProviders, + ); + this.validatorNodeProviderUnpaused = new validatorNodeProviderUnpaused( + this.validatorNodeProviders, + ); + this.validatorNodeFinancialRunway = new ValidatorNodeFinancialRunway( + this.applications, + this.validatorNodes, + this.validatorNodeProviders, + ); + this.validatorNodeMachineLocation = new ValidatorNodeMachineLocation( + this.applications, + this.validatorNodes, + this.validatorNodeProviders, + ); } async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { await this.applicationCreated.handle(log, block, ctx); await this.inputAdded.handle(log, block, ctx); await this.ownershipTransferred.handle(log, block, ctx); + await this.authorityCreated.handle(log, block, ctx); + await this.validatorNodeProviderCreated.handle(log, block, ctx); + await this.validatorNodeMachineLocation.handle(log, block, ctx); + await this.validatorNodeFinancialRunway.handle(log, block, ctx); + await this.validatorNodeProviderPaused.handle(log, block, ctx); + await this.validatorNodeProviderUnpaused.handle(log, block, ctx); return true; } @@ -67,6 +118,9 @@ export default class EventHandler { inputs: this.inputs, nfts: this.nfts, erc721Deposits: this.erc721Deposits, + authorities: this.authorities, + validatorNodeProviders: this.validatorNodeProviders, + validatorNodes: this.validatorNodes, }; } } From 2cc0a3253ed47395fd632d4e9517d339a0a0e5b8 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 17:31:29 +1300 Subject: [PATCH 11/31] feat: Save new entities and include total and summary refactoring --- src/handlers/EventHandler.ts | 15 +++++++++++++++ src/main.ts | 30 ++++++++++-------------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/handlers/EventHandler.ts b/src/handlers/EventHandler.ts index b2b9cdc..406fb71 100644 --- a/src/handlers/EventHandler.ts +++ b/src/handlers/EventHandler.ts @@ -123,4 +123,19 @@ export default class EventHandler { validatorNodes: this.validatorNodes, }; } + + getTotalHandled() { + return Object.values(this.getValues()).reduce( + (acc, entityMap) => acc + entityMap.size, + 0, + ); + } + + getSummary() { + return Object.entries(this.getValues()) + .map( + ([entityName, entityMap]) => `${entityName}: ${entityMap.size}`, + ) + .join(', '); + } } diff --git a/src/main.ts b/src/main.ts index a7f05a7..cbf9888 100644 --- a/src/main.ts +++ b/src/main.ts @@ -35,32 +35,20 @@ processor.run(new TypeormDatabase({ supportHotBlocks: true }), async (ctx) => { inputs, nfts, erc721Deposits, + authorities, + validatorNodeProviders, + validatorNodes, } = eventHandler.getValues(); - const total = - tokens.size + - applications.size + - factories.size + - deposits.size + - inputs.size + - nfts.size + - erc721Deposits.size; + const total = eventHandler.getTotalHandled(); if (total > 0) { - const summary = Object.entries({ - tokens: tokens.size, - applications: applications.size, - factories: factories.size, - deposits: deposits.size, - inputs: inputs.size, - nfts: nfts.size, - erc721Deposits: erc721Deposits.size, - }) - .map(([entity, count]) => `${entity}: ${count}`) - .join(', '); - ctx.log.info(`Flushing ${total} entities: ${summary}`); + ctx.log.info( + `Flushing ${total} entities: ${eventHandler.getSummary()}`, + ); } + await ctx.store.upsert([...authorities.values()]); await ctx.store.upsert([...tokens.values()]); await ctx.store.upsert([...nfts.values()]); await ctx.store.upsert([...factories.values()]); @@ -68,4 +56,6 @@ processor.run(new TypeormDatabase({ supportHotBlocks: true }), async (ctx) => { await ctx.store.upsert([...deposits.values()]); await ctx.store.upsert([...erc721Deposits.values()]); await ctx.store.upsert([...inputs.values()]); + await ctx.store.upsert([...validatorNodeProviders.values()]); + await ctx.store.upsert([...validatorNodes.values()]); }); From b21cc1e7ea4bb537b28fdd8be97217ed83cc8c9a Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Tue, 23 Jan 2024 17:59:37 +1300 Subject: [PATCH 12/31] feat: Add support to Arbitrum and Arbitrum-Goerli --- package-lock.json | 176 ++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/config.ts | 56 +++++++++++-- tests/processor.test.ts | 4 +- 4 files changed, 228 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 397922a..6f1757f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "shelljs": "^0.8.5", "type-graphql": "^1.2.0-rc.1", "typeorm": "^0.3.19", + "viem": "^2.5.0", "yargs": "^17.7.2" }, "devDependencies": { @@ -2229,6 +2230,39 @@ "win32" ] }, + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", + "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@sigstore/bundle": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", @@ -3650,6 +3684,26 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "node_modules/abitype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz", + "integrity": "sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -7941,6 +7995,20 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isows": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", + "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "ws": "*" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -14217,6 +14285,55 @@ "node": ">= 0.8" } }, + "node_modules/viem": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.5.0.tgz", + "integrity": "sha512-ytHXIWtlgPs4mcsGxXjJrQ25v+N4dE2hBzgCU8CVv4iXNh3PRFRgyYa7igZlmxiMVzkfSHHADOtivS980JhilA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "1.0.0", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "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/vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", @@ -18002,6 +18119,30 @@ "dev": true, "optional": true }, + "@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==" + }, + "@scure/bip32": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", + "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", + "requires": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + } + }, + "@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "requires": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, "@sigstore/bundle": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", @@ -19211,6 +19352,12 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "abitype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz", + "integrity": "sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==", + "requires": {} + }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -22476,6 +22623,12 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "isows": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", + "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", + "requires": {} + }, "istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -27179,6 +27332,29 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "viem": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.5.0.tgz", + "integrity": "sha512-ytHXIWtlgPs4mcsGxXjJrQ25v+N4dE2hBzgCU8CVv4iXNh3PRFRgyYa7igZlmxiMVzkfSHHADOtivS980JhilA==", + "requires": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "1.0.0", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "dependencies": { + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} + } + } + }, "vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", diff --git a/package.json b/package.json index 290629f..c00411c 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "shelljs": "^0.8.5", "type-graphql": "^1.2.0-rc.1", "typeorm": "^0.3.19", + "viem": "^2.5.0", "yargs": "^17.7.2" }, "devDependencies": { diff --git a/src/config.ts b/src/config.ts index cf96f8a..406167e 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,19 +1,25 @@ +import CartesiDAppFactoryArbitrum from '@cartesi/rollups/deployments/arbitrum/CartesiDAppFactory.json'; +import InputBoxArbitrum from '@cartesi/rollups/deployments/arbitrum/InputBox.json'; +import CartesiDAppFactoryArbitrumGoerli from '@cartesi/rollups/deployments/arbitrum_goerli/CartesiDAppFactory.json'; +import InputBoxArbitrumGoerli from '@cartesi/rollups/deployments/arbitrum_goerli/InputBox.json'; import CartesiDAppFactoryMainnet from '@cartesi/rollups/deployments/mainnet/CartesiDAppFactory.json'; import InputBoxMainnet from '@cartesi/rollups/deployments/mainnet/InputBox.json'; import CartesiDAppFactorySepolia from '@cartesi/rollups/deployments/sepolia/CartesiDAppFactory.json'; import InputBoxSepolia from '@cartesi/rollups/deployments/sepolia/InputBox.json'; -import mainnet from '@cartesi/rollups/export/abi/mainnet.json'; +import rollupsMainnet from '@cartesi/rollups/export/abi/mainnet.json'; import { lookupArchive } from '@subsquid/archive-registry'; import { GatewaySettings, RpcEndpointSettings } from '@subsquid/evm-processor'; +import { arbitrum, arbitrumGoerli, mainnet, sepolia } from 'viem/chains'; // addresses are the same on all chains export const CartesiDAppFactoryAddress = - mainnet.contracts.CartesiDAppFactory.address.toLowerCase(); + rollupsMainnet.contracts.CartesiDAppFactory.address.toLowerCase(); export const ERC20PortalAddress = - mainnet.contracts.ERC20Portal.address.toLowerCase(); -export const InputBoxAddress = mainnet.contracts.InputBox.address.toLowerCase(); + rollupsMainnet.contracts.ERC20Portal.address.toLowerCase(); +export const InputBoxAddress = + rollupsMainnet.contracts.InputBox.address.toLowerCase(); export const ERC721PortalAddress = - mainnet.contracts.ERC721Portal.address.toLowerCase(); + rollupsMainnet.contracts.ERC721Portal.address.toLowerCase(); export const AuthorityFactoryAddress = '0x519421Bd7843e0D1E2F280490962850e31c86087'.toLowerCase(); export const MarketplaceAddress = @@ -38,7 +44,9 @@ export const getConfig = (chainId: number): ProcessorConfig => { url: lookupArchive('eth-mainnet'), }, rpcEndpoint: { - url: process.env[RPC_URL] ?? 'https://rpc.ankr.com/eth', + url: + process.env[RPC_URL] ?? + mainnet.rpcUrls.default.http[0], }, }, from: Math.min( @@ -55,7 +63,7 @@ export const getConfig = (chainId: number): ProcessorConfig => { rpcEndpoint: { url: process.env[RPC_URL] ?? - 'https://rpc.ankr.com/eth_sepolia', + sepolia.rpcUrls.default.http[0], }, }, from: Math.min( @@ -72,6 +80,40 @@ export const getConfig = (chainId: number): ProcessorConfig => { }, from: 0, }; + case 42161: // Arbitrum + return { + settings: { + gateway: { + url: lookupArchive('arbitrum'), + }, + rpcEndpoint: { + url: + process.env[RPC_URL] ?? + arbitrum.rpcUrls.default.http[0], + }, + }, + from: Math.min( + CartesiDAppFactoryArbitrum.receipt.blockNumber, + InputBoxArbitrum.receipt.blockNumber, + ), + }; + case 421613: // Arbitrum-goerli + return { + settings: { + gateway: { + url: lookupArchive('arbitrum-goerli'), + }, + rpcEndpoint: { + url: + process.env[RPC_URL] ?? + arbitrumGoerli.rpcUrls.default.http[0], + }, + }, + from: Math.min( + CartesiDAppFactoryArbitrumGoerli.receipt.blockNumber, + InputBoxArbitrumGoerli.receipt.blockNumber, + ), + }; default: throw new Error(`Unsupported chainId: ${chainId}`); } diff --git a/tests/processor.test.ts b/tests/processor.test.ts index fe8de2b..678fc3e 100644 --- a/tests/processor.test.ts +++ b/tests/processor.test.ts @@ -56,7 +56,7 @@ describe('Processor creation', () => { }); expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ - url: 'https://rpc.ankr.com/eth_sepolia', + url: 'https://rpc.sepolia.org', }); expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); @@ -145,7 +145,7 @@ describe('Processor creation', () => { }); expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ - url: 'https://rpc.ankr.com/eth', + url: 'https://cloudflare-eth.com', }); expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); From bb5efa31351793444c849a6d2f91f1952deb4337 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Wed, 24 Jan 2024 13:10:20 +1300 Subject: [PATCH 13/31] chore: Bump application preloaders for Sepolia and Mainnet --- assets/applications-1.json | 2 +- assets/applications-11155111.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/applications-1.json b/assets/applications-1.json index b9d17e7..0c23f48 100644 --- a/assets/applications-1.json +++ b/assets/applications-1.json @@ -1 +1 @@ -{"height":18958008,"hash":"0xd723ba51f35ad8e2e868972669b14f179d7ff451f08687d64d86972f7340f6a7","top":[],"addresses":{"0x7122cd1221c20892234186facfe8615e6743ab02":["0x0974cc873df893b302f6be7ecf4f9d4b1a15c366"]}} \ No newline at end of file +{"height":19069210,"hash":"0xc08a171529ecc683fc14a4fc68c0aa5e470818f8b81c1b2c86901501b678549e","top":[],"addresses":{"0x7122cd1221c20892234186facfe8615e6743ab02":["0x0974cc873df893b302f6be7ecf4f9d4b1a15c366"]}} \ No newline at end of file diff --git a/assets/applications-11155111.json b/assets/applications-11155111.json index 7a2a12b..1d9ec9f 100644 --- a/assets/applications-11155111.json +++ b/assets/applications-11155111.json @@ -1 +1 @@ -{"height":5031033,"hash":"0x60b57b9528dec06fcf6b7038bf7c24e61588234a421be558bcb1c5c7df66a04c","top":[],"addresses":{"0x7122cd1221c20892234186facfe8615e6743ab02":["0x70ac08179605af2d9e75782b8decdd3c22aa4d0c","0x71ab24ee3ddb97dc01a161edf64c8d51102b0cd3","0x3694c82fde031b8462e90e8bfee0377de2b01ecc","0x3adf2a4ba065d4e128e1bdbfd91f489b07877d89","0x7bd3565af78d8457c81ff8b4870a174fa3783eb0","0xb35a7a3d7c1854e0a1196e3c706c4bb5c2b1657c","0xfa18d9738d906813fe81aade5bb2739207162305","0x184436275e033a8d1939849eadb5e744ade197c7","0x331094ebf8ba94790b1f0194291bef4e297b3466","0xc3af72d3c8e8aaa62535c6d5edfe4bd1d594a811","0xf9f432badf8514944b7a22c6ebd9775ef1d10494","0x3f19c60b0d818e0b843c10349111f64e5d5b18d5","0x74608454c71165ac0f2e503d47a00092ff0a48a3","0x87e73a1517e8144e37764192c544896eb4da7a57","0xeca14c01b1eb97dbd5c2e654f0e0f9693f580d42","0x9c3276bbeeee65e07c20acb262e4673dd4bcbce3","0x6fbe45a6b9e32092e2d813133c3904dfc4a92cc4","0x7c92af1ad96a80325d35ad4e505918f1923cf438","0x184b770bb161dcaade158a7347cc084a0c044801","0x674cb14ea404348b3b87c6e629f862014a72b6e9","0x53efed7c0a9e28c93201c71f0fa061ac9384407c","0x9f12d4365806fc000d6555acb85c5371b464e506","0xf4cb3c246203025dcfaf221deb1fff2bb90f2b20","0xb663c083fe2259f0514cf53a832308c1ae31986a","0x59b7b9328f06d5bc2843e8f3aec4a8d5e5419518","0x113dff0952688de6d9a09b2cdd58a5ba3d10d395","0xe5bdcc71da2c1df734cc560d33a8b4036372c27a","0x4ca2f6935200b9a782a78f408f640f17b29809d8","0xbef6f348e398b0fc81a20ecae268cee79ebf0053","0xa0f84501eaf5c85efdba0e44da026239023e531d","0xc6f515b07a8996aa78358ebe48a280cf4eabbed4","0x76e42e81f892ffac5ae7017b4764c8bba26536e1","0x7d7bc8237574fc74f7c6e0577db5526465e428bb","0xfb6de8730ff4a51332233d80c6abb38beed9e586","0x5b8647cd40278ff6504b8ad008f1fe468bcba2ae","0x9a6a74d1ca0b5219b0bea2988d4a9f309ce64a80","0x4906e2fc1383d5e70defb62e74ae7274b535fc65","0x5818d91e461d3120d525464f677ee17455e5c83c","0xd5e518c5bcd79d91fae9911ad8e2e31d95491975","0x7329704939e953242f1dbef51d790b773063601b","0x85280983a0e41533dfa4f8a7853645e8f08ff92a","0xcfcbedb8ceeb3ab21818039d274b59c774549597","0x40ecf0b914d1292bbf9390b80d701cee7c083ff7","0x9fbcd682e86f87420cf9b5f3c8c815f262b54ff4","0xf50ed28a165d368bdfb4a3e31c383917b0eadfea","0x0be010fa7e70d74fa8b6729fe1ae268787298f54","0x393d5ed52d3516ecd9442ca08f735143dee7e1ca","0xde1476c525805af79023fb55eb30ef0e01def6dc","0xe2510c5470fedd84e6fbff29c647b0c883dbc496","0x028367fe226cd9e5699f4288d512fe3a4a4a0012","0x56708c2cd2ee23ac169541013adea91e25e4eab9","0xa7a1fc4971435358718d5e48ddc38482410234b6","0x5874625fa6228bb63d2efdb2657b7f103380e403","0xe495186fde78d3c725079da3859b42da74ebf623","0xa8b4c251feff511d74c314adc893169880919227","0x26bf772117844cbaa3bcef7d038308f59adc92f4","0x87db74dc8f36d1cada0ee7cde5beb898dc41dd12","0x87e5bf4abe7f656a99cd9534badee10605212d24","0xc78fa4e18eb3c79805da64c387192ff0b1089372","0x5e6ed55cc045c5f1d95532edca7dafbcfe7435b4","0x634a235880bcc25844b43d0089b33eac063ada5a","0xc75e497eb836c010d7831696a83867384d46f49a","0x20840b831add95b40bb91b800292293fa8f58906","0xf8d68cfca57096ef665f3f5cb8d311b1fe9b3779","0xba06a9685aac487b9d820fa16ace3682d9999e64","0xc2a25a24304ac9b296657fbdc8dc79f2069e9de2","0xa433773b65ad045d666e9e9b31a32c747bf36bb2","0xa1c977656f68e1ee2733ff43b83529af2a5ae7c9","0xc0bf2492b753c10eb3c7f584f8f5c667e1e5a3f5","0x3950109fa34151b033bbc2990cb5f432f8cabf76","0x0c0a1646e383c3a6adb09299759904c52372a69b","0x1faea00e6859dfbbc80ea6fc768f1ea340d181bc","0x04c9faf00aff05a85f9cf5ee5ede7f6b627a0bad","0xc65d551a0b6c9ba65f07b4a93c930910af2e9b17","0xbe5a16b5e24d144920075a099880c48b89aa9213","0xd85323aeab29047cb22e9cb31967a25c5a26af8c","0x9e147b5a6d118c7ac17d20112c2c81116418d6e8","0xb896cbfac31d07cd6073b28973dfcde66e3d90b3","0x6a77f3cfc57dffb8dc82be3249aa5a6b979626ac","0xac795db158acb80fb14cebfa1167539f93ff0f05","0x211ebaf8002ca3fb894343bab4fdb5ae8fc03ad5","0x82a31cfdf65a9b793416f02735b96cdc8a4a88dd","0x9b81da10ed590aad669122fa8481f4659ae6cfe5","0x19927cb5ce72677297314c70f38416466cf6c781","0x75d26ee81e6642c4ed5df10b03c6649fd3f7629b","0xb76fddfdfa6a0f00213e5ea8491e103729eb1add","0xfdc52064fc8077bc48ad307bae41aebb050a58f2","0xdb84080e7d2b4654a7e384de851a6cf7281643de","0xd3fb544b9ce4725733e1b1e4114ce228b624099f","0x2dc155cb107b0ebe621b927f9e7acc4819e79a0d","0xf9f5c74acf5a20f1e91aeb057fd7f13db305a0e6","0x9b37f2d97fc0e46145a0d011898de40fe1704c3b","0x0e16cc94ed11d3aff0115ce07a1ac3f57e08b67b","0x2871b7d22693ca922eb497b945d84fdd9c786aae","0xd08e09d072ee853b8a6f331d94e0c15ee2d3d8ed","0xfd142fb8e80a95f25ff5e75960781649bb858e39","0xe70f662d7d47acb03c7d733e23af1534eed82733","0xc3f1384c2250075004a731140e481bf1a5b8e0d8","0x51ca152db75570bd7df12f99891129468802c0be","0xbc5ef46af65b986e83609d0ab2c386b4e8f110c0","0x131bfd89a99361fe2bd7078d7e83303f59a818f0","0xa946c3fbd53adc29e56ba32b1a289c135434bff4","0x6e1986c7d405884e5d13031d33ed981b160bac50","0xdd1f9b83507327f29c2c1bb42011fad5fb482dc6"]}} \ No newline at end of file +{"height":5115756,"hash":"0x615779a1efce28246a2194fca2b82ce027e506067306c19d2e4a410e9482ff6c","top":[],"addresses":{"0x7122cd1221c20892234186facfe8615e6743ab02":["0x70ac08179605af2d9e75782b8decdd3c22aa4d0c","0x71ab24ee3ddb97dc01a161edf64c8d51102b0cd3","0x3694c82fde031b8462e90e8bfee0377de2b01ecc","0x3adf2a4ba065d4e128e1bdbfd91f489b07877d89","0x7bd3565af78d8457c81ff8b4870a174fa3783eb0","0xb35a7a3d7c1854e0a1196e3c706c4bb5c2b1657c","0xfa18d9738d906813fe81aade5bb2739207162305","0x184436275e033a8d1939849eadb5e744ade197c7","0x331094ebf8ba94790b1f0194291bef4e297b3466","0xc3af72d3c8e8aaa62535c6d5edfe4bd1d594a811","0xf9f432badf8514944b7a22c6ebd9775ef1d10494","0x3f19c60b0d818e0b843c10349111f64e5d5b18d5","0x74608454c71165ac0f2e503d47a00092ff0a48a3","0x87e73a1517e8144e37764192c544896eb4da7a57","0xeca14c01b1eb97dbd5c2e654f0e0f9693f580d42","0x9c3276bbeeee65e07c20acb262e4673dd4bcbce3","0x6fbe45a6b9e32092e2d813133c3904dfc4a92cc4","0x7c92af1ad96a80325d35ad4e505918f1923cf438","0x184b770bb161dcaade158a7347cc084a0c044801","0x674cb14ea404348b3b87c6e629f862014a72b6e9","0x53efed7c0a9e28c93201c71f0fa061ac9384407c","0x9f12d4365806fc000d6555acb85c5371b464e506","0xf4cb3c246203025dcfaf221deb1fff2bb90f2b20","0xb663c083fe2259f0514cf53a832308c1ae31986a","0x59b7b9328f06d5bc2843e8f3aec4a8d5e5419518","0x113dff0952688de6d9a09b2cdd58a5ba3d10d395","0xe5bdcc71da2c1df734cc560d33a8b4036372c27a","0x4ca2f6935200b9a782a78f408f640f17b29809d8","0xbef6f348e398b0fc81a20ecae268cee79ebf0053","0xa0f84501eaf5c85efdba0e44da026239023e531d","0xc6f515b07a8996aa78358ebe48a280cf4eabbed4","0x76e42e81f892ffac5ae7017b4764c8bba26536e1","0x7d7bc8237574fc74f7c6e0577db5526465e428bb","0xfb6de8730ff4a51332233d80c6abb38beed9e586","0x5b8647cd40278ff6504b8ad008f1fe468bcba2ae","0x9a6a74d1ca0b5219b0bea2988d4a9f309ce64a80","0x4906e2fc1383d5e70defb62e74ae7274b535fc65","0x5818d91e461d3120d525464f677ee17455e5c83c","0xd5e518c5bcd79d91fae9911ad8e2e31d95491975","0x7329704939e953242f1dbef51d790b773063601b","0x85280983a0e41533dfa4f8a7853645e8f08ff92a","0xcfcbedb8ceeb3ab21818039d274b59c774549597","0x40ecf0b914d1292bbf9390b80d701cee7c083ff7","0x9fbcd682e86f87420cf9b5f3c8c815f262b54ff4","0xf50ed28a165d368bdfb4a3e31c383917b0eadfea","0x0be010fa7e70d74fa8b6729fe1ae268787298f54","0x393d5ed52d3516ecd9442ca08f735143dee7e1ca","0xde1476c525805af79023fb55eb30ef0e01def6dc","0xe2510c5470fedd84e6fbff29c647b0c883dbc496","0x028367fe226cd9e5699f4288d512fe3a4a4a0012","0x56708c2cd2ee23ac169541013adea91e25e4eab9","0xa7a1fc4971435358718d5e48ddc38482410234b6","0x5874625fa6228bb63d2efdb2657b7f103380e403","0xe495186fde78d3c725079da3859b42da74ebf623","0xa8b4c251feff511d74c314adc893169880919227","0x26bf772117844cbaa3bcef7d038308f59adc92f4","0x87db74dc8f36d1cada0ee7cde5beb898dc41dd12","0x87e5bf4abe7f656a99cd9534badee10605212d24","0xc78fa4e18eb3c79805da64c387192ff0b1089372","0x5e6ed55cc045c5f1d95532edca7dafbcfe7435b4","0x634a235880bcc25844b43d0089b33eac063ada5a","0xc75e497eb836c010d7831696a83867384d46f49a","0x20840b831add95b40bb91b800292293fa8f58906","0xf8d68cfca57096ef665f3f5cb8d311b1fe9b3779","0xba06a9685aac487b9d820fa16ace3682d9999e64","0xc2a25a24304ac9b296657fbdc8dc79f2069e9de2","0xa433773b65ad045d666e9e9b31a32c747bf36bb2","0xa1c977656f68e1ee2733ff43b83529af2a5ae7c9","0xc0bf2492b753c10eb3c7f584f8f5c667e1e5a3f5","0x3950109fa34151b033bbc2990cb5f432f8cabf76","0x0c0a1646e383c3a6adb09299759904c52372a69b","0x1faea00e6859dfbbc80ea6fc768f1ea340d181bc","0x04c9faf00aff05a85f9cf5ee5ede7f6b627a0bad","0xc65d551a0b6c9ba65f07b4a93c930910af2e9b17","0xbe5a16b5e24d144920075a099880c48b89aa9213","0xd85323aeab29047cb22e9cb31967a25c5a26af8c","0x9e147b5a6d118c7ac17d20112c2c81116418d6e8","0xb896cbfac31d07cd6073b28973dfcde66e3d90b3","0x6a77f3cfc57dffb8dc82be3249aa5a6b979626ac","0xac795db158acb80fb14cebfa1167539f93ff0f05","0x211ebaf8002ca3fb894343bab4fdb5ae8fc03ad5","0x82a31cfdf65a9b793416f02735b96cdc8a4a88dd","0x9b81da10ed590aad669122fa8481f4659ae6cfe5","0x19927cb5ce72677297314c70f38416466cf6c781","0x75d26ee81e6642c4ed5df10b03c6649fd3f7629b","0xb76fddfdfa6a0f00213e5ea8491e103729eb1add","0xfdc52064fc8077bc48ad307bae41aebb050a58f2","0xdb84080e7d2b4654a7e384de851a6cf7281643de","0xd3fb544b9ce4725733e1b1e4114ce228b624099f","0x2dc155cb107b0ebe621b927f9e7acc4819e79a0d","0xf9f5c74acf5a20f1e91aeb057fd7f13db305a0e6","0x9b37f2d97fc0e46145a0d011898de40fe1704c3b","0x0e16cc94ed11d3aff0115ce07a1ac3f57e08b67b","0x2871b7d22693ca922eb497b945d84fdd9c786aae","0xd08e09d072ee853b8a6f331d94e0c15ee2d3d8ed","0xfd142fb8e80a95f25ff5e75960781649bb858e39","0xe70f662d7d47acb03c7d733e23af1534eed82733","0xc3f1384c2250075004a731140e481bf1a5b8e0d8","0x51ca152db75570bd7df12f99891129468802c0be","0xbc5ef46af65b986e83609d0ab2c386b4e8f110c0","0x131bfd89a99361fe2bd7078d7e83303f59a818f0","0xa946c3fbd53adc29e56ba32b1a289c135434bff4","0x6e1986c7d405884e5d13031d33ed981b160bac50","0xdd1f9b83507327f29c2c1bb42011fad5fb482dc6"]}} \ No newline at end of file From 57e499731cf52fdce768d49455835a1477a2bbab Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Wed, 24 Jan 2024 13:11:12 +1300 Subject: [PATCH 14/31] feat: Add preload files for Arbitrum and Arbitrum-Goerli --- assets/applications-42161.json | 1 + assets/applications-421613.json | 1 + 2 files changed, 2 insertions(+) create mode 100644 assets/applications-42161.json create mode 100644 assets/applications-421613.json diff --git a/assets/applications-42161.json b/assets/applications-42161.json new file mode 100644 index 0000000..fe37439 --- /dev/null +++ b/assets/applications-42161.json @@ -0,0 +1 @@ +{"height":173126947,"hash":"0xdec8dac440152c781e8d2bc006fd0be03db5e39c964f23bc3d36dacd2fbc408e","top":[],"addresses":{"0x7122cd1221c20892234186facfe8615e6743ab02":[]}} \ No newline at end of file diff --git a/assets/applications-421613.json b/assets/applications-421613.json new file mode 100644 index 0000000..aa72a28 --- /dev/null +++ b/assets/applications-421613.json @@ -0,0 +1 @@ +{"height":61036863,"hash":"0x1cb0729bde1381c8d3211dc9af742a02e5a8137d8f194c466a3945dcb5395fdc","top":[],"addresses":{"0x7122cd1221c20892234186facfe8615e6743ab02":["0x70ac08179605af2d9e75782b8decdd3c22aa4d0c","0x71ab24ee3ddb97dc01a161edf64c8d51102b0cd3","0x3694c82fde031b8462e90e8bfee0377de2b01ecc","0x3adf2a4ba065d4e128e1bdbfd91f489b07877d89","0x7bd3565af78d8457c81ff8b4870a174fa3783eb0","0xb35a7a3d7c1854e0a1196e3c706c4bb5c2b1657c","0xfa18d9738d906813fe81aade5bb2739207162305","0x184436275e033a8d1939849eadb5e744ade197c7"]}} \ No newline at end of file From 664c9e9c0197058c93dac125bef03dc593ba65e8 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Wed, 24 Jan 2024 13:13:08 +1300 Subject: [PATCH 15/31] feat: Add preloaders for validator node providers including npm-script and new command definition --- assets/validator-node-provider-1.json | 1 + assets/validator-node-provider-11155111.json | 1 + assets/validator-node-provider-42161.json | 1 + assets/validator-node-provider-421613.json | 1 + commands.json | 9 ++ package.json | 9 +- preloaders/validatorNodeProviderLoader.ts | 111 +++++++++++++++++++ 7 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 assets/validator-node-provider-1.json create mode 100644 assets/validator-node-provider-11155111.json create mode 100644 assets/validator-node-provider-42161.json create mode 100644 assets/validator-node-provider-421613.json create mode 100644 preloaders/validatorNodeProviderLoader.ts diff --git a/assets/validator-node-provider-1.json b/assets/validator-node-provider-1.json new file mode 100644 index 0000000..b611214 --- /dev/null +++ b/assets/validator-node-provider-1.json @@ -0,0 +1 @@ +{"height":19069210,"hash":"0xc08a171529ecc683fc14a4fc68c0aa5e470818f8b81c1b2c86901501b678549e","top":[],"addresses":{"0xb6dd5307629186a5d16611aac1a14cde9ea49f57":[]}} \ No newline at end of file diff --git a/assets/validator-node-provider-11155111.json b/assets/validator-node-provider-11155111.json new file mode 100644 index 0000000..b81aaca --- /dev/null +++ b/assets/validator-node-provider-11155111.json @@ -0,0 +1 @@ +{"height":5086017,"hash":"0x959f88ffa687b93044bc0ab47ec84d49accb5d13ea59968b18129357d4da2ffa","top":[],"addresses":{"0xb6dd5307629186a5d16611aac1a14cde9ea49f57":["0x4d22c1f970574ae7b8724457d268d41e6459e288"]}} \ No newline at end of file diff --git a/assets/validator-node-provider-42161.json b/assets/validator-node-provider-42161.json new file mode 100644 index 0000000..d1d7b20 --- /dev/null +++ b/assets/validator-node-provider-42161.json @@ -0,0 +1 @@ +{"height":173126947,"hash":"0xdec8dac440152c781e8d2bc006fd0be03db5e39c964f23bc3d36dacd2fbc408e","top":[],"addresses":{"0xb6dd5307629186a5d16611aac1a14cde9ea49f57":[]}} \ No newline at end of file diff --git a/assets/validator-node-provider-421613.json b/assets/validator-node-provider-421613.json new file mode 100644 index 0000000..ef457b6 --- /dev/null +++ b/assets/validator-node-provider-421613.json @@ -0,0 +1 @@ +{"height":61036863,"hash":"0x1cb0729bde1381c8d3211dc9af742a02e5a8137d8f194c466a3945dcb5395fdc","top":[],"addresses":{"0xb6dd5307629186a5d16611aac1a14cde9ea49f57":[]}} \ No newline at end of file diff --git a/commands.json b/commands.json index 24c5090..07cc7b4 100644 --- a/commands.json +++ b/commands.json @@ -121,6 +121,15 @@ "preload:apps": { "description": "Preload the address of applications created by CartesiDAppFactory", "cmd": ["npx", "--yes", "ts-node", "./preloaders/applicationLoader"] + }, + "preload:providers": { + "description": "Preload the address of validator-node-providers created by Marketplace ", + "cmd": [ + "npx", + "--yes", + "ts-node", + "./preloaders/validatorNodeProviderLoader" + ] } } } diff --git a/package.json b/package.json index c00411c..57038c5 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,16 @@ "sqd:deploy": "sqd deploy -o cartesi -m", "sqd:deploy:mainnet": "run-s \"sqd:deploy -- {@} .\" -- \"squid-mainnet.yaml\"", "sqd:deploy:sepolia": "run-s \"sqd:deploy -- {@} .\" -- \"squid-sepolia.yaml\"", - "preload:apps": "run-p preload:apps:mainnet preload:apps:sepolia", + "preload:apps": "run-p preload:apps:mainnet preload:apps:sepolia preload:apps:arbitrum preload:apps:arbitrum-goerli", + "preload:providers": "run-p preload:providers:mainnet preload:providers:sepolia preload:providers:arbitrum preload:providers:arbitrum-goerli", "preload:apps:mainnet": "CHAIN_ID=1 sqd preload:apps", "preload:apps:sepolia": "CHAIN_ID=11155111 sqd preload:apps", + "preload:apps:arbitrum": "CHAIN_ID=42161 sqd preload:apps", + "preload:apps:arbitrum-goerli": "CHAIN_ID=421613 sqd preload:apps", + "preload:providers:mainnet": "CHAIN_ID=1 sqd preload:providers", + "preload:providers:sepolia": "CHAIN_ID=11155111 sqd preload:providers", + "preload:providers:arbitrum": "CHAIN_ID=42161 sqd preload:providers", + "preload:providers:arbitrum-goerli": "CHAIN_ID=421613 sqd preload:providers", "tsc": "tsc", "process:prod": "node deploy/run --npmScriptName=sqd:process:prod", "serve:prod": "node deploy/run --npmScriptName=sqd:graphql:prod" diff --git a/preloaders/validatorNodeProviderLoader.ts b/preloaders/validatorNodeProviderLoader.ts new file mode 100644 index 0000000..b08a57c --- /dev/null +++ b/preloaders/validatorNodeProviderLoader.ts @@ -0,0 +1,111 @@ +import { EvmBatchProcessor } from '@subsquid/evm-processor'; +import { Database, LocalDest } from '@subsquid/file-store'; +import { createLogger } from '@subsquid/logger'; +import { events as MarketplaceEvents } from '../src/abi/Marketplace'; +import { MarketplaceAddress, getConfig } from '../src/config'; + +type Metadata = { + height: number; + hash: string; + addresses: Record; +}; + +const logger = createLogger('sqd:preloader:validator-node-provider'); + +if (!process.env.CHAIN_ID) { + logger.error( + 'Looks like the CHAIN_ID environment is not set. The supported chain ids are [1, 11155111, 42161, 421613]', + ); + throw new Error( + 'ChainId is required to preload the validator-node-provider addresses', + ); +} + +const chainId = parseInt(process.env.CHAIN_ID ?? 0); +const config = getConfig(chainId); + +logger.info(`Processing chain_id: ${chainId}`); + +const processor = new EvmBatchProcessor() + .setGateway(config.settings.gateway!) + .setRpcDataIngestionSettings({ disabled: true }) // it sets to use only the archive node for data ingestion. + .setFinalityConfirmation(config.finalityConfirmation ?? 10) + .setFields({ + log: { + topics: true, + }, + }) + .setBlockRange({ + from: config.from, + }) + .addLog({ + address: [MarketplaceAddress], + topic0: [MarketplaceEvents.ValidatorNodeProviderCreated.topic], + }); + +const appFilename = `validator-node-provider-${chainId}.json` as const; + +let providers: string[] = []; +let isInit = false; + +const database = new Database({ + tables: {}, + dest: new LocalDest('./assets'), + chunkSizeMb: Infinity, + hooks: { + async onStateRead(dest) { + if (await dest.exists(appFilename)) { + let { height, hash, addresses }: Metadata = await dest + .readFile(appFilename) + .then(JSON.parse); + + if (!isInit) { + providers = addresses[MarketplaceAddress]; + isInit = true; + } + + return { height, hash }; + } else { + return undefined; + } + }, + async onStateUpdate(dest, info) { + let metadata: Metadata = { + ...info, + addresses: { + [MarketplaceAddress]: providers, + }, + }; + + await dest.writeFile(appFilename, JSON.stringify(metadata)); + }, + }, +}); + +processor.run(database, async (ctx) => { + for (const block of ctx.blocks) { + for (const log of block.logs) { + if ( + log.address === MarketplaceAddress && + log.topics[0] === + MarketplaceEvents.ValidatorNodeProviderCreated.topic + ) { + const { provider } = + MarketplaceEvents.ValidatorNodeProviderCreated.decode(log); + const id = provider.toLowerCase(); + + providers.push(id); + ctx.log.info(`${id} (ValidatorNodeProvider) preloaded`); + } + } + } + + ctx.store.setForceFlush(true); + + if (ctx.isHead) { + ctx.log.info( + `Block header for chain-id ${chainId} reached. Finishing preloader`, + ); + process.exit(); + } +}); From 1e52e1c0949e9f14633a9d9707b7f0eee80aae95 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Wed, 24 Jan 2024 13:13:50 +1300 Subject: [PATCH 16/31] refactor: Replace deprecated processor setting on Application loader script. --- preloaders/ApplicationLoader.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/preloaders/ApplicationLoader.ts b/preloaders/ApplicationLoader.ts index 69b7cb2..ffd99a5 100644 --- a/preloaders/ApplicationLoader.ts +++ b/preloaders/ApplicationLoader.ts @@ -28,8 +28,8 @@ const config = getConfig(chainId); logger.info(`Processing chain_id: ${chainId}`); const processor = new EvmBatchProcessor() - .setDataSource(config.dataSource) - .useArchiveOnly(true) + .setGateway(config.settings.gateway!) + .setRpcDataIngestionSettings({ disabled: true }) // it sets to use only the archive node for data ingestion .setFinalityConfirmation(config.finalityConfirmation ?? 10) .setFields({ log: { From a590193e7f0582f87e8ba8bf2881fc79e7da89e7 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Thu, 25 Jan 2024 20:25:45 +1300 Subject: [PATCH 17/31] refactor: Change inputAdded to use TokenHelper --- src/handlers/InputAdded.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/handlers/InputAdded.ts b/src/handlers/InputAdded.ts index 1dc314e..a9816a0 100644 --- a/src/handlers/InputAdded.ts +++ b/src/handlers/InputAdded.ts @@ -1,7 +1,6 @@ import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; import { Store } from '@subsquid/typeorm-store'; import { dataSlice, getUint } from 'ethers'; -import { Contract as ERC20 } from '../abi/ERC20'; import { Contract as ERC721 } from '../abi/ERC721'; import { events } from '../abi/InputBox'; import { @@ -18,6 +17,7 @@ import { Token, } from '../model'; import Handler from './Handler'; +import TokenHelper from './helpers/TokenHelper'; const logErrorAndReturnNull = (ctx: DataHandlerContext) => (reason: any) => { @@ -52,11 +52,7 @@ export default class InputAdded implements Handler { let token = this.tokenStorage.get(tokenAddress) as Token; if (!token) { - const contract = new ERC20(ctx, block.header, tokenAddress); - const name = await contract.name(); - const symbol = await contract.symbol(); - const decimals = await contract.decimals(); - token = new Token({ id: tokenAddress, name, symbol, decimals }); + token = await TokenHelper.createToken(tokenAddress, ctx, block); this.tokenStorage.set(tokenAddress, token); ctx.log.info(`${tokenAddress} (Token) stored`); } From a617d065872068a78b9085af1b5e1e31a29b039d Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Thu, 25 Jan 2024 20:28:04 +1300 Subject: [PATCH 18/31] test: Add test cases for ValidatorNodeProvider + Stubs. --- .../ValidatorNodeProviderPaused.test.ts | 45 ++++++ tests/stubs/validatorNodeProvider.ts | 140 ++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 tests/handlers/ValidatorNodeProviderPaused.test.ts create mode 100644 tests/stubs/validatorNodeProvider.ts diff --git a/tests/handlers/ValidatorNodeProviderPaused.test.ts b/tests/handlers/ValidatorNodeProviderPaused.test.ts new file mode 100644 index 0000000..9a46e3f --- /dev/null +++ b/tests/handlers/ValidatorNodeProviderPaused.test.ts @@ -0,0 +1,45 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import ValidatorNodeProviderPaused from '../../src/handlers/ValidatorNodeProviderPaused'; +import { ValidatorNodeProvider } from '../../src/model'; +import { + Logs, + blockData, + ctx, + validatorNodeProvider, +} from '../stubs/validatorNodeProvider'; + +vi.mock('../../src/model/', async () => { + const ValidatorNodeProvider = vi.fn(); + + return { + ValidatorNodeProvider, + }; +}); + +describe('ValidatorNodeProviderPaused', () => { + let handler: ValidatorNodeProviderPaused; + const providerStorage = new Map(); + + beforeEach(() => { + handler = new ValidatorNodeProviderPaused(providerStorage); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should from storage cache update the node property paused to true', () => { + providerStorage.set( + validatorNodeProvider.id, + structuredClone(validatorNodeProvider), + ); + + expect(validatorNodeProvider.paused).toBeFalsy(); + + handler.handle(Logs.paused, blockData, ctx); + + const provider = providerStorage.get(validatorNodeProvider.id); + + expect(provider?.paused).toEqual(true); + }); +}); diff --git a/tests/stubs/validatorNodeProvider.ts b/tests/stubs/validatorNodeProvider.ts new file mode 100644 index 0000000..b20755a --- /dev/null +++ b/tests/stubs/validatorNodeProvider.ts @@ -0,0 +1,140 @@ +import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; +import { Logger } from '@subsquid/logger'; +import { Store } from '@subsquid/typeorm-store'; +import { vi } from 'vitest'; +import { events as MarketplaceEvents } from '../../src/abi/Marketplace'; +import { events as ValidatorNodeProviderEvents } from '../../src/abi/ValidatorNodeProvider'; +import { MarketplaceAddress } from '../../src/config'; +import { ValidatorNodeProvider } from '../../src/model'; + +export const TokenAddress = + '0xE15E2ADD14c26b9ae1E735bF5B444CCB11B0bd15'.toLowerCase(); +export const PayeeAddress = + '0xd8464d1B3592b6c3786B32931E2a2AdAC501Aaad'.toLowerCase(); +export const AuthorityAddress = + '0x83E4283F7eAB201b06F749F683f27CfDA294ab81'.toLowerCase(); +export const ValidatorNodeProviderAddress = + '0x4d22c1F970574ae7B8724457D268D41E6459E288'.toLowerCase(); + +export const validatorNodeProvider = { + id: ValidatorNodeProviderAddress, + authority: { id: AuthorityAddress }, + payee: PayeeAddress, + token: { + id: TokenAddress, + decimals: 18, + name: 'SunodoToken', + symbol: 'SUN', + }, + price: 400000000000000n, + paused: false, + nodes: [], +} satisfies ValidatorNodeProvider; + +export const Logs = { + paused: { + id: '0004867730-000035-2c78f', + address: ValidatorNodeProviderAddress, + logIndex: 129, + transactionIndex: 24, + topics: [ValidatorNodeProviderEvents.Paused.topic], + data: '0x', + getTransaction() { + return this.transaction; + }, + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + transaction: { + id: '0004867730-000024-2c78f', + transactionIndex: 24, + from: '0xd8464d1b3592b6c3786b32931e2a2adac501aaad', + to: ValidatorNodeProviderAddress, + hash: '0xa4fd02a167a6a4a876283aa682febe6502278be2a2882d99a2d31e52bd3e5a52', + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + logs: [], + traces: [], + stateDiffs: [], + }, + }, + created: { + id: '0004867730-000035-2c78f', + address: MarketplaceAddress, + logIndex: 129, + transactionIndex: 24, + topics: [MarketplaceEvents.ValidatorNodeProviderCreated.topic], + data: '0x0000000000000000000000004d22c1f970574ae7b8724457d268d41e6459e28800000000000000000000000083e4283f7eab201b06f749f683f27cfda294ab81000000000000000000000000e15e2add14c26b9ae1e735bf5b444ccb11b0bd15000000000000000000000000d8464d1b3592b6c3786b32931e2a2adac501aaad00000000000000000000000000000000000000000000000000016bcc41e90000', + getTransaction() { + return this.transaction; + }, + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + transaction: { + id: '0004867730-000024-2c78f', + transactionIndex: 24, + from: '0xd8464d1b3592b6c3786b32931e2a2adac501aaad', + to: MarketplaceAddress, + hash: '0xa4fd02a167a6a4a876283aa682febe6502278be2a2882d99a2d31e52bd3e5a52', + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + logs: [], + traces: [], + stateDiffs: [], + }, + }, +} satisfies Record; + +export const blockData = { + header: { + id: '1234567890', + height: 12345, + hash: '0x1234567890abcdef', + parentHash: '0xabcdef1234567890', // EvmBlock field + timestamp: 1632297600, // EvmBlock field + }, + transactions: [], + logs: Object.values(Logs), + traces: [], + stateDiffs: [], +} satisfies BlockData; + +const ctxBuilder = (block: BlockData): DataHandlerContext => { + const consoleSink = vi.fn(); + const em = vi.fn(); + const logger = new Logger(consoleSink, 'app'); + const store = new Store(em); + + return { + log: logger, + store: store, + blocks: [blockData], + isHead: false, + _chain: { client: { call: vi.fn(), batchCall: vi.fn() } }, + }; +}; + +export const ctx = ctxBuilder(blockData); From 2fa6b71b2a2e20724de648c6ce19567564353783 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 26 Jan 2024 11:27:29 +1300 Subject: [PATCH 19/31] test: Add test cases for Paused and Unpaused provider events. --- .../ValidatorNodeProviderPaused.test.ts | 17 ++++- .../ValidatorNodeProviderUnpaused.test.ts | 64 +++++++++++++++++++ tests/stubs/validatorNodeProvider.ts | 37 +++++++++++ 3 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 tests/handlers/ValidatorNodeProviderUnpaused.test.ts diff --git a/tests/handlers/ValidatorNodeProviderPaused.test.ts b/tests/handlers/ValidatorNodeProviderPaused.test.ts index 9a46e3f..35e741c 100644 --- a/tests/handlers/ValidatorNodeProviderPaused.test.ts +++ b/tests/handlers/ValidatorNodeProviderPaused.test.ts @@ -26,9 +26,10 @@ describe('ValidatorNodeProviderPaused', () => { afterEach(() => { vi.clearAllMocks(); + providerStorage.clear(); }); - it('should from storage cache update the node property paused to true', () => { + it('should from storage cache update the node property paused to true', async () => { providerStorage.set( validatorNodeProvider.id, structuredClone(validatorNodeProvider), @@ -36,10 +37,22 @@ describe('ValidatorNodeProviderPaused', () => { expect(validatorNodeProvider.paused).toBeFalsy(); - handler.handle(Logs.paused, blockData, ctx); + await handler.handle(Logs.paused, blockData, ctx); const provider = providerStorage.get(validatorNodeProvider.id); expect(provider?.paused).toEqual(true); }); + + it('should find the provider in the database and update the paused property to true', async () => { + const copy = structuredClone(validatorNodeProvider); + vi.spyOn(ctx.store, 'get').mockResolvedValueOnce(copy); + + await handler.handle(Logs.paused, blockData, ctx); + + expect(providerStorage.size).toBe(1); + const provider = providerStorage.get(Logs.paused.address.toLowerCase()); + + expect(provider?.paused).toEqual(true); + }); }); diff --git a/tests/handlers/ValidatorNodeProviderUnpaused.test.ts b/tests/handlers/ValidatorNodeProviderUnpaused.test.ts new file mode 100644 index 0000000..6af86fc --- /dev/null +++ b/tests/handlers/ValidatorNodeProviderUnpaused.test.ts @@ -0,0 +1,64 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import ValidatorNodeProviderUnpaused from '../../src/handlers/ValidatorNodeProviderUnpaused'; +import { ValidatorNodeProvider } from '../../src/model'; +import { + Logs, + blockData, + ctx, + validatorNodeProvider, +} from '../stubs/validatorNodeProvider'; + +vi.mock('../../src/model/', async () => { + const ValidatorNodeProvider = vi.fn(); + + return { + ValidatorNodeProvider, + }; +}); + +describe('ValidatorNodeProviderUnpaused', () => { + let handler: ValidatorNodeProviderUnpaused; + const providerStorage = new Map(); + + beforeEach(() => { + handler = new ValidatorNodeProviderUnpaused(providerStorage); + }); + + afterEach(() => { + vi.clearAllMocks(); + providerStorage.clear(); + }); + + it('should from storage cache update the node property paused to false', async () => { + const clonedProvider = structuredClone({ + ...validatorNodeProvider, + paused: true, + }); + providerStorage.set(validatorNodeProvider.id, clonedProvider); + + expect(clonedProvider.paused).toBeTruthy(); + + await handler.handle(Logs.unpaused, blockData, ctx); + + const provider = providerStorage.get(validatorNodeProvider.id); + + expect(provider?.paused).toEqual(false); + }); + + it('should find the provider in the database and update the paused property to false', async () => { + const copy = structuredClone({ + ...validatorNodeProvider, + paused: true, + }); + vi.spyOn(ctx.store, 'get').mockResolvedValueOnce(copy); + + await handler.handle(Logs.unpaused, blockData, ctx); + + expect(providerStorage.size).toBe(1); + const provider = providerStorage.get( + Logs.unpaused.address.toLowerCase(), + ); + + expect(provider?.paused).toEqual(false); + }); +}); diff --git a/tests/stubs/validatorNodeProvider.ts b/tests/stubs/validatorNodeProvider.ts index b20755a..6755e9a 100644 --- a/tests/stubs/validatorNodeProvider.ts +++ b/tests/stubs/validatorNodeProvider.ts @@ -69,6 +69,43 @@ export const Logs = { stateDiffs: [], }, }, + unpaused: { + id: '0004867730-000035-2c78f', + address: ValidatorNodeProviderAddress, + logIndex: 129, + transactionIndex: 24, + topics: [ValidatorNodeProviderEvents.Unpaused.topic], + data: '0x', + getTransaction() { + return this.transaction; + }, + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + transaction: { + id: '0004867730-000024-2c78f', + transactionIndex: 24, + from: '0xd8464d1b3592b6c3786b32931e2a2adac501aaad', + to: ValidatorNodeProviderAddress, + hash: '0xa4fd02a167a6a4a876283aa682febe6502278be2a2882d99a2d31e52bd3e5a52', + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + logs: [], + traces: [], + stateDiffs: [], + }, + }, created: { id: '0004867730-000035-2c78f', address: MarketplaceAddress, From 42d9641f49e54a87561f0d2a83103fe048271867 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 26 Jan 2024 12:43:11 +1300 Subject: [PATCH 20/31] test: Add test cases for ValidatorNodeProviderCreated events. --- src/handlers/ValidatorNodeProviderCreated.ts | 1 + .../ValidatorNodeProviderCreated.test.ts | 135 ++++++++++++++++++ tests/stubs/validatorNodeProvider.ts | 19 +-- 3 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 tests/handlers/ValidatorNodeProviderCreated.test.ts diff --git a/src/handlers/ValidatorNodeProviderCreated.ts b/src/handlers/ValidatorNodeProviderCreated.ts index 8afd7c4..5a12093 100644 --- a/src/handlers/ValidatorNodeProviderCreated.ts +++ b/src/handlers/ValidatorNodeProviderCreated.ts @@ -52,6 +52,7 @@ export default class ValidatorNodeProviderCreated implements Handler { new ValidatorNodeProvider({ id: providerId, token: tokenInstance, + paused: false, authority, payee: payee.toLowerCase(), price, diff --git a/tests/handlers/ValidatorNodeProviderCreated.test.ts b/tests/handlers/ValidatorNodeProviderCreated.test.ts new file mode 100644 index 0000000..704f144 --- /dev/null +++ b/tests/handlers/ValidatorNodeProviderCreated.test.ts @@ -0,0 +1,135 @@ +import { EntityClass, FindOneOptions } from '@subsquid/typeorm-store'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import ValidatorNodeProviderCreated from '../../src/handlers/ValidatorNodeProviderCreated'; +import TokenHelper from '../../src/handlers/helpers/TokenHelper'; +import { Authority, Token, ValidatorNodeProvider } from '../../src/model'; +import { + Logs, + TokenAddress, + ValidatorNodeProviderAddress, + authority, + blockData, + ctx, + token, + validatorNodeProvider, +} from '../stubs/validatorNodeProvider'; + +vi.mock('../../src/model/', async () => { + const ValidatorNodeProvider = vi.fn(); + const Authority = vi.fn(); + const Token = vi.fn(); + + return { + ValidatorNodeProvider, + Authority, + Token, + }; +}); + +const ValidatorNodeProviderMock = vi.mocked(ValidatorNodeProvider); +const AuthorityMock = vi.mocked(Authority); + +describe('ValidatorNodeProviderCreated', () => { + let handler: ValidatorNodeProviderCreated; + const providerStorage = new Map(); + const tokenStorage = new Map(); + const authorityStorage = new Map(); + const expectedProvider = { + authority: { + id: '0x83e4283f7eab201b06f749f683f27cfda294ab81', + }, + id: '0x4d22c1f970574ae7b8724457d268d41e6459e288', + paused: false, + payee: '0xd8464d1b3592b6c3786b32931e2a2adac501aaad', + price: 400000000000000n, + token: { + decimals: 18, + id: '0xe15e2add14c26b9ae1e735bf5b444ccb11b0bd15', + name: 'SunodoToken', + symbol: 'SUN', + }, + }; + + beforeEach(() => { + ValidatorNodeProviderMock.mockImplementation( + (args) => ({ ...args } as ValidatorNodeProvider), + ); + AuthorityMock.mockImplementation((args) => ({ ...args } as Authority)); + + handler = new ValidatorNodeProviderCreated( + authorityStorage, + providerStorage, + tokenStorage, + ); + }); + + afterEach(() => { + vi.clearAllMocks(); + providerStorage.clear(); + authorityStorage.clear(); + tokenStorage.clear(); + }); + + it('should create the validator node with correct info including cache data', async () => { + authorityStorage.set(authority.id, authority); + tokenStorage.set(token.id, token); + + await handler.handle(Logs.created, blockData, ctx); + + const provider = providerStorage.get(validatorNodeProvider.id); + + expect(provider).toEqual(expectedProvider); + }); + + it('should create provider with correct information including authority and token info from database', async () => { + vi.spyOn(ctx.store, 'get').mockImplementation( + async ( + entityClass: EntityClass, + id: FindOneOptions | string, + ): Promise => { + if (entityClass === Authority) return { id }; + if (entityClass === Token) return token; + + return undefined; + }, + ); + + await handler.handle(Logs.created, blockData, ctx); + + expect(providerStorage.size).toBe(1); + const provider = providerStorage.get(ValidatorNodeProviderAddress); + + expect(provider).toEqual(expectedProvider); + }); + + it('should create an authority when it is not indexed yet', async () => { + tokenStorage.set(token.id, token); + vi.spyOn(ctx.store, 'get').mockResolvedValue(undefined); + + expect(authorityStorage.size).toEqual(0); + expect(providerStorage.size).toEqual(0); + + await handler.handle(Logs.created, blockData, ctx); + + expect(authorityStorage.size).toEqual(1); + expect(providerStorage.size).toEqual(1); + }); + + it('should create a Token when it is not indexed yet', async () => { + authorityStorage.set(authority.id, authority); + vi.spyOn(TokenHelper, 'createToken').mockResolvedValue(token); + + expect(tokenStorage.size).toEqual(0); + + await handler.handle(Logs.created, blockData, ctx); + + expect(tokenStorage.size).toEqual(1); + expect(providerStorage.size).toEqual(1); + const expectedToken = tokenStorage.get(TokenAddress); + const expectedProvider = providerStorage.get( + ValidatorNodeProviderAddress, + ); + + expect(expectedToken).toEqual(expectedProvider?.token); + }); +}); diff --git a/tests/stubs/validatorNodeProvider.ts b/tests/stubs/validatorNodeProvider.ts index 6755e9a..52a3e40 100644 --- a/tests/stubs/validatorNodeProvider.ts +++ b/tests/stubs/validatorNodeProvider.ts @@ -5,7 +5,7 @@ import { vi } from 'vitest'; import { events as MarketplaceEvents } from '../../src/abi/Marketplace'; import { events as ValidatorNodeProviderEvents } from '../../src/abi/ValidatorNodeProvider'; import { MarketplaceAddress } from '../../src/config'; -import { ValidatorNodeProvider } from '../../src/model'; +import { Authority, Token, ValidatorNodeProvider } from '../../src/model'; export const TokenAddress = '0xE15E2ADD14c26b9ae1E735bF5B444CCB11B0bd15'.toLowerCase(); @@ -16,16 +16,19 @@ export const AuthorityAddress = export const ValidatorNodeProviderAddress = '0x4d22c1F970574ae7B8724457D268D41E6459E288'.toLowerCase(); +export const authority = { id: AuthorityAddress } satisfies Authority; +export const token = { + id: TokenAddress, + decimals: 18, + name: 'SunodoToken', + symbol: 'SUN', +} satisfies Token; + export const validatorNodeProvider = { id: ValidatorNodeProviderAddress, - authority: { id: AuthorityAddress }, + authority, payee: PayeeAddress, - token: { - id: TokenAddress, - decimals: 18, - name: 'SunodoToken', - symbol: 'SUN', - }, + token, price: 400000000000000n, paused: false, nodes: [], From cd441783477d44d825e1246f54699f2e2fe92c57 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 26 Jan 2024 18:03:31 +1300 Subject: [PATCH 21/31] test: Add cases for ValidatorNodeFinancialRunway events --- .../ValidatorNodeFinancialRunway.test.ts | 110 ++++++++++++++++++ tests/stubs/validatorNodeProvider.ts | 72 +++++++++++- 2 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 tests/handlers/ValidatorNodeFinancialRunway.test.ts diff --git a/tests/handlers/ValidatorNodeFinancialRunway.test.ts b/tests/handlers/ValidatorNodeFinancialRunway.test.ts new file mode 100644 index 0000000..c60055d --- /dev/null +++ b/tests/handlers/ValidatorNodeFinancialRunway.test.ts @@ -0,0 +1,110 @@ +import { EntityClass, FindOneOptions } from '@subsquid/typeorm-store'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import ValidatorNodeFinancialRunway from '../../src/handlers/ValidatorNodeFinancialRunway'; +import { + Application, + ValidatorNode, + ValidatorNodeProvider, +} from '../../src/model'; +import { + Logs, + application, + blockData, + ctx, + validatorNodeProvider, +} from '../stubs/validatorNodeProvider'; + +vi.mock('../../src/model/', async () => { + const ValidatorNodeProvider = vi.fn(); + const ValidatorNode = vi.fn(); + const Application = vi.fn(); + + return { + ValidatorNodeProvider, + ValidatorNode, + Application, + }; +}); + +const ValidatorNodeMock = vi.mocked(ValidatorNode); + +describe('ValidatorNodeFinancialRunway', () => { + let handler: ValidatorNodeFinancialRunway; + const providersStorage = new Map(); + const nodesStorage = new Map(); + const applicationStorage = new Map(); + + beforeEach(() => { + ValidatorNodeMock.mockImplementation( + (args) => ({ ...args } as ValidatorNode), + ); + + handler = new ValidatorNodeFinancialRunway( + applicationStorage, + nodesStorage, + providersStorage, + ); + }); + + afterEach(() => { + vi.clearAllMocks(); + providersStorage.clear(); + applicationStorage.clear(); + nodesStorage.clear(); + }); + + it('should not create a validator-node when the provider does not exist', async () => { + vi.spyOn(ctx.store, 'get').mockResolvedValue(undefined); + + expect(nodesStorage.size).toEqual(0); + + await handler.handle(Logs.financialRunway, blockData, ctx); + + expect(nodesStorage.size).toEqual(0); + }); + + it('should create the validator-node when the provider exist', async () => { + providersStorage.set( + validatorNodeProvider.id, + structuredClone(validatorNodeProvider), + ); + applicationStorage.set(application.id, application); + + expect(nodesStorage.size).toEqual(0); + + await handler.handle(Logs.financialRunway, blockData, ctx); + + expect(nodesStorage.size).toEqual(1); + const [[id, node]] = nodesStorage.entries(); + + expect(node.id).toEqual(`${node.provider.id}-${node.application.id}`); + expect(node.application).toBeDefined(); + expect(node.provider).toBeDefined(); + expect(node.runway).toEqual(1702321200000n); + expect(node.location).not.toBeDefined(); + }); + + it('should create the validator-node with provider and application data from database', async () => { + vi.spyOn(ctx.store, 'get').mockImplementation( + async ( + entityClass: EntityClass, + id: FindOneOptions | string, + ): Promise => { + if (entityClass === Application) return application; + if (entityClass === ValidatorNodeProvider) + return validatorNodeProvider; + + return undefined; + }, + ); + + await handler.handle(Logs.financialRunway, blockData, ctx); + + expect(nodesStorage.size).toEqual(1); + const [[_, node]] = nodesStorage.entries(); + + expect(node.application).toEqual(application); + expect(node.provider).toEqual(validatorNodeProvider); + expect(node.runway).toEqual(1702321200000n); + }); +}); diff --git a/tests/stubs/validatorNodeProvider.ts b/tests/stubs/validatorNodeProvider.ts index 52a3e40..67ce5ce 100644 --- a/tests/stubs/validatorNodeProvider.ts +++ b/tests/stubs/validatorNodeProvider.ts @@ -1,12 +1,24 @@ import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; import { Logger } from '@subsquid/logger'; import { Store } from '@subsquid/typeorm-store'; +import { encodeAbiParameters } from 'viem'; import { vi } from 'vitest'; import { events as MarketplaceEvents } from '../../src/abi/Marketplace'; import { events as ValidatorNodeProviderEvents } from '../../src/abi/ValidatorNodeProvider'; -import { MarketplaceAddress } from '../../src/config'; -import { Authority, Token, ValidatorNodeProvider } from '../../src/model'; +import { + CartesiDAppFactoryAddress, + MarketplaceAddress, +} from '../../src/config'; +import { + Application, + Authority, + Token, + ValidatorNode, + ValidatorNodeProvider, +} from '../../src/model'; +const UntilTimestamp = 1702321200000n; +export const DappAddress = '0x028367fE226CD9E5699f4288d512fE3a4a4a0012'; export const TokenAddress = '0xE15E2ADD14c26b9ae1E735bF5B444CCB11B0bd15'.toLowerCase(); export const PayeeAddress = @@ -24,6 +36,14 @@ export const token = { symbol: 'SUN', } satisfies Token; +export const application = { + factory: { id: CartesiDAppFactoryAddress, applications: [] }, + id: DappAddress.toLowerCase(), + inputs: [], + owner: '0x', + timestamp: 1691779848n, +} satisfies Application; + export const validatorNodeProvider = { id: ValidatorNodeProviderAddress, authority, @@ -34,6 +54,14 @@ export const validatorNodeProvider = { nodes: [], } satisfies ValidatorNodeProvider; +export const validatorNode = { + application, + provider: validatorNodeProvider, + id: `${validatorNodeProvider.id}-${application.id}`, + location: null, + runway: null, +} satisfies ValidatorNode; + export const Logs = { paused: { id: '0004867730-000035-2c78f', @@ -146,6 +174,46 @@ export const Logs = { stateDiffs: [], }, }, + financialRunway: { + id: '0004867730-000035-2c78f', + address: ValidatorNodeProviderAddress, + logIndex: 129, + transactionIndex: 24, + topics: [ + ValidatorNodeProviderEvents.FinancialRunway.topic, + encodeAbiParameters([{ type: 'address' }], [DappAddress]), + ], + data: encodeAbiParameters([{ type: 'uint' }], [UntilTimestamp]), + getTransaction() { + return this.transaction; + }, + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + transaction: { + id: '0004867730-000024-2c78f', + transactionIndex: 24, + from: '0xd8464d1b3592b6c3786b32931e2a2adac501aaad', + to: ValidatorNodeProviderAddress, + hash: '0xa4fd02a167a6a4a876283aa682febe6502278be2a2882d99a2d31e52bd3e5a52', + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + logs: [], + traces: [], + stateDiffs: [], + }, + }, } satisfies Record; export const blockData = { From 82560e9cc6266e9e64f6be742498b22cca017d74 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 26 Jan 2024 20:34:53 +1300 Subject: [PATCH 22/31] test: Add cases for ValidatorNodeMachineLocation event --- .../ValidatorNodeMachineLocation.test.ts | 115 ++++++++++++++++++ tests/stubs/validatorNodeProvider.ts | 43 ++++++- 2 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 tests/handlers/ValidatorNodeMachineLocation.test.ts diff --git a/tests/handlers/ValidatorNodeMachineLocation.test.ts b/tests/handlers/ValidatorNodeMachineLocation.test.ts new file mode 100644 index 0000000..9a091dc --- /dev/null +++ b/tests/handlers/ValidatorNodeMachineLocation.test.ts @@ -0,0 +1,115 @@ +import { EntityClass, FindOneOptions } from '@subsquid/typeorm-store'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import ValidatorNodeMachineLocation from '../../src/handlers/ValidatorNodeMachineLocation'; +import { + Application, + ValidatorNode, + ValidatorNodeProvider, +} from '../../src/model'; +import { + Logs, + application, + blockData, + ctx, + validatorNodeProvider, +} from '../stubs/validatorNodeProvider'; + +vi.mock('../../src/model/', async () => { + const ValidatorNodeProvider = vi.fn(); + const ValidatorNode = vi.fn(); + const Application = vi.fn(); + + return { + ValidatorNodeProvider, + ValidatorNode, + Application, + }; +}); + +const ValidatorNodeMock = vi.mocked(ValidatorNode); + +describe('ValidatorNodeMachineLocation', () => { + let handler: ValidatorNodeMachineLocation; + const providersStorage = new Map(); + const nodesStorage = new Map(); + const applicationStorage = new Map(); + + beforeEach(() => { + ValidatorNodeMock.mockImplementation( + (args) => ({ ...args } as ValidatorNode), + ); + // defaults to find nothing in the "DB" + vi.spyOn(ctx.store, 'get').mockResolvedValue(undefined); + + handler = new ValidatorNodeMachineLocation( + applicationStorage, + nodesStorage, + providersStorage, + ); + }); + + afterEach(() => { + vi.clearAllMocks(); + providersStorage.clear(); + applicationStorage.clear(); + nodesStorage.clear(); + }); + + it('should not create a validator-node when the provider does not exist', async () => { + vi.spyOn(ctx.store, 'get').mockResolvedValue(undefined); + + expect(nodesStorage.size).toEqual(0); + + await handler.handle(Logs.machineLocation, blockData, ctx); + + expect(nodesStorage.size).toEqual(0); + }); + + it('should create the validator-node when the provider exist and set the node location', async () => { + providersStorage.set( + validatorNodeProvider.id, + structuredClone(validatorNodeProvider), + ); + applicationStorage.set(application.id, application); + + expect(nodesStorage.size).toEqual(0); + + await handler.handle(Logs.machineLocation, blockData, ctx); + + expect(nodesStorage.size).toEqual(1); + const [[id, node]] = nodesStorage.entries(); + + expect(node.id).toEqual(`${node.provider.id}-${node.application.id}`); + expect(node.application).toBeDefined(); + expect(node.provider).toBeDefined(); + expect(node.location).toEqual( + 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR', + ); + }); + + it('should create the validator-node with provider and application data from database', async () => { + vi.spyOn(ctx.store, 'get').mockImplementation( + async ( + entityClass: EntityClass, + id: FindOneOptions | string, + ): Promise => { + if (entityClass === Application) return application; + if (entityClass === ValidatorNodeProvider) + return validatorNodeProvider; + + return undefined; + }, + ); + + await handler.handle(Logs.machineLocation, blockData, ctx); + + expect(nodesStorage.size).toEqual(1); + const [[_, node]] = nodesStorage.entries(); + + expect(node.application).toEqual(application); + expect(node.provider).toEqual(validatorNodeProvider); + expect(node.location).toEqual( + 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR', + ); + }); +}); diff --git a/tests/stubs/validatorNodeProvider.ts b/tests/stubs/validatorNodeProvider.ts index 67ce5ce..72933e0 100644 --- a/tests/stubs/validatorNodeProvider.ts +++ b/tests/stubs/validatorNodeProvider.ts @@ -17,7 +17,8 @@ import { ValidatorNodeProvider, } from '../../src/model'; -const UntilTimestamp = 1702321200000n; +export const CID = 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR'; +export const UntilTimestamp = 1702321200000n; export const DappAddress = '0x028367fE226CD9E5699f4288d512fE3a4a4a0012'; export const TokenAddress = '0xE15E2ADD14c26b9ae1E735bF5B444CCB11B0bd15'.toLowerCase(); @@ -214,6 +215,46 @@ export const Logs = { stateDiffs: [], }, }, + machineLocation: { + id: '0004867730-000035-2c78f', + address: ValidatorNodeProviderAddress, + logIndex: 129, + transactionIndex: 24, + topics: [ + ValidatorNodeProviderEvents.MachineLocation.topic, + encodeAbiParameters([{ type: 'address' }], [DappAddress]), + ], + data: encodeAbiParameters([{ type: 'string' }], [CID]), + getTransaction() { + return this.transaction; + }, + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + transaction: { + id: '0004867730-000024-2c78f', + transactionIndex: 24, + from: '0xd8464d1b3592b6c3786b32931e2a2adac501aaad', + to: ValidatorNodeProviderAddress, + hash: '0xa4fd02a167a6a4a876283aa682febe6502278be2a2882d99a2d31e52bd3e5a52', + block: { + id: '0004867730-2c78f', + height: 4867730, + hash: '0x8f998edf202fe3449e61849c2207432833721d9e6a5ffda1c5388187826ac9a7', + parentHash: + '0x91f4d079445be915f9a9226a05a6c33a9112dda3cd10cffa4fe28406975220c6', + timestamp: 1702321200000, + }, + logs: [], + traces: [], + stateDiffs: [], + }, + }, } satisfies Record; export const blockData = { From 5cc1436acf8390dfe42e136dbdc4d4ff77b68533 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 26 Jan 2024 20:44:45 +1300 Subject: [PATCH 23/31] test: Add cases for Arbitrum and ArbitrumGoerli processor setup. --- tests/processor.test.ts | 109 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/tests/processor.test.ts b/tests/processor.test.ts index 678fc3e..3b83e05 100644 --- a/tests/processor.test.ts +++ b/tests/processor.test.ts @@ -1,5 +1,6 @@ import { EvmBatchProcessor } from '@subsquid/evm-processor'; import { afterEach } from 'node:test'; +import { arbitrum, arbitrumGoerli } from 'viem/chains'; import { beforeEach, describe, expect, test, vi } from 'vitest'; import { CartesiDAppFactoryAddress } from '../src/config'; import { createProcessor } from '../src/processor'; @@ -190,6 +191,114 @@ describe('Processor creation', () => { }); }); + test('Required configs for arbitrum', () => { + const applicationMetadata = loadApplications(arbitrum.id); + const processor = createProcessor(arbitrum.id); + + expect(processor.setGateway).toHaveBeenCalledWith({ + url: 'https://v2.archive.subsquid.io/network/arbitrum-one', + }); + + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'https://arb1.arbitrum.io/rpc', + }); + + expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); + expect(processor.setFields).toHaveBeenCalledWith({ + transaction: { + chainId: true, + from: true, + hash: true, + value: true, + }, + }); + expect(processor.setBlockRange).toHaveBeenCalledWith({ + from: 115470622, + }); + + expect(processor.addLog).toHaveBeenCalledTimes(10); + + addLogExpectation(processor); + + const addLog = vi.mocked(processor.addLog); + + expect(addLog.mock.calls[8][0]).toEqual({ + address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], + topic0: [ + '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', + ], + range: { + from: expect.any(Number), + to: applicationMetadata?.height, + }, + transaction: true, + }); + + expect(addLog.mock.calls[9][0]).toEqual({ + topic0: [ + '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', + ], + range: { + from: applicationMetadata?.height! + 1, + }, + transaction: true, + }); + }); + + test('Required configs for arbitrum-goerli', () => { + const applicationMetadata = loadApplications(arbitrumGoerli.id); + const processor = createProcessor(arbitrumGoerli.id); + + expect(processor.setGateway).toHaveBeenCalledWith({ + url: 'https://v2.archive.subsquid.io/network/arbitrum-goerli', + }); + + expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ + url: 'https://goerli-rollup.arbitrum.io/rpc', + }); + + expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); + expect(processor.setFields).toHaveBeenCalledWith({ + transaction: { + chainId: true, + from: true, + hash: true, + value: true, + }, + }); + expect(processor.setBlockRange).toHaveBeenCalledWith({ + from: 31715663, + }); + + expect(processor.addLog).toHaveBeenCalledTimes(10); + + addLogExpectation(processor); + + const addLog = vi.mocked(processor.addLog); + + expect(addLog.mock.calls[8][0]).toEqual({ + address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], + topic0: [ + '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', + ], + range: { + from: expect.any(Number), + to: applicationMetadata?.height, + }, + transaction: true, + }); + + expect(addLog.mock.calls[9][0]).toEqual({ + topic0: [ + '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', + ], + range: { + from: applicationMetadata?.height! + 1, + }, + transaction: true, + }); + }); + test('Set correct rpc-endpoint for sepolia based on environment var', () => { const myRPCNodeURL = 'https://my-custom-sepolia-node/v3/api'; vi.stubEnv('RPC_URL_11155111', myRPCNodeURL); From 69493df2f94de580a38c37aad5c4cdc555bb76cd Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Mon, 29 Jan 2024 20:02:43 +1300 Subject: [PATCH 24/31] feat: Add logging to TokenHelper --- src/handlers/helpers/TokenHelper.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/handlers/helpers/TokenHelper.ts b/src/handlers/helpers/TokenHelper.ts index b7078ee..83571b6 100644 --- a/src/handlers/helpers/TokenHelper.ts +++ b/src/handlers/helpers/TokenHelper.ts @@ -16,9 +16,15 @@ export default class TokenHelper { token.decimals(), ]).then( (results) => - results.map((r) => - r.status === 'fulfilled' ? r.value : undefined, - ) as [string?, string?, number?], + results.map((r) => { + if (r.status === 'fulfilled') { + ctx.log.info(`(TokenHelper): ${r.status}: ${r.value}`); + return r.value; + } else { + ctx.log.info(`(TokenHelper): ${r.status}: ${r.reason}`); + return undefined; + } + }) as [string?, string?, number?], ); return new Token({ From a15dfdff4e7c4bc71504f85ec9c3da23745a20bb Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Mon, 29 Jan 2024 20:03:44 +1300 Subject: [PATCH 25/31] feat: Set provider logs based on assets --- src/processor.ts | 110 +++++++++++++++++++++++++++++++---------------- src/utils.ts | 27 +++++++++--- 2 files changed, 93 insertions(+), 44 deletions(-) diff --git a/src/processor.ts b/src/processor.ts index bab2f93..e94577b 100644 --- a/src/processor.ts +++ b/src/processor.ts @@ -19,15 +19,82 @@ import { MarketplaceAddress, getConfig, } from './config'; -import { loadApplications } from './utils'; +import { loadApplications, loadProviders } from './utils'; export type NetworkConfig = { archive: string; rpcUrl: string; }; -export const createProcessor = (chainId: number): EvmBatchProcessor => { +function setLogsForProviders( + processor: R, + chainId: number, +): R { + const providersMetadata = loadProviders(chainId); + const config = getConfig(chainId); + const addressesCount = + providersMetadata?.addresses[MarketplaceAddress].length ?? 0; + + const topic0 = [ + ValidatorNodeProviderEvents.MachineLocation.topic, + ValidatorNodeProviderEvents.FinancialRunway.topic, + ValidatorNodeProviderEvents.Paused.topic, + ValidatorNodeProviderEvents.Unpaused.topic, + ]; + + if (providersMetadata !== null && addressesCount > 0) { + return processor + .addLog({ + address: providersMetadata.addresses[MarketplaceAddress], + topic0, + range: { from: config.from, to: providersMetadata.height }, + transaction: true, + }) + .addLog({ + topic0, + range: { from: providersMetadata.height + 1 }, + transaction: true, + }); + } else { + return processor.addLog({ + topic0, + transaction: true, + }); + } +} + +function setLogsForApplications( + processor: R, + chainId: number, +): R { const applicationMetadata = loadApplications(chainId); + const config = getConfig(chainId); + const addressesCount = + applicationMetadata?.addresses[CartesiDAppFactoryAddress].length ?? 0; + + if (applicationMetadata !== null && addressesCount > 0) { + return processor + .addLog({ + address: + applicationMetadata.addresses[CartesiDAppFactoryAddress], + topic0: [CartesiDApp.OwnershipTransferred.topic], + range: { from: config.from, to: applicationMetadata.height }, + transaction: true, + }) + .addLog({ + topic0: [CartesiDApp.OwnershipTransferred.topic], + range: { from: applicationMetadata.height + 1 }, + transaction: true, + }); + } else { + return processor.addLog({ + topic0: [CartesiDApp.OwnershipTransferred.topic], + transaction: true, + }); + } +} + +export const createProcessor = (chainId: number): EvmBatchProcessor => { const config = getConfig(chainId); let processor = new EvmBatchProcessor() .setRpcEndpoint(config.settings.rpcEndpoint) @@ -59,48 +126,15 @@ export const createProcessor = (chainId: number): EvmBatchProcessor => { .addLog({ address: [MarketplaceAddress], topic0: [MarketplaceEvents.ValidatorNodeProviderCreated.topic], - }) - .addLog({ - topic0: [ValidatorNodeProviderEvents.MachineLocation.topic], - transaction: true, - }) - .addLog({ - topic0: [ValidatorNodeProviderEvents.FinancialRunway.topic], - transaction: true, - }) - .addLog({ - topic0: [ValidatorNodeProviderEvents.Paused.topic], - transaction: true, - }) - .addLog({ - topic0: [ValidatorNodeProviderEvents.Unpaused.topic], - transaction: true, }); + processor = setLogsForProviders(processor, chainId); + processor = config.settings.gateway ? processor.setGateway(config.settings.gateway) : processor; - if (applicationMetadata !== null) { - processor = processor - .addLog({ - address: - applicationMetadata.addresses[CartesiDAppFactoryAddress], - topic0: [CartesiDApp.OwnershipTransferred.topic], - range: { from: config.from, to: applicationMetadata.height }, - transaction: true, - }) - .addLog({ - topic0: [CartesiDApp.OwnershipTransferred.topic], - range: { from: applicationMetadata.height + 1 }, - transaction: true, - }); - } else { - processor = processor.addLog({ - topic0: [CartesiDApp.OwnershipTransferred.topic], - transaction: true, - }); - } + processor = setLogsForApplications(processor, chainId); return processor; }; diff --git a/src/utils.ts b/src/utils.ts index db133ad..39de873 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,21 +1,36 @@ import { existsSync, readFileSync } from 'node:fs'; -type ApplicationMetadata = { +type Metadata = { height: number; addresses: Record; }; +function loadMetadata(filePath: string): Metadata | null { + if (!existsSync(filePath)) return null; + + const file = readFileSync(filePath, 'utf-8'); + return JSON.parse(file) as Metadata; +} + /** * Load application metadata structure containing block height and the list of * application addresses from specified CartesiDAppFactory address. * @param chainId - * @returns {ApplicationMetadata | null} + * @returns {Metadata | null} */ -export function loadApplications(chainId: number): ApplicationMetadata | null { +export function loadApplications(chainId: number): Metadata | null { const filePath = `./assets/applications-${chainId}.json`; - if (!existsSync(filePath)) return null; + return loadMetadata(filePath); +} - const file = readFileSync(filePath, 'utf-8'); - return JSON.parse(file) as ApplicationMetadata; +/** + * Load validator-node-provider metadata structure containing block height and the list of + * provider addresses from specified Marketplace address. + * @param chainId + * @returns {Metadata | null} + */ +export function loadProviders(chainId: number): Metadata | null { + const filePath = `./assets/validator-node-provider-${chainId}.json`; + return loadMetadata(filePath); } From aa3587d1a9294859a117e590687c988aef2212ea Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Mon, 29 Jan 2024 20:04:21 +1300 Subject: [PATCH 26/31] test: Add test cases when setting different processor logs. --- tests/processor.test.ts | 129 +++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 55 deletions(-) diff --git a/tests/processor.test.ts b/tests/processor.test.ts index 3b83e05..4e752dd 100644 --- a/tests/processor.test.ts +++ b/tests/processor.test.ts @@ -2,9 +2,10 @@ import { EvmBatchProcessor } from '@subsquid/evm-processor'; import { afterEach } from 'node:test'; import { arbitrum, arbitrumGoerli } from 'viem/chains'; import { beforeEach, describe, expect, test, vi } from 'vitest'; -import { CartesiDAppFactoryAddress } from '../src/config'; +import { events as ValidatorNodeProviderEvents } from '../src/abi/ValidatorNodeProvider'; +import { CartesiDAppFactoryAddress, MarketplaceAddress } from '../src/config'; import { createProcessor } from '../src/processor'; -import { loadApplications } from '../src/utils'; +import { loadApplications, loadProviders } from '../src/utils'; vi.mock('@subsquid/evm-processor', async () => { const actualMods = await vi.importActual('@subsquid/evm-processor'); @@ -25,6 +26,12 @@ vi.mock('@subsquid/evm-processor', async () => { }; }); +const validatorNodeProviderTopics = [ + ValidatorNodeProviderEvents.MachineLocation.topic, + ValidatorNodeProviderEvents.FinancialRunway.topic, + ValidatorNodeProviderEvents.Paused.topic, + ValidatorNodeProviderEvents.Unpaused.topic, +]; const sepolia = 11155111; const mainnet = 1; const local = 31337; @@ -51,6 +58,7 @@ describe('Processor creation', () => { test('Required configs for sepolia', () => { const processor = createProcessor(sepolia); const applicationMetadata = loadApplications(sepolia); + const providersMetadata = loadProviders(sepolia); expect(processor.setGateway).toHaveBeenCalledWith({ url: 'https://v2.archive.subsquid.io/network/ethereum-sepolia', @@ -73,13 +81,41 @@ describe('Processor creation', () => { from: 3963384, }); - expect(processor.addLog).toHaveBeenCalledTimes(10); + expect(processor.addLog).toHaveBeenCalledTimes(8); addLogExpectation(processor); const addLog = vi.mocked(processor.addLog); - expect(addLog.mock.calls[8][0]).toEqual({ + expect(addLog.mock.calls[4][0]).toEqual({ + address: providersMetadata?.addresses[MarketplaceAddress], + range: { + from: 3963384, + to: providersMetadata?.height, + }, + topic0: [ + '0x22f244e839c97faca31341c9c2bb7a09f94a81fb309a36a85c8465bafeb69ffc', + '0x206c488a3e590d91a82467a0072d112dfe901a99ae561b30c89ff2509fadde35', + '0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258', + '0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa', + ], + transaction: true, + }); + + expect(addLog.mock.calls[5][0]).toEqual({ + range: { + from: providersMetadata?.height! + 1, + }, + topic0: [ + '0x22f244e839c97faca31341c9c2bb7a09f94a81fb309a36a85c8465bafeb69ffc', + '0x206c488a3e590d91a82467a0072d112dfe901a99ae561b30c89ff2509fadde35', + '0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258', + '0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa', + ], + transaction: true, + }); + + expect(addLog.mock.calls[6][0]).toEqual({ address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', @@ -91,7 +127,7 @@ describe('Processor creation', () => { transaction: true, }); - expect(addLog.mock.calls[9][0]).toEqual({ + expect(addLog.mock.calls[7][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], @@ -123,13 +159,23 @@ describe('Processor creation', () => { from: 0, }); - expect(processor.addLog).toHaveBeenCalledTimes(9); + expect(processor.addLog).toHaveBeenCalledTimes(6); addLogExpectation(processor); const addLog = vi.mocked(processor.addLog); - expect(addLog.mock.calls[8][0]).toEqual({ + expect(addLog.mock.calls[4][0]).toEqual({ + topic0: [ + '0x22f244e839c97faca31341c9c2bb7a09f94a81fb309a36a85c8465bafeb69ffc', + '0x206c488a3e590d91a82467a0072d112dfe901a99ae561b30c89ff2509fadde35', + '0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258', + '0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa', + ], + transaction: true, + }); + + expect(addLog.mock.calls[5][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], @@ -139,6 +185,7 @@ describe('Processor creation', () => { test('Required configs for mainnet', () => { const applicationMetadata = loadApplications(mainnet); + const providerMetadata = loadProviders(mainnet); const processor = createProcessor(mainnet); expect(processor.setGateway).toHaveBeenCalledWith({ @@ -162,13 +209,18 @@ describe('Processor creation', () => { from: 17784733, }); - expect(processor.addLog).toHaveBeenCalledTimes(10); + expect(processor.addLog).toHaveBeenCalledTimes(7); addLogExpectation(processor); const addLog = vi.mocked(processor.addLog); - expect(addLog.mock.calls[8][0]).toEqual({ + expect(addLog.mock.calls[4][0]).toEqual({ + topic0: validatorNodeProviderTopics, + transaction: true, + }); + + expect(addLog.mock.calls[5][0]).toEqual({ address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', @@ -180,7 +232,7 @@ describe('Processor creation', () => { transaction: true, }); - expect(addLog.mock.calls[9][0]).toEqual({ + expect(addLog.mock.calls[6][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], @@ -216,31 +268,21 @@ describe('Processor creation', () => { from: 115470622, }); - expect(processor.addLog).toHaveBeenCalledTimes(10); + expect(processor.addLog).toHaveBeenCalledTimes(6); addLogExpectation(processor); const addLog = vi.mocked(processor.addLog); - expect(addLog.mock.calls[8][0]).toEqual({ - address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], - topic0: [ - '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', - ], - range: { - from: expect.any(Number), - to: applicationMetadata?.height, - }, + expect(addLog.mock.calls[4][0]).toEqual({ + topic0: validatorNodeProviderTopics, transaction: true, }); - expect(addLog.mock.calls[9][0]).toEqual({ + expect(addLog.mock.calls[5][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], - range: { - from: applicationMetadata?.height! + 1, - }, transaction: true, }); }); @@ -270,13 +312,18 @@ describe('Processor creation', () => { from: 31715663, }); - expect(processor.addLog).toHaveBeenCalledTimes(10); + expect(processor.addLog).toHaveBeenCalledTimes(7); addLogExpectation(processor); const addLog = vi.mocked(processor.addLog); - expect(addLog.mock.calls[8][0]).toEqual({ + expect(addLog.mock.calls[4][0]).toEqual({ + topic0: validatorNodeProviderTopics, + transaction: true, + }); + + expect(addLog.mock.calls[5][0]).toEqual({ address: applicationMetadata?.addresses[CartesiDAppFactoryAddress], topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', @@ -288,7 +335,7 @@ describe('Processor creation', () => { transaction: true, }); - expect(addLog.mock.calls[9][0]).toEqual({ + expect(addLog.mock.calls[6][0]).toEqual({ topic0: [ '0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0', ], @@ -366,33 +413,5 @@ describe('Processor creation', () => { '0x0e2b88107197b560f03a59714a3b7fcced2035fc2f645c44f71491f96c003541', ], }); - - expect(addLog.mock.calls[4][0]).toEqual({ - topic0: [ - '0x22f244e839c97faca31341c9c2bb7a09f94a81fb309a36a85c8465bafeb69ffc', - ], - transaction: true, - }); - - expect(addLog.mock.calls[5][0]).toEqual({ - topic0: [ - '0x206c488a3e590d91a82467a0072d112dfe901a99ae561b30c89ff2509fadde35', - ], - transaction: true, - }); - - expect(addLog.mock.calls[6][0]).toEqual({ - topic0: [ - '0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258', - ], - transaction: true, - }); - - expect(addLog.mock.calls[7][0]).toEqual({ - topic0: [ - '0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa', - ], - transaction: true, - }); } }); From 4eadbca762b97703d2384dee02adb3d559de9c1c Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 2 Feb 2024 12:39:31 +1300 Subject: [PATCH 27/31] chore: Add Arbitrum and Arbitrum-Goerli as possible RPC_URL configs. --- .env | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.env b/.env index 6c6b52a..c99ff03 100644 --- a/.env +++ b/.env @@ -7,3 +7,5 @@ CHAIN_ID="11155111" # RPC_URL_1= # RPC_URL_11155111= # RPC_URL_31337= +# RPC_URL_42161= +# RPC_URL_421613= From 7318fc0c400a479b5175d3fd750d5d7fd5a2f2c2 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 2 Feb 2024 12:41:03 +1300 Subject: [PATCH 28/31] chore: Upgrade cartesi/rollups package and add sunodo/contracts. --- package-lock.json | 150 ++++++++++++++++++++++++++++++++++++---- package.json | 3 +- tests/processor.test.ts | 2 +- 3 files changed, 138 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6f1757f..5682090 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@cartesi/rollups": "1.0.0", + "@cartesi/rollups": "^1.2.0", "@subsquid/archive-registry": "^3.3.0", "@subsquid/evm-processor": "^1.13.0", "@subsquid/file-store": "^2.0.0", @@ -17,6 +17,7 @@ "@subsquid/logger": "^1.3.0", "@subsquid/typeorm-migration": "^1.3.0", "@subsquid/typeorm-store": "^1.2.6", + "@sunodo/contracts": "^0.5.0", "dotenv": "^16.1.4", "ethers": "^6.10.0", "pg": "^8.11.0", @@ -441,18 +442,18 @@ "dev": true }, "node_modules/@cartesi/rollups": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@cartesi/rollups/-/rollups-1.0.0.tgz", - "integrity": "sha512-/Yjw/sMYNP+xka5IU3pU3yewVILnmjsDfkVRp9xwMWEIyCnjKniOVkf7epAic///Op+UFcIcdgYljvEzMAhXbA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@cartesi/rollups/-/rollups-1.2.0.tgz", + "integrity": "sha512-oLm/JYuRpUD6bg8UKFZjdSJRZ1CWOd5SM6xnjvRKMisGZcJzULYHuuzZMSMONpnFVQhFXrwJF4q0tzcOAK4oDw==", "dependencies": { - "@cartesi/util": "6.0.0", + "@cartesi/util": "6.1.0", "@openzeppelin/contracts": "4.9.2" } }, "node_modules/@cartesi/util": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@cartesi/util/-/util-6.0.0.tgz", - "integrity": "sha512-n5+jFRI60HOp6xOd0IDtQU/2eh/u2uojxB1xVoTHi9Qu8EXWLeCT3s3+2bsBevk1duDFtAiqQeTT8g7dcj9+7g==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@cartesi/util/-/util-6.1.0.tgz", + "integrity": "sha512-j92nSoMHCyu6h7nZgn+MeXjkp8oa1Cy6qaImyxVXmPN2Rcqzl/TkWm/RkhbODU9rh4U3OuUteYqKRjefI3/XIQ==" }, "node_modules/@colors/colors": { "version": "1.5.0", @@ -476,6 +477,30 @@ "node": ">=12" } }, + "node_modules/@ensdomains/buffer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@ensdomains/buffer/-/buffer-0.1.1.tgz", + "integrity": "sha512-92SfSiNS8XorgU7OUBHo/i1ZU7JV7iz/6bKuLPNVsMxV79/eI7fJR6jfJJc40zAHjs3ha+Xo965Idomlq3rqnw==" + }, + "node_modules/@ensdomains/ens-contracts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@ensdomains/ens-contracts/-/ens-contracts-1.0.0.tgz", + "integrity": "sha512-NB5fig+TuaAkdW3uVshO/vuI/BNWus8MkpdDCzx6S797j7gRrDbKfcVHHDH5rBmj8Yp0/jCR1LU4DHaU5oxO0Q==", + "dependencies": { + "@ensdomains/buffer": "^0.1.1", + "@ensdomains/solsha1": "0.0.3", + "@openzeppelin/contracts": "^4.1.0", + "dns-packet": "^5.3.0" + } + }, + "node_modules/@ensdomains/solsha1": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@ensdomains/solsha1/-/solsha1-0.0.3.tgz", + "integrity": "sha512-uhuG5LzRt/UJC0Ux83cE2rCKwSleRePoYdQVcqPN1wyf3/ekMzT/KZUF9+v7/AG5w9jlMLCQkUM50vfjr0Yu9Q==", + "dependencies": { + "hash-test-vectors": "^1.3.2" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.19.11", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", @@ -1165,6 +1190,11 @@ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, "node_modules/@noble/curves": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", @@ -3260,6 +3290,21 @@ "resolved": "https://registry.npmjs.org/@subsquid/util-timeout/-/util-timeout-2.3.2.tgz", "integrity": "sha512-DVUnuiWAX7/4ZvbzuHENUShEEV4G0M38mQ/+R8DpHxwpCSrtEaSRaUMwdyUSn/WVqR7wo9+jkLCxFjE5feCURQ==" }, + "node_modules/@sunodo/contracts": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sunodo/contracts/-/contracts-0.5.0.tgz", + "integrity": "sha512-0DCLn+JXwVwD23MGVgDdPghzSnijic3bMtrSkwrJmEukW2eb1YRdoKG3DZxROXU0R0ElZKBz3N7o/d5ix1dlDQ==", + "dependencies": { + "@cartesi/rollups": "1.2.0", + "@ensdomains/ens-contracts": "1.0.0", + "@openzeppelin/contracts": "4.9.3" + } + }, + "node_modules/@sunodo/contracts/node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -5726,6 +5771,17 @@ "node": ">=8" } }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/dotenv": { "version": "16.3.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", @@ -7218,6 +7274,11 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/hash-test-vectors": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/hash-test-vectors/-/hash-test-vectors-1.3.2.tgz", + "integrity": "sha512-PKd/fitmsrlWGh3OpKbgNLE04ZQZsvs1ZkuLoQpeIKuwx+6CYVNdW6LaPIS1QAdZvV40+skk0w4YomKnViUnvQ==" + }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -16807,18 +16868,18 @@ "dev": true }, "@cartesi/rollups": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@cartesi/rollups/-/rollups-1.0.0.tgz", - "integrity": "sha512-/Yjw/sMYNP+xka5IU3pU3yewVILnmjsDfkVRp9xwMWEIyCnjKniOVkf7epAic///Op+UFcIcdgYljvEzMAhXbA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@cartesi/rollups/-/rollups-1.2.0.tgz", + "integrity": "sha512-oLm/JYuRpUD6bg8UKFZjdSJRZ1CWOd5SM6xnjvRKMisGZcJzULYHuuzZMSMONpnFVQhFXrwJF4q0tzcOAK4oDw==", "requires": { - "@cartesi/util": "6.0.0", + "@cartesi/util": "6.1.0", "@openzeppelin/contracts": "4.9.2" } }, "@cartesi/util": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@cartesi/util/-/util-6.0.0.tgz", - "integrity": "sha512-n5+jFRI60HOp6xOd0IDtQU/2eh/u2uojxB1xVoTHi9Qu8EXWLeCT3s3+2bsBevk1duDFtAiqQeTT8g7dcj9+7g==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@cartesi/util/-/util-6.1.0.tgz", + "integrity": "sha512-j92nSoMHCyu6h7nZgn+MeXjkp8oa1Cy6qaImyxVXmPN2Rcqzl/TkWm/RkhbODU9rh4U3OuUteYqKRjefI3/XIQ==" }, "@colors/colors": { "version": "1.5.0", @@ -16836,6 +16897,30 @@ "@jridgewell/trace-mapping": "0.3.9" } }, + "@ensdomains/buffer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@ensdomains/buffer/-/buffer-0.1.1.tgz", + "integrity": "sha512-92SfSiNS8XorgU7OUBHo/i1ZU7JV7iz/6bKuLPNVsMxV79/eI7fJR6jfJJc40zAHjs3ha+Xo965Idomlq3rqnw==" + }, + "@ensdomains/ens-contracts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@ensdomains/ens-contracts/-/ens-contracts-1.0.0.tgz", + "integrity": "sha512-NB5fig+TuaAkdW3uVshO/vuI/BNWus8MkpdDCzx6S797j7gRrDbKfcVHHDH5rBmj8Yp0/jCR1LU4DHaU5oxO0Q==", + "requires": { + "@ensdomains/buffer": "^0.1.1", + "@ensdomains/solsha1": "0.0.3", + "@openzeppelin/contracts": "^4.1.0", + "dns-packet": "^5.3.0" + } + }, + "@ensdomains/solsha1": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@ensdomains/solsha1/-/solsha1-0.0.3.tgz", + "integrity": "sha512-uhuG5LzRt/UJC0Ux83cE2rCKwSleRePoYdQVcqPN1wyf3/ekMzT/KZUF9+v7/AG5w9jlMLCQkUM50vfjr0Yu9Q==", + "requires": { + "hash-test-vectors": "^1.3.2" + } + }, "@esbuild/aix-ppc64": { "version": "0.19.11", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", @@ -17239,6 +17324,11 @@ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "dev": true }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, "@noble/curves": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", @@ -18972,6 +19062,23 @@ "resolved": "https://registry.npmjs.org/@subsquid/util-timeout/-/util-timeout-2.3.2.tgz", "integrity": "sha512-DVUnuiWAX7/4ZvbzuHENUShEEV4G0M38mQ/+R8DpHxwpCSrtEaSRaUMwdyUSn/WVqR7wo9+jkLCxFjE5feCURQ==" }, + "@sunodo/contracts": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sunodo/contracts/-/contracts-0.5.0.tgz", + "integrity": "sha512-0DCLn+JXwVwD23MGVgDdPghzSnijic3bMtrSkwrJmEukW2eb1YRdoKG3DZxROXU0R0ElZKBz3N7o/d5ix1dlDQ==", + "requires": { + "@cartesi/rollups": "1.2.0", + "@ensdomains/ens-contracts": "1.0.0", + "@openzeppelin/contracts": "4.9.3" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + } + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -20922,6 +21029,14 @@ "path-type": "^4.0.0" } }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, "dotenv": { "version": "16.3.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", @@ -22060,6 +22175,11 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "hash-test-vectors": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/hash-test-vectors/-/hash-test-vectors-1.3.2.tgz", + "integrity": "sha512-PKd/fitmsrlWGh3OpKbgNLE04ZQZsvs1ZkuLoQpeIKuwx+6CYVNdW6LaPIS1QAdZvV40+skk0w4YomKnViUnvQ==" + }, "hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", diff --git a/package.json b/package.json index 57038c5..a4c2ccb 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "serve:prod": "node deploy/run --npmScriptName=sqd:graphql:prod" }, "dependencies": { - "@cartesi/rollups": "1.0.0", + "@cartesi/rollups": "^1.2.0", "@subsquid/archive-registry": "^3.3.0", "@subsquid/evm-processor": "^1.13.0", "@subsquid/file-store": "^2.0.0", @@ -46,6 +46,7 @@ "@subsquid/logger": "^1.3.0", "@subsquid/typeorm-migration": "^1.3.0", "@subsquid/typeorm-store": "^1.2.6", + "@sunodo/contracts": "^0.5.0", "dotenv": "^16.1.4", "ethers": "^6.10.0", "pg": "^8.11.0", diff --git a/tests/processor.test.ts b/tests/processor.test.ts index 4e752dd..a362215 100644 --- a/tests/processor.test.ts +++ b/tests/processor.test.ts @@ -401,7 +401,7 @@ describe('Processor creation', () => { }); expect(addLog.mock.calls[2][0]).toEqual({ - address: ['0x519421bd7843e0d1e2f280490962850e31c86087'], + address: ['0xf26a5b278c25d8d41a136d22ad719eaced9c3e63'], topic0: [ '0xdca1fad70bee4ba7a4e17a1c6e99e657d2251af7a279124758bc01588abe2d2f', ], From 6d6bb2a71b6eea1b560d65aa48083f7e59419687 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 2 Feb 2024 12:42:04 +1300 Subject: [PATCH 29/31] refactor: Replace fixed addresses by the ones on installed packages --- src/config.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/config.ts b/src/config.ts index 406167e..fbfa201 100644 --- a/src/config.ts +++ b/src/config.ts @@ -9,7 +9,8 @@ import InputBoxSepolia from '@cartesi/rollups/deployments/sepolia/InputBox.json' import rollupsMainnet from '@cartesi/rollups/export/abi/mainnet.json'; import { lookupArchive } from '@subsquid/archive-registry'; import { GatewaySettings, RpcEndpointSettings } from '@subsquid/evm-processor'; -import { arbitrum, arbitrumGoerli, mainnet, sepolia } from 'viem/chains'; +import sunodoSepolia from '@sunodo/contracts/export/abi/sepolia.json'; +import { arbitrum, arbitrumGoerli, mainnet } from 'viem/chains'; // addresses are the same on all chains export const CartesiDAppFactoryAddress = @@ -21,9 +22,9 @@ export const InputBoxAddress = export const ERC721PortalAddress = rollupsMainnet.contracts.ERC721Portal.address.toLowerCase(); export const AuthorityFactoryAddress = - '0x519421Bd7843e0D1E2F280490962850e31c86087'.toLowerCase(); + rollupsMainnet.contracts.AuthorityFactory.address.toLowerCase(); export const MarketplaceAddress = - '0xB6dd5307629186A5d16611AAC1A14CdE9EA49f57'.toLowerCase(); + sunodoSepolia.contracts.Marketplace.address.toLowerCase(); export type ProcessorConfig = { settings: { From 887616cb60242dc23d17285b6d86bc96dad348cf Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Fri, 2 Feb 2024 12:42:34 +1300 Subject: [PATCH 30/31] refactor: Replace viem sepolia default http by Ankr rpc. --- src/config.ts | 2 +- tests/processor.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config.ts b/src/config.ts index fbfa201..66d1a79 100644 --- a/src/config.ts +++ b/src/config.ts @@ -64,7 +64,7 @@ export const getConfig = (chainId: number): ProcessorConfig => { rpcEndpoint: { url: process.env[RPC_URL] ?? - sepolia.rpcUrls.default.http[0], + 'https://rpc.ankr.com/eth_sepolia', }, }, from: Math.min( diff --git a/tests/processor.test.ts b/tests/processor.test.ts index a362215..c0f7ee1 100644 --- a/tests/processor.test.ts +++ b/tests/processor.test.ts @@ -65,7 +65,7 @@ describe('Processor creation', () => { }); expect(processor.setRpcEndpoint).toHaveBeenCalledWith({ - url: 'https://rpc.sepolia.org', + url: 'https://rpc.ankr.com/eth_sepolia', }); expect(processor.setFinalityConfirmation).toHaveBeenCalledWith(10); From d6142f44c8251b7d789b81fbf6b4d2f873f958b7 Mon Sep 17 00:00:00 2001 From: Bruno Menezes Date: Thu, 8 Feb 2024 07:15:09 +1300 Subject: [PATCH 31/31] Refactor: New set of GraphQL entities (Simplified) (#25) --- db/migrations/1706166961258-Data.js | 31 ------------------- db/migrations/1706849548900-Data.js | 31 +++++++++++++++++++ schema.graphql | 18 ++++++++--- src/handlers/EventHandler.ts | 30 +++++++++--------- src/handlers/ValidatorNodeFinancialRunway.ts | 13 ++++---- src/handlers/ValidatorNodeMachineLocation.ts | 13 ++++---- src/handlers/ValidatorNodeProviderCreated.ts | 7 +++-- src/handlers/ValidatorNodeProviderPaused.ts | 6 ++-- src/handlers/ValidatorNodeProviderUnpaused.ts | 6 ++-- src/main.ts | 8 ++--- .../ValidatorNodeFinancialRunway.test.ts | 30 ++++++++---------- .../ValidatorNodeMachineLocation.test.ts | 30 ++++++++---------- .../ValidatorNodeProviderCreated.test.ts | 17 +++++----- .../ValidatorNodeProviderPaused.test.ts | 10 +++--- .../ValidatorNodeProviderUnpaused.test.ts | 10 +++--- tests/stubs/validatorNodeProvider.ts | 12 ++++--- 16 files changed, 143 insertions(+), 129 deletions(-) delete mode 100644 db/migrations/1706166961258-Data.js create mode 100644 db/migrations/1706849548900-Data.js diff --git a/db/migrations/1706166961258-Data.js b/db/migrations/1706166961258-Data.js deleted file mode 100644 index d3e6cd9..0000000 --- a/db/migrations/1706166961258-Data.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = class Data1706166961258 { - name = 'Data1706166961258' - - async up(db) { - await db.query(`CREATE TABLE "authority" ("id" character varying NOT NULL, CONSTRAINT "PK_b0f9bb35ff132fc6bd92d0582ce" PRIMARY KEY ("id"))`) - await db.query(`CREATE TABLE "validator_node" ("id" character varying NOT NULL, "runway" numeric, "location" text, "application_id" character varying, "provider_id" character varying, CONSTRAINT "PK_cc0fae80b68d3c7e4929b846da8" PRIMARY KEY ("id"))`) - await db.query(`CREATE INDEX "IDX_620ac06bbf5dcf4692fcd7d6da" ON "validator_node" ("application_id") `) - await db.query(`CREATE INDEX "IDX_ca05fc469559790a26dd6bca6b" ON "validator_node" ("provider_id") `) - await db.query(`CREATE TABLE "validator_node_provider" ("id" character varying NOT NULL, "payee" text NOT NULL, "price" numeric NOT NULL, "paused" boolean NOT NULL, "authority_id" character varying, "token_id" character varying, CONSTRAINT "PK_ca05fc469559790a26dd6bca6be" PRIMARY KEY ("id"))`) - await db.query(`CREATE INDEX "IDX_0551b931f1793eeaad67e0b254" ON "validator_node_provider" ("authority_id") `) - await db.query(`CREATE INDEX "IDX_ba5f3d920d2961e583599fbfda" ON "validator_node_provider" ("token_id") `) - await db.query(`ALTER TABLE "validator_node" ADD CONSTRAINT "FK_620ac06bbf5dcf4692fcd7d6da0" FOREIGN KEY ("application_id") REFERENCES "application"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) - await db.query(`ALTER TABLE "validator_node" ADD CONSTRAINT "FK_ca05fc469559790a26dd6bca6be" FOREIGN KEY ("provider_id") REFERENCES "validator_node_provider"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) - await db.query(`ALTER TABLE "validator_node_provider" ADD CONSTRAINT "FK_0551b931f1793eeaad67e0b254d" FOREIGN KEY ("authority_id") REFERENCES "authority"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) - await db.query(`ALTER TABLE "validator_node_provider" ADD CONSTRAINT "FK_ba5f3d920d2961e583599fbfdae" FOREIGN KEY ("token_id") REFERENCES "token"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) - } - - async down(db) { - await db.query(`DROP TABLE "authority"`) - await db.query(`DROP TABLE "validator_node"`) - await db.query(`DROP INDEX "public"."IDX_620ac06bbf5dcf4692fcd7d6da"`) - await db.query(`DROP INDEX "public"."IDX_ca05fc469559790a26dd6bca6b"`) - await db.query(`DROP TABLE "validator_node_provider"`) - await db.query(`DROP INDEX "public"."IDX_0551b931f1793eeaad67e0b254"`) - await db.query(`DROP INDEX "public"."IDX_ba5f3d920d2961e583599fbfda"`) - await db.query(`ALTER TABLE "validator_node" DROP CONSTRAINT "FK_620ac06bbf5dcf4692fcd7d6da0"`) - await db.query(`ALTER TABLE "validator_node" DROP CONSTRAINT "FK_ca05fc469559790a26dd6bca6be"`) - await db.query(`ALTER TABLE "validator_node_provider" DROP CONSTRAINT "FK_0551b931f1793eeaad67e0b254d"`) - await db.query(`ALTER TABLE "validator_node_provider" DROP CONSTRAINT "FK_ba5f3d920d2961e583599fbfdae"`) - } -} diff --git a/db/migrations/1706849548900-Data.js b/db/migrations/1706849548900-Data.js new file mode 100644 index 0000000..5442e73 --- /dev/null +++ b/db/migrations/1706849548900-Data.js @@ -0,0 +1,31 @@ +module.exports = class Data1706849548900 { + name = 'Data1706849548900' + + async up(db) { + await db.query(`CREATE TABLE "authority" ("id" character varying NOT NULL, CONSTRAINT "PK_b0f9bb35ff132fc6bd92d0582ce" PRIMARY KEY ("id"))`) + await db.query(`CREATE TABLE "node" ("id" character varying NOT NULL, "runway" numeric, "location" text, "type" character varying(9) NOT NULL, "application_id" character varying, "provider_id" character varying, CONSTRAINT "PK_8c8caf5f29d25264abe9eaf94dd" PRIMARY KEY ("id"))`) + await db.query(`CREATE INDEX "IDX_7a1582c5c19e59eaee8baf3b7c" ON "node" ("application_id") `) + await db.query(`CREATE INDEX "IDX_bc6bc99eaa9a0b593c745054dd" ON "node" ("provider_id") `) + await db.query(`CREATE TABLE "node_provider" ("id" character varying NOT NULL, "payee" text NOT NULL, "price" numeric NOT NULL, "paused" boolean NOT NULL, "type" character varying(9) NOT NULL, "authority_id" character varying, "token_id" character varying, CONSTRAINT "PK_bc6bc99eaa9a0b593c745054dd4" PRIMARY KEY ("id"))`) + await db.query(`CREATE INDEX "IDX_bf6c4c99e8df6a9004e9e8d0e3" ON "node_provider" ("authority_id") `) + await db.query(`CREATE INDEX "IDX_12cd0de307dec107ad3184038a" ON "node_provider" ("token_id") `) + await db.query(`ALTER TABLE "node" ADD CONSTRAINT "FK_7a1582c5c19e59eaee8baf3b7c2" FOREIGN KEY ("application_id") REFERENCES "application"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + await db.query(`ALTER TABLE "node" ADD CONSTRAINT "FK_bc6bc99eaa9a0b593c745054dd4" FOREIGN KEY ("provider_id") REFERENCES "node_provider"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + await db.query(`ALTER TABLE "node_provider" ADD CONSTRAINT "FK_bf6c4c99e8df6a9004e9e8d0e3a" FOREIGN KEY ("authority_id") REFERENCES "authority"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + await db.query(`ALTER TABLE "node_provider" ADD CONSTRAINT "FK_12cd0de307dec107ad3184038a1" FOREIGN KEY ("token_id") REFERENCES "token"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`) + } + + async down(db) { + await db.query(`DROP TABLE "authority"`) + await db.query(`DROP TABLE "node"`) + await db.query(`DROP INDEX "public"."IDX_7a1582c5c19e59eaee8baf3b7c"`) + await db.query(`DROP INDEX "public"."IDX_bc6bc99eaa9a0b593c745054dd"`) + await db.query(`DROP TABLE "node_provider"`) + await db.query(`DROP INDEX "public"."IDX_bf6c4c99e8df6a9004e9e8d0e3"`) + await db.query(`DROP INDEX "public"."IDX_12cd0de307dec107ad3184038a"`) + await db.query(`ALTER TABLE "node" DROP CONSTRAINT "FK_7a1582c5c19e59eaee8baf3b7c2"`) + await db.query(`ALTER TABLE "node" DROP CONSTRAINT "FK_bc6bc99eaa9a0b593c745054dd4"`) + await db.query(`ALTER TABLE "node_provider" DROP CONSTRAINT "FK_bf6c4c99e8df6a9004e9e8d0e3a"`) + await db.query(`ALTER TABLE "node_provider" DROP CONSTRAINT "FK_12cd0de307dec107ad3184038a1"`) + } +} diff --git a/schema.graphql b/schema.graphql index 8d58db6..559e916 100644 --- a/schema.graphql +++ b/schema.graphql @@ -1,23 +1,30 @@ +enum FunctionType { + READER + VALIDATOR +} + type Authority @entity @cardinality(value: 5) { id: ID! } -type ValidatorNodeProvider @entity @cardinality(value: 100) { +type NodeProvider @entity @cardinality(value: 100) { id: ID! - authority: Authority! + authority: Authority token: Token! payee: String! price: BigInt! paused: Boolean! - nodes: [ValidatorNode!] @derivedFrom(field: "provider") + nodes: [Node!] @derivedFrom(field: "provider") + type: FunctionType! } -type ValidatorNode @entity @cardinality(value: 100) { +type Node @entity @cardinality(value: 100) { id: ID! application: Application! - provider: ValidatorNodeProvider! + provider: NodeProvider! runway: BigInt location: String + type: FunctionType! } type ApplicationFactory @entity @cardinality(value: 5) { @@ -31,6 +38,7 @@ type Application @entity @cardinality(value: 100) { timestamp: BigInt! factory: ApplicationFactory inputs: [Input!] @derivedFrom(field: "application") + nodes: [Node!] @derivedFrom(field: "application") } type Token @entity @cardinality(value: 10) { diff --git a/src/handlers/EventHandler.ts b/src/handlers/EventHandler.ts index 406fb71..ebe7130 100644 --- a/src/handlers/EventHandler.ts +++ b/src/handlers/EventHandler.ts @@ -8,9 +8,9 @@ import { Erc721Deposit, Input, NFT, + Node, + NodeProvider, Token, - ValidatorNode, - ValidatorNodeProvider, } from '../model'; import ApplicationCreated from './ApplicationCreated'; import AuthorityCreated from './AuthorityCreated'; @@ -32,8 +32,8 @@ export default class EventHandler { private readonly nfts: Map; private readonly erc721Deposits: Map; private readonly authorities: Map; - private readonly validatorNodeProviders: Map; - private readonly validatorNodes: Map; + private readonly nodeProviders: Map; + private readonly nodes: Map; private readonly applicationCreated: Handler; private readonly inputAdded: Handler; private readonly ownershipTransferred: Handler; @@ -53,8 +53,8 @@ export default class EventHandler { this.nfts = new Map(); this.erc721Deposits = new Map(); this.authorities = new Map(); - this.validatorNodeProviders = new Map(); - this.validatorNodes = new Map(); + this.nodeProviders = new Map(); + this.nodes = new Map(); this.applicationCreated = new ApplicationCreated( this.factories, @@ -74,25 +74,25 @@ export default class EventHandler { this.authorityCreated = new AuthorityCreated(this.authorities); this.validatorNodeProviderCreated = new ValidatorNodeProviderCreated( this.authorities, - this.validatorNodeProviders, + this.nodeProviders, this.tokens, ); this.validatorNodeProviderPaused = new ValidatorNodeProviderPaused( - this.validatorNodeProviders, + this.nodeProviders, ); this.validatorNodeProviderUnpaused = new validatorNodeProviderUnpaused( - this.validatorNodeProviders, + this.nodeProviders, ); this.validatorNodeFinancialRunway = new ValidatorNodeFinancialRunway( this.applications, - this.validatorNodes, - this.validatorNodeProviders, + this.nodes, + this.nodeProviders, ); this.validatorNodeMachineLocation = new ValidatorNodeMachineLocation( this.applications, - this.validatorNodes, - this.validatorNodeProviders, + this.nodes, + this.nodeProviders, ); } @@ -119,8 +119,8 @@ export default class EventHandler { nfts: this.nfts, erc721Deposits: this.erc721Deposits, authorities: this.authorities, - validatorNodeProviders: this.validatorNodeProviders, - validatorNodes: this.validatorNodes, + nodeProviders: this.nodeProviders, + nodes: this.nodes, }; } diff --git a/src/handlers/ValidatorNodeFinancialRunway.ts b/src/handlers/ValidatorNodeFinancialRunway.ts index acffbbf..3b0e9d5 100644 --- a/src/handlers/ValidatorNodeFinancialRunway.ts +++ b/src/handlers/ValidatorNodeFinancialRunway.ts @@ -1,14 +1,14 @@ import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; import { Store } from '@subsquid/typeorm-store'; import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; -import { Application, ValidatorNode, ValidatorNodeProvider } from '../model'; +import { Application, FunctionType, Node, NodeProvider } from '../model'; import Handler from './Handler'; export default class ValidatorNodeFinancialRunway implements Handler { constructor( private apps: Map, - private nodes: Map, - private providers: Map, + private nodes: Map, + private providers: Map, ) {} async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { @@ -18,7 +18,7 @@ export default class ValidatorNodeFinancialRunway implements Handler { const providerAddress = log.address.toLowerCase(); const provider = this.providers.get(providerAddress) ?? - (await ctx.store.get(ValidatorNodeProvider, providerAddress)); + (await ctx.store.get(NodeProvider, providerAddress)); if (provider) { const { dapp, until } = @@ -27,13 +27,14 @@ export default class ValidatorNodeFinancialRunway implements Handler { const nodeId = `${providerAddress}-${appId}`; let node = this.nodes.get(nodeId) ?? - (await ctx.store.get(ValidatorNode, nodeId)); + (await ctx.store.get(Node, nodeId)); if (!node) { const application = this.apps.get(appId) ?? (await ctx.store.get(Application, appId)); - node = new ValidatorNode({ + node = new Node({ + type: FunctionType.VALIDATOR, id: nodeId, provider, application, diff --git a/src/handlers/ValidatorNodeMachineLocation.ts b/src/handlers/ValidatorNodeMachineLocation.ts index 86a2c1c..a87684b 100644 --- a/src/handlers/ValidatorNodeMachineLocation.ts +++ b/src/handlers/ValidatorNodeMachineLocation.ts @@ -1,14 +1,14 @@ import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; import { Store } from '@subsquid/typeorm-store'; import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; -import { Application, ValidatorNode, ValidatorNodeProvider } from '../model'; +import { Application, FunctionType, Node, NodeProvider } from '../model'; import Handler from './Handler'; export default class ValidatorNodeMachineLocation implements Handler { constructor( private apps: Map, - private nodes: Map, - private providers: Map, + private nodes: Map, + private providers: Map, ) {} async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { @@ -18,7 +18,7 @@ export default class ValidatorNodeMachineLocation implements Handler { const providerAddress = log.address.toLowerCase(); const provider = this.providers.get(providerAddress) ?? - (await ctx.store.get(ValidatorNodeProvider, providerAddress)); + (await ctx.store.get(NodeProvider, providerAddress)); if (provider) { const { dapp, location } = @@ -27,13 +27,14 @@ export default class ValidatorNodeMachineLocation implements Handler { const nodeId = `${providerAddress}-${appId}`; let node = this.nodes.get(nodeId) ?? - (await ctx.store.get(ValidatorNode, nodeId)); + (await ctx.store.get(Node, nodeId)); if (!node) { const application = this.apps.get(appId) ?? (await ctx.store.get(Application, appId)); - node = new ValidatorNode({ + node = new Node({ + type: FunctionType.VALIDATOR, id: nodeId, provider, application, diff --git a/src/handlers/ValidatorNodeProviderCreated.ts b/src/handlers/ValidatorNodeProviderCreated.ts index 5a12093..85fc5c9 100644 --- a/src/handlers/ValidatorNodeProviderCreated.ts +++ b/src/handlers/ValidatorNodeProviderCreated.ts @@ -2,14 +2,14 @@ import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; import { Store } from '@subsquid/typeorm-store'; import { events as MarketplaceEvents } from '../abi/Marketplace'; import { MarketplaceAddress } from '../config'; -import { Authority, Token, ValidatorNodeProvider } from '../model'; +import { Authority, FunctionType, NodeProvider, Token } from '../model'; import Handler from './Handler'; import TokenHelper from './helpers/TokenHelper'; export default class ValidatorNodeProviderCreated implements Handler { constructor( private authorities: Map, - private providers: Map, + private providers: Map, private tokens: Map, ) {} @@ -49,7 +49,8 @@ export default class ValidatorNodeProviderCreated implements Handler { ctx.log.info(`${providerId} (ValidatorNodeProvider) stored`); this.providers.set( providerId, - new ValidatorNodeProvider({ + new NodeProvider({ + type: FunctionType.VALIDATOR, id: providerId, token: tokenInstance, paused: false, diff --git a/src/handlers/ValidatorNodeProviderPaused.ts b/src/handlers/ValidatorNodeProviderPaused.ts index 30f0bbb..ab084eb 100644 --- a/src/handlers/ValidatorNodeProviderPaused.ts +++ b/src/handlers/ValidatorNodeProviderPaused.ts @@ -1,18 +1,18 @@ import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; import { Store } from '@subsquid/typeorm-store'; import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; -import { ValidatorNodeProvider } from '../model'; +import { NodeProvider } from '../model'; import Handler from './Handler'; export default class ValidatorNodeProviderPaused implements Handler { - constructor(private providers: Map) {} + constructor(private providers: Map) {} async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { if (log.topics[0] === ValidatorNodeProviderEvents.Paused.topic) { const address = log.address.toLowerCase(); const provider = this.providers.get(address) ?? - (await ctx.store.get(ValidatorNodeProvider, address)); + (await ctx.store.get(NodeProvider, address)); if (provider) { provider.paused = true; diff --git a/src/handlers/ValidatorNodeProviderUnpaused.ts b/src/handlers/ValidatorNodeProviderUnpaused.ts index eb3fad1..a5dfca1 100644 --- a/src/handlers/ValidatorNodeProviderUnpaused.ts +++ b/src/handlers/ValidatorNodeProviderUnpaused.ts @@ -1,18 +1,18 @@ import { BlockData, DataHandlerContext, Log } from '@subsquid/evm-processor'; import { Store } from '@subsquid/typeorm-store'; import { events as ValidatorNodeProviderEvents } from '../abi/ValidatorNodeProvider'; -import { ValidatorNodeProvider } from '../model'; +import { NodeProvider } from '../model'; import Handler from './Handler'; export default class validatorNodeProviderUnpaused implements Handler { - constructor(private providers: Map) {} + constructor(private providers: Map) {} async handle(log: Log, block: BlockData, ctx: DataHandlerContext) { if (log.topics[0] === ValidatorNodeProviderEvents.Unpaused.topic) { const address = log.address.toLowerCase(); const provider = this.providers.get(address) ?? - (await ctx.store.get(ValidatorNodeProvider, address)); + (await ctx.store.get(NodeProvider, address)); if (provider) { provider.paused = false; diff --git a/src/main.ts b/src/main.ts index cbf9888..9005f21 100644 --- a/src/main.ts +++ b/src/main.ts @@ -36,8 +36,8 @@ processor.run(new TypeormDatabase({ supportHotBlocks: true }), async (ctx) => { nfts, erc721Deposits, authorities, - validatorNodeProviders, - validatorNodes, + nodeProviders, + nodes, } = eventHandler.getValues(); const total = eventHandler.getTotalHandled(); @@ -56,6 +56,6 @@ processor.run(new TypeormDatabase({ supportHotBlocks: true }), async (ctx) => { await ctx.store.upsert([...deposits.values()]); await ctx.store.upsert([...erc721Deposits.values()]); await ctx.store.upsert([...inputs.values()]); - await ctx.store.upsert([...validatorNodeProviders.values()]); - await ctx.store.upsert([...validatorNodes.values()]); + await ctx.store.upsert([...nodeProviders.values()]); + await ctx.store.upsert([...nodes.values()]); }); diff --git a/tests/handlers/ValidatorNodeFinancialRunway.test.ts b/tests/handlers/ValidatorNodeFinancialRunway.test.ts index c60055d..fd33212 100644 --- a/tests/handlers/ValidatorNodeFinancialRunway.test.ts +++ b/tests/handlers/ValidatorNodeFinancialRunway.test.ts @@ -1,11 +1,7 @@ import { EntityClass, FindOneOptions } from '@subsquid/typeorm-store'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import ValidatorNodeFinancialRunway from '../../src/handlers/ValidatorNodeFinancialRunway'; -import { - Application, - ValidatorNode, - ValidatorNodeProvider, -} from '../../src/model'; +import { Application, Node, NodeProvider } from '../../src/model'; import { Logs, application, @@ -15,29 +11,29 @@ import { } from '../stubs/validatorNodeProvider'; vi.mock('../../src/model/', async () => { - const ValidatorNodeProvider = vi.fn(); - const ValidatorNode = vi.fn(); + const NodeProvider = vi.fn(); + const Node = vi.fn(); const Application = vi.fn(); + const FunctionType = { READER: 'READER', VALIDATOR: 'VALIDATOR' }; return { - ValidatorNodeProvider, - ValidatorNode, + NodeProvider, + Node, Application, + FunctionType, }; }); -const ValidatorNodeMock = vi.mocked(ValidatorNode); +const NodeMock = vi.mocked(Node); describe('ValidatorNodeFinancialRunway', () => { let handler: ValidatorNodeFinancialRunway; - const providersStorage = new Map(); - const nodesStorage = new Map(); + const providersStorage = new Map(); + const nodesStorage = new Map(); const applicationStorage = new Map(); beforeEach(() => { - ValidatorNodeMock.mockImplementation( - (args) => ({ ...args } as ValidatorNode), - ); + NodeMock.mockImplementation((args) => ({ ...args } as Node)); handler = new ValidatorNodeFinancialRunway( applicationStorage, @@ -79,6 +75,7 @@ describe('ValidatorNodeFinancialRunway', () => { expect(node.id).toEqual(`${node.provider.id}-${node.application.id}`); expect(node.application).toBeDefined(); + expect(node.type).toEqual('VALIDATOR'); expect(node.provider).toBeDefined(); expect(node.runway).toEqual(1702321200000n); expect(node.location).not.toBeDefined(); @@ -91,8 +88,7 @@ describe('ValidatorNodeFinancialRunway', () => { id: FindOneOptions | string, ): Promise => { if (entityClass === Application) return application; - if (entityClass === ValidatorNodeProvider) - return validatorNodeProvider; + if (entityClass === NodeProvider) return validatorNodeProvider; return undefined; }, diff --git a/tests/handlers/ValidatorNodeMachineLocation.test.ts b/tests/handlers/ValidatorNodeMachineLocation.test.ts index 9a091dc..82c510e 100644 --- a/tests/handlers/ValidatorNodeMachineLocation.test.ts +++ b/tests/handlers/ValidatorNodeMachineLocation.test.ts @@ -1,11 +1,7 @@ import { EntityClass, FindOneOptions } from '@subsquid/typeorm-store'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import ValidatorNodeMachineLocation from '../../src/handlers/ValidatorNodeMachineLocation'; -import { - Application, - ValidatorNode, - ValidatorNodeProvider, -} from '../../src/model'; +import { Application, Node, NodeProvider } from '../../src/model'; import { Logs, application, @@ -15,29 +11,29 @@ import { } from '../stubs/validatorNodeProvider'; vi.mock('../../src/model/', async () => { - const ValidatorNodeProvider = vi.fn(); - const ValidatorNode = vi.fn(); + const NodeProvider = vi.fn(); + const Node = vi.fn(); const Application = vi.fn(); + const FunctionType = { READER: 'READER', VALIDATOR: 'VALIDATOR' }; return { - ValidatorNodeProvider, - ValidatorNode, + NodeProvider, + Node, Application, + FunctionType, }; }); -const ValidatorNodeMock = vi.mocked(ValidatorNode); +const NodeMock = vi.mocked(Node); describe('ValidatorNodeMachineLocation', () => { let handler: ValidatorNodeMachineLocation; - const providersStorage = new Map(); - const nodesStorage = new Map(); + const providersStorage = new Map(); + const nodesStorage = new Map(); const applicationStorage = new Map(); beforeEach(() => { - ValidatorNodeMock.mockImplementation( - (args) => ({ ...args } as ValidatorNode), - ); + NodeMock.mockImplementation((args) => ({ ...args } as Node)); // defaults to find nothing in the "DB" vi.spyOn(ctx.store, 'get').mockResolvedValue(undefined); @@ -80,6 +76,7 @@ describe('ValidatorNodeMachineLocation', () => { const [[id, node]] = nodesStorage.entries(); expect(node.id).toEqual(`${node.provider.id}-${node.application.id}`); + expect(node.type).toEqual('VALIDATOR'); expect(node.application).toBeDefined(); expect(node.provider).toBeDefined(); expect(node.location).toEqual( @@ -94,8 +91,7 @@ describe('ValidatorNodeMachineLocation', () => { id: FindOneOptions | string, ): Promise => { if (entityClass === Application) return application; - if (entityClass === ValidatorNodeProvider) - return validatorNodeProvider; + if (entityClass === NodeProvider) return validatorNodeProvider; return undefined; }, diff --git a/tests/handlers/ValidatorNodeProviderCreated.test.ts b/tests/handlers/ValidatorNodeProviderCreated.test.ts index 704f144..129bfec 100644 --- a/tests/handlers/ValidatorNodeProviderCreated.test.ts +++ b/tests/handlers/ValidatorNodeProviderCreated.test.ts @@ -2,7 +2,7 @@ import { EntityClass, FindOneOptions } from '@subsquid/typeorm-store'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import ValidatorNodeProviderCreated from '../../src/handlers/ValidatorNodeProviderCreated'; import TokenHelper from '../../src/handlers/helpers/TokenHelper'; -import { Authority, Token, ValidatorNodeProvider } from '../../src/model'; +import { Authority, NodeProvider, Token } from '../../src/model'; import { Logs, TokenAddress, @@ -15,26 +15,29 @@ import { } from '../stubs/validatorNodeProvider'; vi.mock('../../src/model/', async () => { - const ValidatorNodeProvider = vi.fn(); + const NodeProvider = vi.fn(); const Authority = vi.fn(); const Token = vi.fn(); + const FunctionType = { READER: 'READER', VALIDATOR: 'VALIDATOR' }; return { - ValidatorNodeProvider, + NodeProvider, Authority, Token, + FunctionType, }; }); -const ValidatorNodeProviderMock = vi.mocked(ValidatorNodeProvider); +const NodeProviderMock = vi.mocked(NodeProvider); const AuthorityMock = vi.mocked(Authority); describe('ValidatorNodeProviderCreated', () => { let handler: ValidatorNodeProviderCreated; - const providerStorage = new Map(); + const providerStorage = new Map(); const tokenStorage = new Map(); const authorityStorage = new Map(); const expectedProvider = { + type: 'VALIDATOR', authority: { id: '0x83e4283f7eab201b06f749f683f27cfda294ab81', }, @@ -51,8 +54,8 @@ describe('ValidatorNodeProviderCreated', () => { }; beforeEach(() => { - ValidatorNodeProviderMock.mockImplementation( - (args) => ({ ...args } as ValidatorNodeProvider), + NodeProviderMock.mockImplementation( + (args) => ({ ...args } as NodeProvider), ); AuthorityMock.mockImplementation((args) => ({ ...args } as Authority)); diff --git a/tests/handlers/ValidatorNodeProviderPaused.test.ts b/tests/handlers/ValidatorNodeProviderPaused.test.ts index 35e741c..a03c064 100644 --- a/tests/handlers/ValidatorNodeProviderPaused.test.ts +++ b/tests/handlers/ValidatorNodeProviderPaused.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import ValidatorNodeProviderPaused from '../../src/handlers/ValidatorNodeProviderPaused'; -import { ValidatorNodeProvider } from '../../src/model'; +import { NodeProvider } from '../../src/model'; import { Logs, blockData, @@ -9,16 +9,18 @@ import { } from '../stubs/validatorNodeProvider'; vi.mock('../../src/model/', async () => { - const ValidatorNodeProvider = vi.fn(); + const NodeProvider = vi.fn(); + const FunctionType = { READER: 'READER', VALIDATOR: 'VALIDATOR' }; return { - ValidatorNodeProvider, + NodeProvider, + FunctionType, }; }); describe('ValidatorNodeProviderPaused', () => { let handler: ValidatorNodeProviderPaused; - const providerStorage = new Map(); + const providerStorage = new Map(); beforeEach(() => { handler = new ValidatorNodeProviderPaused(providerStorage); diff --git a/tests/handlers/ValidatorNodeProviderUnpaused.test.ts b/tests/handlers/ValidatorNodeProviderUnpaused.test.ts index 6af86fc..28a84c0 100644 --- a/tests/handlers/ValidatorNodeProviderUnpaused.test.ts +++ b/tests/handlers/ValidatorNodeProviderUnpaused.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import ValidatorNodeProviderUnpaused from '../../src/handlers/ValidatorNodeProviderUnpaused'; -import { ValidatorNodeProvider } from '../../src/model'; +import { NodeProvider } from '../../src/model'; import { Logs, blockData, @@ -9,16 +9,18 @@ import { } from '../stubs/validatorNodeProvider'; vi.mock('../../src/model/', async () => { - const ValidatorNodeProvider = vi.fn(); + const NodeProvider = vi.fn(); + const FunctionType = { READER: 'READER', VALIDATOR: 'VALIDATOR' }; return { - ValidatorNodeProvider, + NodeProvider, + FunctionType, }; }); describe('ValidatorNodeProviderUnpaused', () => { let handler: ValidatorNodeProviderUnpaused; - const providerStorage = new Map(); + const providerStorage = new Map(); beforeEach(() => { handler = new ValidatorNodeProviderUnpaused(providerStorage); diff --git a/tests/stubs/validatorNodeProvider.ts b/tests/stubs/validatorNodeProvider.ts index 72933e0..6da0318 100644 --- a/tests/stubs/validatorNodeProvider.ts +++ b/tests/stubs/validatorNodeProvider.ts @@ -12,9 +12,10 @@ import { import { Application, Authority, + FunctionType, + Node, + NodeProvider, Token, - ValidatorNode, - ValidatorNodeProvider, } from '../../src/model'; export const CID = 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR'; @@ -41,6 +42,7 @@ export const application = { factory: { id: CartesiDAppFactoryAddress, applications: [] }, id: DappAddress.toLowerCase(), inputs: [], + nodes: [], owner: '0x', timestamp: 1691779848n, } satisfies Application; @@ -53,7 +55,8 @@ export const validatorNodeProvider = { price: 400000000000000n, paused: false, nodes: [], -} satisfies ValidatorNodeProvider; + type: FunctionType.VALIDATOR, +} satisfies NodeProvider; export const validatorNode = { application, @@ -61,7 +64,8 @@ export const validatorNode = { id: `${validatorNodeProvider.id}-${application.id}`, location: null, runway: null, -} satisfies ValidatorNode; + type: FunctionType.VALIDATOR, +} satisfies Node; export const Logs = { paused: {