From 864bf284ffc2eb005d6b95d538f4c638b7847a4f Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Thu, 20 Jun 2024 18:21:03 +0530 Subject: [PATCH 01/22] to be tested and reviewed Signed-off-by: d4v1d03 --- Avoscan/.env.example | 1 + Avoscan/.gitignore | 4 + Avoscan/.studioignore | 3 + Avoscan/README.md | 95 + Avoscan/package-lock.json | 1789 +++++++++++++++++ Avoscan/package.json | 19 + Avoscan/src/abis/blockflow.json | 650 ++++++ .../src/handlers/blockflow/AdminChanged.ts | 52 + .../handlers/blockflow/BroadcasterUpdated.ts | 22 + Avoscan/src/types/schema.ts | 42 + Avoscan/studio.schema.ts | 14 + Avoscan/studio.yaml | 20 + Avoscan/tsconfig.json | 14 + 13 files changed, 2725 insertions(+) create mode 100644 Avoscan/.env.example create mode 100644 Avoscan/.gitignore create mode 100644 Avoscan/.studioignore create mode 100644 Avoscan/README.md create mode 100644 Avoscan/package-lock.json create mode 100644 Avoscan/package.json create mode 100644 Avoscan/src/abis/blockflow.json create mode 100644 Avoscan/src/handlers/blockflow/AdminChanged.ts create mode 100644 Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts create mode 100644 Avoscan/src/types/schema.ts create mode 100644 Avoscan/studio.schema.ts create mode 100644 Avoscan/studio.yaml create mode 100644 Avoscan/tsconfig.json diff --git a/Avoscan/.env.example b/Avoscan/.env.example new file mode 100644 index 0000000..be00d3b --- /dev/null +++ b/Avoscan/.env.example @@ -0,0 +1 @@ +ITS_A_SECRET=shhhhh \ No newline at end of file diff --git a/Avoscan/.gitignore b/Avoscan/.gitignore new file mode 100644 index 0000000..fbaaa6d --- /dev/null +++ b/Avoscan/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +dist +.env \ No newline at end of file diff --git a/Avoscan/.studioignore b/Avoscan/.studioignore new file mode 100644 index 0000000..337477c --- /dev/null +++ b/Avoscan/.studioignore @@ -0,0 +1,3 @@ +node_modules/** +.env +build/** diff --git a/Avoscan/README.md b/Avoscan/README.md new file mode 100644 index 0000000..644f951 --- /dev/null +++ b/Avoscan/README.md @@ -0,0 +1,95 @@ +# BlockFlow Studio + +This is your BlockFlow Studio project. + +## Configuration (studio.yaml) + +BlockFlow Studio uses a YAML configuration file to manage your project settings. The configuration file should be named `studio.yaml` and located in the root folder of your project. Here are the configuration options: + +- `name`: The name of your BlockFlow project. + +- `description`: A description of your BlockFlow project. + +- `startBlock`: The starting block number from which the instance + +- `network`: The blockchain network you are working with (e.g., Ethereum, Polygon). + +- `userId`: You blockflow account userId. (For auth) + +- `execution`: Whether the execution of instances should be 'parallel' or 'sequencial'. + +- `Resources`: An array of configs. Each config is specific to trigger type. + + - `name`: The name of the contract. (should be camelcase without any spaces) + + - `contract`: The contract address to sync. (should be in string format) + + - `events`: The event signature. (generated by studio create command) + + - `abi`: The path to the ABI file for the contract. (should end with `.json`) + + - `handler`: The path to the code Handler file. + +## How to Use BlockFlow Studio + +### Project Initialization + +To initialize a project in an empty directory, use the `blockflow init` command. This will open a command prompt where you can configure your project interactively. + +```bash +blockflow init +``` + +Before using other commands mentioned below, update the `studio.yaml` file with `userId`, `projectId` and `startBlock` for your project. + +### Instance + +#### Generate Events List + +To generate an events list in `studio.yaml`, which will be used to configure the handler, use the `blockflow instance-generate` command. This will automatically fetch the added contracts ABIs and update the events/functions list. + +> writes to studio.yaml file, should be used with care, we prefer to use it once you init the project + +```bash +blockflow generate +``` + +#### Generate Handlers + +To generate an events handler in` studio.yaml`, use the `blockflow instance-codegen` command. The handler will be generated at the `Resources?.Trigger?.Handler` path. + +> Once you've everything ready for instances or apis use this command + +```bash +blockflow codegen +``` + +#### Test the Code + +> It is required that you have a mongo db local running at uri "mongodb://localhost:27017" before running tests + +To test the code and generate a local mongo database, use the `blockflow instance-test` command. This will produce a database named blockflow_studio with collection name BLOCKFLOW_STUDIO + +```bash +blockflow instance-test +``` + +> you can even provide a start block `--startBlock `, or range of blocks to test `--range 10` + +#### Deploy the Project + +Once the project is created and tested, you can deploy it using the `blockflow instance-deploy` command. This will deploy the handler to the blockflow server for syncing. + +```bash +blockflow instance-deploy +``` + +### API + +#### Deploy API + +To deploy the API, use the `blockflow api-deploy` command. + +```bash +blockflow api-deploy +``` diff --git a/Avoscan/package-lock.json b/Avoscan/package-lock.json new file mode 100644 index 0000000..358510a --- /dev/null +++ b/Avoscan/package-lock.json @@ -0,0 +1,1789 @@ +{ + "name": "blockflow-studio", + "version": "1.0.7-beta.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blockflow-studio", + "version": "1.0.7-beta.3", + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/@blockflow-labs/utils": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7.tgz", + "integrity": "sha512-MvKNfIZCZ6aQIoNvhVxQ11hUGZIQt2WzzC8eS9Qz0zDaEiQy9iceIzHdMOXXTO7X4VxFGIIzImdd/Qv3DLIN3w==", + "dependencies": { + "mongoose": "^8.0.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "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/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.6.tgz", + "integrity": "sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bson": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", + "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.807", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.807.tgz", + "integrity": "sha512-kSmJl2ZwhNf/bcIuCH/imtNOKlpkLDn2jqT5FJ+/0CXjhnFaOa9cOe9gHKKy71eM49izwuQjZhKk+lWQ1JxB7A==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", + "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.3.tgz", + "integrity": "sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.6.2", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + } + } +} diff --git a/Avoscan/package.json b/Avoscan/package.json new file mode 100644 index 0000000..43294ef --- /dev/null +++ b/Avoscan/package.json @@ -0,0 +1,19 @@ +{ + "name": "blockflow-studio", + "version": "1.0.7-beta.3", + "description": "BlockFlow Studio Project", + "scripts": { + "compile": "tsc -b" + }, + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "typescript": "^5.1.6", + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4", + "ts-loader": "^9.5.0" + } +} diff --git a/Avoscan/src/abis/blockflow.json b/Avoscan/src/abis/blockflow.json new file mode 100644 index 0000000..a7d2805 --- /dev/null +++ b/Avoscan/src/abis/blockflow.json @@ -0,0 +1,650 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "logic_", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "data_", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "contract IAvoFactory", + "name": "avoFactory_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "name": "AvoForwarder__InvalidParams", "type": "error" }, + { + "inputs": [], + "name": "AvoForwarder__LegacyVersionNotDeployed", + "type": "error" + }, + { "inputs": [], "name": "AvoForwarder__Unauthorized", "type": "error" }, + { "inputs": [], "name": "AvoForwarder__Unsupported", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "auth", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "AuthUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "broadcaster", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "BroadcasterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "avocadoOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "avocadoAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "source", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "ExecuteFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "avocadoOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "avocadoAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "source", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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" + }, + { + "inputs": [], + "name": "avoFactory", + "outputs": [ + { "internalType": "contract IAvoFactory", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "avoNonce", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "avocadoBytecode", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "avocadoVersion", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "avocadoVersionName", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "computeAvocado", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { + "internalType": "uint256", + "name": "operation", + "type": "uint256" + } + ], + "internalType": "struct AvocadoMultisigStructs.Action[]", + "name": "actions", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "int256", "name": "avoNonce", "type": "int256" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ], + "internalType": "struct AvocadoMultisigStructs.CastParams", + "name": "params_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validUntil", + "type": "uint256" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "internalType": "struct AvocadoMultisigStructs.CastForwardParams", + "name": "forwardParams_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "address", "name": "signer", "type": "address" } + ], + "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", + "name": "signaturesParams_", + "type": "tuple[]" + } + ], + "name": "executeV1", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { + "internalType": "address[]", + "name": "allowedBroadcasters_", + "type": "address[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "auth_", "type": "address" } + ], + "name": "isAuth", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "broadcaster_", "type": "address" } + ], + "name": "isBroadcaster", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { + "internalType": "uint256", + "name": "operation", + "type": "uint256" + } + ], + "internalType": "struct AvocadoMultisigStructs.Action[]", + "name": "actions", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "int256", "name": "avoNonce", "type": "int256" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ], + "internalType": "struct AvocadoMultisigStructs.CastParams", + "name": "params_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validUntil", + "type": "uint256" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "internalType": "struct AvocadoMultisigStructs.CastForwardParams", + "name": "forwardParams_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "address", "name": "signer", "type": "address" } + ], + "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", + "name": "signaturesParams_", + "type": "tuple[]" + } + ], + "name": "simulateV1", + "outputs": [ + { "internalType": "uint256", "name": "castGasUsed_", "type": "uint256" }, + { + "internalType": "uint256", + "name": "deploymentGasUsed_", + "type": "uint256" + }, + { "internalType": "bool", "name": "isDeployed_", "type": "bool" }, + { "internalType": "bool", "name": "success_", "type": "bool" }, + { "internalType": "string", "name": "revertReason_", "type": "string" } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bool", "name": "value", "type": "bool" } + ], + "internalType": "struct AvoForwarderStructs.AddressBool[]", + "name": "authsStatus_", + "type": "tuple[]" + } + ], + "name": "updateAuths", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bool", "name": "value", "type": "bool" } + ], + "internalType": "struct AvoForwarderStructs.AddressBool[]", + "name": "broadcastersStatus_", + "type": "tuple[]" + } + ], + "name": "updateBroadcasters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { + "internalType": "uint256", + "name": "operation", + "type": "uint256" + } + ], + "internalType": "struct AvocadoMultisigStructs.Action[]", + "name": "actions", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "int256", "name": "avoNonce", "type": "int256" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ], + "internalType": "struct AvocadoMultisigStructs.CastParams", + "name": "params_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validUntil", + "type": "uint256" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "internalType": "struct AvocadoMultisigStructs.CastForwardParams", + "name": "forwardParams_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "address", "name": "signer", "type": "address" } + ], + "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", + "name": "signaturesParams_", + "type": "tuple[]" + } + ], + "name": "verifyV1", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/Avoscan/src/handlers/blockflow/AdminChanged.ts b/Avoscan/src/handlers/blockflow/AdminChanged.ts new file mode 100644 index 0000000..0984ad0 --- /dev/null +++ b/Avoscan/src/handlers/blockflow/AdminChanged.ts @@ -0,0 +1,52 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import{ avoData,IavoData } from "../../types/schema"; +import { fromTwos } from "ethers"; + +/** + * @dev Event::AdminChanged(address previousAdmin, address newAdmin) + * @param context trigger object with contains {event: {previousAdmin ,newAdmin }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const AdminChangedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for AdminChanged here + + const { event, transaction, block, log } = context; + const { previousAdmin, newAdmin } = event; + + const avoDataDB: Instance = bind(avoData); + const id = transaction.transaction_hash + log.log_index.toString(); + const transferTopic0 = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; + const transferlog = transaction.logs + ? transaction.logs.find( + (log) => + log.topics[0].toLowerCase() === transferTopic0.toLowerCase() + ) + :null; + + let data: IavoData = await avoDataDB.findOne({ + id:id + }); + + data ??= await avoDataDB.create({ + id: id, + transactionHash: transaction.transaction_hash, + broadcaster: newAdmin, + status: "Success", + time: block.block_timestamp.toString(), + network: "ETH", + transactionActionamount: transferlog?.log_data, + transactionActionTo: transferlog?.topics[2], + user: event.topics[0], + avocadoWallet: event.topics[1] + }); +}; diff --git a/Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts b/Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts new file mode 100644 index 0000000..52630bf --- /dev/null +++ b/Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::BroadcasterUpdated(address broadcaster, bool status) + * @param context trigger object with contains {event: {broadcaster ,status }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const BroadcasterUpdatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for BroadcasterUpdated here + + const { event, transaction, block, log } = context; + const { broadcaster, status } = event; +}; diff --git a/Avoscan/src/types/schema.ts b/Avoscan/src/types/schema.ts new file mode 100644 index 0000000..30aed3b --- /dev/null +++ b/Avoscan/src/types/schema.ts @@ -0,0 +1,42 @@ +// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + +import { Document } from "@blockflow-labs/utils"; + +export class avoData { + static entity = "avoData"; + static schema = { + id: { type: "String", index: true }, + transactionHash: "string", + broadcaster: "string", + status: "string", + time: "string", + network: "string", + transactionActionAmount: "string", + transactionActionTo: "string", + user: "string", + avocadoWallet: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +import { String, Array } from "@blockflow-labs/utils"; + +export interface IavoData extends Document { + id: String; + transactionHash: string; + broadcaster: string; + status: string; + time: string; + network: string; + transactionActionAmount: string; + transactionActionTo: string; + user: string; + avocadoWallet: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/Avoscan/studio.schema.ts b/Avoscan/studio.schema.ts new file mode 100644 index 0000000..be04110 --- /dev/null +++ b/Avoscan/studio.schema.ts @@ -0,0 +1,14 @@ +import { String, Array } from "@blockflow-labs/utils"; + +export interface avoData { + id: String; + transactionHash: string; + broadcaster: string; + status: string; + time: string; + network: string; + transactionActionAmount: string; + transactionActionTo: string; + user: string; + avocadoWallet: string; +} diff --git a/Avoscan/studio.yaml b/Avoscan/studio.yaml new file mode 100644 index 0000000..77e35dd --- /dev/null +++ b/Avoscan/studio.yaml @@ -0,0 +1,20 @@ +name: Project Apollo +description: A top-secret research project to the moon +startBlock: latest +userId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +projectId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +network: Ethereum +user: Jane-doe +schema: + file: ./studio.schema.ts +execution: parallel +Resources: + - Name: blockflow + Abi: src/abis/blockflow.json + Type: contract/event + Address: "0x46978CD477A496028A18c02F07ab7F35EDBa5A54" + Triggers: + - Event: AdminChanged(address,address) + Handler: src/handlers/blockflow/AdminChanged.AdminChangedHandler + - Event: BroadcasterUpdated(address indexed,bool indexed) + Handler: src/handlers/blockflow/BroadcasterUpdated.BroadcasterUpdatedHandler diff --git a/Avoscan/tsconfig.json b/Avoscan/tsconfig.json new file mode 100644 index 0000000..fb80a42 --- /dev/null +++ b/Avoscan/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "outDir": "./build/bin/", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From 6bdfc9e77cd515c48139127aada52af760ae987b Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Thu, 20 Jun 2024 20:45:48 +0530 Subject: [PATCH 02/22] finalized Signed-off-by: d4v1d03 --- Avoscan/.gitignore | 3 +- Avoscan/package-lock.json | 2 +- Avoscan/package.json | 8 +- Avoscan/src/abis/blockflow.json | 535 ++++-------------- .../src/handlers/blockflow/AdminChanged.ts | 52 -- .../handlers/blockflow/BroadcasterUpdated.ts | 22 - .../src/handlers/blockflow/ExecuteFailed.ts | 17 + Avoscan/src/handlers/blockflow/Executed.ts | 48 ++ Avoscan/src/types/schema.ts | 52 +- Avoscan/studio.schema.ts | 10 +- Avoscan/studio.yaml | 10 +- 11 files changed, 226 insertions(+), 533 deletions(-) delete mode 100644 Avoscan/src/handlers/blockflow/AdminChanged.ts delete mode 100644 Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts create mode 100644 Avoscan/src/handlers/blockflow/ExecuteFailed.ts create mode 100644 Avoscan/src/handlers/blockflow/Executed.ts diff --git a/Avoscan/.gitignore b/Avoscan/.gitignore index fbaaa6d..e3dfbf2 100644 --- a/Avoscan/.gitignore +++ b/Avoscan/.gitignore @@ -1,4 +1,5 @@ node_modules build dist -.env \ No newline at end of file +.env +.prettierrc \ No newline at end of file diff --git a/Avoscan/package-lock.json b/Avoscan/package-lock.json index 358510a..8959cc2 100644 --- a/Avoscan/package-lock.json +++ b/Avoscan/package-lock.json @@ -12,7 +12,7 @@ }, "devDependencies": { "bignumber.js": "^9.1.1", - "prettier": "^3.0.3", + "prettier": "^3.3.2", "ts-loader": "^9.5.0", "typescript": "^5.1.6", "webpack": "^5.89.0", diff --git a/Avoscan/package.json b/Avoscan/package.json index 43294ef..f431c61 100644 --- a/Avoscan/package.json +++ b/Avoscan/package.json @@ -9,11 +9,11 @@ "@blockflow-labs/utils": "latest" }, "devDependencies": { - "typescript": "^5.1.6", "bignumber.js": "^9.1.1", - "prettier": "^3.0.3", + "prettier": "^3.3.2", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", "webpack": "^5.89.0", - "webpack-cli": "^5.1.4", - "ts-loader": "^9.5.0" + "webpack-cli": "^5.1.4" } } diff --git a/Avoscan/src/abis/blockflow.json b/Avoscan/src/abis/blockflow.json index a7d2805..3f921b8 100644 --- a/Avoscan/src/abis/blockflow.json +++ b/Avoscan/src/abis/blockflow.json @@ -1,118 +1,4 @@ [ - { - "inputs": [ - { "internalType": "address", "name": "logic_", "type": "address" }, - { "internalType": "address", "name": "admin_", "type": "address" }, - { "internalType": "bytes", "name": "data_", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { "stateMutability": "payable", "type": "fallback" }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { "internalType": "address", "name": "admin_", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "newAdmin", "type": "address" } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" }, { "inputs": [ { @@ -131,64 +17,20 @@ "type": "error" }, { "inputs": [], "name": "AvoForwarder__Unauthorized", "type": "error" }, - { "inputs": [], "name": "AvoForwarder__Unsupported", "type": "error" }, + { "inputs": [], "name": "AvoForwarder__VersionMismatch", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", - "name": "auth", + "name": "avoSafeOwner", "type": "address" }, - { - "indexed": true, - "internalType": "bool", - "name": "status", - "type": "bool" - } - ], - "name": "AuthUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ { "indexed": true, "internalType": "address", - "name": "broadcaster", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "status", - "type": "bool" - } - ], - "name": "BroadcasterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "avocadoOwner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "avocadoAddress", + "name": "avoSafeAddress", "type": "address" }, { @@ -219,19 +61,13 @@ { "indexed": true, "internalType": "address", - "name": "avocadoOwner", + "name": "avoSafeOwner", "type": "address" }, - { - "indexed": false, - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, { "indexed": true, "internalType": "address", - "name": "avocadoAddress", + "name": "avoSafeAddress", "type": "address" }, { @@ -263,25 +99,6 @@ "name": "Initialized", "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" - }, { "inputs": [], "name": "avoFactory", @@ -292,48 +109,44 @@ "type": "function" }, { - "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" }, - { "internalType": "uint32", "name": "index_", "type": "uint32" } - ], - "name": "avoNonce", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "inputs": [], + "name": "avoSafeBytecode", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }, { - "inputs": [], - "name": "avocadoBytecode", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" } + ], + "name": "avoSafeNonce", + "outputs": [{ "internalType": "uint88", "name": "", "type": "uint88" }], "stateMutability": "view", "type": "function" }, { "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" }, - { "internalType": "uint32", "name": "index_", "type": "uint32" } + { "internalType": "address", "name": "owner_", "type": "address" } ], - "name": "avocadoVersion", + "name": "avoWalletVersion", "outputs": [{ "internalType": "string", "name": "", "type": "string" }], "stateMutability": "view", "type": "function" }, { "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" }, - { "internalType": "uint32", "name": "index_", "type": "uint32" } + { "internalType": "address", "name": "owner_", "type": "address" } ], - "name": "avocadoVersionName", + "name": "avoWalletVersionName", "outputs": [{ "internalType": "string", "name": "", "type": "string" }], "stateMutability": "view", "type": "function" }, { "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" }, - { "internalType": "uint32", "name": "index_", "type": "uint32" } + { "internalType": "address", "name": "owner_", "type": "address" } ], - "name": "computeAvocado", + "name": "computeAddress", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" @@ -341,308 +154,176 @@ { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, - { "internalType": "uint32", "name": "index_", "type": "uint32" }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { - "internalType": "uint256", - "name": "operation", - "type": "uint256" - } - ], - "internalType": "struct AvocadoMultisigStructs.Action[]", - "name": "actions", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "int256", "name": "avoNonce", "type": "int256" }, - { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, - { "internalType": "address", "name": "source", "type": "address" }, - { "internalType": "bytes", "name": "metadata", "type": "bytes" } - ], - "internalType": "struct AvocadoMultisigStructs.CastParams", - "name": "params_", - "type": "tuple" - }, { "components": [ - { "internalType": "uint256", "name": "gas", "type": "uint256" }, - { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, - { - "internalType": "uint256", - "name": "validAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "validUntil", - "type": "uint256" - }, + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], - "internalType": "struct AvocadoMultisigStructs.CastForwardParams", - "name": "forwardParams_", - "type": "tuple" - }, - { - "components": [ - { "internalType": "bytes", "name": "signature", "type": "bytes" }, - { "internalType": "address", "name": "signer", "type": "address" } - ], - "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", - "name": "signaturesParams_", + "internalType": "struct IAvoWalletV1.Action[]", + "name": "actions_", "type": "tuple[]" - } + }, + { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, + { "internalType": "uint256", "name": "gas_", "type": "uint256" }, + { "internalType": "address", "name": "source_", "type": "address" }, + { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, + { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], - "name": "executeV1", + "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "address", "name": "from_", "type": "address" }, { - "internalType": "address[]", - "name": "allowedBroadcasters_", - "type": "address[]" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "auth_", "type": "address" } - ], - "name": "isAuth", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "broadcaster_", "type": "address" } + "components": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "internalType": "struct IAvoWalletV1.Action[]", + "name": "actions_", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, + { "internalType": "uint256", "name": "gas_", "type": "uint256" }, + { "internalType": "address", "name": "source_", "type": "address" }, + { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, + { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], - "name": "isBroadcaster", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", + "name": "executeV1", "outputs": [], - "stateMutability": "view", + "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, - { "internalType": "uint32", "name": "index_", "type": "uint32" }, { "components": [ - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { - "internalType": "uint256", - "name": "operation", - "type": "uint256" - } - ], - "internalType": "struct AvocadoMultisigStructs.Action[]", - "name": "actions", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "int256", "name": "avoNonce", "type": "int256" }, - { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, - { "internalType": "address", "name": "source", "type": "address" }, - { "internalType": "bytes", "name": "metadata", "type": "bytes" } + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "operation", "type": "uint256" } ], - "internalType": "struct AvocadoMultisigStructs.CastParams", - "name": "params_", - "type": "tuple" + "internalType": "struct IAvoWalletV2.Action[]", + "name": "actions_", + "type": "tuple[]" }, { "components": [ - { "internalType": "uint256", "name": "gas", "type": "uint256" }, - { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, - { - "internalType": "uint256", - "name": "validAfter", - "type": "uint256" - }, { "internalType": "uint256", "name": "validUntil", "type": "uint256" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } ], - "internalType": "struct AvocadoMultisigStructs.CastForwardParams", - "name": "forwardParams_", + "internalType": "struct IAvoWalletV2.CastParams", + "name": "params_", "type": "tuple" }, - { - "components": [ - { "internalType": "bytes", "name": "signature", "type": "bytes" }, - { "internalType": "address", "name": "signer", "type": "address" } - ], - "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", - "name": "signaturesParams_", - "type": "tuple[]" - } - ], - "name": "simulateV1", - "outputs": [ - { "internalType": "uint256", "name": "castGasUsed_", "type": "uint256" }, - { - "internalType": "uint256", - "name": "deploymentGasUsed_", - "type": "uint256" - }, - { "internalType": "bool", "name": "isDeployed_", "type": "bool" }, - { "internalType": "bool", "name": "success_", "type": "bool" }, - { "internalType": "string", "name": "revertReason_", "type": "string" } + { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], + "name": "executeV2", + "outputs": [], "stateMutability": "payable", "type": "function" }, { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "transferOwnership", + "inputs": [], + "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, { "components": [ - { "internalType": "address", "name": "addr", "type": "address" }, - { "internalType": "bool", "name": "value", "type": "bool" } + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } ], - "internalType": "struct AvoForwarderStructs.AddressBool[]", - "name": "authsStatus_", + "internalType": "struct IAvoWalletV1.Action[]", + "name": "actions_", "type": "tuple[]" - } + }, + { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, + { "internalType": "uint256", "name": "gas_", "type": "uint256" }, + { "internalType": "address", "name": "source_", "type": "address" }, + { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, + { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], - "name": "updateAuths", - "outputs": [], + "name": "verify", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, { "components": [ - { "internalType": "address", "name": "addr", "type": "address" }, - { "internalType": "bool", "name": "value", "type": "bool" } + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } ], - "internalType": "struct AvoForwarderStructs.AddressBool[]", - "name": "broadcastersStatus_", + "internalType": "struct IAvoWalletV1.Action[]", + "name": "actions_", "type": "tuple[]" - } + }, + { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, + { "internalType": "uint256", "name": "gas_", "type": "uint256" }, + { "internalType": "address", "name": "source_", "type": "address" }, + { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, + { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], - "name": "updateBroadcasters", - "outputs": [], + "name": "verifyV1", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, - { "internalType": "uint32", "name": "index_", "type": "uint32" }, { "components": [ - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { - "internalType": "uint256", - "name": "operation", - "type": "uint256" - } - ], - "internalType": "struct AvocadoMultisigStructs.Action[]", - "name": "actions", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "int256", "name": "avoNonce", "type": "int256" }, - { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, - { "internalType": "address", "name": "source", "type": "address" }, - { "internalType": "bytes", "name": "metadata", "type": "bytes" } + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "operation", "type": "uint256" } ], - "internalType": "struct AvocadoMultisigStructs.CastParams", - "name": "params_", - "type": "tuple" + "internalType": "struct IAvoWalletV2.Action[]", + "name": "actions_", + "type": "tuple[]" }, { "components": [ - { "internalType": "uint256", "name": "gas", "type": "uint256" }, - { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, - { - "internalType": "uint256", - "name": "validAfter", - "type": "uint256" - }, { "internalType": "uint256", "name": "validUntil", "type": "uint256" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } ], - "internalType": "struct AvocadoMultisigStructs.CastForwardParams", - "name": "forwardParams_", + "internalType": "struct IAvoWalletV2.CastParams", + "name": "params_", "type": "tuple" }, - { - "components": [ - { "internalType": "bytes", "name": "signature", "type": "bytes" }, - { "internalType": "address", "name": "signer", "type": "address" } - ], - "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", - "name": "signaturesParams_", - "type": "tuple[]" - } + { "internalType": "bytes", "name": "signature_", "type": "bytes" } ], - "name": "verifyV1", + "name": "verifyV2", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "nonpayable", "type": "function" diff --git a/Avoscan/src/handlers/blockflow/AdminChanged.ts b/Avoscan/src/handlers/blockflow/AdminChanged.ts deleted file mode 100644 index 0984ad0..0000000 --- a/Avoscan/src/handlers/blockflow/AdminChanged.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - IEventContext, - IBind, - Instance, - ISecrets, -} from "@blockflow-labs/utils"; - -import{ avoData,IavoData } from "../../types/schema"; -import { fromTwos } from "ethers"; - -/** - * @dev Event::AdminChanged(address previousAdmin, address newAdmin) - * @param context trigger object with contains {event: {previousAdmin ,newAdmin }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const AdminChangedHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - // Implement your event handler logic for AdminChanged here - - const { event, transaction, block, log } = context; - const { previousAdmin, newAdmin } = event; - - const avoDataDB: Instance = bind(avoData); - const id = transaction.transaction_hash + log.log_index.toString(); - const transferTopic0 = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; - const transferlog = transaction.logs - ? transaction.logs.find( - (log) => - log.topics[0].toLowerCase() === transferTopic0.toLowerCase() - ) - :null; - - let data: IavoData = await avoDataDB.findOne({ - id:id - }); - - data ??= await avoDataDB.create({ - id: id, - transactionHash: transaction.transaction_hash, - broadcaster: newAdmin, - status: "Success", - time: block.block_timestamp.toString(), - network: "ETH", - transactionActionamount: transferlog?.log_data, - transactionActionTo: transferlog?.topics[2], - user: event.topics[0], - avocadoWallet: event.topics[1] - }); -}; diff --git a/Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts b/Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts deleted file mode 100644 index 52630bf..0000000 --- a/Avoscan/src/handlers/blockflow/BroadcasterUpdated.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - IEventContext, - IBind, - Instance, - ISecrets, -} from "@blockflow-labs/utils"; - -/** - * @dev Event::BroadcasterUpdated(address broadcaster, bool status) - * @param context trigger object with contains {event: {broadcaster ,status }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const BroadcasterUpdatedHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - // Implement your event handler logic for BroadcasterUpdated here - - const { event, transaction, block, log } = context; - const { broadcaster, status } = event; -}; diff --git a/Avoscan/src/handlers/blockflow/ExecuteFailed.ts b/Avoscan/src/handlers/blockflow/ExecuteFailed.ts new file mode 100644 index 0000000..e7ac5df --- /dev/null +++ b/Avoscan/src/handlers/blockflow/ExecuteFailed.ts @@ -0,0 +1,17 @@ +import { IEventContext, IBind, Instance, ISecrets } from "@blockflow-labs/utils" + +/** + * @dev Event::ExecuteFailed(address avoSafeOwner, address avoSafeAddress, address source, bytes metadata, string reason) + * @param context trigger object with contains {event: {avoSafeOwner ,avoSafeAddress ,source ,metadata ,reason }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ExecuteFailedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ExecuteFailed here + + const { event, transaction, block, log } = context + const { avoSafeOwner, avoSafeAddress, source, metadata, reason } = event +} diff --git a/Avoscan/src/handlers/blockflow/Executed.ts b/Avoscan/src/handlers/blockflow/Executed.ts new file mode 100644 index 0000000..bc67e8c --- /dev/null +++ b/Avoscan/src/handlers/blockflow/Executed.ts @@ -0,0 +1,48 @@ +import { IEventContext, IBind, Instance, ISecrets } from "@blockflow-labs/utils" + +import { avoData, IavoData } from "../../types/schema" +import { fromTwos } from "ethers" + +/** + * @dev Event::Executed(address avoSafeOwner, address avoSafeAddress, address source, bytes metadata) + * @param context trigger object with contains {event: {avoSafeOwner ,avoSafeAddress ,source ,metadata }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ExecutedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + const { event, transaction, block, log } = context + const { avoSafeOwner, avoSafeAddress, source, metadata } = event + + const avoDataDB: Instance = bind(avoData) + const id = transaction.transaction_hash + log.log_index.toString() + const transferTopic0 = + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + const transferlog = transaction.logs + ? transaction.logs.find( + (log) => log.topics[0].toLowerCase() === transferTopic0.toLowerCase(), + ) + : null + + let data: IavoData = await avoDataDB.findOne({ + id: id, + }) + + data ??= await avoDataDB.create({ + id: id, + transactionHash: transaction.transaction_hash, + broadcaster: transaction.transaction_from_address, + status: "Success", + time: block.block_timestamp.toString(), + network: "ETH", + actions: [ + transferlog?.log_data, + transferlog?.topics[2], + transferlog?.topics[1], + ], + user: avoSafeOwner, + avocadoWallet: avoSafeAddress, + }) +} diff --git a/Avoscan/src/types/schema.ts b/Avoscan/src/types/schema.ts index 30aed3b..afc8fa9 100644 --- a/Avoscan/src/types/schema.ts +++ b/Avoscan/src/types/schema.ts @@ -1,9 +1,9 @@ // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -import { Document } from "@blockflow-labs/utils"; +import { Document } from "@blockflow-labs/utils" export class avoData { - static entity = "avoData"; + static entity = "avoData" static schema = { id: { type: "String", index: true }, transactionHash: "string", @@ -11,32 +11,44 @@ export class avoData { status: "string", time: "string", network: "string", - transactionActionAmount: "string", - transactionActionTo: "string", + actions: [ + { + value: "string", + to: "string", + from: "string", + contractAddress: "string", + }, + ], user: "string", avocadoWallet: "string", entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, instanceId: { type: "String", index: true }, - }; + } } -import { String, Array } from "@blockflow-labs/utils"; +import { String, Array } from "@blockflow-labs/utils" + +type Action = { + value: string + to: string + from: string + contractAddress: string +} export interface IavoData extends Document { - id: String; - transactionHash: string; - broadcaster: string; - status: string; - time: string; - network: string; - transactionActionAmount: string; - transactionActionTo: string; - user: string; - avocadoWallet: string; - blocknumber: String; - entityId: String; - instanceId: String; - chainId: String; + id: String + transactionHash: string + broadcaster: string + status: string + time: string + network: string + actions: [Action] + user: string + avocadoWallet: string + blocknumber: String + entityId: String + instanceId: String + chainId: String } diff --git a/Avoscan/studio.schema.ts b/Avoscan/studio.schema.ts index be04110..1052970 100644 --- a/Avoscan/studio.schema.ts +++ b/Avoscan/studio.schema.ts @@ -1,5 +1,12 @@ import { String, Array } from "@blockflow-labs/utils"; +type Action = { + value: string; + to: string; + from: string; + contractAddress: string; +}; + export interface avoData { id: String; transactionHash: string; @@ -7,8 +14,7 @@ export interface avoData { status: string; time: string; network: string; - transactionActionAmount: string; - transactionActionTo: string; + actions: [Action]; user: string; avocadoWallet: string; } diff --git a/Avoscan/studio.yaml b/Avoscan/studio.yaml index 77e35dd..2088ae7 100644 --- a/Avoscan/studio.yaml +++ b/Avoscan/studio.yaml @@ -14,7 +14,9 @@ Resources: Type: contract/event Address: "0x46978CD477A496028A18c02F07ab7F35EDBa5A54" Triggers: - - Event: AdminChanged(address,address) - Handler: src/handlers/blockflow/AdminChanged.AdminChangedHandler - - Event: BroadcasterUpdated(address indexed,bool indexed) - Handler: src/handlers/blockflow/BroadcasterUpdated.BroadcasterUpdatedHandler + - Event: >- + ExecuteFailed(address indexed,address indexed,address + indexed,bytes,string) + Handler: src/handlers/blockflow/ExecuteFailed.ExecuteFailedHandler + - Event: Executed(address indexed,address indexed,address indexed,bytes) + Handler: src/handlers/blockflow/Executed.ExecutedHandler From 07b88bd217f2843f9c48fefae27f4ec2252c1fa9 Mon Sep 17 00:00:00 2001 From: pradyuman-verma Date: Mon, 24 Jun 2024 23:36:16 +0530 Subject: [PATCH 03/22] avocado fixes + wrap --- Avoscan/package-lock.json | 92 ++- Avoscan/package.json | 3 +- Avoscan/src/abis/abi.json | 536 ++++++++++++++++++ Avoscan/src/abis/blockflow.json | 331 ----------- Avoscan/src/abis/erc20.json | 222 ++++++++ Avoscan/src/handlers/Executed.ts | 40 ++ .../src/handlers/blockflow/ExecuteFailed.ts | 17 - Avoscan/src/handlers/blockflow/Executed.ts | 48 -- Avoscan/src/types/schema.ts | 51 +- Avoscan/src/utils/index.ts | 29 + Avoscan/studio.schema.ts | 2 +- Avoscan/studio.yaml | 12 +- Avoscan/tsconfig.json | 3 +- 13 files changed, 950 insertions(+), 436 deletions(-) create mode 100644 Avoscan/src/abis/abi.json delete mode 100644 Avoscan/src/abis/blockflow.json create mode 100644 Avoscan/src/abis/erc20.json create mode 100644 Avoscan/src/handlers/Executed.ts delete mode 100644 Avoscan/src/handlers/blockflow/ExecuteFailed.ts delete mode 100644 Avoscan/src/handlers/blockflow/Executed.ts create mode 100644 Avoscan/src/utils/index.ts diff --git a/Avoscan/package-lock.json b/Avoscan/package-lock.json index 8959cc2..b79f425 100644 --- a/Avoscan/package-lock.json +++ b/Avoscan/package-lock.json @@ -8,7 +8,8 @@ "name": "blockflow-studio", "version": "1.0.7-beta.3", "dependencies": { - "@blockflow-labs/utils": "latest" + "@blockflow-labs/utils": "latest", + "ethers": "^6.13.1" }, "devDependencies": { "bignumber.js": "^9.1.1", @@ -19,6 +20,11 @@ "webpack-cli": "^5.1.4" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, "node_modules/@blockflow-labs/utils": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7.tgz", @@ -102,6 +108,28 @@ "sparse-bitfield": "^3.0.3" } }, + "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/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/@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", @@ -379,6 +407,11 @@ "acorn": "^8" } }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -699,6 +732,38 @@ "node": ">=4.0" } }, + "node_modules/ethers": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", + "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@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", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -1549,6 +1614,11 @@ "webpack": "^5.0.0" } }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -1784,6 +1854,26 @@ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "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 + } + } } } } diff --git a/Avoscan/package.json b/Avoscan/package.json index f431c61..203e4c6 100644 --- a/Avoscan/package.json +++ b/Avoscan/package.json @@ -6,7 +6,8 @@ "compile": "tsc -b" }, "dependencies": { - "@blockflow-labs/utils": "latest" + "@blockflow-labs/utils": "latest", + "ethers": "^6.13.1" }, "devDependencies": { "bignumber.js": "^9.1.1", diff --git a/Avoscan/src/abis/abi.json b/Avoscan/src/abis/abi.json new file mode 100644 index 0000000..4b6a871 --- /dev/null +++ b/Avoscan/src/abis/abi.json @@ -0,0 +1,536 @@ +[ + { + "inputs": [ + { + "internalType": "contract IAvoFactory", + "name": "avoFactory_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "name": "AvoForwarder__InvalidParams", "type": "error" }, + { + "inputs": [], + "name": "AvoForwarder__LegacyVersionNotDeployed", + "type": "error" + }, + { "inputs": [], "name": "AvoForwarder__Unauthorized", "type": "error" }, + { "inputs": [], "name": "AvoForwarder__Unsupported", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "auth", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "AuthUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "broadcaster", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "BroadcasterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "avocadoOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "avocadoAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "source", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "ExecuteFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "avocadoOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "avocadoAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "source", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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" + }, + { + "inputs": [], + "name": "avoFactory", + "outputs": [ + { "internalType": "contract IAvoFactory", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "avoNonce", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "avocadoBytecode", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "avocadoVersion", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "avocadoVersionName", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" } + ], + "name": "computeAvocado", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { + "internalType": "uint256", + "name": "operation", + "type": "uint256" + } + ], + "internalType": "struct AvocadoMultisigStructs.Action[]", + "name": "actions", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "int256", "name": "avoNonce", "type": "int256" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ], + "internalType": "struct AvocadoMultisigStructs.CastParams", + "name": "params_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validUntil", + "type": "uint256" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "internalType": "struct AvocadoMultisigStructs.CastForwardParams", + "name": "forwardParams_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "address", "name": "signer", "type": "address" } + ], + "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", + "name": "signaturesParams_", + "type": "tuple[]" + } + ], + "name": "executeV1", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner_", "type": "address" }, + { + "internalType": "address[]", + "name": "allowedBroadcasters_", + "type": "address[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "auth_", "type": "address" } + ], + "name": "isAuth", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "broadcaster_", "type": "address" } + ], + "name": "isBroadcaster", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { + "internalType": "uint256", + "name": "operation", + "type": "uint256" + } + ], + "internalType": "struct AvocadoMultisigStructs.Action[]", + "name": "actions", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "int256", "name": "avoNonce", "type": "int256" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ], + "internalType": "struct AvocadoMultisigStructs.CastParams", + "name": "params_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validUntil", + "type": "uint256" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "internalType": "struct AvocadoMultisigStructs.CastForwardParams", + "name": "forwardParams_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "address", "name": "signer", "type": "address" } + ], + "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", + "name": "signaturesParams_", + "type": "tuple[]" + } + ], + "name": "simulateV1", + "outputs": [ + { "internalType": "uint256", "name": "castGasUsed_", "type": "uint256" }, + { + "internalType": "uint256", + "name": "deploymentGasUsed_", + "type": "uint256" + }, + { "internalType": "bool", "name": "isDeployed_", "type": "bool" }, + { "internalType": "bool", "name": "success_", "type": "bool" }, + { "internalType": "string", "name": "revertReason_", "type": "string" } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bool", "name": "value", "type": "bool" } + ], + "internalType": "struct AvoForwarderStructs.AddressBool[]", + "name": "authsStatus_", + "type": "tuple[]" + } + ], + "name": "updateAuths", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bool", "name": "value", "type": "bool" } + ], + "internalType": "struct AvoForwarderStructs.AddressBool[]", + "name": "broadcastersStatus_", + "type": "tuple[]" + } + ], + "name": "updateBroadcasters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from_", "type": "address" }, + { "internalType": "uint32", "name": "index_", "type": "uint32" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { + "internalType": "uint256", + "name": "operation", + "type": "uint256" + } + ], + "internalType": "struct AvocadoMultisigStructs.Action[]", + "name": "actions", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "int256", "name": "avoNonce", "type": "int256" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "address", "name": "source", "type": "address" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ], + "internalType": "struct AvocadoMultisigStructs.CastParams", + "name": "params_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "gas", "type": "uint256" }, + { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validUntil", + "type": "uint256" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "internalType": "struct AvocadoMultisigStructs.CastForwardParams", + "name": "forwardParams_", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "address", "name": "signer", "type": "address" } + ], + "internalType": "struct AvocadoMultisigStructs.SignatureParams[]", + "name": "signaturesParams_", + "type": "tuple[]" + } + ], + "name": "verifyV1", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/Avoscan/src/abis/blockflow.json b/Avoscan/src/abis/blockflow.json deleted file mode 100644 index 3f921b8..0000000 --- a/Avoscan/src/abis/blockflow.json +++ /dev/null @@ -1,331 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IAvoFactory", - "name": "avoFactory_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "name": "AvoForwarder__InvalidParams", "type": "error" }, - { - "inputs": [], - "name": "AvoForwarder__LegacyVersionNotDeployed", - "type": "error" - }, - { "inputs": [], "name": "AvoForwarder__Unauthorized", "type": "error" }, - { "inputs": [], "name": "AvoForwarder__VersionMismatch", "type": "error" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "avoSafeOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "avoSafeAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "source", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "ExecuteFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "avoSafeOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "avoSafeAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "source", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [], - "name": "avoFactory", - "outputs": [ - { "internalType": "contract IAvoFactory", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "avoSafeBytecode", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" } - ], - "name": "avoSafeNonce", - "outputs": [{ "internalType": "uint88", "name": "", "type": "uint88" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" } - ], - "name": "avoWalletVersion", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" } - ], - "name": "avoWalletVersionName", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner_", "type": "address" } - ], - "name": "computeAddress", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from_", "type": "address" }, - { - "components": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "internalType": "struct IAvoWalletV1.Action[]", - "name": "actions_", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, - { "internalType": "uint256", "name": "gas_", "type": "uint256" }, - { "internalType": "address", "name": "source_", "type": "address" }, - { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, - { "internalType": "bytes", "name": "signature_", "type": "bytes" } - ], - "name": "execute", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from_", "type": "address" }, - { - "components": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "internalType": "struct IAvoWalletV1.Action[]", - "name": "actions_", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, - { "internalType": "uint256", "name": "gas_", "type": "uint256" }, - { "internalType": "address", "name": "source_", "type": "address" }, - { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, - { "internalType": "bytes", "name": "signature_", "type": "bytes" } - ], - "name": "executeV1", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from_", "type": "address" }, - { - "components": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "uint256", "name": "operation", "type": "uint256" } - ], - "internalType": "struct IAvoWalletV2.Action[]", - "name": "actions_", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "validUntil", - "type": "uint256" - }, - { "internalType": "uint256", "name": "gas", "type": "uint256" }, - { "internalType": "address", "name": "source", "type": "address" }, - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "bytes", "name": "metadata", "type": "bytes" } - ], - "internalType": "struct IAvoWalletV2.CastParams", - "name": "params_", - "type": "tuple" - }, - { "internalType": "bytes", "name": "signature_", "type": "bytes" } - ], - "name": "executeV2", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from_", "type": "address" }, - { - "components": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "internalType": "struct IAvoWalletV1.Action[]", - "name": "actions_", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, - { "internalType": "uint256", "name": "gas_", "type": "uint256" }, - { "internalType": "address", "name": "source_", "type": "address" }, - { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, - { "internalType": "bytes", "name": "signature_", "type": "bytes" } - ], - "name": "verify", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from_", "type": "address" }, - { - "components": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "internalType": "struct IAvoWalletV1.Action[]", - "name": "actions_", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "validUntil_", "type": "uint256" }, - { "internalType": "uint256", "name": "gas_", "type": "uint256" }, - { "internalType": "address", "name": "source_", "type": "address" }, - { "internalType": "bytes", "name": "metadata_", "type": "bytes" }, - { "internalType": "bytes", "name": "signature_", "type": "bytes" } - ], - "name": "verifyV1", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from_", "type": "address" }, - { - "components": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "uint256", "name": "operation", "type": "uint256" } - ], - "internalType": "struct IAvoWalletV2.Action[]", - "name": "actions_", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "validUntil", - "type": "uint256" - }, - { "internalType": "uint256", "name": "gas", "type": "uint256" }, - { "internalType": "address", "name": "source", "type": "address" }, - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "bytes", "name": "metadata", "type": "bytes" } - ], - "internalType": "struct IAvoWalletV2.CastParams", - "name": "params_", - "type": "tuple" - }, - { "internalType": "bytes", "name": "signature_", "type": "bytes" } - ], - "name": "verifyV2", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/Avoscan/src/abis/erc20.json b/Avoscan/src/abis/erc20.json new file mode 100644 index 0000000..405d6b3 --- /dev/null +++ b/Avoscan/src/abis/erc20.json @@ -0,0 +1,222 @@ +[ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } +] diff --git a/Avoscan/src/handlers/Executed.ts b/Avoscan/src/handlers/Executed.ts new file mode 100644 index 0000000..01959cb --- /dev/null +++ b/Avoscan/src/handlers/Executed.ts @@ -0,0 +1,40 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { avoData, IavoData } from "../types/schema"; +import { getAllTransactionActions } from "../utils"; + +/** + * @dev Event::Executed(address avoSafeOwner, address avoSafeAddress, address source, bytes metadata) + * @param context trigger object with contains {event: {avoSafeOwner ,avoSafeAddress ,source ,metadata }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ExecutedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets +) => { + const { event, transaction, block, log } = context; + const { avoSafeOwner, avoSafeAddress, source, metadata } = event; + + const avoDataDB: Instance = bind(avoData); + const id = transaction.transaction_hash + ":" + log.log_index.toString(); + + const actions = getAllTransactionActions(transaction.logs); + + await avoDataDB.create({ + id: id, + transactionHash: transaction.transaction_hash, + broadcaster: transaction.transaction_from_address, + status: "Success", + time: block.block_timestamp.toString(), + network: "ETH", + actions, + user: avoSafeOwner, + avocadoWallet: avoSafeAddress, + }); +}; diff --git a/Avoscan/src/handlers/blockflow/ExecuteFailed.ts b/Avoscan/src/handlers/blockflow/ExecuteFailed.ts deleted file mode 100644 index e7ac5df..0000000 --- a/Avoscan/src/handlers/blockflow/ExecuteFailed.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { IEventContext, IBind, Instance, ISecrets } from "@blockflow-labs/utils" - -/** - * @dev Event::ExecuteFailed(address avoSafeOwner, address avoSafeAddress, address source, bytes metadata, string reason) - * @param context trigger object with contains {event: {avoSafeOwner ,avoSafeAddress ,source ,metadata ,reason }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const ExecuteFailedHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - // Implement your event handler logic for ExecuteFailed here - - const { event, transaction, block, log } = context - const { avoSafeOwner, avoSafeAddress, source, metadata, reason } = event -} diff --git a/Avoscan/src/handlers/blockflow/Executed.ts b/Avoscan/src/handlers/blockflow/Executed.ts deleted file mode 100644 index bc67e8c..0000000 --- a/Avoscan/src/handlers/blockflow/Executed.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { IEventContext, IBind, Instance, ISecrets } from "@blockflow-labs/utils" - -import { avoData, IavoData } from "../../types/schema" -import { fromTwos } from "ethers" - -/** - * @dev Event::Executed(address avoSafeOwner, address avoSafeAddress, address source, bytes metadata) - * @param context trigger object with contains {event: {avoSafeOwner ,avoSafeAddress ,source ,metadata }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const ExecutedHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - const { event, transaction, block, log } = context - const { avoSafeOwner, avoSafeAddress, source, metadata } = event - - const avoDataDB: Instance = bind(avoData) - const id = transaction.transaction_hash + log.log_index.toString() - const transferTopic0 = - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" - const transferlog = transaction.logs - ? transaction.logs.find( - (log) => log.topics[0].toLowerCase() === transferTopic0.toLowerCase(), - ) - : null - - let data: IavoData = await avoDataDB.findOne({ - id: id, - }) - - data ??= await avoDataDB.create({ - id: id, - transactionHash: transaction.transaction_hash, - broadcaster: transaction.transaction_from_address, - status: "Success", - time: block.block_timestamp.toString(), - network: "ETH", - actions: [ - transferlog?.log_data, - transferlog?.topics[2], - transferlog?.topics[1], - ], - user: avoSafeOwner, - avocadoWallet: avoSafeAddress, - }) -} diff --git a/Avoscan/src/types/schema.ts b/Avoscan/src/types/schema.ts index afc8fa9..decb178 100644 --- a/Avoscan/src/types/schema.ts +++ b/Avoscan/src/types/schema.ts @@ -1,9 +1,9 @@ // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -import { Document } from "@blockflow-labs/utils" +import { Document } from "@blockflow-labs/utils"; export class avoData { - static entity = "avoData" + static entity = "avoData"; static schema = { id: { type: "String", index: true }, transactionHash: "string", @@ -12,12 +12,7 @@ export class avoData { time: "string", network: "string", actions: [ - { - value: "string", - to: "string", - from: "string", - contractAddress: "string", - }, + { value: "string", to: "string", from: "string", address: "string" }, ], user: "string", avocadoWallet: "string", @@ -25,30 +20,30 @@ export class avoData { blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, instanceId: { type: "String", index: true }, - } + }; } -import { String, Array } from "@blockflow-labs/utils" +import { String, Array } from "@blockflow-labs/utils"; type Action = { - value: string - to: string - from: string - contractAddress: string -} + value: string; + to: string; + from: string; + address: string; +}; export interface IavoData extends Document { - id: String - transactionHash: string - broadcaster: string - status: string - time: string - network: string - actions: [Action] - user: string - avocadoWallet: string - blocknumber: String - entityId: String - instanceId: String - chainId: String + id: String; + transactionHash: string; + broadcaster: string; + status: string; + time: string; + network: string; + actions: [Action]; + user: string; + avocadoWallet: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; } diff --git a/Avoscan/src/utils/index.ts b/Avoscan/src/utils/index.ts new file mode 100644 index 0000000..ddf21ae --- /dev/null +++ b/Avoscan/src/utils/index.ts @@ -0,0 +1,29 @@ +import { Interface } from "ethers"; +import { ILog } from "@blockflow-labs/utils"; + +import erc20 from "../abis/erc20.json"; + +// prettier-ignore +const TOPIC_0 = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; + +export function getAllTransactionActions(logs: Array) { + const transferlogs = logs + ? logs.filter( + (log) => log.topics[0].toLowerCase() === TOPIC_0.toLowerCase() + ) + : []; + + return transferlogs.map((log) => { + const decodedLog: any = decodeTransferLog(log.topics, log.log_data); + return { + from: decodedLog[0], + to: decodedLog[1], + value: decodedLog[2].toString(), + }; + }); +} + +export function decodeTransferLog(topics: Array, data: string) { + const iface = new Interface(erc20); + return iface.parseLog({ topics, data })?.args; +} diff --git a/Avoscan/studio.schema.ts b/Avoscan/studio.schema.ts index 1052970..e4a3c27 100644 --- a/Avoscan/studio.schema.ts +++ b/Avoscan/studio.schema.ts @@ -4,7 +4,7 @@ type Action = { value: string; to: string; from: string; - contractAddress: string; + address: string; }; export interface avoData { diff --git a/Avoscan/studio.yaml b/Avoscan/studio.yaml index 2088ae7..4471ae0 100644 --- a/Avoscan/studio.yaml +++ b/Avoscan/studio.yaml @@ -10,13 +10,9 @@ schema: execution: parallel Resources: - Name: blockflow - Abi: src/abis/blockflow.json + Abi: src/abis/abi.json Type: contract/event - Address: "0x46978CD477A496028A18c02F07ab7F35EDBa5A54" + Address: "0x46978cd477a496028a18c02f07ab7f35edba5a54" Triggers: - - Event: >- - ExecuteFailed(address indexed,address indexed,address - indexed,bytes,string) - Handler: src/handlers/blockflow/ExecuteFailed.ExecuteFailedHandler - - Event: Executed(address indexed,address indexed,address indexed,bytes) - Handler: src/handlers/blockflow/Executed.ExecutedHandler + - Event: Executed(address indexed,uint32,address indexed,address indexed,bytes) + Handler: src/handlers/Executed.ExecutedHandler diff --git a/Avoscan/tsconfig.json b/Avoscan/tsconfig.json index fb80a42..8f50c9b 100644 --- a/Avoscan/tsconfig.json +++ b/Avoscan/tsconfig.json @@ -7,7 +7,8 @@ "strict": true, "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] From c2fcdf953a589fcdf91be56549fb43e88425f812 Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Fri, 28 Jun 2024 14:38:39 +0530 Subject: [PATCH 04/22] ens and base registry Signed-off-by: d4v1d03 --- DNS/ens/.gitignore | 3 +- .../NameRegisteredHandler/index.ts | 18 +++++++- .../BaseRegistrar/NameRenewedHandler/index.ts | 16 ------- .../BaseRegistrar/TransferHandler/index.ts | 16 ------- .../ensRegistry/NewOwnerHandler/index.ts | 30 +++++++++++++ .../ensRegistry/NewResolverHandler/index.ts | 22 ++++++++++ .../ensRegistry/NewTTLHandler/index.ts | 14 +++++- .../resolver/ABIChangedHandler/index.ts | 2 +- .../resolver/AddrChangedHandler/index.ts | 2 +- .../ContenthashChangedHandler/index.ts | 4 +- .../resolver/AddressChangedHandler/index.ts | 4 +- .../resolver/InterfaceChangedHandler/index.ts | 2 +- .../resolver/NameChangedHandler/index.ts | 2 +- .../resolver/PubkeyChangedHandler/index.ts | 2 +- .../resolver/TextChangedHandler/index.ts | 4 +- .../resolver/VersionChangedHandler/index.ts | 4 +- DNS/ens/src/types/schema.ts | 39 ++++++++++++++-- DNS/ens/src/utils/helper.ts | 2 +- DNS/ens/studio.schema.ts | 2 +- DNS/ens/studio.yaml | 44 ++++++++----------- 20 files changed, 154 insertions(+), 78 deletions(-) delete mode 100644 DNS/ens/src/handlers/BaseRegistrar/NameRenewedHandler/index.ts delete mode 100644 DNS/ens/src/handlers/BaseRegistrar/TransferHandler/index.ts rename DNS/ens/src/handlers/resolver/{ => AddressChangedHandler}/ContenthashChangedHandler/index.ts (97%) diff --git a/DNS/ens/.gitignore b/DNS/ens/.gitignore index e13c8ee..be35064 100644 --- a/DNS/ens/.gitignore +++ b/DNS/ens/.gitignore @@ -1,3 +1,4 @@ node_modules build -dist \ No newline at end of file +dist +notes \ No newline at end of file diff --git a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts index 1726501..4aee544 100644 --- a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts +++ b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts @@ -1,4 +1,6 @@ -import { IEventContext } from "@blockflow-labs/utils"; +import { IEventContext, Instance } from "@blockflow-labs/utils"; + +import { Registration } from "../../../types/schema"; /** * @dev Event::NameRegistered(uint256 id, address owner, uint256 expires) @@ -13,4 +15,18 @@ export const NameRegisteredHandler = async ( const { event, transaction, block, log } = context; const { id, owner, expires } = event; + const isoDate = new Date(Number(block.block_timestamp) * 1000).toISOString(); + + + const registrationDB: Instance = bind(Registration); + await registrationDB.create({ + id: id.toString(), + domain: "", + registrationDate: isoDate, + expiryDate: expires.toString(), + cost: "", + registrant: owner, + labelName: "", + events: [], + }); }; diff --git a/DNS/ens/src/handlers/BaseRegistrar/NameRenewedHandler/index.ts b/DNS/ens/src/handlers/BaseRegistrar/NameRenewedHandler/index.ts deleted file mode 100644 index 54c6304..0000000 --- a/DNS/ens/src/handlers/BaseRegistrar/NameRenewedHandler/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IEventContext } from "@blockflow-labs/utils"; - -/** - * @dev Event::NameRenewed(uint256 id, uint256 expires) - * @param context trigger object with contains {event: {id ,expires }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const NameRenewedHandler = async ( - context: IEventContext, - bind: Function, -) => { - // Implement your event handler logic for NameRenewed here - - const { event, transaction, block, log } = context; - const { id, expires } = event; -}; diff --git a/DNS/ens/src/handlers/BaseRegistrar/TransferHandler/index.ts b/DNS/ens/src/handlers/BaseRegistrar/TransferHandler/index.ts deleted file mode 100644 index f4d0f9a..0000000 --- a/DNS/ens/src/handlers/BaseRegistrar/TransferHandler/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IEventContext } from "@blockflow-labs/utils"; - -/** - * @dev Event::Transfer(address from, address to, uint256 tokenId) - * @param context trigger object with contains {event: {from ,to ,tokenId }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const TransferHandler = async ( - context: IEventContext, - bind: Function, -) => { - // Implement your event handler logic for Transfer here - - const { event, transaction, block, log } = context; - const { from, to, tokenId } = event; -}; diff --git a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts index 9a2c569..2f439d9 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts @@ -1,5 +1,7 @@ import { IEventContext } from "@blockflow-labs/utils"; +import { Domain, WrappedDomain } from "../../../types/schema"; +import { resolveAddress } from "ethers"; /** * @dev Event::NewOwner(bytes32 node, bytes32 label, address owner) * @param context trigger object with contains {event: {node ,label ,owner }, transaction, block, log} @@ -13,4 +15,32 @@ export const NewOwnerHandler = async ( const { event, transaction, block, log } = context; const { node, label, owner } = event; + + const domain = await bind(Domain).findOne({ id: node.toLowerCase() }); + if (!domain) { + await bind(Domain).create({ + id: node.toLowerCase(), + name: "", + labelName: label.toString(), + labelhash: "", + parent: node.toString(), + subdomainCount: 0, + resolvedAddress: "", + owner: owner.toString(), + resolver: "", + ttl: null, + isMigrated: false, + createdAt: block.block_timestamp, + registrant: "", + wrappedOwner: "", + expiryDate: null, + WrappedDomain: "", + events: [node, transaction.transaction_hash, block.block_number], + registration: "" + //do i need to fill all other entries of domain DB??? while creating + }); + } else { + domain.owner = owner.toString(); + await domain.save(); + } }; diff --git a/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts index d1a8939..73b6aed 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts @@ -1,5 +1,6 @@ import { IEventContext } from "@blockflow-labs/utils"; +import { Domain, Resolver } from "../../../types/schema"; /** * @dev Event::NewResolver(bytes32 node, address resolver) * @param context trigger object with contains {event: {node ,resolver }, transaction, block, log} @@ -13,4 +14,25 @@ export const NewResolverHandler = async ( const { event, transaction, block, log } = context; const { node, resolver } = event; + + const id = resolver.toString()+"-"+node.toLowerCase(); + + let domainDB = await bind(Domain).findOne({ id: node.toLowerCase() }); + domainDB.resolver = id; + + let resolverDB = await bind(Resolver).findOne({ id: id }); + if (!resolverDB) { + await bind(Resolver).create({ + id: id, + address: resolver.toString(), + domain: node.toLowerCase(), + events:[resolver, transaction.transaction_hash] + }); + domainDB.resolvedAddress = ""; + domainDB.events = [node, transaction.transaction_hash, block.block_number]; + } + else{ + domainDB.resolvedAddress = resolverDB.addr; + } + await domainDB.save(); }; diff --git a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts index f8f1a4d..c8b0ede 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts @@ -1,5 +1,5 @@ import { IEventContext } from "@blockflow-labs/utils"; - +import { Domain } from "../../../types/schema"; /** * @dev Event::NewTTL(bytes32 node, uint64 ttl) * @param context trigger object with contains {event: {node ,ttl }, transaction, block, log} @@ -10,4 +10,16 @@ export const NewTTLHandler = async (context: IEventContext, bind: Function) => { const { event, transaction, block, log } = context; const { node, ttl } = event; + + const domain = await bind(Domain).findOne({ id: node.toLowerCase()}); + if (!domain) { + await bind(Domain).create({ + id: node.toLowerCase(), + ttl: ttl.toString(), + events:[node, transaction.transaction_hash,block.block_number] + }); + } else { + domain.ttl = ttl.toString(); + await domain.save(); + } }; diff --git a/DNS/ens/src/handlers/resolver/ABIChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/ABIChangedHandler/index.ts index 59fc574..42006b4 100644 --- a/DNS/ens/src/handlers/resolver/ABIChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/ABIChangedHandler/index.ts @@ -14,7 +14,7 @@ import { AbiChanged, Resolver } from "../../../types/schema"; */ export const ABIChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for ABIChanged here const { event, transaction, log } = context; diff --git a/DNS/ens/src/handlers/resolver/AddrChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/AddrChangedHandler/index.ts index b4c845a..63862f8 100644 --- a/DNS/ens/src/handlers/resolver/AddrChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/AddrChangedHandler/index.ts @@ -16,7 +16,7 @@ import { createResolverID, createEventID } from "../../../utils/helper"; */ export const AddrChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for AddrChanged here const { event, transaction, log } = context; diff --git a/DNS/ens/src/handlers/resolver/ContenthashChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/AddressChangedHandler/ContenthashChangedHandler/index.ts similarity index 97% rename from DNS/ens/src/handlers/resolver/ContenthashChangedHandler/index.ts rename to DNS/ens/src/handlers/resolver/AddressChangedHandler/ContenthashChangedHandler/index.ts index ed76ebc..92e57b9 100644 --- a/DNS/ens/src/handlers/resolver/ContenthashChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/AddressChangedHandler/ContenthashChangedHandler/index.ts @@ -14,7 +14,7 @@ import { ContenthashChanged, IResolver, Resolver } from "../../../types/schema"; */ export const ContenthashChangedHandler = async ( context: IEventContext, - bind: IBind + bind: IBind, ) => { // Implement your event handler logic for ContenthashChanged here const { event, transaction, log } = context; @@ -27,7 +27,7 @@ export const ContenthashChangedHandler = async ( const resolver: IResolver = await getResolver( node, log.log_address, - resolverDB + resolverDB, ); resolver.contentHash = hash; diff --git a/DNS/ens/src/handlers/resolver/AddressChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/AddressChangedHandler/index.ts index 7885f7f..0cbfe82 100644 --- a/DNS/ens/src/handlers/resolver/AddressChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/AddressChangedHandler/index.ts @@ -18,7 +18,7 @@ import { */ export const AddressChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for AddressChanged here const { event, transaction, log } = context; @@ -32,7 +32,7 @@ export const AddressChangedHandler = async ( const resolver: IResolver = await getResolver( node, log.log_address, - resolverDB + resolverDB, ); // since coinTypes is of type [Number] diff --git a/DNS/ens/src/handlers/resolver/InterfaceChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/InterfaceChangedHandler/index.ts index d158b63..0f379ce 100644 --- a/DNS/ens/src/handlers/resolver/InterfaceChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/InterfaceChangedHandler/index.ts @@ -14,7 +14,7 @@ import { InterfaceChanged, Resolver } from "../../../types/schema"; */ export const InterfaceChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for InterfaceChanged here const { event, transaction, block, log } = context; diff --git a/DNS/ens/src/handlers/resolver/NameChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/NameChangedHandler/index.ts index 3f2894b..465d9c2 100644 --- a/DNS/ens/src/handlers/resolver/NameChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/NameChangedHandler/index.ts @@ -14,7 +14,7 @@ import { NameChanged, Resolver } from "../../../types/schema"; */ export const NameChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for NameChanged here const { event, transaction, log } = context; diff --git a/DNS/ens/src/handlers/resolver/PubkeyChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/PubkeyChangedHandler/index.ts index c5768e5..c84c1ae 100644 --- a/DNS/ens/src/handlers/resolver/PubkeyChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/PubkeyChangedHandler/index.ts @@ -13,7 +13,7 @@ import { PubkeyChanged, Resolver } from "../../../types/schema"; */ export const PubkeyChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for PubkeyChanged here const { event, transaction, log } = context; diff --git a/DNS/ens/src/handlers/resolver/TextChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/TextChangedHandler/index.ts index f93bf6d..7e71438 100644 --- a/DNS/ens/src/handlers/resolver/TextChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/TextChangedHandler/index.ts @@ -10,7 +10,7 @@ import { TextChanged, Resolver, IResolver } from "../../../types/schema"; */ export const TextChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for TextChanged here const { event, transaction, log } = context; @@ -23,7 +23,7 @@ export const TextChangedHandler = async ( const resolver: IResolver = await getResolver( node, log.log_address, - resolverDB + resolverDB, ); // @ts-ignore diff --git a/DNS/ens/src/handlers/resolver/VersionChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/VersionChangedHandler/index.ts index 9e618d0..1e27ca4 100644 --- a/DNS/ens/src/handlers/resolver/VersionChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/VersionChangedHandler/index.ts @@ -20,7 +20,7 @@ import { */ export const VersionChangedHandler = async ( context: IEventContext, - bind: Function + bind: Function, ) => { // Implement your event handler logic for VersionChanged here const { event, transaction, log } = context; @@ -53,7 +53,7 @@ export const VersionChangedHandler = async ( const resolver: IResolver = await getResolver( node, log.log_address, - resolverDB + resolverDB, ); // @ts-ignore diff --git a/DNS/ens/src/types/schema.ts b/DNS/ens/src/types/schema.ts index 3a039bd..3394025 100644 --- a/DNS/ens/src/types/schema.ts +++ b/DNS/ens/src/types/schema.ts @@ -12,6 +12,7 @@ export class Account { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -29,6 +30,7 @@ export class Registration { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -40,6 +42,7 @@ export class RegistrationEvent { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -53,6 +56,7 @@ export class WrappedDomain { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -64,7 +68,6 @@ export class Domain { labelName: "String", labelhash: "String", parent: "String", - subdomains: ["String"], subdomainCount: "Number", resolvedAddress: "String", owner: "String", @@ -76,11 +79,14 @@ export class Domain { wrappedOwner: "String", expiryDate: "Number", wrappedDomain: "String", - events: [{ domain: "String", transactionID: "String" }], + events: [ + { domain: "String", transactionID: "String", blockNumber: "Number" }, + ], registration: "String", entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -98,6 +104,7 @@ export class Resolver { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -111,6 +118,7 @@ export class Transfer { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -124,6 +132,7 @@ export class AddrChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -138,6 +147,7 @@ export class MulticoinAddrChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -151,6 +161,7 @@ export class TextChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -164,6 +175,7 @@ export class NameChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -177,6 +189,7 @@ export class AbiChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -191,6 +204,7 @@ export class PubkeyChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -204,6 +218,7 @@ export class ContenthashChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -218,6 +233,7 @@ export class InterfaceChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -231,6 +247,7 @@ export class VersionChanged { entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, }; } @@ -243,6 +260,7 @@ export interface IAccount extends Document { registrations: [String]; // registration ids blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -257,6 +275,7 @@ export interface IRegistration extends Document { events: [String]; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -265,6 +284,7 @@ export interface IRegistrationEvent extends Document { transactionID: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -275,6 +295,7 @@ export interface IWrappedDomain extends Document { name: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -284,7 +305,6 @@ export interface IDomain extends Document { labelName: String; labelhash: String; parent: String; - subdomains: [String]; subdomainCount: Number; resolvedAddress: String; owner: String; @@ -300,12 +320,14 @@ export interface IDomain extends Document { registration: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } type DomainEvent = { domain: String; transactionID: String; + blockNumber: Number; }; export interface IResolver extends Document { @@ -319,6 +341,7 @@ export interface IResolver extends Document { events: [ResolverEvent]; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -334,6 +357,7 @@ export interface ITransfer extends Document { owner: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -344,6 +368,7 @@ export interface IAddrChanged extends Document { addr: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -355,6 +380,7 @@ export interface IMulticoinAddrChanged extends Document { addr: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -365,6 +391,7 @@ export interface ITextChanged extends Document { key: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -375,6 +402,7 @@ export interface INameChanged extends Document { name: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -385,6 +413,7 @@ export interface IAbiChanged extends Document { contentType: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -396,6 +425,7 @@ export interface IPubkeyChanged extends Document { y: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -406,6 +436,7 @@ export interface IContenthashChanged extends Document { hash: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -417,6 +448,7 @@ export interface InterfaceChanged extends Document { implementer: String; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } @@ -427,5 +459,6 @@ export interface IVersionChanged extends Document { version: Number; blocknumber: String; entityId: String; + instanceId: String; chainId: String; } diff --git a/DNS/ens/src/utils/helper.ts b/DNS/ens/src/utils/helper.ts index aa41091..3d11b73 100644 --- a/DNS/ens/src/utils/helper.ts +++ b/DNS/ens/src/utils/helper.ts @@ -14,7 +14,7 @@ export function createEventID(context: IEventContext): string { export async function getResolver( node: string, address: string, - resolverDB: Instance + resolverDB: Instance, ) { let id = createResolverID(node, address); let resolver = await resolverDB.findOne({ id: id.toLowerCase() }); diff --git a/DNS/ens/studio.schema.ts b/DNS/ens/studio.schema.ts index bbd24cd..2f7b617 100644 --- a/DNS/ens/studio.schema.ts +++ b/DNS/ens/studio.schema.ts @@ -36,7 +36,6 @@ interface Domain { labelName: String; labelhash: String; parent: String; - subdomains: [String]; subdomainCount: Number; resolvedAddress: String; owner: String; @@ -55,6 +54,7 @@ interface Domain { type DomainEvent = { domain: String; transactionID: String; + blockNumber: Number; }; interface Resolver { diff --git a/DNS/ens/studio.yaml b/DNS/ens/studio.yaml index 8af538e..8926003 100644 --- a/DNS/ens/studio.yaml +++ b/DNS/ens/studio.yaml @@ -9,31 +9,25 @@ execution: sequential schema: file: ./studio.schema.ts Resources: - # - Name: ensRegistry - # Abi: src/abis/ensRegistry.json - # Type: contract/event - # Address: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" - # Triggers: - # - Event: Transfer(bytes32 indexed,address) - # Handler: src/handlers/ensRegistry/TransferHandler/index.TransferHandler - - # - Name: baseRegistrar - # Abi: src/abis/BaseRegistrar.json - # Type: contract/event - # Address: "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85" - # Triggers: - # - Event: NameRegistered(uint256 indexed,address indexed,uint256) - # Handler: src/handlers/BaseRegistrar/NameRegisteredHandler/index.NameRegisteredHandler - # - Event: NameRenewed(uint256 indexed,uint256) - # Handler: src/handlers/BaseRegistrar/NameRenewedHandler/index.NameRenewedHandler - # - Event: Transfer(address indexed,address indexed,uint256 indexed) - # Handler: src/handlers/BaseRegistrar/TransferHandler/index.TransferHandler - - - Name: resolver - Abi: src/abis/resolver.json - Type: contract/event - Address: "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" # public resolver 2 - Triggers: + - Name: ensRegistry + Abi: src/abis/ensRegistry.json + Type: contract/event + Address: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + Triggers: + - Event: Transfer(bytes32 indexed,address) + Handler: src/handlers/ensRegistry/TransferHandler/index.TransferHandler + - Name: baseRegistrar + Abi: src/abis/BaseRegistrar.json + Type: contract/event + Address: "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85" + Triggers: + - Event: NameRegistered(uint256 indexed,address indexed,uint256) + Handler: src/handlers/BaseRegistrar/NameRegisteredHandler/index.NameRegisteredHandler + - Name: resolver + Abi: src/abis/resolver.json + Type: contract/event + Address: "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" # public resolver 2 + Triggers: - Event: ABIChanged(bytes32 indexed,uint256 indexed) Handler: src/handlers/resolver/ABIChangedHandler/index.ABIChangedHandler - Event: AddrChanged(bytes32 indexed,address) From 03f33e21168396344cf35232f7c9a405e448c70f Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 2 Jul 2024 17:41:16 +0530 Subject: [PATCH 05/22] ens added Signed-off-by: d4v1d03 --- DNS/ens/src/abis/namewrapper.json | 867 ++++++++++++++++++ DNS/ens/src/abis/transfer.json | 108 +++ .../NameRegisteredHandler/index.ts | 1 - .../ensRegistry/NewOwnerHandler/index.ts | 4 +- .../ensRegistry/NewResolverHandler/index.ts | 9 +- .../ensRegistry/NewTTLHandler/index.ts | 4 +- .../ensRegistry/TransferHandler/helper.ts | 5 +- .../handlers/namewrapper/ExpiryExtended.ts | 49 + DNS/ens/src/handlers/namewrapper/FusesSet.ts | 51 ++ .../src/handlers/namewrapper/NameUnwrapped.ts | 48 + .../src/handlers/namewrapper/NameWrapped.ts | 68 ++ .../src/handlers/namewrapper/TransferBatch.ts | 54 ++ .../handlers/namewrapper/TransferSingle.ts | 53 ++ .../ContenthashChangedHandler/index.ts | 8 +- .../ContenthashChangedHandler/index.ts | 22 + DNS/ens/src/handlers/transfer/NewOwner.ts | 38 + DNS/ens/src/handlers/transfer/NewResolver.ts | 29 + DNS/ens/src/handlers/transfer/NewTTL.ts | 30 + DNS/ens/src/handlers/transfer/Transfer.ts | 34 + DNS/ens/src/types/schema.ts | 38 + DNS/ens/src/utils/helper.ts | 211 +++++ DNS/ens/studio.schema.ts | 37 + DNS/ens/studio.yaml | 82 +- 23 files changed, 1812 insertions(+), 38 deletions(-) create mode 100644 DNS/ens/src/abis/namewrapper.json create mode 100644 DNS/ens/src/abis/transfer.json create mode 100644 DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts create mode 100644 DNS/ens/src/handlers/namewrapper/FusesSet.ts create mode 100644 DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts create mode 100644 DNS/ens/src/handlers/namewrapper/NameWrapped.ts create mode 100644 DNS/ens/src/handlers/namewrapper/TransferBatch.ts create mode 100644 DNS/ens/src/handlers/namewrapper/TransferSingle.ts create mode 100644 DNS/ens/src/handlers/resolver/ContenthashChangedHandler/index.ts create mode 100644 DNS/ens/src/handlers/transfer/NewOwner.ts create mode 100644 DNS/ens/src/handlers/transfer/NewResolver.ts create mode 100644 DNS/ens/src/handlers/transfer/NewTTL.ts create mode 100644 DNS/ens/src/handlers/transfer/Transfer.ts diff --git a/DNS/ens/src/abis/namewrapper.json b/DNS/ens/src/abis/namewrapper.json new file mode 100644 index 0000000..b437548 --- /dev/null +++ b/DNS/ens/src/abis/namewrapper.json @@ -0,0 +1,867 @@ +[ + { + "inputs": [ + { "internalType": "contract ENS", "name": "_ens", "type": "address" }, + { + "internalType": "contract IBaseRegistrar", + "name": "_registrar", + "type": "address" + }, + { + "internalType": "contract IMetadataService", + "name": "_metadataService", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "name": "CannotUpgrade", "type": "error" }, + { "inputs": [], "name": "IncompatibleParent", "type": "error" }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "name": "IncorrectTargetOwner", + "type": "error" + }, + { "inputs": [], "name": "IncorrectTokenType", "type": "error" }, + { + "inputs": [ + { "internalType": "bytes32", "name": "labelHash", "type": "bytes32" }, + { + "internalType": "bytes32", + "name": "expectedLabelhash", + "type": "bytes32" + } + ], + "name": "LabelMismatch", + "type": "error" + }, + { + "inputs": [{ "internalType": "string", "name": "label", "type": "string" }], + "name": "LabelTooLong", + "type": "error" + }, + { "inputs": [], "name": "LabelTooShort", "type": "error" }, + { "inputs": [], "name": "NameIsNotWrapped", "type": "error" }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "name": "OperationProhibited", + "type": "error" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "addr", "type": "address" } + ], + "name": "Unauthorised", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "active", + "type": "bool" + } + ], + "name": "ControllerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "expiry", + "type": "uint64" + } + ], + "name": "ExpiryExtended", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "fuses", + "type": "uint32" + } + ], + "name": "FusesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "NameUnwrapped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "name", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "fuses", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "expiry", + "type": "uint64" + } + ], + "name": "NameWrapped", + "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": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "_tokens", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint32", "name": "fuseMask", "type": "uint32" } + ], + "name": "allFusesBurned", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "tokenId", "type": "uint256" } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" } + ], + "name": "balanceOf", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "accounts", "type": "address[]" }, + { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } + ], + "name": "balanceOfBatch", + "outputs": [ + { "internalType": "uint256[]", "name": "", "type": "uint256[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "addr", "type": "address" } + ], + "name": "canExtendSubnames", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "addr", "type": "address" } + ], + "name": "canModifyName", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "controllers", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ens", + "outputs": [ + { "internalType": "contract ENS", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "parentNode", "type": "bytes32" }, + { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, + { "internalType": "uint64", "name": "expiry", "type": "uint64" } + ], + "name": "extendExpiry", + "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "getApproved", + "outputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "getData", + "outputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "uint32", "name": "fuses", "type": "uint32" }, + { "internalType": "uint64", "name": "expiry", "type": "uint64" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" }, + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "isApprovedForAll", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "parentNode", "type": "bytes32" }, + { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" } + ], + "name": "isWrapped", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "name": "isWrapped", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "metadataService", + "outputs": [ + { + "internalType": "contract IMetadataService", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "names", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "onERC721Received", + "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }], + "name": "ownerOf", + "outputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_token", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "recoverFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "string", "name": "label", "type": "string" }, + { "internalType": "address", "name": "wrappedOwner", "type": "address" }, + { "internalType": "uint256", "name": "duration", "type": "uint256" }, + { "internalType": "address", "name": "resolver", "type": "address" }, + { + "internalType": "uint16", + "name": "ownerControlledFuses", + "type": "uint16" + } + ], + "name": "registerAndWrapETH2LD", + "outputs": [ + { + "internalType": "uint256", + "name": "registrarExpiry", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registrar", + "outputs": [ + { + "internalType": "contract IBaseRegistrar", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, + { "internalType": "uint256", "name": "duration", "type": "uint256" } + ], + "name": "renew", + "outputs": [ + { "internalType": "uint256", "name": "expires", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, + { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bool", "name": "approved", "type": "bool" } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "parentNode", "type": "bytes32" }, + { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, + { "internalType": "uint32", "name": "fuses", "type": "uint32" }, + { "internalType": "uint64", "name": "expiry", "type": "uint64" } + ], + "name": "setChildFuses", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "controller", "type": "address" }, + { "internalType": "bool", "name": "active", "type": "bool" } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { + "internalType": "uint16", + "name": "ownerControlledFuses", + "type": "uint16" + } + ], + "name": "setFuses", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IMetadataService", + "name": "_metadataService", + "type": "address" + } + ], + "name": "setMetadataService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "resolver", "type": "address" }, + { "internalType": "uint64", "name": "ttl", "type": "uint64" } + ], + "name": "setRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "resolver", "type": "address" } + ], + "name": "setResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "parentNode", "type": "bytes32" }, + { "internalType": "string", "name": "label", "type": "string" }, + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "uint32", "name": "fuses", "type": "uint32" }, + { "internalType": "uint64", "name": "expiry", "type": "uint64" } + ], + "name": "setSubnodeOwner", + "outputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "parentNode", "type": "bytes32" }, + { "internalType": "string", "name": "label", "type": "string" }, + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "resolver", "type": "address" }, + { "internalType": "uint64", "name": "ttl", "type": "uint64" }, + { "internalType": "uint32", "name": "fuses", "type": "uint32" }, + { "internalType": "uint64", "name": "expiry", "type": "uint64" } + ], + "name": "setSubnodeRecord", + "outputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint64", "name": "ttl", "type": "uint64" } + ], + "name": "setTTL", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract INameWrapperUpgrade", + "name": "_upgradeAddress", + "type": "address" + } + ], + "name": "setUpgradeContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } + ], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "parentNode", "type": "bytes32" }, + { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, + { "internalType": "address", "name": "controller", "type": "address" } + ], + "name": "unwrap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "labelhash", "type": "bytes32" }, + { "internalType": "address", "name": "registrant", "type": "address" }, + { "internalType": "address", "name": "controller", "type": "address" } + ], + "name": "unwrapETH2LD", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "name", "type": "bytes" }, + { "internalType": "bytes", "name": "extraData", "type": "bytes" } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "upgradeContract", + "outputs": [ + { + "internalType": "contract INameWrapperUpgrade", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "tokenId", "type": "uint256" } + ], + "name": "uri", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "name", "type": "bytes" }, + { "internalType": "address", "name": "wrappedOwner", "type": "address" }, + { "internalType": "address", "name": "resolver", "type": "address" } + ], + "name": "wrap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "string", "name": "label", "type": "string" }, + { "internalType": "address", "name": "wrappedOwner", "type": "address" }, + { + "internalType": "uint16", + "name": "ownerControlledFuses", + "type": "uint16" + }, + { "internalType": "address", "name": "resolver", "type": "address" } + ], + "name": "wrapETH2LD", + "outputs": [ + { "internalType": "uint64", "name": "expiry", "type": "uint64" } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/DNS/ens/src/abis/transfer.json b/DNS/ens/src/abis/transfer.json new file mode 100644 index 0000000..38682c0 --- /dev/null +++ b/DNS/ens/src/abis/transfer.json @@ -0,0 +1,108 @@ +[ + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "resolver", + "outputs": [{ "name": "", "type": "address" }], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "owner", + "outputs": [{ "name": "", "type": "address" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "label", "type": "bytes32" }, + { "name": "owner", "type": "address" } + ], + "name": "setSubnodeOwner", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "ttl", "type": "uint64" } + ], + "name": "setTTL", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "ttl", + "outputs": [{ "name": "", "type": "uint64" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "resolver", "type": "address" } + ], + "name": "setResolver", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "owner", "type": "address" } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "owner", "type": "address" } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": true, "name": "label", "type": "bytes32" }, + { "indexed": false, "name": "owner", "type": "address" } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "resolver", "type": "address" } + ], + "name": "NewResolver", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "ttl", "type": "uint64" } + ], + "name": "NewTTL", + "type": "event" + } +] diff --git a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts index 4aee544..d7b7350 100644 --- a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts +++ b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts @@ -17,7 +17,6 @@ export const NameRegisteredHandler = async ( const { id, owner, expires } = event; const isoDate = new Date(Number(block.block_timestamp) * 1000).toISOString(); - const registrationDB: Instance = bind(Registration); await registrationDB.create({ id: id.toString(), diff --git a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts index 2f439d9..60997e9 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts @@ -36,8 +36,8 @@ export const NewOwnerHandler = async ( expiryDate: null, WrappedDomain: "", events: [node, transaction.transaction_hash, block.block_number], - registration: "" - //do i need to fill all other entries of domain DB??? while creating + registration: "", + //do i need to fill all other entries of domain DB??? while creating }); } else { domain.owner = owner.toString(); diff --git a/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts index 73b6aed..fdb3e0a 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts @@ -15,8 +15,8 @@ export const NewResolverHandler = async ( const { event, transaction, block, log } = context; const { node, resolver } = event; - const id = resolver.toString()+"-"+node.toLowerCase(); - + const id = resolver.toString() + "-" + node.toLowerCase(); + let domainDB = await bind(Domain).findOne({ id: node.toLowerCase() }); domainDB.resolver = id; @@ -26,12 +26,11 @@ export const NewResolverHandler = async ( id: id, address: resolver.toString(), domain: node.toLowerCase(), - events:[resolver, transaction.transaction_hash] + events: [resolver, transaction.transaction_hash], }); domainDB.resolvedAddress = ""; domainDB.events = [node, transaction.transaction_hash, block.block_number]; - } - else{ + } else { domainDB.resolvedAddress = resolverDB.addr; } await domainDB.save(); diff --git a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts index c8b0ede..271e21e 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts @@ -11,12 +11,12 @@ export const NewTTLHandler = async (context: IEventContext, bind: Function) => { const { event, transaction, block, log } = context; const { node, ttl } = event; - const domain = await bind(Domain).findOne({ id: node.toLowerCase()}); + const domain = await bind(Domain).findOne({ id: node.toLowerCase() }); if (!domain) { await bind(Domain).create({ id: node.toLowerCase(), ttl: ttl.toString(), - events:[node, transaction.transaction_hash,block.block_number] + events: [node, transaction.transaction_hash, block.block_number], }); } else { domain.ttl = ttl.toString(); diff --git a/DNS/ens/src/handlers/ensRegistry/TransferHandler/helper.ts b/DNS/ens/src/handlers/ensRegistry/TransferHandler/helper.ts index 89b9ce0..4f2c435 100644 --- a/DNS/ens/src/handlers/ensRegistry/TransferHandler/helper.ts +++ b/DNS/ens/src/handlers/ensRegistry/TransferHandler/helper.ts @@ -49,10 +49,7 @@ export class Transferhelper { async saveDomain(domain: any) { // await this.recurseDomainDelete(domain); - await this.DOMAIN.updateOne( - { id: domain.owner.toLowerCase() }, - domain, - ).exec(); + await this.DOMAIN.updateOne({ id: domain.owner.toLowerCase() }, domain); } async recurseDomainDelete(domain: any) { diff --git a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts new file mode 100644 index 0000000..43e9a0b --- /dev/null +++ b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts @@ -0,0 +1,49 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { WrappedDomain, Domain, Expiryextendedevent} from "../../types/schema"; +import { createorloaddomain, checkPccBurned, PARENT_CANNOT_CONTROL } from "../../utils/helper"; +/** + * @dev Event::ExpiryExtended(bytes32 node, uint64 expiry) + * @param context trigger object with contains {event: {node ,expiry }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ExpiryExtendedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ExpiryExtended here + + const { event, transaction, block, log } = context; + const { node, expiry } = event; + + let domainDB : Instance = bind(Domain); + + let wrappeddoamin = await bind(WrappedDomain).findOne({ id: node }); + wrappeddoamin.expiryDate = expiry; + wrappeddoamin.events = [ + node, + block.block_number, + transaction.transaction_hash, + ]; + await wrappeddoamin.save(); +if(checkPccBurned(wrappeddoamin.fuses)){ + let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); + if(!domain.expiryDate || expiry> domain.expiryDate){ + domain.expiryDate = expiry; + domain.save(); + } +} +let expiryExtendedEvent: Instance = bind(Expiryextendedevent); +let expiryevent = await bind(Expiryextendedevent).create({ + id: node, + expiry: expiry, + blockNumber: block.block_number, + transactionID: transaction.transaction_hash, +}); +}; diff --git a/DNS/ens/src/handlers/namewrapper/FusesSet.ts b/DNS/ens/src/handlers/namewrapper/FusesSet.ts new file mode 100644 index 0000000..dba845b --- /dev/null +++ b/DNS/ens/src/handlers/namewrapper/FusesSet.ts @@ -0,0 +1,51 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { WrappedDomain, Domain, Fusesburntevent } from "../../types/schema"; +import { createorloaddomain, checkPccBurned, PARENT_CANNOT_CONTROL } from "../../utils/helper"; + +/** + * @dev Event::FusesSet(bytes32 node, uint32 fuses) + * @param context trigger object with contains {event: {node ,fuses }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const FusesSetHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for FusesSet here + + const { event, transaction, block, log } = context; + const { node, fuses } = event; + + const domainDB : Instance = bind(Domain); + + let wrappeddoamin = await bind(WrappedDomain).findOne({ id: node }); + wrappeddoamin.fuses = fuses; + wrappeddoamin.events = [ + node, + block.block_number, + transaction.transaction_hash, + ]; + await wrappeddoamin.save(); + if(wrappeddoamin.expiryDate && checkPccBurned(wrappeddoamin.fuses)){ + let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); + if(!domain.expiryDate || wrappeddoamin.expiryDate > domain.expiryDate){ + domain.expiryDate = wrappeddoamin.expiryDate; + await domain.save(); + } + } + let fusesburnteventDB: Instance = bind(Fusesburntevent); + let fusesburnt = await fusesburnteventDB.create({ + id: node, + fuses: fuses, + blockNumber: block.block_number, + transactionID: transaction.transaction_hash, + }); + +}; diff --git a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts new file mode 100644 index 0000000..2600d4b --- /dev/null +++ b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts @@ -0,0 +1,48 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Domain, Account, Nameunwrapperevents } from "../../types/schema"; +import { createorloadaccount, createorloaddomain } from "../../utils/helper"; + +/** + * @dev Event::NameUnwrapped(bytes32 node, address owner) + * @param context trigger object with contains {event: {node ,owner }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const NameUnwrappedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for NameUnwrapped here + + const { event, transaction, block, log } = context; + const { node, owner } = event; + + const ETH_NODE = + "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"; + + const accountDB: Instance = bind(Account); + const domainDB: Instance = bind(Domain); + let nameunwrappereventsDB: Instance = bind(Nameunwrapperevents); + + let account = await createorloadaccount(accountDB, owner, bind); + let domain = await createorloaddomain(domainDB,node, block.block_timestamp, bind); + domain.wrappedOwner = ""; + + if(domain.expiryDate && domain.parent != ETH_NODE){ + domain.expiryDate = null; + } + domain.save(); + + let nameunwrapperevent = await nameunwrappereventsDB.create({ + id: node, + blockNumber: block.block_number, + transactionID: transaction.transaction_hash, + owner: owner, + }); +}; diff --git a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts new file mode 100644 index 0000000..4da4db9 --- /dev/null +++ b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts @@ -0,0 +1,68 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Account, WrappedDomain, Domain, Namewrapperevents } from "../../types/schema"; +import { decodeName, createorloadaccount, createorloaddomain, checkPccBurned } from "../../utils/helper"; +import { ExpiryExtendedHandler } from "./ExpiryExtended"; + +/** + * @dev Event::NameWrapped(bytes32 node, bytes name, address owner, uint32 fuses, uint64 expiry) + * @param context trigger object with contains {event: {node ,name ,owner ,fuses ,expiry }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const NameWrappedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for NameWrapped here + + const { event, transaction, block, log } = context; + const { node, name, owner, fuses, expiry } = event; + + let decodedname = decodeName(name); + let label: string | null = null; + let decodename: string | null = null; + if (decodedname != null) { + label = decodedname[0]; + decodename = decodedname[1]; + } + + const accountDB: Instance = bind(Account); + const domainDB: Instance = bind(Domain); + const wrappeddomainDB: Instance = bind(WrappedDomain); + const namewrappereventsDB: Instance = bind(Namewrapperevents); + + let account = await createorloadaccount(accountDB, owner, bind); + let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + if (!domain.labelName && label) { + domain.labelName = label; + domain.name = decodename; + } + if( + checkPccBurned(fuses) && (!domain.expiryDate || expiry > domain.expiryDate!)){ + domain.expiryDate = expiry; + } + domain.wrappedOwner = account.id; + await domain.save(); + + let wrappeddomain = await wrappeddomainDB.create({ + id: domain.id, + expiryDate: expiry, + fuses: fuses, + name: decodename + }); + + let Namewrapperevents = await namewrappereventsDB.create({ + id: domain.id, + blockNumber: block.block_number, + transactionID: transaction.transaction_hash, + fuses: fuses, + expiryDate: expiry, + owner: owner + }); +}; diff --git a/DNS/ens/src/handlers/namewrapper/TransferBatch.ts b/DNS/ens/src/handlers/namewrapper/TransferBatch.ts new file mode 100644 index 0000000..af176f6 --- /dev/null +++ b/DNS/ens/src/handlers/namewrapper/TransferBatch.ts @@ -0,0 +1,54 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Account, Domain, WrappedDomain } from "../../types/schema"; +import { toHexString, createorloadaccount, createorloaddomain } from "../../utils/helper"; +/** + * @dev Event::TransferBatch(address operator, address from, address to, uint256[] ids, uint256[] values) + * @param context trigger object with contains {event: {operator ,from ,to ,ids ,values }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const TransferBatchHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for TransferBatch here + + const { event, transaction, block, log } = context; + const { operator, from, to, ids, values } = event; + + const accountDB: Instance = bind(Account); + const domainDB: Instance = bind(Domain); + + async function makeWrappedTransfer( + blocknumber: number, + transactionhash: string, + eventId: string, + node: any, + to: string + ){ + const _to = createorloadaccount(accountDB,to,bind); + const namehash = toHexString(node); + const domain = createorloaddomain(domainDB,namehash,block.block_timestamp,bind); + let wrappeDDomain = await bind(WrappedDomain).findOne({id: namehash }); + + if(wrappeDDomain == null){ + wrappeDDomain = await bind(WrappedDomain).create({ + id: namehash, + expiryDate: 0, + fuses: 0, + name: "", + events: [namehash, block.block_number, transaction.transaction_hash] + }); + } + } + + for (let i = 0; i < ids.length; i++) { + makeWrappedTransfer(block.block_number, transaction.transaction_hash, `${log.log_address}-${ids[i]}`, ids[i], to); + } +}; diff --git a/DNS/ens/src/handlers/namewrapper/TransferSingle.ts b/DNS/ens/src/handlers/namewrapper/TransferSingle.ts new file mode 100644 index 0000000..b2847ed --- /dev/null +++ b/DNS/ens/src/handlers/namewrapper/TransferSingle.ts @@ -0,0 +1,53 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Account,Domain, Registration, WrappedDomain , wrappedTransfer} from "../../types/schema"; +import { toHexString, createorloadaccount, createorloaddomain } from "../../utils/helper"; +/** + * @dev Event::TransferSingle(address operator, address from, address to, uint256 id, uint256 value) + * @param context trigger object with contains {event: {operator ,from ,to ,id ,value }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const TransferSingleHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for TransferSingle here + + const { event, transaction, block, log } = context; + const { operator, from, to, id, value } = event; + + const accountDB: Instance = bind(Account); + const domainDB: Instance = bind(Domain); + + async function makeWrappedTransfer( + blocknumber: number, + transactionhash: string, + eventId: string, + node: any, + to: string + ){ + const _to = createorloadaccount(accountDB,to,bind); + const namehash = toHexString(node); + const domain = createorloaddomain(domainDB,namehash,block.block_timestamp,bind); + let wrappeDDomain = await bind(WrappedDomain).findOne({id: namehash }); + + if(wrappeDDomain == null){ + wrappeDDomain = await bind(WrappedDomain).create({ + id: namehash, + expiryDate: 0, + fuses: 0, + name: "", + events: [namehash, block.block_number, transaction.transaction_hash] + }); + } + } + + makeWrappedTransfer(block.block_number, transaction.transaction_hash,log.log_address, id, to); +}; + diff --git a/DNS/ens/src/handlers/resolver/AddressChangedHandler/ContenthashChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/AddressChangedHandler/ContenthashChangedHandler/index.ts index 92e57b9..65d8900 100644 --- a/DNS/ens/src/handlers/resolver/AddressChangedHandler/ContenthashChangedHandler/index.ts +++ b/DNS/ens/src/handlers/resolver/AddressChangedHandler/ContenthashChangedHandler/index.ts @@ -4,8 +4,12 @@ import { createResolverID, createEventID, getResolver, -} from "../../../utils/helper"; -import { ContenthashChanged, IResolver, Resolver } from "../../../types/schema"; +} from "../../../../utils/helper"; +import { + ContenthashChanged, + IResolver, + Resolver, +} from "../../../../types/schema"; /** * @dev Event::ContenthashChanged(bytes32 node, bytes hash) diff --git a/DNS/ens/src/handlers/resolver/ContenthashChangedHandler/index.ts b/DNS/ens/src/handlers/resolver/ContenthashChangedHandler/index.ts new file mode 100644 index 0000000..325e155 --- /dev/null +++ b/DNS/ens/src/handlers/resolver/ContenthashChangedHandler/index.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::ContenthashChanged(bytes32 node, bytes hash) + * @param context trigger object with contains {event: {node ,hash }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ContenthashChangedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ContenthashChanged here + + const { event, transaction, block, log } = context; + const { node, hash } = event; +}; diff --git a/DNS/ens/src/handlers/transfer/NewOwner.ts b/DNS/ens/src/handlers/transfer/NewOwner.ts new file mode 100644 index 0000000..668faad --- /dev/null +++ b/DNS/ens/src/handlers/transfer/NewOwner.ts @@ -0,0 +1,38 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; +import { Account, Registration, Domain } from "../../types/schema"; + +/** + * @dev Event::NewOwner(bytes32 node, bytes32 label, address owner) + * @param context trigger object with contains {event: {node ,label ,owner }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const NewOwnerHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for NewOwner here + + const { event, transaction, block, log } = context; + const { node, label, owner } = event; + + let account = await bind(Account).create({ id: owner }); + let registration = await bind(Registration).create({ id: label }); + let domain = await bind(Domain).findOne({ id: node }); + + registration.domain = domain.id; + registration.registrationDate = block.block_timestamp; + registration.registrant = account.id; + registration.labelName = label; + + domain.registrant = owner; + domain.name = label + ".eth"; + + await domain.save(); + await registration.save(); +}; diff --git a/DNS/ens/src/handlers/transfer/NewResolver.ts b/DNS/ens/src/handlers/transfer/NewResolver.ts new file mode 100644 index 0000000..d4892d3 --- /dev/null +++ b/DNS/ens/src/handlers/transfer/NewResolver.ts @@ -0,0 +1,29 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; +import { Domain } from "../../types/schema"; +import { createorloaddomain } from "../../utils/helper"; + +/** + * @dev Event::NewResolver(bytes32 node, address resolver) + * @param context trigger object with contains {event: {node ,resolver }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const NewResolverHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for NewResolver here + + const { event, transaction, block, log } = context; + const { node, resolver } = event; + + const domainDB: Instance = bind(Domain); + let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + domain.resolver = resolver; + await domain.save(); +}; diff --git a/DNS/ens/src/handlers/transfer/NewTTL.ts b/DNS/ens/src/handlers/transfer/NewTTL.ts new file mode 100644 index 0000000..26bc98a --- /dev/null +++ b/DNS/ens/src/handlers/transfer/NewTTL.ts @@ -0,0 +1,30 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Domain } from "../../types/schema"; +import { createorloaddomain } from "../../utils/helper"; + +/** + * @dev Event::NewTTL(bytes32 node, uint64 ttl) + * @param context trigger object with contains {event: {node ,ttl }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const NewTTLHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for NewTTL here + + const { event, transaction, block, log } = context; + const { node, ttl } = event; + + const domainDB: Instance = bind(Domain); + let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + domain.ttl = ttl; + await domain.save(); +}; diff --git a/DNS/ens/src/handlers/transfer/Transfer.ts b/DNS/ens/src/handlers/transfer/Transfer.ts new file mode 100644 index 0000000..bd81f38 --- /dev/null +++ b/DNS/ens/src/handlers/transfer/Transfer.ts @@ -0,0 +1,34 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Domain, Account, Registration } from "../../types/schema"; + +import { createorloadaccount, createorloaddomain } from "../../utils/helper"; +/** + * @dev Event::Transfer(bytes32 node, address owner) + * @param context trigger object with contains {event: {node ,owner }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const TransferHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Transfer here + + const { event, transaction, block, log } = context; + const { node, owner } = event; + + const domainDB: Instance = bind(Domain); + const accountDB: Instance = bind(Account); + + const account =await createorloadaccount(accountDB, owner, bind); + const domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + domain.registrant = account.id; + domain.events = [node, transaction.transaction_hash]; + await domain.save(); +}; diff --git a/DNS/ens/src/types/schema.ts b/DNS/ens/src/types/schema.ts index 3394025..d501f11 100644 --- a/DNS/ens/src/types/schema.ts +++ b/DNS/ens/src/types/schema.ts @@ -16,6 +16,20 @@ export class Account { }; } +export class wrappedTransfer { + static entity = "wrappedTransfer"; + static schema = { + id: { type: "String", index: true }, + blockNumber: "Number", + transactionID: "string", + owner: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + export class Registration { static entity = "Registration"; static schema = { @@ -264,6 +278,17 @@ export interface IAccount extends Document { chainId: String; } +export interface IwrappedTransfer extends Document { + id: String; + blockNumber: Number; + transactionID: string; + owner: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + export interface IRegistration extends Document { id: String; domain: String; @@ -462,3 +487,16 @@ export interface IVersionChanged extends Document { instanceId: String; chainId: String; } + +type Namewrapperevents = { + id: String; + blockNumber: Number; + transactionID: String; +}; + +type Fusesburntevent = { + id: String; + fuses: any; + blockNumber: Number; + transactionID: String; +}; diff --git a/DNS/ens/src/utils/helper.ts b/DNS/ens/src/utils/helper.ts index 3d11b73..c1338a1 100644 --- a/DNS/ens/src/utils/helper.ts +++ b/DNS/ens/src/utils/helper.ts @@ -1,4 +1,5 @@ import { IEventContext, Instance } from "@blockflow-labs/utils"; +import { Domain, Account } from "../types/schema"; export function createResolverID(node: string, resolver: string): string { return resolver.concat("-").concat(node); @@ -27,3 +28,213 @@ export async function getResolver( return resolver; } + +export class Transferhelper { + // prettier-ignore + ROOT_NODE = "0x0000000000000000000000000000000000000000000000000000000000000000"; + EMPTY_ADDRESS = "0x0000000000000000000000000000000000000000"; + ACCOUNT: any; + DOMAIN: any; + TRANSFER: any; + + constructor(domain: any, account: any, transfer: any) { + this.DOMAIN = domain; + this.ACCOUNT = account; + this.TRANSFER = transfer; + } + + async createAccount(owner: string) { + await this.ACCOUNT.create({ id: owner.toLowerCase() }); + } + + async createTransfer(id: string) { + return await this.TRANSFER.create({ id: id.toLowerCase() }); + } + + async saveTransfer(data: any) { + await this.TRANSFER.save(data); + } + + async getDomain(node: string, timestamp: Number = 0) { + let domain = await this.DOMAIN.findOne({ id: node.toLowerCase() }); + if (!domain || node == this.ROOT_NODE) + return await this.createDomain(node, timestamp); + else return domain; + } + + async createDomain(node: string, timestamp: Number) { + let domain = await this.DOMAIN.create({ id: node.toLowerCase() }); + if (node == this.ROOT_NODE) { + domain.owner = this.EMPTY_ADDRESS; + domain.isMigrated = true; + domain.createdAt = timestamp; + domain.subdomainCount = 0; + } + + return domain; + } + + async saveDomain(domain: any) { + // await this.recurseDomainDelete(domain); + await this.DOMAIN.updateOne( + { id: domain.owner.toLowerCase() }, + domain, + ).exec(); + } + + async recurseDomainDelete(domain: any) { + if ( + (domain.resolver == null || + domain.resolver!.split("-")[0] == this.EMPTY_ADDRESS) && + domain.owner == this.EMPTY_ADDRESS && + domain.subdomainCount == 0 + ) { + const parentDomain = await this.DOMAIN.findOne({ + id: domain.parent.toLowerCase(), + }); + if (!parentDomain) { + parentDomain.subdomainCount = parentDomain.subdomainCount - 1; + await this.DOMAIN.updateOne( + { id: domain.parent.toLowerCase() }, + parentDomain, + ); + this.recurseDomainDelete(parentDomain); + } + } + } + + createEventID(context: IEventContext): string { + return context.block.block_number + .toString() + .concat("-") + .concat(context.log.log_index.toString()); + } +} + +export function decodeName(buf: Uint8Array): Array | null { + let offset = 0; + let list = new Uint8Array(0); + const dot = new Uint8Array([0x2e]); + let len = buf[offset++]; + let hex = Array.from(buf) + .map((byte) => byte.toString(16).padStart(2, "0")) + .join(""); + let firstLabel = ""; + + if (len === 0) { + return [firstLabel, "."]; + } + + function checkValidLabel(name: string | null): boolean { + if (name == null) { + return false; + } + for (let i = 0; i < name.length; i++) { + let charCode = name.charCodeAt(i); + if (charCode === 0) { + console.warn(`Invalid label '${name}' contained null byte. Skipping.`); + return false; + } else if (charCode === 46) { + console.warn( + `Invalid label '${name}' contained separator char '.'. Skipping.`, + ); + return false; + } else if (charCode === 91) { + console.warn(`Invalid label '${name}' contained char '['. Skipping.`); + return false; + } else if (charCode === 93) { + console.warn(`Invalid label '${name}' contained char ']'. Skipping.`); + return false; + } + } + return true; + } + + function concat(a: Uint8Array, b: Uint8Array): Uint8Array { + let c = new Uint8Array(a.length + b.length); + c.set(a); + c.set(b, a.length); + return c; + } + + while (len) { + let label = hex.slice((offset + 1) * 2, (offset + 1 + len) * 2); + let labelBytes = Uint8Array.from(Buffer.from(label, "hex")); + + if (!checkValidLabel(String.fromCharCode(...labelBytes))) { + return null; + } + + if (offset > 1) { + list = concat(list, dot); + } else { + firstLabel = String.fromCharCode(...labelBytes); + } + list = concat(list, labelBytes); + offset += len; + len = buf[offset++]; + } + return [firstLabel, String.fromCharCode(...list)]; +} + +export function toHexString(value: bigint): string { + return "0x" + value.toString(16).padStart(64, "0"); +} + +export async function createorloaddomain( + Domain: Instance, + node: string, + timestamp: String, + bind: Function +) { + let domainDB: Instance= bind(Domain); + let domain = await domainDB.findOne({ id: node.toLowerCase() }); + if (!domain) { + domain = await domainDB.create({ + id: node.toLowerCase(), + name: "", + labelName: "", + labelhash: "", + parent: "", + subdomains: [], + subdomainsCount: 0, + resolvedAddress: "", + owner: "", + resolver: "", + ttl: 0, + isMigrated: false, + createdAt: 0, + registrant: "", + wrappedOwner: "", + expiryDate: 0, + wrappedDomain: "", + events: [], + registration: "", + }); + domain.createdAt = timestamp; + } + return domain; +} + +export async function createorloadaccount( + Account: Instance, + owner: string, + bind: Function +) { + let accountDB: Instance= bind(Account); + let account = await accountDB.findOne({ id: owner.toLowerCase() }); + if (!account) { + account = await accountDB.create({ + id: owner.toLowerCase(), + domains: [], + wrappedDomains: [], + registrations: [], + }); + } + return account; +} + +export const PARENT_CANNOT_CONTROL = 65536; +export function checkPccBurned(fuses:any): boolean { + return (fuses & PARENT_CANNOT_CONTROL) == PARENT_CANNOT_CONTROL; +} diff --git a/DNS/ens/studio.schema.ts b/DNS/ens/studio.schema.ts index 2f7b617..0f748b1 100644 --- a/DNS/ens/studio.schema.ts +++ b/DNS/ens/studio.schema.ts @@ -7,6 +7,13 @@ interface Account { registrations: [String]; // registration ids } +interface wrappedTransfer { + id: String; + blockNumber: Number; + transactionID: string; + owner: string; +} + interface Registration { id: String; domain: String; @@ -145,3 +152,33 @@ interface VersionChanged { transactionID: String; version: Number; } + +type Namewrapperevents = { + id: String; + blockNumber: Number; + transactionID: String; + fuses: any; + expiryDate: any; + owner: String; +}; + +type Nameunwrapperevents= { + id: String; + blockNumber: Number; + transactionID: String; + owner: String; +}; + +type Fusesburntevent = { + id: String; + fuses: any; + blockNumber: Number; + transactionID: String; +}; + +type Expiryextendedevent = { + id: String; + expiryDate: Number; + blockNumber: Number; + transactionID: String; +} diff --git a/DNS/ens/studio.yaml b/DNS/ens/studio.yaml index 8926003..55d0f4d 100644 --- a/DNS/ens/studio.yaml +++ b/DNS/ens/studio.yaml @@ -9,38 +9,76 @@ execution: sequential schema: file: ./studio.schema.ts Resources: - - Name: ensRegistry - Abi: src/abis/ensRegistry.json - Type: contract/event - Address: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" - Triggers: - - Event: Transfer(bytes32 indexed,address) - Handler: src/handlers/ensRegistry/TransferHandler/index.TransferHandler - - Name: baseRegistrar - Abi: src/abis/BaseRegistrar.json - Type: contract/event - Address: "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85" - Triggers: - - Event: NameRegistered(uint256 indexed,address indexed,uint256) - Handler: src/handlers/BaseRegistrar/NameRegisteredHandler/index.NameRegisteredHandler - - Name: resolver - Abi: src/abis/resolver.json - Type: contract/event - Address: "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" # public resolver 2 - Triggers: + - Name: ensRegistry + Abi: src/abis/ensRegistry.json + Type: contract/event + Address: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + Triggers: + - Event: Transfer(bytes32 indexed,address) + Handler: src/handlers/ensRegistry/TransferHandler/index.TransferHandler + - Name: baseRegistrar + Abi: src/abis/BaseRegistrar.json + Type: contract/event + Address: "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85" + Triggers: + - Event: NameRegistered(uint256 indexed,address indexed,uint256) + Handler: >- + src/handlers/BaseRegistrar/NameRegisteredHandler/index.NameRegisteredHandler + - Name: resolver + Abi: src/abis/resolver.json + Type: contract/event + Address: "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" + Triggers: - Event: ABIChanged(bytes32 indexed,uint256 indexed) Handler: src/handlers/resolver/ABIChangedHandler/index.ABIChangedHandler - Event: AddrChanged(bytes32 indexed,address) Handler: src/handlers/resolver/AddrChangedHandler/index.AddrChangedHandler - Event: AddressChanged(bytes32 indexed,uint256,bytes) - Handler: src/handlers/resolver/AddressChangedHandler/index.AddressChangedHandler + Handler: >- + src/handlers/resolver/AddressChangedHandler/index.AddressChangedHandler - Event: ContenthashChanged(bytes32 indexed,bytes) - Handler: src/handlers/resolver/ContenthashChangedHandler/index.ContenthashChangedHandler + Handler: >- + src/handlers/resolver/ContenthashChangedHandler/index.ContenthashChangedHandler - Event: InterfaceChanged(bytes32 indexed,bytes4 indexed,address) - Handler: src/handlers/resolver/InterfaceChangedHandler/index.InterfaceChangedHandler + Handler: >- + src/handlers/resolver/InterfaceChangedHandler/index.InterfaceChangedHandler - Event: NameChanged(bytes32 indexed,string) Handler: src/handlers/resolver/NameChangedHandler/index.NameChangedHandler - Event: PubkeyChanged(bytes32 indexed,bytes32,bytes32) Handler: src/handlers/resolver/PubkeyChangedHandler/index.PubkeyChangedHandler - Event: TextChanged(bytes32 indexed,string indexed,string) Handler: src/handlers/resolver/TextChangedHandler/index.TextChangedHandler + - Name: namewrapper + Abi: src/abis/namewrapper.json + Type: contract/event + Address: "0xD4416b13d2b3a9aBae7AcD5D6C2BbDBE25686401" + Triggers: + - Event: ExpiryExtended(bytes32 indexed,uint64) + Handler: src/handlers/namewrapper/ExpiryExtended.ExpiryExtendedHandler + - Event: FusesSet(bytes32 indexed,uint32) + Handler: src/handlers/namewrapper/FusesSet.FusesSetHandler + - Event: NameUnwrapped(bytes32 indexed,address) + Handler: src/handlers/namewrapper/NameUnwrapped.NameUnwrappedHandler + - Event: NameWrapped(bytes32 indexed,bytes,address,uint32,uint64) + Handler: src/handlers/namewrapper/NameWrapped.NameWrappedHandler + - Event: >- + TransferBatch(address indexed,address indexed,address + indexed,uint256[],uint256[]) + Handler: src/handlers/namewrapper/TransferBatch.TransferBatchHandler + - Event: >- + TransferSingle(address indexed,address indexed,address + indexed,uint256,uint256) + Handler: src/handlers/namewrapper/TransferSingle.TransferSingleHandler + - Name: transfer + Abi: src/abis/transfer.json + Type: contract/event + Address: "0x314159265dd8dbb310642f98f50c066173c1259b" + Triggers: + - Event: Transfer(bytes32 indexed,address) + Handler: src/handlers/blockflow/Transfer.TransferHandler + - Event: NewOwner(bytes32 indexed,bytes32 indexed,address) + Handler: src/handlers/blockflow/NewOwner.NewOwnerHandler + - Event: NewResolver(bytes32 indexed,address) + Handler: src/handlers/blockflow/NewResolver.NewResolverHandler + - Event: NewTTL(bytes32 indexed,uint64) + Handler: src/handlers/blockflow/NewTTL.NewTTLHandler From 972496ebb447c4db1f4e5871cf2861273f5502ab Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 2 Jul 2024 22:16:26 +0530 Subject: [PATCH 06/22] minor fixes Signed-off-by: d4v1d03 --- .../handlers/namewrapper/ExpiryExtended.ts | 6 +- DNS/ens/src/handlers/namewrapper/FusesSet.ts | 6 +- .../src/handlers/namewrapper/NameUnwrapped.ts | 4 +- .../src/handlers/namewrapper/NameWrapped.ts | 2 +- DNS/ens/src/types/schema.ts | 101 +++++++++++++++++- DNS/ens/studio.schema.ts | 20 ++-- DNS/ens/studio.yaml | 8 +- 7 files changed, 121 insertions(+), 26 deletions(-) diff --git a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts index 43e9a0b..9677038 100644 --- a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts +++ b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts @@ -23,8 +23,10 @@ export const ExpiryExtendedHandler = async ( const { node, expiry } = event; let domainDB : Instance = bind(Domain); - - let wrappeddoamin = await bind(WrappedDomain).findOne({ id: node }); + let wrappeddoaminDB: Instance = bind(WrappedDomain); + let wrappeddoamin = await wrappeddoaminDB.findOne({ + id: node + }); wrappeddoamin.expiryDate = expiry; wrappeddoamin.events = [ node, diff --git a/DNS/ens/src/handlers/namewrapper/FusesSet.ts b/DNS/ens/src/handlers/namewrapper/FusesSet.ts index dba845b..c245a9d 100644 --- a/DNS/ens/src/handlers/namewrapper/FusesSet.ts +++ b/DNS/ens/src/handlers/namewrapper/FusesSet.ts @@ -24,8 +24,10 @@ export const FusesSetHandler = async ( const { node, fuses } = event; const domainDB : Instance = bind(Domain); - - let wrappeddoamin = await bind(WrappedDomain).findOne({ id: node }); + let wrappeddomainDB : Instance = bind(WrappedDomain); + let wrappeddoamin = await wrappeddomainDB.findOne({ + id: node + }); wrappeddoamin.fuses = fuses; wrappeddoamin.events = [ node, diff --git a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts index 2600d4b..f806548 100644 --- a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts @@ -38,8 +38,8 @@ export const NameUnwrappedHandler = async ( domain.expiryDate = null; } domain.save(); - - let nameunwrapperevent = await nameunwrappereventsDB.create({ + + let nameunwrapperevent = await nameunwrappereventsDB.create({ id: node, blockNumber: block.block_number, transactionID: transaction.transaction_hash, diff --git a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts index 4da4db9..309bbde 100644 --- a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts @@ -57,7 +57,7 @@ export const NameWrappedHandler = async ( name: decodename }); - let Namewrapperevents = await namewrappereventsDB.create({ + let namewrapperevents = await namewrappereventsDB.create({ id: domain.id, blockNumber: block.block_number, transactionID: transaction.transaction_hash, diff --git a/DNS/ens/src/types/schema.ts b/DNS/ens/src/types/schema.ts index d501f11..5d03298 100644 --- a/DNS/ens/src/types/schema.ts +++ b/DNS/ens/src/types/schema.ts @@ -265,6 +265,64 @@ export class VersionChanged { }; } +export class Namewrapperevents { + static entity = "Namewrapperevents"; + static schema = { + id: { type: "String", index: true }, + blockNumber: "Number", + transactionID: "String", + fuses: "Number", + expiryDate: "Number", + owner: "String", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Nameunwrapperevents { + static entity = "Nameunwrapperevents"; + static schema = { + id: { type: "String", index: true }, + blockNumber: "Number", + transactionID: "String", + owner: "String", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Fusesburntevent { + static entity = "Fusesburntevent"; + static schema = { + id: { type: "String", index: true }, + fuses: "Number", + blockNumber: "Number", + transactionID: "String", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Expiryextendedevent { + static entity = "Expiryextendedevent"; + static schema = { + id: { type: "String", index: true }, + expiryDate: "Number", + blockNumber: "Number", + transactionID: "String", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + import { String, Array, Number } from "@blockflow-labs/utils"; export interface IAccount extends Document { @@ -488,15 +546,48 @@ export interface IVersionChanged extends Document { chainId: String; } -type Namewrapperevents = { +export interface INamewrapperevents extends Document { id: String; blockNumber: Number; transactionID: String; -}; + fuses: Number; + expiryDate: Number; + owner: String; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} -type Fusesburntevent = { +export interface INameunwrapperevents extends Document { id: String; - fuses: any; blockNumber: Number; transactionID: String; -}; + owner: String; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IFusesburntevent extends Document { + id: String; + fuses: Number; + blockNumber: Number; + transactionID: String; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IExpiryextendedevent extends Document { + id: String; + expiryDate: Number; + blockNumber: Number; + transactionID: String; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/DNS/ens/studio.schema.ts b/DNS/ens/studio.schema.ts index 0f748b1..7e7a23b 100644 --- a/DNS/ens/studio.schema.ts +++ b/DNS/ens/studio.schema.ts @@ -2,9 +2,9 @@ import { String, Array, Number } from "@blockflow-labs/utils"; interface Account { id: String; - domains: [String]; // domain ids - wrappedDomains: [String]; // wrapped domain ids - registrations: [String]; // registration ids + domains: [String]; + wrappedDomains: [String]; + registrations: [String]; } interface wrappedTransfer { @@ -153,30 +153,30 @@ interface VersionChanged { version: Number; } -type Namewrapperevents = { +interface Namewrapperevents { id: String; blockNumber: Number; transactionID: String; - fuses: any; - expiryDate: any; + fuses: Number; + expiryDate: Number; owner: String; }; -type Nameunwrapperevents= { +interface Nameunwrapperevents { id: String; blockNumber: Number; transactionID: String; owner: String; }; -type Fusesburntevent = { +interface Fusesburntevent { id: String; - fuses: any; + fuses: Number; blockNumber: Number; transactionID: String; }; -type Expiryextendedevent = { +interface Expiryextendedevent { id: String; expiryDate: Number; blockNumber: Number; diff --git a/DNS/ens/studio.yaml b/DNS/ens/studio.yaml index 55d0f4d..45de22f 100644 --- a/DNS/ens/studio.yaml +++ b/DNS/ens/studio.yaml @@ -75,10 +75,10 @@ Resources: Address: "0x314159265dd8dbb310642f98f50c066173c1259b" Triggers: - Event: Transfer(bytes32 indexed,address) - Handler: src/handlers/blockflow/Transfer.TransferHandler + Handler: src/handlers/transfer/Transfer.TransferHandler - Event: NewOwner(bytes32 indexed,bytes32 indexed,address) - Handler: src/handlers/blockflow/NewOwner.NewOwnerHandler + Handler: src/handlers/transfer/NewOwner.NewOwnerHandler - Event: NewResolver(bytes32 indexed,address) - Handler: src/handlers/blockflow/NewResolver.NewResolverHandler + Handler: src/handlers/transfer/NewResolver.NewResolverHandler - Event: NewTTL(bytes32 indexed,uint64) - Handler: src/handlers/blockflow/NewTTL.NewTTLHandler + Handler: src/handlers/transfer/NewTTL.NewTTLHandler From 3b6b2c699292a73ae096c40e4af712b1903817f2 Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 2 Jul 2024 23:06:15 +0530 Subject: [PATCH 07/22] fixed errors Signed-off-by: d4v1d03 --- .../ensRegistry/NewOwnerHandler/index.ts | 37 +++++-------------- .../ensRegistry/NewResolverHandler/index.ts | 16 ++++---- .../ensRegistry/NewTTLHandler/index.ts | 10 +++-- .../handlers/namewrapper/ExpiryExtended.ts | 2 +- DNS/ens/src/handlers/namewrapper/FusesSet.ts | 2 +- .../src/handlers/namewrapper/NameUnwrapped.ts | 2 +- .../src/handlers/namewrapper/NameWrapped.ts | 2 +- DNS/ens/src/handlers/transfer/NewOwner.ts | 9 +++-- DNS/ens/src/handlers/transfer/NewResolver.ts | 2 +- DNS/ens/src/handlers/transfer/NewTTL.ts | 2 +- DNS/ens/src/handlers/transfer/Transfer.ts | 2 +- DNS/ens/src/types/schema.ts | 6 +-- 12 files changed, 41 insertions(+), 51 deletions(-) diff --git a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts index 60997e9..8c77fb9 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts @@ -1,7 +1,8 @@ -import { IEventContext } from "@blockflow-labs/utils"; +import { IEventContext , Instance} from "@blockflow-labs/utils"; import { Domain, WrappedDomain } from "../../../types/schema"; import { resolveAddress } from "ethers"; +import { createorloaddomain } from "../../../utils/helper"; /** * @dev Event::NewOwner(bytes32 node, bytes32 label, address owner) * @param context trigger object with contains {event: {node ,label ,owner }, transaction, block, log} @@ -16,31 +17,11 @@ export const NewOwnerHandler = async ( const { event, transaction, block, log } = context; const { node, label, owner } = event; - const domain = await bind(Domain).findOne({ id: node.toLowerCase() }); - if (!domain) { - await bind(Domain).create({ - id: node.toLowerCase(), - name: "", - labelName: label.toString(), - labelhash: "", - parent: node.toString(), - subdomainCount: 0, - resolvedAddress: "", - owner: owner.toString(), - resolver: "", - ttl: null, - isMigrated: false, - createdAt: block.block_timestamp, - registrant: "", - wrappedOwner: "", - expiryDate: null, - WrappedDomain: "", - events: [node, transaction.transaction_hash, block.block_number], - registration: "", - //do i need to fill all other entries of domain DB??? while creating - }); - } else { - domain.owner = owner.toString(); - await domain.save(); - } + const domainDB : Instance = bind(Domain); + + let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + domain.owner = owner; + domain.label = label; + domain.name = label + ".eth"; + await domainDB.save(domain); }; diff --git a/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts index fdb3e0a..3a648f5 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewResolverHandler/index.ts @@ -1,4 +1,4 @@ -import { IEventContext } from "@blockflow-labs/utils"; +import { IEventContext, Instance } from "@blockflow-labs/utils"; import { Domain, Resolver } from "../../../types/schema"; /** @@ -15,10 +15,12 @@ export const NewResolverHandler = async ( const { event, transaction, block, log } = context; const { node, resolver } = event; + const domainDB: Instance = bind(Domain); + const id = resolver.toString() + "-" + node.toLowerCase(); - let domainDB = await bind(Domain).findOne({ id: node.toLowerCase() }); - domainDB.resolver = id; + let domain = await bind(Domain).findOne({ id: node.toLowerCase() }); + domain.resolver = id; let resolverDB = await bind(Resolver).findOne({ id: id }); if (!resolverDB) { @@ -28,10 +30,10 @@ export const NewResolverHandler = async ( domain: node.toLowerCase(), events: [resolver, transaction.transaction_hash], }); - domainDB.resolvedAddress = ""; - domainDB.events = [node, transaction.transaction_hash, block.block_number]; + domain.resolvedAddress = ""; + domain.events = [node, transaction.transaction_hash, block.block_number]; } else { - domainDB.resolvedAddress = resolverDB.addr; + domain.resolvedAddress = resolverDB.addr; } - await domainDB.save(); + await domainDB.save(domain); }; diff --git a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts index 271e21e..7edc230 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts @@ -1,4 +1,4 @@ -import { IEventContext } from "@blockflow-labs/utils"; +import { IEventContext, Instance } from "@blockflow-labs/utils"; import { Domain } from "../../../types/schema"; /** * @dev Event::NewTTL(bytes32 node, uint64 ttl) @@ -11,7 +11,11 @@ export const NewTTLHandler = async (context: IEventContext, bind: Function) => { const { event, transaction, block, log } = context; const { node, ttl } = event; - const domain = await bind(Domain).findOne({ id: node.toLowerCase() }); + const domainDB: Instance = bind(Domain); + + const domain = await bind(Domain).findOne({ + id: node.toLowerCase() + }); if (!domain) { await bind(Domain).create({ id: node.toLowerCase(), @@ -20,6 +24,6 @@ export const NewTTLHandler = async (context: IEventContext, bind: Function) => { }); } else { domain.ttl = ttl.toString(); - await domain.save(); + await domainDB.save(domain); } }; diff --git a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts index 9677038..d6c7895 100644 --- a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts +++ b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts @@ -38,7 +38,7 @@ if(checkPccBurned(wrappeddoamin.fuses)){ let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); if(!domain.expiryDate || expiry> domain.expiryDate){ domain.expiryDate = expiry; - domain.save(); + domainDB.save(domain); } } let expiryExtendedEvent: Instance = bind(Expiryextendedevent); diff --git a/DNS/ens/src/handlers/namewrapper/FusesSet.ts b/DNS/ens/src/handlers/namewrapper/FusesSet.ts index c245a9d..f4cb092 100644 --- a/DNS/ens/src/handlers/namewrapper/FusesSet.ts +++ b/DNS/ens/src/handlers/namewrapper/FusesSet.ts @@ -39,7 +39,7 @@ export const FusesSetHandler = async ( let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); if(!domain.expiryDate || wrappeddoamin.expiryDate > domain.expiryDate){ domain.expiryDate = wrappeddoamin.expiryDate; - await domain.save(); + await domainDB.save(domain); } } let fusesburnteventDB: Instance = bind(Fusesburntevent); diff --git a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts index f806548..42e64df 100644 --- a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts @@ -37,7 +37,7 @@ export const NameUnwrappedHandler = async ( if(domain.expiryDate && domain.parent != ETH_NODE){ domain.expiryDate = null; } - domain.save(); + domainDB.save(domain); let nameunwrapperevent = await nameunwrappereventsDB.create({ id: node, diff --git a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts index 309bbde..de81fb0 100644 --- a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts @@ -48,7 +48,7 @@ export const NameWrappedHandler = async ( domain.expiryDate = expiry; } domain.wrappedOwner = account.id; - await domain.save(); + await domainDB.save(domain); let wrappeddomain = await wrappeddomainDB.create({ id: domain.id, diff --git a/DNS/ens/src/handlers/transfer/NewOwner.ts b/DNS/ens/src/handlers/transfer/NewOwner.ts index 668faad..c4e961f 100644 --- a/DNS/ens/src/handlers/transfer/NewOwner.ts +++ b/DNS/ens/src/handlers/transfer/NewOwner.ts @@ -5,6 +5,7 @@ import { ISecrets, } from "@blockflow-labs/utils"; import { Account, Registration, Domain } from "../../types/schema"; +import { createorloaddomain } from "../../utils/helper"; /** * @dev Event::NewOwner(bytes32 node, bytes32 label, address owner) @@ -20,10 +21,12 @@ export const NewOwnerHandler = async ( const { event, transaction, block, log } = context; const { node, label, owner } = event; + const domainDB: Instance = bind(Domain); + const registrationDB: Instance = bind(Registration); let account = await bind(Account).create({ id: owner }); let registration = await bind(Registration).create({ id: label }); - let domain = await bind(Domain).findOne({ id: node }); + let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); registration.domain = domain.id; registration.registrationDate = block.block_timestamp; @@ -33,6 +36,6 @@ export const NewOwnerHandler = async ( domain.registrant = owner; domain.name = label + ".eth"; - await domain.save(); - await registration.save(); + await domainDB.save(domain); + await registrationDB.save(registration); }; diff --git a/DNS/ens/src/handlers/transfer/NewResolver.ts b/DNS/ens/src/handlers/transfer/NewResolver.ts index d4892d3..eaae62b 100644 --- a/DNS/ens/src/handlers/transfer/NewResolver.ts +++ b/DNS/ens/src/handlers/transfer/NewResolver.ts @@ -25,5 +25,5 @@ export const NewResolverHandler = async ( const domainDB: Instance = bind(Domain); let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); domain.resolver = resolver; - await domain.save(); + await domainDB.save(domain); }; diff --git a/DNS/ens/src/handlers/transfer/NewTTL.ts b/DNS/ens/src/handlers/transfer/NewTTL.ts index 26bc98a..a209e1c 100644 --- a/DNS/ens/src/handlers/transfer/NewTTL.ts +++ b/DNS/ens/src/handlers/transfer/NewTTL.ts @@ -26,5 +26,5 @@ export const NewTTLHandler = async ( const domainDB: Instance = bind(Domain); let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); domain.ttl = ttl; - await domain.save(); + await domainDB.save(domain); }; diff --git a/DNS/ens/src/handlers/transfer/Transfer.ts b/DNS/ens/src/handlers/transfer/Transfer.ts index bd81f38..2e2f5f7 100644 --- a/DNS/ens/src/handlers/transfer/Transfer.ts +++ b/DNS/ens/src/handlers/transfer/Transfer.ts @@ -30,5 +30,5 @@ export const TransferHandler = async ( const domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); domain.registrant = account.id; domain.events = [node, transaction.transaction_hash]; - await domain.save(); + await domainDB.save(domain); }; diff --git a/DNS/ens/src/types/schema.ts b/DNS/ens/src/types/schema.ts index 5d03298..6417e8e 100644 --- a/DNS/ens/src/types/schema.ts +++ b/DNS/ens/src/types/schema.ts @@ -327,9 +327,9 @@ import { String, Array, Number } from "@blockflow-labs/utils"; export interface IAccount extends Document { id: String; - domains: [String]; // domain ids - wrappedDomains: [String]; // wrapped domain ids - registrations: [String]; // registration ids + domains: [String]; + wrappedDomains: [String]; + registrations: [String]; blocknumber: String; entityId: String; instanceId: String; From e14d66d128abe3b47c26f3a044b7510195d2cbc5 Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 2 Jul 2024 23:19:18 +0530 Subject: [PATCH 08/22] spellcheck fixes Signed-off-by: d4v1d03 --- .../src/handlers/namewrapper/ExpiryExtended.ts | 9 ++++++--- DNS/ens/src/handlers/namewrapper/FusesSet.ts | 16 ++++++++-------- .../src/handlers/namewrapper/NameUnwrapped.ts | 2 +- DNS/ens/src/handlers/namewrapper/NameWrapped.ts | 2 -- DNS/ens/src/handlers/transfer/Transfer.ts | 2 +- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts index d6c7895..89420da 100644 --- a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts +++ b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts @@ -23,8 +23,9 @@ export const ExpiryExtendedHandler = async ( const { node, expiry } = event; let domainDB : Instance = bind(Domain); - let wrappeddoaminDB: Instance = bind(WrappedDomain); - let wrappeddoamin = await wrappeddoaminDB.findOne({ + let wrappeddomainDB: Instance = bind(WrappedDomain); + + let wrappeddoamin = await wrappeddomainDB.findOne({ id: node }); wrappeddoamin.expiryDate = expiry; @@ -33,7 +34,8 @@ export const ExpiryExtendedHandler = async ( block.block_number, transaction.transaction_hash, ]; - await wrappeddoamin.save(); + await wrappeddomainDB.save(wrappeddoamin); + if(checkPccBurned(wrappeddoamin.fuses)){ let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); if(!domain.expiryDate || expiry> domain.expiryDate){ @@ -41,6 +43,7 @@ if(checkPccBurned(wrappeddoamin.fuses)){ domainDB.save(domain); } } + let expiryExtendedEvent: Instance = bind(Expiryextendedevent); let expiryevent = await bind(Expiryextendedevent).create({ id: node, diff --git a/DNS/ens/src/handlers/namewrapper/FusesSet.ts b/DNS/ens/src/handlers/namewrapper/FusesSet.ts index f4cb092..1d5562c 100644 --- a/DNS/ens/src/handlers/namewrapper/FusesSet.ts +++ b/DNS/ens/src/handlers/namewrapper/FusesSet.ts @@ -24,21 +24,21 @@ export const FusesSetHandler = async ( const { node, fuses } = event; const domainDB : Instance = bind(Domain); - let wrappeddomainDB : Instance = bind(WrappedDomain); - let wrappeddoamin = await wrappeddomainDB.findOne({ + const wrappeddomainDB : Instance = bind(WrappedDomain); + let wrappeddomain = await wrappeddomainDB.findOne({ id: node }); - wrappeddoamin.fuses = fuses; - wrappeddoamin.events = [ + wrappeddomain.fuses = fuses; + wrappeddomain.events = [ node, block.block_number, transaction.transaction_hash, ]; - await wrappeddoamin.save(); - if(wrappeddoamin.expiryDate && checkPccBurned(wrappeddoamin.fuses)){ + await wrappeddomainDB.save(wrappeddomain); + if(wrappeddomain.expiryDate && checkPccBurned(wrappeddomain.fuses)){ let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); - if(!domain.expiryDate || wrappeddoamin.expiryDate > domain.expiryDate){ - domain.expiryDate = wrappeddoamin.expiryDate; + if(!domain.expiryDate || wrappeddomain.expiryDate > domain.expiryDate){ + domain.expiryDate = wrappeddomain.expiryDate; await domainDB.save(domain); } } diff --git a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts index 42e64df..13f9ed7 100644 --- a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts @@ -28,7 +28,7 @@ export const NameUnwrappedHandler = async ( const accountDB: Instance = bind(Account); const domainDB: Instance = bind(Domain); - let nameunwrappereventsDB: Instance = bind(Nameunwrapperevents); + const nameunwrappereventsDB: Instance = bind(Nameunwrapperevents); let account = await createorloadaccount(accountDB, owner, bind); let domain = await createorloaddomain(domainDB,node, block.block_timestamp, bind); diff --git a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts index de81fb0..4708fbc 100644 --- a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts @@ -7,8 +7,6 @@ import { import { Account, WrappedDomain, Domain, Namewrapperevents } from "../../types/schema"; import { decodeName, createorloadaccount, createorloaddomain, checkPccBurned } from "../../utils/helper"; -import { ExpiryExtendedHandler } from "./ExpiryExtended"; - /** * @dev Event::NameWrapped(bytes32 node, bytes name, address owner, uint32 fuses, uint64 expiry) * @param context trigger object with contains {event: {node ,name ,owner ,fuses ,expiry }, transaction, block, log} diff --git a/DNS/ens/src/handlers/transfer/Transfer.ts b/DNS/ens/src/handlers/transfer/Transfer.ts index 2e2f5f7..c9bf43d 100644 --- a/DNS/ens/src/handlers/transfer/Transfer.ts +++ b/DNS/ens/src/handlers/transfer/Transfer.ts @@ -26,7 +26,7 @@ export const TransferHandler = async ( const domainDB: Instance = bind(Domain); const accountDB: Instance = bind(Account); - const account =await createorloadaccount(accountDB, owner, bind); + const account = await createorloadaccount(accountDB, owner, bind); const domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); domain.registrant = account.id; domain.events = [node, transaction.transaction_hash]; From 7928e07418569464edc6057c580a44679ac73bef Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 2 Jul 2024 23:25:47 +0530 Subject: [PATCH 09/22] used prettier Signed-off-by: d4v1d03 --- DNS/ens/.gitignore | 3 +- DNS/ens/package-lock.json | 8 +-- DNS/ens/package.json | 8 +-- .../NameRegisteredHandler/index.ts | 30 ++++++++--- .../ensRegistry/NewOwnerHandler/index.ts | 11 ++-- .../ensRegistry/NewTTLHandler/index.ts | 4 +- .../handlers/namewrapper/ExpiryExtended.ts | 47 +++++++++------- DNS/ens/src/handlers/namewrapper/FusesSet.ts | 26 +++++---- .../src/handlers/namewrapper/NameUnwrapped.ts | 21 +++++--- .../src/handlers/namewrapper/NameWrapped.ts | 39 ++++++++++---- .../src/handlers/namewrapper/TransferBatch.ts | 37 +++++++++---- .../handlers/namewrapper/TransferSingle.ts | 48 ++++++++++++----- DNS/ens/src/handlers/transfer/NewOwner.ts | 7 ++- DNS/ens/src/handlers/transfer/NewResolver.ts | 7 ++- DNS/ens/src/handlers/transfer/NewTTL.ts | 7 ++- DNS/ens/src/handlers/transfer/Transfer.ts | 11 ++-- DNS/ens/src/utils/helper.ts | 54 +++++++++---------- 17 files changed, 241 insertions(+), 127 deletions(-) diff --git a/DNS/ens/.gitignore b/DNS/ens/.gitignore index be35064..fd951b7 100644 --- a/DNS/ens/.gitignore +++ b/DNS/ens/.gitignore @@ -1,4 +1,5 @@ node_modules build dist -notes \ No newline at end of file +notes +.prettierrc diff --git a/DNS/ens/package-lock.json b/DNS/ens/package-lock.json index c3f8dd4..59a0714 100644 --- a/DNS/ens/package-lock.json +++ b/DNS/ens/package-lock.json @@ -12,7 +12,7 @@ }, "devDependencies": { "bignumber.js": "^9.1.1", - "prettier": "^3.0.3", + "prettier": "^3.3.2", "ts-loader": "^9.5.0", "typescript": "^5.1.6", "webpack": "^5.89.0", @@ -1219,9 +1219,9 @@ } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" diff --git a/DNS/ens/package.json b/DNS/ens/package.json index 8785fe5..1604372 100644 --- a/DNS/ens/package.json +++ b/DNS/ens/package.json @@ -10,11 +10,11 @@ "@blockflow-labs/utils": "^1.0.7" }, "devDependencies": { - "typescript": "^5.1.6", "bignumber.js": "^9.1.1", - "prettier": "^3.0.3", + "prettier": "^3.3.2", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", "webpack": "^5.89.0", - "webpack-cli": "^5.1.4", - "ts-loader": "^9.5.0" + "webpack-cli": "^5.1.4" } } diff --git a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts index d7b7350..580d059 100644 --- a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts +++ b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts @@ -18,14 +18,28 @@ export const NameRegisteredHandler = async ( const isoDate = new Date(Number(block.block_timestamp) * 1000).toISOString(); const registrationDB: Instance = bind(Registration); - await registrationDB.create({ + + let registration = await registrationDB.findOne({ id: id.toString(), - domain: "", - registrationDate: isoDate, - expiryDate: expires.toString(), - cost: "", - registrant: owner, - labelName: "", - events: [], }); + registration.registrant = owner; + registration.events = [ + id.toString(), + block.block_number, + transaction.transaction_hash, + ]; + await registrationDB.save(registration); + + if (registration) { + await registrationDB.create({ + id: id.toString(), + domain: "", + registrationDate: isoDate, + expiryDate: expires.toString(), + cost: "", + registrant: owner, + labelName: "", + events: [], + }); + } }; diff --git a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts index 8c77fb9..ce7012f 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewOwnerHandler/index.ts @@ -1,4 +1,4 @@ -import { IEventContext , Instance} from "@blockflow-labs/utils"; +import { IEventContext, Instance } from "@blockflow-labs/utils"; import { Domain, WrappedDomain } from "../../../types/schema"; import { resolveAddress } from "ethers"; @@ -17,9 +17,14 @@ export const NewOwnerHandler = async ( const { event, transaction, block, log } = context; const { node, label, owner } = event; - const domainDB : Instance = bind(Domain); + const domainDB: Instance = bind(Domain); - let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); domain.owner = owner; domain.label = label; domain.name = label + ".eth"; diff --git a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts index 7edc230..3e20e1a 100644 --- a/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts +++ b/DNS/ens/src/handlers/ensRegistry/NewTTLHandler/index.ts @@ -14,8 +14,8 @@ export const NewTTLHandler = async (context: IEventContext, bind: Function) => { const domainDB: Instance = bind(Domain); const domain = await bind(Domain).findOne({ - id: node.toLowerCase() - }); + id: node.toLowerCase(), + }); if (!domain) { await bind(Domain).create({ id: node.toLowerCase(), diff --git a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts index 89420da..66fee17 100644 --- a/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts +++ b/DNS/ens/src/handlers/namewrapper/ExpiryExtended.ts @@ -5,8 +5,12 @@ import { ISecrets, } from "@blockflow-labs/utils"; -import { WrappedDomain, Domain, Expiryextendedevent} from "../../types/schema"; -import { createorloaddomain, checkPccBurned, PARENT_CANNOT_CONTROL } from "../../utils/helper"; +import { WrappedDomain, Domain, Expiryextendedevent } from "../../types/schema"; +import { + createorloaddomain, + checkPccBurned, + PARENT_CANNOT_CONTROL, +} from "../../utils/helper"; /** * @dev Event::ExpiryExtended(bytes32 node, uint64 expiry) * @param context trigger object with contains {event: {node ,expiry }, transaction, block, log} @@ -22,12 +26,12 @@ export const ExpiryExtendedHandler = async ( const { event, transaction, block, log } = context; const { node, expiry } = event; - let domainDB : Instance = bind(Domain); + let domainDB: Instance = bind(Domain); let wrappeddomainDB: Instance = bind(WrappedDomain); - let wrappeddoamin = await wrappeddomainDB.findOne({ - id: node - }); + let wrappeddoamin = await wrappeddomainDB.findOne({ + id: node, + }); wrappeddoamin.expiryDate = expiry; wrappeddoamin.events = [ node, @@ -36,19 +40,24 @@ export const ExpiryExtendedHandler = async ( ]; await wrappeddomainDB.save(wrappeddoamin); -if(checkPccBurned(wrappeddoamin.fuses)){ - let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); - if(!domain.expiryDate || expiry> domain.expiryDate){ - domain.expiryDate = expiry; - domainDB.save(domain); + if (checkPccBurned(wrappeddoamin.fuses)) { + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); + if (!domain.expiryDate || expiry > domain.expiryDate) { + domain.expiryDate = expiry; + domainDB.save(domain); + } } -} -let expiryExtendedEvent: Instance = bind(Expiryextendedevent); -let expiryevent = await bind(Expiryextendedevent).create({ - id: node, - expiry: expiry, - blockNumber: block.block_number, - transactionID: transaction.transaction_hash, -}); + let expiryExtendedEvent: Instance = bind(Expiryextendedevent); + let expiryevent = await bind(Expiryextendedevent).create({ + id: node, + expiry: expiry, + blockNumber: block.block_number, + transactionID: transaction.transaction_hash, + }); }; diff --git a/DNS/ens/src/handlers/namewrapper/FusesSet.ts b/DNS/ens/src/handlers/namewrapper/FusesSet.ts index 1d5562c..de2a9ad 100644 --- a/DNS/ens/src/handlers/namewrapper/FusesSet.ts +++ b/DNS/ens/src/handlers/namewrapper/FusesSet.ts @@ -6,7 +6,11 @@ import { } from "@blockflow-labs/utils"; import { WrappedDomain, Domain, Fusesburntevent } from "../../types/schema"; -import { createorloaddomain, checkPccBurned, PARENT_CANNOT_CONTROL } from "../../utils/helper"; +import { + createorloaddomain, + checkPccBurned, + PARENT_CANNOT_CONTROL, +} from "../../utils/helper"; /** * @dev Event::FusesSet(bytes32 node, uint32 fuses) @@ -23,10 +27,10 @@ export const FusesSetHandler = async ( const { event, transaction, block, log } = context; const { node, fuses } = event; - const domainDB : Instance = bind(Domain); - const wrappeddomainDB : Instance = bind(WrappedDomain); - let wrappeddomain = await wrappeddomainDB.findOne({ - id: node + const domainDB: Instance = bind(Domain); + const wrappeddomainDB: Instance = bind(WrappedDomain); + let wrappeddomain = await wrappeddomainDB.findOne({ + id: node, }); wrappeddomain.fuses = fuses; wrappeddomain.events = [ @@ -35,9 +39,14 @@ export const FusesSetHandler = async ( transaction.transaction_hash, ]; await wrappeddomainDB.save(wrappeddomain); - if(wrappeddomain.expiryDate && checkPccBurned(wrappeddomain.fuses)){ - let domain = await createorloaddomain(domainDB,node,block.block_timestamp,bind); - if(!domain.expiryDate || wrappeddomain.expiryDate > domain.expiryDate){ + if (wrappeddomain.expiryDate && checkPccBurned(wrappeddomain.fuses)) { + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); + if (!domain.expiryDate || wrappeddomain.expiryDate > domain.expiryDate) { domain.expiryDate = wrappeddomain.expiryDate; await domainDB.save(domain); } @@ -49,5 +58,4 @@ export const FusesSetHandler = async ( blockNumber: block.block_number, transactionID: transaction.transaction_hash, }); - }; diff --git a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts index 13f9ed7..0310543 100644 --- a/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameUnwrapped.ts @@ -24,25 +24,30 @@ export const NameUnwrappedHandler = async ( const { node, owner } = event; const ETH_NODE = - "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"; + "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"; const accountDB: Instance = bind(Account); const domainDB: Instance = bind(Domain); const nameunwrappereventsDB: Instance = bind(Nameunwrapperevents); let account = await createorloadaccount(accountDB, owner, bind); - let domain = await createorloaddomain(domainDB,node, block.block_timestamp, bind); + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); domain.wrappedOwner = ""; - if(domain.expiryDate && domain.parent != ETH_NODE){ + if (domain.expiryDate && domain.parent != ETH_NODE) { domain.expiryDate = null; } domainDB.save(domain); - + let nameunwrapperevent = await nameunwrappereventsDB.create({ - id: node, - blockNumber: block.block_number, - transactionID: transaction.transaction_hash, - owner: owner, + id: node, + blockNumber: block.block_number, + transactionID: transaction.transaction_hash, + owner: owner, }); }; diff --git a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts index 4708fbc..17ae873 100644 --- a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts @@ -5,8 +5,18 @@ import { ISecrets, } from "@blockflow-labs/utils"; -import { Account, WrappedDomain, Domain, Namewrapperevents } from "../../types/schema"; -import { decodeName, createorloadaccount, createorloaddomain, checkPccBurned } from "../../utils/helper"; +import { + Account, + WrappedDomain, + Domain, + Namewrapperevents, +} from "../../types/schema"; +import { + decodeName, + createorloadaccount, + createorloaddomain, + checkPccBurned, +} from "../../utils/helper"; /** * @dev Event::NameWrapped(bytes32 node, bytes name, address owner, uint32 fuses, uint64 expiry) * @param context trigger object with contains {event: {node ,name ,owner ,fuses ,expiry }, transaction, block, log} @@ -36,23 +46,30 @@ export const NameWrappedHandler = async ( const namewrappereventsDB: Instance = bind(Namewrapperevents); let account = await createorloadaccount(accountDB, owner, bind); - let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); if (!domain.labelName && label) { domain.labelName = label; domain.name = decodename; } - if( - checkPccBurned(fuses) && (!domain.expiryDate || expiry > domain.expiryDate!)){ - domain.expiryDate = expiry; - } - domain.wrappedOwner = account.id; - await domainDB.save(domain); + if ( + checkPccBurned(fuses) && + (!domain.expiryDate || expiry > domain.expiryDate!) + ) { + domain.expiryDate = expiry; + } + domain.wrappedOwner = account.id; + await domainDB.save(domain); let wrappeddomain = await wrappeddomainDB.create({ id: domain.id, expiryDate: expiry, fuses: fuses, - name: decodename + name: decodename, }); let namewrapperevents = await namewrappereventsDB.create({ @@ -61,6 +78,6 @@ export const NameWrappedHandler = async ( transactionID: transaction.transaction_hash, fuses: fuses, expiryDate: expiry, - owner: owner + owner: owner, }); }; diff --git a/DNS/ens/src/handlers/namewrapper/TransferBatch.ts b/DNS/ens/src/handlers/namewrapper/TransferBatch.ts index af176f6..628e615 100644 --- a/DNS/ens/src/handlers/namewrapper/TransferBatch.ts +++ b/DNS/ens/src/handlers/namewrapper/TransferBatch.ts @@ -6,7 +6,11 @@ import { } from "@blockflow-labs/utils"; import { Account, Domain, WrappedDomain } from "../../types/schema"; -import { toHexString, createorloadaccount, createorloaddomain } from "../../utils/helper"; +import { + toHexString, + createorloadaccount, + createorloaddomain, +} from "../../utils/helper"; /** * @dev Event::TransferBatch(address operator, address from, address to, uint256[] ids, uint256[] values) * @param context trigger object with contains {event: {operator ,from ,to ,ids ,values }, transaction, block, log} @@ -30,25 +34,36 @@ export const TransferBatchHandler = async ( transactionhash: string, eventId: string, node: any, - to: string - ){ - const _to = createorloadaccount(accountDB,to,bind); - const namehash = toHexString(node); - const domain = createorloaddomain(domainDB,namehash,block.block_timestamp,bind); - let wrappeDDomain = await bind(WrappedDomain).findOne({id: namehash }); + to: string, + ) { + const _to = createorloadaccount(accountDB, to, bind); + const namehash = toHexString(node); + const domain = createorloaddomain( + domainDB, + namehash, + block.block_timestamp, + bind, + ); + let wrappeDDomain = await bind(WrappedDomain).findOne({ id: namehash }); - if(wrappeDDomain == null){ + if (wrappeDDomain == null) { wrappeDDomain = await bind(WrappedDomain).create({ id: namehash, expiryDate: 0, fuses: 0, name: "", - events: [namehash, block.block_number, transaction.transaction_hash] + events: [namehash, block.block_number, transaction.transaction_hash], }); } } - + for (let i = 0; i < ids.length; i++) { - makeWrappedTransfer(block.block_number, transaction.transaction_hash, `${log.log_address}-${ids[i]}`, ids[i], to); + makeWrappedTransfer( + block.block_number, + transaction.transaction_hash, + `${log.log_address}-${ids[i]}`, + ids[i], + to, + ); } }; diff --git a/DNS/ens/src/handlers/namewrapper/TransferSingle.ts b/DNS/ens/src/handlers/namewrapper/TransferSingle.ts index b2847ed..080e048 100644 --- a/DNS/ens/src/handlers/namewrapper/TransferSingle.ts +++ b/DNS/ens/src/handlers/namewrapper/TransferSingle.ts @@ -5,8 +5,18 @@ import { ISecrets, } from "@blockflow-labs/utils"; -import { Account,Domain, Registration, WrappedDomain , wrappedTransfer} from "../../types/schema"; -import { toHexString, createorloadaccount, createorloaddomain } from "../../utils/helper"; +import { + Account, + Domain, + Registration, + WrappedDomain, + wrappedTransfer, +} from "../../types/schema"; +import { + toHexString, + createorloadaccount, + createorloaddomain, +} from "../../utils/helper"; /** * @dev Event::TransferSingle(address operator, address from, address to, uint256 id, uint256 value) * @param context trigger object with contains {event: {operator ,from ,to ,id ,value }, transaction, block, log} @@ -25,29 +35,39 @@ export const TransferSingleHandler = async ( const accountDB: Instance = bind(Account); const domainDB: Instance = bind(Domain); - async function makeWrappedTransfer( + async function makeWrappedTransfer( blocknumber: number, transactionhash: string, eventId: string, node: any, - to: string - ){ - const _to = createorloadaccount(accountDB,to,bind); - const namehash = toHexString(node); - const domain = createorloaddomain(domainDB,namehash,block.block_timestamp,bind); - let wrappeDDomain = await bind(WrappedDomain).findOne({id: namehash }); + to: string, + ) { + const _to = createorloadaccount(accountDB, to, bind); + const namehash = toHexString(node); + const domain = createorloaddomain( + domainDB, + namehash, + block.block_timestamp, + bind, + ); + let wrappeDDomain = await bind(WrappedDomain).findOne({ id: namehash }); - if(wrappeDDomain == null){ + if (wrappeDDomain == null) { wrappeDDomain = await bind(WrappedDomain).create({ id: namehash, expiryDate: 0, fuses: 0, name: "", - events: [namehash, block.block_number, transaction.transaction_hash] + events: [namehash, block.block_number, transaction.transaction_hash], }); } } - - makeWrappedTransfer(block.block_number, transaction.transaction_hash,log.log_address, id, to); -}; + makeWrappedTransfer( + block.block_number, + transaction.transaction_hash, + log.log_address, + id, + to, + ); +}; diff --git a/DNS/ens/src/handlers/transfer/NewOwner.ts b/DNS/ens/src/handlers/transfer/NewOwner.ts index c4e961f..a410702 100644 --- a/DNS/ens/src/handlers/transfer/NewOwner.ts +++ b/DNS/ens/src/handlers/transfer/NewOwner.ts @@ -26,7 +26,12 @@ export const NewOwnerHandler = async ( let account = await bind(Account).create({ id: owner }); let registration = await bind(Registration).create({ id: label }); - let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); registration.domain = domain.id; registration.registrationDate = block.block_timestamp; diff --git a/DNS/ens/src/handlers/transfer/NewResolver.ts b/DNS/ens/src/handlers/transfer/NewResolver.ts index eaae62b..413f6c2 100644 --- a/DNS/ens/src/handlers/transfer/NewResolver.ts +++ b/DNS/ens/src/handlers/transfer/NewResolver.ts @@ -23,7 +23,12 @@ export const NewResolverHandler = async ( const { node, resolver } = event; const domainDB: Instance = bind(Domain); - let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); domain.resolver = resolver; await domainDB.save(domain); }; diff --git a/DNS/ens/src/handlers/transfer/NewTTL.ts b/DNS/ens/src/handlers/transfer/NewTTL.ts index a209e1c..c133c34 100644 --- a/DNS/ens/src/handlers/transfer/NewTTL.ts +++ b/DNS/ens/src/handlers/transfer/NewTTL.ts @@ -24,7 +24,12 @@ export const NewTTLHandler = async ( const { node, ttl } = event; const domainDB: Instance = bind(Domain); - let domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + let domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); domain.ttl = ttl; await domainDB.save(domain); }; diff --git a/DNS/ens/src/handlers/transfer/Transfer.ts b/DNS/ens/src/handlers/transfer/Transfer.ts index c9bf43d..e894d1e 100644 --- a/DNS/ens/src/handlers/transfer/Transfer.ts +++ b/DNS/ens/src/handlers/transfer/Transfer.ts @@ -22,12 +22,17 @@ export const TransferHandler = async ( const { event, transaction, block, log } = context; const { node, owner } = event; - + const domainDB: Instance = bind(Domain); const accountDB: Instance = bind(Account); - const account = await createorloadaccount(accountDB, owner, bind); - const domain = await createorloaddomain(domainDB, node, block.block_timestamp, bind); + const account = await createorloadaccount(accountDB, owner, bind); + const domain = await createorloaddomain( + domainDB, + node, + block.block_timestamp, + bind, + ); domain.registrant = account.id; domain.events = [node, transaction.transaction_hash]; await domainDB.save(domain); diff --git a/DNS/ens/src/utils/helper.ts b/DNS/ens/src/utils/helper.ts index c1338a1..5c1c343 100644 --- a/DNS/ens/src/utils/helper.ts +++ b/DNS/ens/src/utils/helper.ts @@ -185,32 +185,32 @@ export async function createorloaddomain( Domain: Instance, node: string, timestamp: String, - bind: Function + bind: Function, ) { - let domainDB: Instance= bind(Domain); + let domainDB: Instance = bind(Domain); let domain = await domainDB.findOne({ id: node.toLowerCase() }); if (!domain) { domain = await domainDB.create({ - id: node.toLowerCase(), - name: "", - labelName: "", - labelhash: "", - parent: "", - subdomains: [], - subdomainsCount: 0, - resolvedAddress: "", - owner: "", - resolver: "", - ttl: 0, - isMigrated: false, - createdAt: 0, - registrant: "", - wrappedOwner: "", - expiryDate: 0, - wrappedDomain: "", - events: [], - registration: "", - }); + id: node.toLowerCase(), + name: "", + labelName: "", + labelhash: "", + parent: "", + subdomains: [], + subdomainsCount: 0, + resolvedAddress: "", + owner: "", + resolver: "", + ttl: 0, + isMigrated: false, + createdAt: 0, + registrant: "", + wrappedOwner: "", + expiryDate: 0, + wrappedDomain: "", + events: [], + registration: "", + }); domain.createdAt = timestamp; } return domain; @@ -219,22 +219,22 @@ export async function createorloaddomain( export async function createorloadaccount( Account: Instance, owner: string, - bind: Function + bind: Function, ) { - let accountDB: Instance= bind(Account); + let accountDB: Instance = bind(Account); let account = await accountDB.findOne({ id: owner.toLowerCase() }); if (!account) { - account = await accountDB.create({ + account = await accountDB.create({ id: owner.toLowerCase(), domains: [], wrappedDomains: [], registrations: [], - }); + }); } return account; } export const PARENT_CANNOT_CONTROL = 65536; -export function checkPccBurned(fuses:any): boolean { +export function checkPccBurned(fuses: any): boolean { return (fuses & PARENT_CANNOT_CONTROL) == PARENT_CANNOT_CONTROL; } From a7e437800449ce637fc16dc17a08205012dcea1b Mon Sep 17 00:00:00 2001 From: pradyuman-verma Date: Wed, 3 Jul 2024 18:06:01 +0530 Subject: [PATCH 10/22] fixes Signed-off-by: pradyuman-verma --- DNS/ens/package-lock.json | 92 +++++++++++++++++++- DNS/ens/package.json | 3 +- DNS/ens/src/handlers/transfer/NewOwner.ts | 4 +- DNS/ens/src/handlers/transfer/NewResolver.ts | 4 +- DNS/ens/src/handlers/transfer/Transfer.ts | 11 ++- DNS/ens/src/utils/helper.ts | 15 ++-- DNS/ens/studio.schema.ts | 14 +-- 7 files changed, 119 insertions(+), 24 deletions(-) diff --git a/DNS/ens/package-lock.json b/DNS/ens/package-lock.json index 59a0714..e803228 100644 --- a/DNS/ens/package-lock.json +++ b/DNS/ens/package-lock.json @@ -8,7 +8,8 @@ "name": "blockflow-studio", "version": "1.0.4", "dependencies": { - "@blockflow-labs/utils": "^1.0.7" + "@blockflow-labs/utils": "^1.0.7", + "ethers": "^6.13.1" }, "devDependencies": { "bignumber.js": "^9.1.1", @@ -19,6 +20,11 @@ "webpack-cli": "^5.1.4" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, "node_modules/@blockflow-labs/utils": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7.tgz", @@ -102,6 +108,28 @@ "sparse-bitfield": "^3.0.3" } }, + "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/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/@types/eslint": { "version": "8.56.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", @@ -379,6 +407,11 @@ "acorn": "^8" } }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -699,6 +732,38 @@ "node": ">=4.0" } }, + "node_modules/ethers": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", + "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@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", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -1564,6 +1629,11 @@ "webpack": "^5.0.0" } }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, "node_modules/typescript": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", @@ -1800,6 +1870,26 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "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/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/DNS/ens/package.json b/DNS/ens/package.json index 1604372..04f5ff1 100644 --- a/DNS/ens/package.json +++ b/DNS/ens/package.json @@ -7,7 +7,8 @@ "deploy-resolver": "blockflow instance-deploy" }, "dependencies": { - "@blockflow-labs/utils": "^1.0.7" + "@blockflow-labs/utils": "^1.0.7", + "ethers": "^6.13.1" }, "devDependencies": { "bignumber.js": "^9.1.1", diff --git a/DNS/ens/src/handlers/transfer/NewOwner.ts b/DNS/ens/src/handlers/transfer/NewOwner.ts index a410702..cefe102 100644 --- a/DNS/ens/src/handlers/transfer/NewOwner.ts +++ b/DNS/ens/src/handlers/transfer/NewOwner.ts @@ -15,7 +15,7 @@ import { createorloaddomain } from "../../utils/helper"; export const NewOwnerHandler = async ( context: IEventContext, bind: IBind, - secrets: ISecrets, + secrets: ISecrets ) => { // Implement your event handler logic for NewOwner here @@ -30,7 +30,7 @@ export const NewOwnerHandler = async ( domainDB, node, block.block_timestamp, - bind, + bind ); registration.domain = domain.id; diff --git a/DNS/ens/src/handlers/transfer/NewResolver.ts b/DNS/ens/src/handlers/transfer/NewResolver.ts index 413f6c2..c8555e7 100644 --- a/DNS/ens/src/handlers/transfer/NewResolver.ts +++ b/DNS/ens/src/handlers/transfer/NewResolver.ts @@ -15,7 +15,7 @@ import { createorloaddomain } from "../../utils/helper"; export const NewResolverHandler = async ( context: IEventContext, bind: IBind, - secrets: ISecrets, + secrets: ISecrets ) => { // Implement your event handler logic for NewResolver here @@ -27,7 +27,7 @@ export const NewResolverHandler = async ( domainDB, node, block.block_timestamp, - bind, + bind ); domain.resolver = resolver; await domainDB.save(domain); diff --git a/DNS/ens/src/handlers/transfer/Transfer.ts b/DNS/ens/src/handlers/transfer/Transfer.ts index e894d1e..698d6b7 100644 --- a/DNS/ens/src/handlers/transfer/Transfer.ts +++ b/DNS/ens/src/handlers/transfer/Transfer.ts @@ -16,7 +16,7 @@ import { createorloadaccount, createorloaddomain } from "../../utils/helper"; export const TransferHandler = async ( context: IEventContext, bind: IBind, - secrets: ISecrets, + secrets: ISecrets ) => { // Implement your event handler logic for Transfer here @@ -31,9 +31,14 @@ export const TransferHandler = async ( domainDB, node, block.block_timestamp, - bind, + bind ); domain.registrant = account.id; - domain.events = [node, transaction.transaction_hash]; + domain.events.push({ + domain: node, + transactionID: transaction.transaction_hash, + blockNumber: block.block_number, + }); + await domainDB.save(domain); }; diff --git a/DNS/ens/src/utils/helper.ts b/DNS/ens/src/utils/helper.ts index 5c1c343..b30747a 100644 --- a/DNS/ens/src/utils/helper.ts +++ b/DNS/ens/src/utils/helper.ts @@ -15,7 +15,7 @@ export function createEventID(context: IEventContext): string { export async function getResolver( node: string, address: string, - resolverDB: Instance, + resolverDB: Instance ) { let id = createResolverID(node, address); let resolver = await resolverDB.findOne({ id: id.toLowerCase() }); @@ -78,7 +78,7 @@ export class Transferhelper { // await this.recurseDomainDelete(domain); await this.DOMAIN.updateOne( { id: domain.owner.toLowerCase() }, - domain, + domain ).exec(); } @@ -96,7 +96,7 @@ export class Transferhelper { parentDomain.subdomainCount = parentDomain.subdomainCount - 1; await this.DOMAIN.updateOne( { id: domain.parent.toLowerCase() }, - parentDomain, + parentDomain ); this.recurseDomainDelete(parentDomain); } @@ -136,7 +136,7 @@ export function decodeName(buf: Uint8Array): Array | null { return false; } else if (charCode === 46) { console.warn( - `Invalid label '${name}' contained separator char '.'. Skipping.`, + `Invalid label '${name}' contained separator char '.'. Skipping.` ); return false; } else if (charCode === 91) { @@ -182,12 +182,11 @@ export function toHexString(value: bigint): string { } export async function createorloaddomain( - Domain: Instance, + domainDB: Instance, node: string, timestamp: String, - bind: Function, + bind: Function ) { - let domainDB: Instance = bind(Domain); let domain = await domainDB.findOne({ id: node.toLowerCase() }); if (!domain) { domain = await domainDB.create({ @@ -219,7 +218,7 @@ export async function createorloaddomain( export async function createorloadaccount( Account: Instance, owner: string, - bind: Function, + bind: Function ) { let accountDB: Instance = bind(Account); let account = await accountDB.findOne({ id: owner.toLowerCase() }); diff --git a/DNS/ens/studio.schema.ts b/DNS/ens/studio.schema.ts index 7e7a23b..7790958 100644 --- a/DNS/ens/studio.schema.ts +++ b/DNS/ens/studio.schema.ts @@ -2,9 +2,9 @@ import { String, Array, Number } from "@blockflow-labs/utils"; interface Account { id: String; - domains: [String]; - wrappedDomains: [String]; - registrations: [String]; + domains: [String]; + wrappedDomains: [String]; + registrations: [String]; } interface wrappedTransfer { @@ -153,28 +153,28 @@ interface VersionChanged { version: Number; } -interface Namewrapperevents { +interface Namewrapperevents { id: String; blockNumber: Number; transactionID: String; fuses: Number; expiryDate: Number; owner: String; -}; +} interface Nameunwrapperevents { id: String; blockNumber: Number; transactionID: String; owner: String; -}; +} interface Fusesburntevent { id: String; fuses: Number; blockNumber: Number; transactionID: String; -}; +} interface Expiryextendedevent { id: String; From e02ed086ffcc4330250c02ebfff9a075934b34a9 Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 9 Jul 2024 18:27:30 +0530 Subject: [PATCH 11/22] fixed Signed-off-by: d4v1d03 --- .../NameRegisteredHandler/index.ts | 23 ++++---- .../handlers/namewrapper/TransferSingle.ts | 42 +++++--------- DNS/ens/src/handlers/transfer/NewOwner.ts | 7 ++- DNS/ens/src/types/schema.ts | 4 +- DNS/ens/src/utils/helper.ts | 57 +++++++++---------- DNS/ens/studio.schema.ts | 2 +- 6 files changed, 62 insertions(+), 73 deletions(-) diff --git a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts index 580d059..d2a3bc2 100644 --- a/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts +++ b/DNS/ens/src/handlers/BaseRegistrar/NameRegisteredHandler/index.ts @@ -15,6 +15,7 @@ export const NameRegisteredHandler = async ( const { event, transaction, block, log } = context; const { id, owner, expires } = event; + const isoDate = new Date(Number(block.block_timestamp) * 1000).toISOString(); const registrationDB: Instance = bind(Registration); @@ -22,24 +23,24 @@ export const NameRegisteredHandler = async ( let registration = await registrationDB.findOne({ id: id.toString(), }); - registration.registrant = owner; - registration.events = [ - id.toString(), - block.block_number, - transaction.transaction_hash, - ]; - await registrationDB.save(registration); - - if (registration) { + if (!registration) { await registrationDB.create({ id: id.toString(), domain: "", - registrationDate: isoDate, + registrationDate: isoDate.toString(), expiryDate: expires.toString(), cost: "", registrant: owner, labelName: "", - events: [], }); } + else{ + registration.registrant = owner; + registration.events.push({ + id:id.toString(), + blockNumber:block.block_number, + transactionID:transaction.transaction_hash, + }); + await registrationDB.save(registration); + } }; diff --git a/DNS/ens/src/handlers/namewrapper/TransferSingle.ts b/DNS/ens/src/handlers/namewrapper/TransferSingle.ts index 080e048..19cb50f 100644 --- a/DNS/ens/src/handlers/namewrapper/TransferSingle.ts +++ b/DNS/ens/src/handlers/namewrapper/TransferSingle.ts @@ -4,7 +4,6 @@ import { Instance, ISecrets, } from "@blockflow-labs/utils"; - import { Account, Domain, @@ -28,46 +27,35 @@ export const TransferSingleHandler = async ( secrets: ISecrets, ) => { // Implement your event handler logic for TransferSingle here - const { event, transaction, block, log } = context; const { operator, from, to, id, value } = event; - const accountDB: Instance = bind(Account); const domainDB: Instance = bind(Domain); - - async function makeWrappedTransfer( - blocknumber: number, - transactionhash: string, - eventId: string, - node: any, - to: string, - ) { + const wrappeddomainDB: Instance = bind(WrappedDomain); const _to = createorloadaccount(accountDB, to, bind); - const namehash = toHexString(node); + const namehash = toHexString(operator); const domain = createorloaddomain( domainDB, namehash, block.block_timestamp, bind, ); - let wrappeDDomain = await bind(WrappedDomain).findOne({ id: namehash }); - - if (wrappeDDomain == null) { - wrappeDDomain = await bind(WrappedDomain).create({ + let wrappeDDomain = await wrappeddomainDB.findOne({ + id:namehash + }); + wrappeDDomain ??= + await wrappeddomainDB.create({ id: namehash, expiryDate: 0, fuses: 0, name: "", - events: [namehash, block.block_number, transaction.transaction_hash], }); - } - } - - makeWrappedTransfer( - block.block_number, - transaction.transaction_hash, - log.log_address, - id, - to, - ); }; + + + + + + + + diff --git a/DNS/ens/src/handlers/transfer/NewOwner.ts b/DNS/ens/src/handlers/transfer/NewOwner.ts index cefe102..543ed7a 100644 --- a/DNS/ens/src/handlers/transfer/NewOwner.ts +++ b/DNS/ens/src/handlers/transfer/NewOwner.ts @@ -5,7 +5,7 @@ import { ISecrets, } from "@blockflow-labs/utils"; import { Account, Registration, Domain } from "../../types/schema"; -import { createorloaddomain } from "../../utils/helper"; +import { createorloadaccount, createorloaddomain } from "../../utils/helper"; /** * @dev Event::NewOwner(bytes32 node, bytes32 label, address owner) @@ -21,11 +21,12 @@ export const NewOwnerHandler = async ( const { event, transaction, block, log } = context; const { node, label, owner } = event; + const accountDB: Instance = bind(Account); const domainDB: Instance = bind(Domain); const registrationDB: Instance = bind(Registration); - let account = await bind(Account).create({ id: owner }); - let registration = await bind(Registration).create({ id: label }); + let account = await createorloadaccount(accountDB, owner, bind); + let registration = await bind(Registration).create({id: label}); let domain = await createorloaddomain( domainDB, node, diff --git a/DNS/ens/src/types/schema.ts b/DNS/ens/src/types/schema.ts index 6417e8e..49e64a4 100644 --- a/DNS/ens/src/types/schema.ts +++ b/DNS/ens/src/types/schema.ts @@ -35,7 +35,7 @@ export class Registration { static schema = { id: { type: "String", index: true }, domain: "String", - registrationDate: "Number", + registrationDate: "String", expiryDate: "Number", cost: "Number", registrant: "String", @@ -350,7 +350,7 @@ export interface IwrappedTransfer extends Document { export interface IRegistration extends Document { id: String; domain: String; - registrationDate: Number; + registrationDate: String; expiryDate: Number; cost: Number; registrant: String; diff --git a/DNS/ens/src/utils/helper.ts b/DNS/ens/src/utils/helper.ts index b30747a..d914bec 100644 --- a/DNS/ens/src/utils/helper.ts +++ b/DNS/ens/src/utils/helper.ts @@ -125,30 +125,30 @@ export function decodeName(buf: Uint8Array): Array | null { return [firstLabel, "."]; } - function checkValidLabel(name: string | null): boolean { - if (name == null) { - return false; - } - for (let i = 0; i < name.length; i++) { - let charCode = name.charCodeAt(i); - if (charCode === 0) { - console.warn(`Invalid label '${name}' contained null byte. Skipping.`); - return false; - } else if (charCode === 46) { - console.warn( - `Invalid label '${name}' contained separator char '.'. Skipping.` - ); - return false; - } else if (charCode === 91) { - console.warn(`Invalid label '${name}' contained char '['. Skipping.`); - return false; - } else if (charCode === 93) { - console.warn(`Invalid label '${name}' contained char ']'. Skipping.`); - return false; - } - } - return true; - } + // function checkValidLabel(name: string | null): boolean { + // if (name == null) { + // return false; + // } + // for (let i = 0; i < name.length; i++) { + // let charCode = name.charCodeAt(i); + // if (charCode === 0) { + // console.warn(`Invalid label '${name}' contained null byte. Skipping.`); + // return false; + // } else if (charCode === 46) { + // console.warn( + // `Invalid label '${name}' contained separator char '.'. Skipping.` + // ); + // return false; + // } else if (charCode === 91) { + // console.warn(`Invalid label '${name}' contained char '['. Skipping.`); + // return false; + // } else if (charCode === 93) { + // console.warn(`Invalid label '${name}' contained char ']'. Skipping.`); + // return false; + // } + // } + // return true; + // } function concat(a: Uint8Array, b: Uint8Array): Uint8Array { let c = new Uint8Array(a.length + b.length); @@ -161,9 +161,9 @@ export function decodeName(buf: Uint8Array): Array | null { let label = hex.slice((offset + 1) * 2, (offset + 1 + len) * 2); let labelBytes = Uint8Array.from(Buffer.from(label, "hex")); - if (!checkValidLabel(String.fromCharCode(...labelBytes))) { - return null; - } + // if (!checkValidLabel(String.fromCharCode(...labelBytes))) { + // return null; + // } if (offset > 1) { list = concat(list, dot); @@ -216,11 +216,10 @@ export async function createorloaddomain( } export async function createorloadaccount( - Account: Instance, + accountDB: Instance, owner: string, bind: Function ) { - let accountDB: Instance = bind(Account); let account = await accountDB.findOne({ id: owner.toLowerCase() }); if (!account) { account = await accountDB.create({ diff --git a/DNS/ens/studio.schema.ts b/DNS/ens/studio.schema.ts index 7790958..3163ede 100644 --- a/DNS/ens/studio.schema.ts +++ b/DNS/ens/studio.schema.ts @@ -17,7 +17,7 @@ interface wrappedTransfer { interface Registration { id: String; domain: String; - registrationDate: Number; + registrationDate: String; expiryDate: Number; cost: Number; registrant: String; From ffdfc67dd5c681d5ce9ad8e4f158d8a8c5643b54 Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 9 Jul 2024 18:54:09 +0530 Subject: [PATCH 12/22] decodename fixes Signed-off-by: d4v1d03 --- .../src/handlers/namewrapper/NameWrapped.ts | 3 + DNS/ens/src/utils/helper.ts | 79 +++++++------------ 2 files changed, 30 insertions(+), 52 deletions(-) diff --git a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts index 17ae873..505519f 100644 --- a/DNS/ens/src/handlers/namewrapper/NameWrapped.ts +++ b/DNS/ens/src/handlers/namewrapper/NameWrapped.ts @@ -35,6 +35,9 @@ export const NameWrappedHandler = async ( let decodedname = decodeName(name); let label: string | null = null; let decodename: string | null = null; + if(!decodedname){ + return ; + } if (decodedname != null) { label = decodedname[0]; decodename = decodedname[1]; diff --git a/DNS/ens/src/utils/helper.ts b/DNS/ens/src/utils/helper.ts index d914bec..14a36cc 100644 --- a/DNS/ens/src/utils/helper.ts +++ b/DNS/ens/src/utils/helper.ts @@ -111,72 +111,47 @@ export class Transferhelper { } } -export function decodeName(buf: Uint8Array): Array | null { +export function decodeName(buf: Uint8Array): string | false { let offset = 0; - let list = new Uint8Array(0); - const dot = new Uint8Array([0x2e]); let len = buf[offset++]; - let hex = Array.from(buf) - .map((byte) => byte.toString(16).padStart(2, "0")) - .join(""); - let firstLabel = ""; + let name = ""; if (len === 0) { - return [firstLabel, "."]; + return ""; } - // function checkValidLabel(name: string | null): boolean { - // if (name == null) { - // return false; - // } - // for (let i = 0; i < name.length; i++) { - // let charCode = name.charCodeAt(i); - // if (charCode === 0) { - // console.warn(`Invalid label '${name}' contained null byte. Skipping.`); - // return false; - // } else if (charCode === 46) { - // console.warn( - // `Invalid label '${name}' contained separator char '.'. Skipping.` - // ); - // return false; - // } else if (charCode === 91) { - // console.warn(`Invalid label '${name}' contained char '['. Skipping.`); - // return false; - // } else if (charCode === 93) { - // console.warn(`Invalid label '${name}' contained char ']'. Skipping.`); - // return false; - // } - // } - // return true; - // } - - function concat(a: Uint8Array, b: Uint8Array): Uint8Array { - let c = new Uint8Array(a.length + b.length); - c.set(a); - c.set(b, a.length); - return c; + function checkValidLabel(labelBytes: Uint8Array): boolean { + for (let i = 0; i < labelBytes.length; i++) { + let byte = labelBytes[i]; + if (byte === 0 || byte === 46 || byte === 91 || byte === 93) { + return false; + } + } + return true; } - while (len) { - let label = hex.slice((offset + 1) * 2, (offset + 1 + len) * 2); - let labelBytes = Uint8Array.from(Buffer.from(label, "hex")); + while (len > 0 && offset < buf.length) { + let labelHex = Array.from(buf.slice(offset, offset + len)) + .map((byte) => byte.toString(16).padStart(2, "0")) + .join(""); + let labelBytes = new Uint8Array(Buffer.from(labelHex, "hex")); - // if (!checkValidLabel(String.fromCharCode(...labelBytes))) { - // return null; - // } - - if (offset > 1) { - list = concat(list, dot); - } else { - firstLabel = String.fromCharCode(...labelBytes); + if (!checkValidLabel(labelBytes)) { + return false; } - list = concat(list, labelBytes); + + let labelString = new TextDecoder().decode(labelBytes); + name += labelString + "."; offset += len; len = buf[offset++]; } - return [firstLabel, String.fromCharCode(...list)]; -} + if (name.endsWith(".")) { + name = name.slice(0, -1); + } + + return name; +} export function toHexString(value: bigint): string { return "0x" + value.toString(16).padStart(64, "0"); } From c5c10e12398d4d45d833a0261c84ee50416635eb Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Fri, 12 Jul 2024 02:01:53 +0530 Subject: [PATCH 13/22] added snapshot Signed-off-by: d4v1d03 --- snapshot/.env.example | 1 + snapshot/.gitignore | 4 + snapshot/.studioignore | 3 + snapshot/README.md | 95 + snapshot/package-lock.json | 1792 +++++++++++++++++ snapshot/package.json | 19 + snapshot/src/abis/delegateregistry.json | 79 + snapshot/src/abis/v100.json | 51 + snapshot/src/abis/v111.json | 97 + snapshot/src/abis/v130.json | 107 + .../delegateregistry/ClearDelegate.ts | 42 + .../handlers/delegateregistry/SetDelegate.ts | 44 + snapshot/src/handlers/v100/ProxyCreation.ts | 24 + snapshot/src/handlers/v111/ProxyCreation.ts | 22 + snapshot/src/handlers/v130/ProxyCreation.ts | 22 + snapshot/src/types/schema.ts | 80 + snapshot/studio.schema.ts | 22 + snapshot/studio.yaml | 48 + snapshot/tsconfig.json | 14 + 19 files changed, 2566 insertions(+) create mode 100644 snapshot/.env.example create mode 100644 snapshot/.gitignore create mode 100644 snapshot/.studioignore create mode 100644 snapshot/README.md create mode 100644 snapshot/package-lock.json create mode 100644 snapshot/package.json create mode 100644 snapshot/src/abis/delegateregistry.json create mode 100644 snapshot/src/abis/v100.json create mode 100644 snapshot/src/abis/v111.json create mode 100644 snapshot/src/abis/v130.json create mode 100644 snapshot/src/handlers/delegateregistry/ClearDelegate.ts create mode 100644 snapshot/src/handlers/delegateregistry/SetDelegate.ts create mode 100644 snapshot/src/handlers/v100/ProxyCreation.ts create mode 100644 snapshot/src/handlers/v111/ProxyCreation.ts create mode 100644 snapshot/src/handlers/v130/ProxyCreation.ts create mode 100644 snapshot/src/types/schema.ts create mode 100644 snapshot/studio.schema.ts create mode 100644 snapshot/studio.yaml create mode 100644 snapshot/tsconfig.json diff --git a/snapshot/.env.example b/snapshot/.env.example new file mode 100644 index 0000000..be00d3b --- /dev/null +++ b/snapshot/.env.example @@ -0,0 +1 @@ +ITS_A_SECRET=shhhhh \ No newline at end of file diff --git a/snapshot/.gitignore b/snapshot/.gitignore new file mode 100644 index 0000000..fbaaa6d --- /dev/null +++ b/snapshot/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +dist +.env \ No newline at end of file diff --git a/snapshot/.studioignore b/snapshot/.studioignore new file mode 100644 index 0000000..337477c --- /dev/null +++ b/snapshot/.studioignore @@ -0,0 +1,3 @@ +node_modules/** +.env +build/** diff --git a/snapshot/README.md b/snapshot/README.md new file mode 100644 index 0000000..644f951 --- /dev/null +++ b/snapshot/README.md @@ -0,0 +1,95 @@ +# BlockFlow Studio + +This is your BlockFlow Studio project. + +## Configuration (studio.yaml) + +BlockFlow Studio uses a YAML configuration file to manage your project settings. The configuration file should be named `studio.yaml` and located in the root folder of your project. Here are the configuration options: + +- `name`: The name of your BlockFlow project. + +- `description`: A description of your BlockFlow project. + +- `startBlock`: The starting block number from which the instance + +- `network`: The blockchain network you are working with (e.g., Ethereum, Polygon). + +- `userId`: You blockflow account userId. (For auth) + +- `execution`: Whether the execution of instances should be 'parallel' or 'sequencial'. + +- `Resources`: An array of configs. Each config is specific to trigger type. + + - `name`: The name of the contract. (should be camelcase without any spaces) + + - `contract`: The contract address to sync. (should be in string format) + + - `events`: The event signature. (generated by studio create command) + + - `abi`: The path to the ABI file for the contract. (should end with `.json`) + + - `handler`: The path to the code Handler file. + +## How to Use BlockFlow Studio + +### Project Initialization + +To initialize a project in an empty directory, use the `blockflow init` command. This will open a command prompt where you can configure your project interactively. + +```bash +blockflow init +``` + +Before using other commands mentioned below, update the `studio.yaml` file with `userId`, `projectId` and `startBlock` for your project. + +### Instance + +#### Generate Events List + +To generate an events list in `studio.yaml`, which will be used to configure the handler, use the `blockflow instance-generate` command. This will automatically fetch the added contracts ABIs and update the events/functions list. + +> writes to studio.yaml file, should be used with care, we prefer to use it once you init the project + +```bash +blockflow generate +``` + +#### Generate Handlers + +To generate an events handler in` studio.yaml`, use the `blockflow instance-codegen` command. The handler will be generated at the `Resources?.Trigger?.Handler` path. + +> Once you've everything ready for instances or apis use this command + +```bash +blockflow codegen +``` + +#### Test the Code + +> It is required that you have a mongo db local running at uri "mongodb://localhost:27017" before running tests + +To test the code and generate a local mongo database, use the `blockflow instance-test` command. This will produce a database named blockflow_studio with collection name BLOCKFLOW_STUDIO + +```bash +blockflow instance-test +``` + +> you can even provide a start block `--startBlock `, or range of blocks to test `--range 10` + +#### Deploy the Project + +Once the project is created and tested, you can deploy it using the `blockflow instance-deploy` command. This will deploy the handler to the blockflow server for syncing. + +```bash +blockflow instance-deploy +``` + +### API + +#### Deploy API + +To deploy the API, use the `blockflow api-deploy` command. + +```bash +blockflow api-deploy +``` diff --git a/snapshot/package-lock.json b/snapshot/package-lock.json new file mode 100644 index 0000000..4696c76 --- /dev/null +++ b/snapshot/package-lock.json @@ -0,0 +1,1792 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/@blockflow-labs/utils": { + "version": "1.0.7-beta.1", + "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7-beta.1.tgz", + "integrity": "sha512-hr7WhTX9XaJhnuhuJGKZt9UDcdprEAklQ9y0c0h7GETPXmmO1R/gRlWY5rJk4oTcdufokMXxzAITqMFLWRHqcA==", + "dependencies": { + "mongoose": "^8.0.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "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/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001641", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", + "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.825", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.825.tgz", + "integrity": "sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", + "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.0.tgz", + "integrity": "sha512-iGgZvgO+fIgX1AQMehkG+Wj8qrWc9it8vUZrSKWjrebgfwHTqUcIdTgWK8mT1us1xd83NOQxiuGbg9ZJtLxs2Q==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz", + "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/typescript": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + } + } +} diff --git a/snapshot/package.json b/snapshot/package.json new file mode 100644 index 0000000..5f020e8 --- /dev/null +++ b/snapshot/package.json @@ -0,0 +1,19 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "description": "BlockFlow Studio Project", + "scripts": { + "compile": "tsc -b" + }, + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "typescript": "^5.1.6", + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4", + "ts-loader": "^9.5.0" + } +} diff --git a/snapshot/src/abis/delegateregistry.json b/snapshot/src/abis/delegateregistry.json new file mode 100644 index 0000000..3870d3f --- /dev/null +++ b/snapshot/src/abis/delegateregistry.json @@ -0,0 +1,79 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + } + ], + "name": "ClearDelegate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + } + ], + "name": "SetDelegate", + "type": "event" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "id", "type": "bytes32" }], + "name": "clearDelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "name": "delegation", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "id", "type": "bytes32" }, + { "internalType": "address", "name": "delegate", "type": "address" } + ], + "name": "setDelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/snapshot/src/abis/v100.json b/snapshot/src/abis/v100.json new file mode 100644 index 0000000..6cf0ed4 --- /dev/null +++ b/snapshot/src/abis/v100.json @@ -0,0 +1,51 @@ +[ + { + "constant": false, + "inputs": [ + { "name": "_mastercopy", "type": "address" }, + { "name": "initializer", "type": "bytes" }, + { "name": "saltNonce", "type": "uint256" } + ], + "name": "createProxyWithNonce", + "outputs": [{ "name": "proxy", "type": "address" }], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "proxyCreationCode", + "outputs": [{ "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "masterCopy", "type": "address" }, + { "name": "data", "type": "bytes" } + ], + "name": "createProxy", + "outputs": [{ "name": "proxy", "type": "address" }], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "proxyRuntimeCode", + "outputs": [{ "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "anonymous": false, + "inputs": [{ "indexed": false, "name": "proxy", "type": "address" }], + "name": "ProxyCreation", + "type": "event" + } +] diff --git a/snapshot/src/abis/v111.json b/snapshot/src/abis/v111.json new file mode 100644 index 0000000..9a47976 --- /dev/null +++ b/snapshot/src/abis/v111.json @@ -0,0 +1,97 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract Proxy", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyCreation", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { "internalType": "address", "name": "_mastercopy", "type": "address" }, + { "internalType": "bytes", "name": "initializer", "type": "bytes" }, + { "internalType": "uint256", "name": "saltNonce", "type": "uint256" } + ], + "name": "calculateCreateProxyWithNonceAddress", + "outputs": [ + { "internalType": "contract Proxy", "name": "proxy", "type": "address" } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "address", "name": "masterCopy", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "createProxy", + "outputs": [ + { "internalType": "contract Proxy", "name": "proxy", "type": "address" } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "address", "name": "_mastercopy", "type": "address" }, + { "internalType": "bytes", "name": "initializer", "type": "bytes" }, + { "internalType": "uint256", "name": "saltNonce", "type": "uint256" }, + { + "internalType": "contract IProxyCreationCallback", + "name": "callback", + "type": "address" + } + ], + "name": "createProxyWithCallback", + "outputs": [ + { "internalType": "contract Proxy", "name": "proxy", "type": "address" } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "address", "name": "_mastercopy", "type": "address" }, + { "internalType": "bytes", "name": "initializer", "type": "bytes" }, + { "internalType": "uint256", "name": "saltNonce", "type": "uint256" } + ], + "name": "createProxyWithNonce", + "outputs": [ + { "internalType": "contract Proxy", "name": "proxy", "type": "address" } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "proxyCreationCode", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "proxyRuntimeCode", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + } +] diff --git a/snapshot/src/abis/v130.json b/snapshot/src/abis/v130.json new file mode 100644 index 0000000..b4d64ab --- /dev/null +++ b/snapshot/src/abis/v130.json @@ -0,0 +1,107 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "singleton", + "type": "address" + } + ], + "name": "ProxyCreation", + "type": "event" + }, + { + "inputs": [ + { "internalType": "address", "name": "_singleton", "type": "address" }, + { "internalType": "bytes", "name": "initializer", "type": "bytes" }, + { "internalType": "uint256", "name": "saltNonce", "type": "uint256" } + ], + "name": "calculateCreateProxyWithNonceAddress", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "singleton", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "createProxy", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_singleton", "type": "address" }, + { "internalType": "bytes", "name": "initializer", "type": "bytes" }, + { "internalType": "uint256", "name": "saltNonce", "type": "uint256" }, + { + "internalType": "contract IProxyCreationCallback", + "name": "callback", + "type": "address" + } + ], + "name": "createProxyWithCallback", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_singleton", "type": "address" }, + { "internalType": "bytes", "name": "initializer", "type": "bytes" }, + { "internalType": "uint256", "name": "saltNonce", "type": "uint256" } + ], + "name": "createProxyWithNonce", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proxyCreationCode", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "proxyRuntimeCode", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/snapshot/src/handlers/delegateregistry/ClearDelegate.ts b/snapshot/src/handlers/delegateregistry/ClearDelegate.ts new file mode 100644 index 0000000..215a66a --- /dev/null +++ b/snapshot/src/handlers/delegateregistry/ClearDelegate.ts @@ -0,0 +1,42 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Delegation, IDelegation, Block, IBlock} from "../../types/schema"; + +/** + * @dev Event::ClearDelegate(address delegator, bytes32 id, address delegate) + * @param context trigger object with contains {event: {delegator ,id ,delegate }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ClearDelegateHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ClearDelegate here + + const { event, transaction, block, log } = context; + const { delegator, id, delegate } = event; + + const delegationDB = bind(Delegation); + const blockDB = bind(Block); + let Id = `${delegator}-${id}-${delegate}`; + let blockId = `${block.block_number}`; + + let delegation = await delegationDB.create({ + id: Id, + delegator: delegator, + space: id, + delegate: delegate + }); + + let blockData = await blockDB.create({ + id: blockId, + number: block.block_number, + timestamp: block.block_timestamp, + }); +}; diff --git a/snapshot/src/handlers/delegateregistry/SetDelegate.ts b/snapshot/src/handlers/delegateregistry/SetDelegate.ts new file mode 100644 index 0000000..24b62c3 --- /dev/null +++ b/snapshot/src/handlers/delegateregistry/SetDelegate.ts @@ -0,0 +1,44 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Delegation, IDelegation, Block, IBlock} from "../../types/schema"; + +/** + * @dev Event::SetDelegate(address delegator, bytes32 id, address delegate) + * @param context trigger object with contains {event: {delegator ,id ,delegate }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const SetDelegateHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for SetDelegate here + + const { event, transaction, block, log } = context; + const { delegator, id, delegate } = event; + + const delegationDB = bind(Delegation); + const blockDB = bind(Block); + + let Id = `${delegator}-${id}-${delegate}`; + let blockId = `${block.block_number}`; + + let delegation = await delegationDB.create({ + id: Id, + delegator: delegator, + space: id, + delegate: delegate, + timestamp: block.block_timestamp, + }); + + let blockData = await blockDB.create({ + id: blockId, + number: block.block_number, + timestamp: block.block_timestamp, + }); +}; diff --git a/snapshot/src/handlers/v100/ProxyCreation.ts b/snapshot/src/handlers/v100/ProxyCreation.ts new file mode 100644 index 0000000..bbb71bd --- /dev/null +++ b/snapshot/src/handlers/v100/ProxyCreation.ts @@ -0,0 +1,24 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::ProxyCreation(address proxy) + * @param context trigger object with contains {event: {proxy }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ProxyCreationHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ProxyCreation here + + const { event, transaction, block, log } = context; + const { proxy } = event; + + +}; diff --git a/snapshot/src/handlers/v111/ProxyCreation.ts b/snapshot/src/handlers/v111/ProxyCreation.ts new file mode 100644 index 0000000..44b57b5 --- /dev/null +++ b/snapshot/src/handlers/v111/ProxyCreation.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::ProxyCreation(address proxy) + * @param context trigger object with contains {event: {proxy }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ProxyCreationHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ProxyCreation here + + const { event, transaction, block, log } = context; + const { proxy } = event; +}; diff --git a/snapshot/src/handlers/v130/ProxyCreation.ts b/snapshot/src/handlers/v130/ProxyCreation.ts new file mode 100644 index 0000000..73698b8 --- /dev/null +++ b/snapshot/src/handlers/v130/ProxyCreation.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::ProxyCreation(address proxy, address singleton) + * @param context trigger object with contains {event: {proxy ,singleton }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ProxyCreationHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ProxyCreation here + + const { event, transaction, block, log } = context; + const { proxy, singleton } = event; +}; diff --git a/snapshot/src/types/schema.ts b/snapshot/src/types/schema.ts new file mode 100644 index 0000000..074bc01 --- /dev/null +++ b/snapshot/src/types/schema.ts @@ -0,0 +1,80 @@ +// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + +import { Document } from "@blockflow-labs/utils"; + +export class Delegation { + static entity = "Delegation"; + static schema = { + id: { type: "String", index: true }, + delegator: "string", + space: "string", + delegate: "string", + timestamp: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Block { + static entity = "Block"; + static schema = { + id: { type: "String", index: true }, + number: "Number", + timestamp: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Sig { + static entity = "Sig"; + static schema = { + id: { type: "String", index: true }, + account: "string", + messageHash: "string", + timestamp: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +import { String, Array } from "@blockflow-labs/utils"; + +export interface IDelegation extends Document { + id: String; + delegator: string; + space: string; + delegate: string; + timestamp: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IBlock extends Document { + id: String; + number: Number; + timestamp: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface ISig extends Document { + id: String; + account: string; + messageHash: string; + timestamp: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/snapshot/studio.schema.ts b/snapshot/studio.schema.ts new file mode 100644 index 0000000..f459765 --- /dev/null +++ b/snapshot/studio.schema.ts @@ -0,0 +1,22 @@ +import { String, Array } from "@blockflow-labs/utils"; + +export interface Delegation { + id: String; + delegator: string; + space: string; + delegate: string; + timestamp: string; +} + +export interface Block { + id: String; + number: Number; + timestamp: string; +} + +export interface Sig { + id: String; + account: string; + messageHash: string; + timestamp: string; +} diff --git a/snapshot/studio.yaml b/snapshot/studio.yaml new file mode 100644 index 0000000..6338172 --- /dev/null +++ b/snapshot/studio.yaml @@ -0,0 +1,48 @@ +name: Project Apollo +description: A top-secret research project to the moon +startBlock: latest +userId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +projectId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +network: Ethereum +user: Jane-doe +schema: + file: ./studio.schema.ts +execution: parallel +Resources: + - Name: delegateregistry + Abi: src/abis/delegateregistry.json + Type: contract/event + Address: "0x469788fE6E9E9681C6ebF3bF78e7Fd26Fc015446" + Triggers: + - Event: ClearDelegate(address indexed,bytes32 indexed,address indexed) + Handler: src/handlers/delegateregistry/ClearDelegate.ClearDelegateHandler + - Event: SetDelegate(address indexed,bytes32 indexed,address indexed) + Handler: src/handlers/delegateregistry/SetDelegate.SetDelegateHandler + - Name: v100 + Abi: src/abis/v100.json + Type: contract/event + Address: "0x12302fE9c02ff50939BaAaaf415fc226C078613C" + Triggers: + - Event: ProxyCreation(address) + Handler: src/handlers/v100/ProxyCreation.ProxyCreationHandler + - Name: v111 + Abi: src/abis/v111.json + Type: contract/event + Address: "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B" + Triggers: + - Event: ProxyCreation(address) + Handler: src/handlers/v111/ProxyCreation.ProxyCreationHandler + - Name: v130 + Abi: src/abis/v130.json + Type: contract/event + Address: "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2" + Triggers: + - Event: ProxyCreation(address,address) + Handler: src/handlers/v130/ProxyCreation.ProxyCreationHandler + - template: + Name: GnosisSafe + Abi: src/abis/v111.json + Type: contract/event + Triggers: + - Event: SignMsg(address) + Handler: src/handlers/SignMsg.SignMsgHandler diff --git a/snapshot/tsconfig.json b/snapshot/tsconfig.json new file mode 100644 index 0000000..fb80a42 --- /dev/null +++ b/snapshot/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "outDir": "./build/bin/", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From fd1ba80393b0b30accd8cfedf0d067717ba35f3a Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Tue, 16 Jul 2024 20:27:29 +0530 Subject: [PATCH 14/22] eigen da 2/3 Signed-off-by: d4v1d03 --- EigenDA/.env.example | 1 + EigenDA/.gitignore | 4 + EigenDA/.studioignore | 3 + EigenDA/README.md | 95 + EigenDA/package-lock.json | 1792 +++++++++++++++++ EigenDA/package.json | 19 + EigenDA/src/abis/blsapkregistry.json | 493 +++++ EigenDA/src/abis/eigendaservicemanager.json | 869 ++++++++ EigenDA/src/abis/indexregistry.json | 335 +++ EigenDA/src/abis/operatorregistry.json | 1160 +++++++++++ EigenDA/src/abis/stakeregistry.json | 698 +++++++ .../handlers/blsapkregistry/Initialized.ts | 22 + .../blsapkregistry/NewPubkeyRegistration.ts | 41 + .../blsapkregistry/OperatorAddedToQuorums.ts | 35 + .../OperatorRemovedFromQuorums.ts | 36 + .../eigendaservicemanager/BatchConfirmed.ts | 73 + .../BatchConfirmerStatusChanged.ts | 22 + .../eigendaservicemanager/Initialized.ts | 22 + .../StaleStakesForbiddenUpdate.ts | 22 + .../src/handlers/indexregistry/Initialized.ts | 22 + .../indexregistry/QuorumIndexUpdate.ts | 22 + .../operatorregistry/ChurnApproverUpdated.ts | 22 + .../operatorregistry/EjectorUpdated.ts | 22 + .../handlers/operatorregistry/Initialized.ts | 22 + .../operatorregistry/OperatorDeregistered.ts | 22 + .../operatorregistry/OperatorRegistered.ts | 22 + .../OperatorSetParamsUpdated.ts | 22 + .../operatorregistry/OperatorSocketUpdate.ts | 22 + .../QuorumBlockNumberUpdated.ts | 22 + .../MinimumStakeForQuorumUpdated.ts | 22 + .../stakeregistry/OperatorStakeUpdate.ts | 22 + .../handlers/stakeregistry/QuorumCreated.ts | 22 + .../stakeregistry/StrategyAddedToQuorum.ts | 22 + .../StrategyMultiplierUpdated.ts | 22 + .../StrategyRemovedFromQuorum.ts | 22 + EigenDA/src/types/schema.ts | 171 ++ EigenDA/studio.schema.ts | 58 + EigenDA/studio.yaml | 103 + EigenDA/tsconfig.json | 14 + 39 files changed, 6440 insertions(+) create mode 100644 EigenDA/.env.example create mode 100644 EigenDA/.gitignore create mode 100644 EigenDA/.studioignore create mode 100644 EigenDA/README.md create mode 100644 EigenDA/package-lock.json create mode 100644 EigenDA/package.json create mode 100644 EigenDA/src/abis/blsapkregistry.json create mode 100644 EigenDA/src/abis/eigendaservicemanager.json create mode 100644 EigenDA/src/abis/indexregistry.json create mode 100644 EigenDA/src/abis/operatorregistry.json create mode 100644 EigenDA/src/abis/stakeregistry.json create mode 100644 EigenDA/src/handlers/blsapkregistry/Initialized.ts create mode 100644 EigenDA/src/handlers/blsapkregistry/NewPubkeyRegistration.ts create mode 100644 EigenDA/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts create mode 100644 EigenDA/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts create mode 100644 EigenDA/src/handlers/eigendaservicemanager/BatchConfirmed.ts create mode 100644 EigenDA/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts create mode 100644 EigenDA/src/handlers/eigendaservicemanager/Initialized.ts create mode 100644 EigenDA/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts create mode 100644 EigenDA/src/handlers/indexregistry/Initialized.ts create mode 100644 EigenDA/src/handlers/indexregistry/QuorumIndexUpdate.ts create mode 100644 EigenDA/src/handlers/operatorregistry/ChurnApproverUpdated.ts create mode 100644 EigenDA/src/handlers/operatorregistry/EjectorUpdated.ts create mode 100644 EigenDA/src/handlers/operatorregistry/Initialized.ts create mode 100644 EigenDA/src/handlers/operatorregistry/OperatorDeregistered.ts create mode 100644 EigenDA/src/handlers/operatorregistry/OperatorRegistered.ts create mode 100644 EigenDA/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts create mode 100644 EigenDA/src/handlers/operatorregistry/OperatorSocketUpdate.ts create mode 100644 EigenDA/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts create mode 100644 EigenDA/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts create mode 100644 EigenDA/src/handlers/stakeregistry/OperatorStakeUpdate.ts create mode 100644 EigenDA/src/handlers/stakeregistry/QuorumCreated.ts create mode 100644 EigenDA/src/handlers/stakeregistry/StrategyAddedToQuorum.ts create mode 100644 EigenDA/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts create mode 100644 EigenDA/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts create mode 100644 EigenDA/src/types/schema.ts create mode 100644 EigenDA/studio.schema.ts create mode 100644 EigenDA/studio.yaml create mode 100644 EigenDA/tsconfig.json diff --git a/EigenDA/.env.example b/EigenDA/.env.example new file mode 100644 index 0000000..be00d3b --- /dev/null +++ b/EigenDA/.env.example @@ -0,0 +1 @@ +ITS_A_SECRET=shhhhh \ No newline at end of file diff --git a/EigenDA/.gitignore b/EigenDA/.gitignore new file mode 100644 index 0000000..fbaaa6d --- /dev/null +++ b/EigenDA/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +dist +.env \ No newline at end of file diff --git a/EigenDA/.studioignore b/EigenDA/.studioignore new file mode 100644 index 0000000..337477c --- /dev/null +++ b/EigenDA/.studioignore @@ -0,0 +1,3 @@ +node_modules/** +.env +build/** diff --git a/EigenDA/README.md b/EigenDA/README.md new file mode 100644 index 0000000..644f951 --- /dev/null +++ b/EigenDA/README.md @@ -0,0 +1,95 @@ +# BlockFlow Studio + +This is your BlockFlow Studio project. + +## Configuration (studio.yaml) + +BlockFlow Studio uses a YAML configuration file to manage your project settings. The configuration file should be named `studio.yaml` and located in the root folder of your project. Here are the configuration options: + +- `name`: The name of your BlockFlow project. + +- `description`: A description of your BlockFlow project. + +- `startBlock`: The starting block number from which the instance + +- `network`: The blockchain network you are working with (e.g., Ethereum, Polygon). + +- `userId`: You blockflow account userId. (For auth) + +- `execution`: Whether the execution of instances should be 'parallel' or 'sequencial'. + +- `Resources`: An array of configs. Each config is specific to trigger type. + + - `name`: The name of the contract. (should be camelcase without any spaces) + + - `contract`: The contract address to sync. (should be in string format) + + - `events`: The event signature. (generated by studio create command) + + - `abi`: The path to the ABI file for the contract. (should end with `.json`) + + - `handler`: The path to the code Handler file. + +## How to Use BlockFlow Studio + +### Project Initialization + +To initialize a project in an empty directory, use the `blockflow init` command. This will open a command prompt where you can configure your project interactively. + +```bash +blockflow init +``` + +Before using other commands mentioned below, update the `studio.yaml` file with `userId`, `projectId` and `startBlock` for your project. + +### Instance + +#### Generate Events List + +To generate an events list in `studio.yaml`, which will be used to configure the handler, use the `blockflow instance-generate` command. This will automatically fetch the added contracts ABIs and update the events/functions list. + +> writes to studio.yaml file, should be used with care, we prefer to use it once you init the project + +```bash +blockflow generate +``` + +#### Generate Handlers + +To generate an events handler in` studio.yaml`, use the `blockflow instance-codegen` command. The handler will be generated at the `Resources?.Trigger?.Handler` path. + +> Once you've everything ready for instances or apis use this command + +```bash +blockflow codegen +``` + +#### Test the Code + +> It is required that you have a mongo db local running at uri "mongodb://localhost:27017" before running tests + +To test the code and generate a local mongo database, use the `blockflow instance-test` command. This will produce a database named blockflow_studio with collection name BLOCKFLOW_STUDIO + +```bash +blockflow instance-test +``` + +> you can even provide a start block `--startBlock `, or range of blocks to test `--range 10` + +#### Deploy the Project + +Once the project is created and tested, you can deploy it using the `blockflow instance-deploy` command. This will deploy the handler to the blockflow server for syncing. + +```bash +blockflow instance-deploy +``` + +### API + +#### Deploy API + +To deploy the API, use the `blockflow api-deploy` command. + +```bash +blockflow api-deploy +``` diff --git a/EigenDA/package-lock.json b/EigenDA/package-lock.json new file mode 100644 index 0000000..3072044 --- /dev/null +++ b/EigenDA/package-lock.json @@ -0,0 +1,1792 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/@blockflow-labs/utils": { + "version": "1.0.7-beta.1", + "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7-beta.1.tgz", + "integrity": "sha512-hr7WhTX9XaJhnuhuJGKZt9UDcdprEAklQ9y0c0h7GETPXmmO1R/gRlWY5rJk4oTcdufokMXxzAITqMFLWRHqcA==", + "dependencies": { + "mongoose": "^8.0.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "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/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.827", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz", + "integrity": "sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", + "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.1.tgz", + "integrity": "sha512-OhVcwVl91A1G6+XpjDcpkGP7l7ikZkxa0DylX7NT/lcEqAjggzSdqDxb48A+xsDxqNAr0ntSJ1yiE3+KJTOd5Q==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz", + "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/typescript": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + } + } +} diff --git a/EigenDA/package.json b/EigenDA/package.json new file mode 100644 index 0000000..5f020e8 --- /dev/null +++ b/EigenDA/package.json @@ -0,0 +1,19 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "description": "BlockFlow Studio Project", + "scripts": { + "compile": "tsc -b" + }, + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "typescript": "^5.1.6", + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4", + "ts-loader": "^9.5.0" + } +} diff --git a/EigenDA/src/abis/blsapkregistry.json b/EigenDA/src/abis/blsapkregistry.json new file mode 100644 index 0000000..dd9b40e --- /dev/null +++ b/EigenDA/src/abis/blsapkregistry.json @@ -0,0 +1,493 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "contract IRegistryCoordinator", + "name": "_registryCoordinator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "indexed": false, + "internalType": "struct BN254.G1Point", + "name": "pubkeyG1", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256[2]", "name": "X", "type": "uint256[2]" }, + { "internalType": "uint256[2]", "name": "Y", "type": "uint256[2]" } + ], + "indexed": false, + "internalType": "struct BN254.G2Point", + "name": "pubkeyG2", + "type": "tuple" + } + ], + "name": "NewPubkeyRegistration", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + } + ], + "name": "OperatorAddedToQuorums", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + } + ], + "name": "OperatorRemovedFromQuorums", + "type": "event" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "", "type": "uint8" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "apkHistory", + "outputs": [ + { "internalType": "bytes24", "name": "apkHash", "type": "bytes24" }, + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "name": "currentApk", + "outputs": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "deregisterOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getApk", + "outputs": [ + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getApkHashAtBlockNumberAndIndex", + "outputs": [{ "internalType": "bytes24", "name": "", "type": "bytes24" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getApkHistoryLength", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, + { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } + ], + "name": "getApkIndicesAtBlockNumber", + "outputs": [{ "internalType": "uint32[]", "name": "", "type": "uint32[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getApkUpdateAtIndex", + "outputs": [ + { + "components": [ + { "internalType": "bytes24", "name": "apkHash", "type": "bytes24" }, + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + } + ], + "internalType": "struct IBLSApkRegistry.ApkUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "pubkeyHash", "type": "bytes32" } + ], + "name": "getOperatorFromPubkeyHash", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "getOperatorId", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "getRegisteredPubkey", + "outputs": [ + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "", + "type": "tuple" + }, + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "initializeQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "operatorToPubkey", + "outputs": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "operatorToPubkeyHash", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "pubkeyHashToOperator", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { + "components": [ + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyRegistrationSignature", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyG1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "pubkeyG2", + "type": "tuple" + } + ], + "internalType": "struct IBLSApkRegistry.PubkeyRegistrationParams", + "name": "params", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyRegistrationMessageHash", + "type": "tuple" + } + ], + "name": "registerBLSPublicKey", + "outputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "registerOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registryCoordinator", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + } +] diff --git a/EigenDA/src/abis/eigendaservicemanager.json b/EigenDA/src/abis/eigendaservicemanager.json new file mode 100644 index 0000000..8864703 --- /dev/null +++ b/EigenDA/src/abis/eigendaservicemanager.json @@ -0,0 +1,869 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "contract IAVSDirectory", + "name": "__avsDirectory", + "type": "address" + }, + { + "internalType": "contract IRegistryCoordinator", + "name": "__registryCoordinator", + "type": "address" + }, + { + "internalType": "contract IStakeRegistry", + "name": "__stakeRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHeaderHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "batchId", + "type": "uint32" + } + ], + "name": "BatchConfirmed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "batchConfirmer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "BatchConfirmerStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IPauserRegistry", + "name": "pauserRegistry", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address" + } + ], + "name": "PauserRegistrySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "value", + "type": "bool" + } + ], + "name": "StaleStakesForbiddenUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "BLOCK_STALE_MEASURE", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STORE_DURATION_BLOCKS", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "THRESHOLD_DENOMINATOR", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "avsDirectory", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "batchId", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "name": "batchIdToBatchMetadataHash", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blsApkRegistry", + "outputs": [ + { + "internalType": "contract IBLSApkRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32[]", + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "nonSignerPubkeys", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "quorumApks", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple" + }, + { + "internalType": "uint32[]", + "name": "quorumApkIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[]", + "name": "totalStakeIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[][]", + "name": "nonSignerStakeIndices", + "type": "uint32[][]" + } + ], + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "name": "params", + "type": "tuple" + } + ], + "name": "checkSignatures", + "outputs": [ + { + "components": [ + { + "internalType": "uint96[]", + "name": "signedStakeForQuorum", + "type": "uint96[]" + }, + { + "internalType": "uint96[]", + "name": "totalStakeForQuorum", + "type": "uint96[]" + } + ], + "internalType": "struct IBLSSignatureChecker.QuorumStakeTotals", + "name": "", + "type": "tuple" + }, + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "blobHeadersRoot", + "type": "bytes32" + }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, + { + "internalType": "bytes", + "name": "signedStakeForQuorums", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + } + ], + "internalType": "struct IEigenDAServiceManager.BatchHeader", + "name": "batchHeader", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint32[]", + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "nonSignerPubkeys", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "quorumApks", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple" + }, + { + "internalType": "uint32[]", + "name": "quorumApkIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[]", + "name": "totalStakeIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[][]", + "name": "nonSignerStakeIndices", + "type": "uint32[][]" + } + ], + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "name": "nonSignerStakesAndSignature", + "type": "tuple" + } + ], + "name": "confirmBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delegation", + "outputs": [ + { + "internalType": "contract IDelegationManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "deregisterOperatorFromAVS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "getOperatorRestakedStrategies", + "outputs": [ + { "internalType": "address[]", "name": "", "type": "address[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRestakeableStrategies", + "outputs": [ + { "internalType": "address[]", "name": "", "type": "address[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "_pauserRegistry", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_initialPausedStatus", + "type": "uint256" + }, + { "internalType": "address", "name": "_initialOwner", "type": "address" }, + { + "internalType": "address[]", + "name": "_batchConfirmers", + "type": "address[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "isBatchConfirmer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + } + ], + "name": "latestServeUntilBlock", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "index", "type": "uint8" }], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauserRegistry", + "outputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumAdversaryThresholdPercentages", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumConfirmationThresholdPercentages", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumNumbersRequired", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint256", "name": "expiry", "type": "uint256" } + ], + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "name": "operatorSignature", + "type": "tuple" + } + ], + "name": "registerOperatorToAVS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registryCoordinator", + "outputs": [ + { + "internalType": "contract IRegistryCoordinator", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_batchConfirmer", + "type": "address" + } + ], + "name": "setBatchConfirmer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address" + } + ], + "name": "setPauserRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "value", "type": "bool" }], + "name": "setStaleStakesForbidden", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeRegistry", + "outputs": [ + { + "internalType": "contract IStakeRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "staleStakesForbidden", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "taskNumber", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "apk", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256[2]", "name": "X", "type": "uint256[2]" }, + { "internalType": "uint256[2]", "name": "Y", "type": "uint256[2]" } + ], + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple" + } + ], + "name": "trySignatureAndApkVerification", + "outputs": [ + { "internalType": "bool", "name": "pairingSuccessful", "type": "bool" }, + { "internalType": "bool", "name": "siganatureIsValid", "type": "bool" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "string", "name": "_metadataURI", "type": "string" } + ], + "name": "updateAVSMetadataURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/EigenDA/src/abis/indexregistry.json b/EigenDA/src/abis/indexregistry.json new file mode 100644 index 0000000..5d5ca6a --- /dev/null +++ b/EigenDA/src/abis/indexregistry.json @@ -0,0 +1,335 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "contract IRegistryCoordinator", + "name": "_registryCoordinator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "newOperatorIndex", + "type": "uint32" + } + ], + "name": "QuorumIndexUpdate", + "type": "event" + }, + { + "inputs": [], + "name": "OPERATOR_DOES_NOT_EXIST_ID", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "", "type": "uint8" }, + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "name": "currentOperatorIndex", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "deregisterOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "operatorIndex", "type": "uint32" } + ], + "name": "getLatestOperatorUpdate", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlockNumber", + "type": "uint32" + }, + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" } + ], + "internalType": "struct IIndexRegistry.OperatorUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getLatestQuorumUpdate", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlockNumber", + "type": "uint32" + }, + { "internalType": "uint32", "name": "numOperators", "type": "uint32" } + ], + "internalType": "struct IIndexRegistry.QuorumUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" } + ], + "name": "getOperatorListAtBlockNumber", + "outputs": [ + { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "operatorIndex", "type": "uint32" }, + { "internalType": "uint32", "name": "arrayIndex", "type": "uint32" } + ], + "name": "getOperatorUpdateAtIndex", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlockNumber", + "type": "uint32" + }, + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" } + ], + "internalType": "struct IIndexRegistry.OperatorUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "quorumIndex", "type": "uint32" } + ], + "name": "getQuorumUpdateAtIndex", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlockNumber", + "type": "uint32" + }, + { "internalType": "uint32", "name": "numOperators", "type": "uint32" } + ], + "internalType": "struct IIndexRegistry.QuorumUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "initializeQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "registerOperator", + "outputs": [{ "internalType": "uint32[]", "name": "", "type": "uint32[]" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registryCoordinator", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "totalOperatorsForQuorum", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + } +] diff --git a/EigenDA/src/abis/operatorregistry.json b/EigenDA/src/abis/operatorregistry.json new file mode 100644 index 0000000..2f38045 --- /dev/null +++ b/EigenDA/src/abis/operatorregistry.json @@ -0,0 +1,1160 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "contract IServiceManager", + "name": "_serviceManager", + "type": "address" + }, + { + "internalType": "contract IStakeRegistry", + "name": "_stakeRegistry", + "type": "address" + }, + { + "internalType": "contract IBLSApkRegistry", + "name": "_blsApkRegistry", + "type": "address" + }, + { + "internalType": "contract IIndexRegistry", + "name": "_indexRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "prevChurnApprover", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newChurnApprover", + "type": "address" + } + ], + "name": "ChurnApproverUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "prevEjector", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newEjector", + "type": "address" + } + ], + "name": "EjectorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + } + ], + "name": "OperatorDeregistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + } + ], + "name": "OperatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "maxOperatorCount", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfOperatorStake", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfTotalStake", + "type": "uint16" + } + ], + "indexed": false, + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "name": "operatorSetParams", + "type": "tuple" + } + ], + "name": "OperatorSetParamsUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "socket", + "type": "string" + } + ], + "name": "OperatorSocketUpdate", + "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": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IPauserRegistry", + "name": "pauserRegistry", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address" + } + ], + "name": "PauserRegistrySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blocknumber", + "type": "uint256" + } + ], + "name": "QuorumBlockNumberUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "OPERATOR_CHURN_APPROVAL_TYPEHASH", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PUBKEY_REGISTRATION_TYPEHASH", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blsApkRegistry", + "outputs": [ + { + "internalType": "contract IBLSApkRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "registeringOperator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "registeringOperatorId", + "type": "bytes32" + }, + { + "components": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "address", "name": "operator", "type": "address" } + ], + "internalType": "struct IRegistryCoordinator.OperatorKickParam[]", + "name": "operatorKickParams", + "type": "tuple[]" + }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint256", "name": "expiry", "type": "uint256" } + ], + "name": "calculateOperatorChurnApprovalDigestHash", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "churnApprover", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "maxOperatorCount", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfOperatorStake", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfTotalStake", + "type": "uint16" + } + ], + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "name": "operatorSetParams", + "type": "tuple" + }, + { "internalType": "uint96", "name": "minimumStake", "type": "uint96" }, + { + "components": [ + { + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + }, + { "internalType": "uint96", "name": "multiplier", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StrategyParams[]", + "name": "strategyParams", + "type": "tuple[]" + } + ], + "name": "createQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "deregisterOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "ejectOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ejector", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" } + ], + "name": "getCurrentQuorumBitmap", + "outputs": [{ "internalType": "uint192", "name": "", "type": "uint192" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "getOperator", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + }, + { + "internalType": "enum IRegistryCoordinator.OperatorStatus", + "name": "status", + "type": "uint8" + } + ], + "internalType": "struct IRegistryCoordinator.OperatorInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" } + ], + "name": "getOperatorFromId", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "getOperatorId", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getOperatorSetParams", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "maxOperatorCount", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfOperatorStake", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfTotalStake", + "type": "uint16" + } + ], + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "getOperatorStatus", + "outputs": [ + { + "internalType": "enum IRegistryCoordinator.OperatorStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getQuorumBitmapAtBlockNumberByIndex", + "outputs": [{ "internalType": "uint192", "name": "", "type": "uint192" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" } + ], + "name": "getQuorumBitmapHistoryLength", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, + { + "internalType": "bytes32[]", + "name": "operatorIds", + "type": "bytes32[]" + } + ], + "name": "getQuorumBitmapIndicesAtBlockNumber", + "outputs": [{ "internalType": "uint32[]", "name": "", "type": "uint32[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getQuorumBitmapUpdateByIndex", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint192", + "name": "quorumBitmap", + "type": "uint192" + } + ], + "internalType": "struct IRegistryCoordinator.QuorumBitmapUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "indexRegistry", + "outputs": [ + { + "internalType": "contract IIndexRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_initialOwner", "type": "address" }, + { + "internalType": "address", + "name": "_churnApprover", + "type": "address" + }, + { "internalType": "address", "name": "_ejector", "type": "address" }, + { + "internalType": "contract IPauserRegistry", + "name": "_pauserRegistry", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_initialPausedStatus", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "maxOperatorCount", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfOperatorStake", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfTotalStake", + "type": "uint16" + } + ], + "internalType": "struct IRegistryCoordinator.OperatorSetParam[]", + "name": "_operatorSetParams", + "type": "tuple[]" + }, + { + "internalType": "uint96[]", + "name": "_minimumStakes", + "type": "uint96[]" + }, + { + "components": [ + { + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + }, + { "internalType": "uint96", "name": "multiplier", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StrategyParams[][]", + "name": "_strategyParams", + "type": "tuple[][]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "isChurnApproverSaltUsed", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRegistries", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "index", "type": "uint8" }], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauserRegistry", + "outputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "pubkeyRegistrationMessageHash", + "outputs": [ + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumCount", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "name": "quorumUpdateBlockNumber", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, + { "internalType": "string", "name": "socket", "type": "string" }, + { + "components": [ + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyRegistrationSignature", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyG1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "pubkeyG2", + "type": "tuple" + } + ], + "internalType": "struct IBLSApkRegistry.PubkeyRegistrationParams", + "name": "params", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint256", "name": "expiry", "type": "uint256" } + ], + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "name": "operatorSignature", + "type": "tuple" + } + ], + "name": "registerOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, + { "internalType": "string", "name": "socket", "type": "string" }, + { + "components": [ + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyRegistrationSignature", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "pubkeyG1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "pubkeyG2", + "type": "tuple" + } + ], + "internalType": "struct IBLSApkRegistry.PubkeyRegistrationParams", + "name": "params", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "address", "name": "operator", "type": "address" } + ], + "internalType": "struct IRegistryCoordinator.OperatorKickParam[]", + "name": "operatorKickParams", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint256", "name": "expiry", "type": "uint256" } + ], + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "name": "churnApproverSignature", + "type": "tuple" + }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint256", "name": "expiry", "type": "uint256" } + ], + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "name": "operatorSignature", + "type": "tuple" + } + ], + "name": "registerOperatorWithChurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "registries", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "serviceManager", + "outputs": [ + { + "internalType": "contract IServiceManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_churnApprover", "type": "address" } + ], + "name": "setChurnApprover", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_ejector", "type": "address" } + ], + "name": "setEjector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { + "components": [ + { + "internalType": "uint32", + "name": "maxOperatorCount", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfOperatorStake", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "kickBIPsOfTotalStake", + "type": "uint16" + } + ], + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "name": "operatorSetParams", + "type": "tuple" + } + ], + "name": "setOperatorSetParams", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address" + } + ], + "name": "setPauserRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeRegistry", + "outputs": [ + { + "internalType": "contract IStakeRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "operators", "type": "address[]" } + ], + "name": "updateOperators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[][]", + "name": "operatorsPerQuorum", + "type": "address[][]" + }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "updateOperatorsForQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "string", "name": "socket", "type": "string" } + ], + "name": "updateSocket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/EigenDA/src/abis/stakeregistry.json b/EigenDA/src/abis/stakeregistry.json new file mode 100644 index 0000000..ed3d72c --- /dev/null +++ b/EigenDA/src/abis/stakeregistry.json @@ -0,0 +1,698 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "contract IRegistryCoordinator", + "name": "_registryCoordinator", + "type": "address" + }, + { + "internalType": "contract IDelegationManager", + "name": "_delegationManager", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "minimumStake", + "type": "uint96" + } + ], + "name": "MinimumStakeForQuorumUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "operatorId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "stake", + "type": "uint96" + } + ], + "name": "OperatorStakeUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + } + ], + "name": "QuorumCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + } + ], + "name": "StrategyAddedToQuorum", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "multiplier", + "type": "uint256" + } + ], + "name": "StrategyMultiplierUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "quorumNumber", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + } + ], + "name": "StrategyRemovedFromQuorum", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_WEIGHING_FUNCTION_LENGTH", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WEIGHTING_DIVISOR", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { + "components": [ + { + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + }, + { "internalType": "uint96", "name": "multiplier", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StrategyParams[]", + "name": "_strategyParams", + "type": "tuple[]" + } + ], + "name": "addStrategies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delegation", + "outputs": [ + { + "internalType": "contract IDelegationManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "deregisterOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getCurrentStake", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getCurrentTotalStake", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getLatestStakeUpdate", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + }, + { "internalType": "uint96", "name": "stake", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StakeUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" } + ], + "name": "getStakeAtBlockNumber", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getStakeAtBlockNumberAndIndex", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getStakeHistory", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + }, + { "internalType": "uint96", "name": "stake", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StakeUpdate[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getStakeHistoryLength", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getStakeUpdateAtIndex", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + }, + { "internalType": "uint96", "name": "stake", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StakeUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" } + ], + "name": "getStakeUpdateIndexAtBlockNumber", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getTotalStakeAtBlockNumberFromIndex", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "getTotalStakeHistoryLength", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "getTotalStakeIndicesAtBlockNumber", + "outputs": [{ "internalType": "uint32[]", "name": "", "type": "uint32[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "getTotalStakeUpdateAtIndex", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "updateBlockNumber", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nextUpdateBlockNumber", + "type": "uint32" + }, + { "internalType": "uint96", "name": "stake", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StakeUpdate", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint96", "name": "minimumStake", "type": "uint96" }, + { + "components": [ + { + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + }, + { "internalType": "uint96", "name": "multiplier", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StrategyParams[]", + "name": "_strategyParams", + "type": "tuple[]" + } + ], + "name": "initializeQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "name": "minimumStakeForQuorum", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { + "internalType": "uint256[]", + "name": "strategyIndices", + "type": "uint256[]" + }, + { + "internalType": "uint96[]", + "name": "newMultipliers", + "type": "uint96[]" + } + ], + "name": "modifyStrategyParams", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "registerOperator", + "outputs": [ + { "internalType": "uint96[]", "name": "", "type": "uint96[]" }, + { "internalType": "uint96[]", "name": "", "type": "uint96[]" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registryCoordinator", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { + "internalType": "uint256[]", + "name": "indicesToRemove", + "type": "uint256[]" + } + ], + "name": "removeStrategies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint96", "name": "minimumStake", "type": "uint96" } + ], + "name": "setMinimumStakeForQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "", "type": "uint8" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "strategiesPerQuorum", + "outputs": [ + { "internalType": "contract IStrategy", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "", "type": "uint8" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "strategyParams", + "outputs": [ + { + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + }, + { "internalType": "uint96", "name": "multiplier", "type": "uint96" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "strategyParamsByIndex", + "outputs": [ + { + "components": [ + { + "internalType": "contract IStrategy", + "name": "strategy", + "type": "address" + }, + { "internalType": "uint96", "name": "multiplier", "type": "uint96" } + ], + "internalType": "struct IStakeRegistry.StrategyParams", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } + ], + "name": "strategyParamsLength", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bytes32", "name": "operatorId", "type": "bytes32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" } + ], + "name": "updateOperatorStake", + "outputs": [{ "internalType": "uint192", "name": "", "type": "uint192" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "weightOfOperatorForQuorum", + "outputs": [{ "internalType": "uint96", "name": "", "type": "uint96" }], + "stateMutability": "view", + "type": "function" + } +] diff --git a/EigenDA/src/handlers/blsapkregistry/Initialized.ts b/EigenDA/src/handlers/blsapkregistry/Initialized.ts new file mode 100644 index 0000000..f6f73dd --- /dev/null +++ b/EigenDA/src/handlers/blsapkregistry/Initialized.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::Initialized(uint8 version) + * @param context trigger object with contains {event: {version }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const InitializedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Initialized here + + const { event, transaction, block, log } = context; + const { version } = event; +}; diff --git a/EigenDA/src/handlers/blsapkregistry/NewPubkeyRegistration.ts b/EigenDA/src/handlers/blsapkregistry/NewPubkeyRegistration.ts new file mode 100644 index 0000000..0c35029 --- /dev/null +++ b/EigenDA/src/handlers/blsapkregistry/NewPubkeyRegistration.ts @@ -0,0 +1,41 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { NewPubKeyRegistration } from "../../types/schema"; + +/** + * @dev Event::NewPubkeyRegistration(address operator, tuple pubkeyG1, tuple pubkeyG2) + * @param context trigger object with contains {event: {operator ,pubkeyG1 ,pubkeyG2 }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const NewPubkeyRegistrationHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for NewPubkeyRegistration here + + const { event, transaction, block, log } = context; + const { operator, pubkeyG1, pubkeyG2 } = event; + + const NewPubKeyRegistrationDB: Instance = bind(NewPubKeyRegistration); + let Id = `${transaction.transaction_hash}-${log.log_index}`; + const [g1x,g1y] = pubkeyG1; + const [g2x,g2y] = pubkeyG2; + + let npkr = await NewPubKeyRegistrationDB.create({ + id: Id, + operator: operator, + pubkeyG1_X :g1x, + pubkeyG1_Y: g1y, + pubkeyG2_X: g2x, + pubkeyG2_Y: g2y, + blockNumber: block.block_number, + blockTimestamp: block.block_timestamp, + transactionHash: transaction.transaction_hash + }) +}; diff --git a/EigenDA/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts b/EigenDA/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts new file mode 100644 index 0000000..7d58f64 --- /dev/null +++ b/EigenDA/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts @@ -0,0 +1,35 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { OperatorAddedToQuorum } from "../../types/schema"; +/** + * @dev Event::OperatorAddedToQuorums(address operator, bytes32 operatorId, bytes quorumNumbers) + * @param context trigger object with contains {event: {operator ,operatorId ,quorumNumbers }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OperatorAddedToQuorumsHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OperatorAddedToQuorums here + + const { event, transaction, block, log } = context; + const { operator, operatorId, quorumNumbers } = event; + + const OperatorAddedToQuorumDB : Instance = bind(OperatorAddedToQuorum); + const Id = `${transaction.transaction_hash}-${log.log_index}`; + + let oatq = await OperatorAddedToQuorumDB.create({ + id: Id, + operator: operator, + quorumNumbers: quorumNumbers, + blockNumber: block.block_number, + blockTimestamp: block.block_timestamp, + transactionHash: transaction.transaction_hash + }) +}; diff --git a/EigenDA/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts b/EigenDA/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts new file mode 100644 index 0000000..954b5b7 --- /dev/null +++ b/EigenDA/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts @@ -0,0 +1,36 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { OperatorRemovedFromQuorum } from "../../types/schema"; + +/** + * @dev Event::OperatorRemovedFromQuorums(address operator, bytes32 operatorId, bytes quorumNumbers) + * @param context trigger object with contains {event: {operator ,operatorId ,quorumNumbers }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OperatorRemovedFromQuorumsHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OperatorRemovedFromQuorums here + + const { event, transaction, block, log } = context; + const { operator, operatorId, quorumNumbers } = event; + + const OperatorRemovedFromQuorumDB: Instance = bind(OperatorRemovedFromQuorum); + const Id = `${transaction.transaction_hash}-${log.log_index}`; + + let orfq = await OperatorRemovedFromQuorumDB.create({ + id: Id, + operator: operator, + quorumNumbers: quorumNumbers, + blockNumber: block.block_number, + blockTimestamp: block.block_timestamp, + transactionHash: transaction.transaction_hash + }) +}; diff --git a/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmed.ts b/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmed.ts new file mode 100644 index 0000000..0d8f64e --- /dev/null +++ b/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmed.ts @@ -0,0 +1,73 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { Batch, GasFees } from "../../types/schema"; + +/** + * @dev Event::BatchConfirmed(bytes32 batchHeaderHash, uint32 batchId) + * @param context trigger object with contains {event: {batchHeaderHash ,batchId }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const BatchConfirmedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for BatchConfirmed here + + const { event, transaction, block, log } = context; + const { batchHeaderHash, batchId } = event; + + const BatchDB: Instance = bind(Batch); + const GasFeesDB: Instance = bind(GasFees); + let bId = transaction.transaction_hash; + let gasId = `${transaction.transaction_gas}-${transaction.transaction_hash}`; + let transactionfee = (parseInt(transaction.transaction_gas)*parseInt(transaction.transaction_gas_price)).toString(); + + let batch = await BatchDB.findOne({ + id: bId + }); + if(!batch){ + batch = await BatchDB.create({ + id: bId, + batchId : batchId, + batchHeaderHash: batchHeaderHash, + gasFees: transaction.transaction_gas_price, + blockNumber: block.block_number, + blockTimestamp: block.block_timestamp, + transactionHash: transaction.transaction_hash + }) + } + else{ + batch.batchId = batchId; + batch.batchHeaderHash = batchHeaderHash; + batch.gasFees = transaction.transaction_gas_price; + batch.blockNumber = block.block_number; + batch.blockTimestamp = block.block_timestamp; + batch.transactionHash = transaction.transaction_hash + await BatchDB.save(batch); + } + + let gasfee = await GasFeesDB.findOne({ + id:gasId + }) + if(!gasfee){ + gasfee = await GasFeesDB.create({ + id: gasId, + gasUsed: transaction.transaction_gas, + gasPrice: transaction.transaction_gas_price, + transactionFee: transactionfee + }) + } + else{ + gasfee.gasUsed = transaction.transaction_gas; + gasfee.gasPrice = transaction.transaction_gas_price; + gasfee.transactionFee = transactionfee; + await GasFeesDB.save(gasfee); + } + +}; diff --git a/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts b/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts new file mode 100644 index 0000000..2c5e8eb --- /dev/null +++ b/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::BatchConfirmerStatusChanged(address batchConfirmer, bool status) + * @param context trigger object with contains {event: {batchConfirmer ,status }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const BatchConfirmerStatusChangedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for BatchConfirmerStatusChanged here + + const { event, transaction, block, log } = context; + const { batchConfirmer, status } = event; +}; diff --git a/EigenDA/src/handlers/eigendaservicemanager/Initialized.ts b/EigenDA/src/handlers/eigendaservicemanager/Initialized.ts new file mode 100644 index 0000000..f6f73dd --- /dev/null +++ b/EigenDA/src/handlers/eigendaservicemanager/Initialized.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::Initialized(uint8 version) + * @param context trigger object with contains {event: {version }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const InitializedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Initialized here + + const { event, transaction, block, log } = context; + const { version } = event; +}; diff --git a/EigenDA/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts b/EigenDA/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts new file mode 100644 index 0000000..df60aba --- /dev/null +++ b/EigenDA/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::StaleStakesForbiddenUpdate(bool value) + * @param context trigger object with contains {event: {value }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const StaleStakesForbiddenUpdateHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for StaleStakesForbiddenUpdate here + + const { event, transaction, block, log } = context; + const { value } = event; +}; diff --git a/EigenDA/src/handlers/indexregistry/Initialized.ts b/EigenDA/src/handlers/indexregistry/Initialized.ts new file mode 100644 index 0000000..f6f73dd --- /dev/null +++ b/EigenDA/src/handlers/indexregistry/Initialized.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::Initialized(uint8 version) + * @param context trigger object with contains {event: {version }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const InitializedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Initialized here + + const { event, transaction, block, log } = context; + const { version } = event; +}; diff --git a/EigenDA/src/handlers/indexregistry/QuorumIndexUpdate.ts b/EigenDA/src/handlers/indexregistry/QuorumIndexUpdate.ts new file mode 100644 index 0000000..1549dc6 --- /dev/null +++ b/EigenDA/src/handlers/indexregistry/QuorumIndexUpdate.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::QuorumIndexUpdate(bytes32 operatorId, uint8 quorumNumber, uint32 newOperatorIndex) + * @param context trigger object with contains {event: {operatorId ,quorumNumber ,newOperatorIndex }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const QuorumIndexUpdateHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for QuorumIndexUpdate here + + const { event, transaction, block, log } = context; + const { operatorId, quorumNumber, newOperatorIndex } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/ChurnApproverUpdated.ts b/EigenDA/src/handlers/operatorregistry/ChurnApproverUpdated.ts new file mode 100644 index 0000000..bcc2312 --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/ChurnApproverUpdated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) + * @param context trigger object with contains {event: {prevChurnApprover ,newChurnApprover }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const ChurnApproverUpdatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for ChurnApproverUpdated here + + const { event, transaction, block, log } = context; + const { prevChurnApprover, newChurnApprover } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/EjectorUpdated.ts b/EigenDA/src/handlers/operatorregistry/EjectorUpdated.ts new file mode 100644 index 0000000..13d79ef --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/EjectorUpdated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::EjectorUpdated(address prevEjector, address newEjector) + * @param context trigger object with contains {event: {prevEjector ,newEjector }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const EjectorUpdatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for EjectorUpdated here + + const { event, transaction, block, log } = context; + const { prevEjector, newEjector } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/Initialized.ts b/EigenDA/src/handlers/operatorregistry/Initialized.ts new file mode 100644 index 0000000..f6f73dd --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/Initialized.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::Initialized(uint8 version) + * @param context trigger object with contains {event: {version }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const InitializedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Initialized here + + const { event, transaction, block, log } = context; + const { version } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/OperatorDeregistered.ts b/EigenDA/src/handlers/operatorregistry/OperatorDeregistered.ts new file mode 100644 index 0000000..93fcae6 --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/OperatorDeregistered.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::OperatorDeregistered(address operator, bytes32 operatorId) + * @param context trigger object with contains {event: {operator ,operatorId }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OperatorDeregisteredHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OperatorDeregistered here + + const { event, transaction, block, log } = context; + const { operator, operatorId } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/OperatorRegistered.ts b/EigenDA/src/handlers/operatorregistry/OperatorRegistered.ts new file mode 100644 index 0000000..8285468 --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/OperatorRegistered.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::OperatorRegistered(address operator, bytes32 operatorId) + * @param context trigger object with contains {event: {operator ,operatorId }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OperatorRegisteredHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OperatorRegistered here + + const { event, transaction, block, log } = context; + const { operator, operatorId } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts b/EigenDA/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts new file mode 100644 index 0000000..6f715d2 --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::OperatorSetParamsUpdated(uint8 quorumNumber, tuple operatorSetParams) + * @param context trigger object with contains {event: {quorumNumber ,operatorSetParams }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OperatorSetParamsUpdatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OperatorSetParamsUpdated here + + const { event, transaction, block, log } = context; + const { quorumNumber, operatorSetParams } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/OperatorSocketUpdate.ts b/EigenDA/src/handlers/operatorregistry/OperatorSocketUpdate.ts new file mode 100644 index 0000000..a449068 --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/OperatorSocketUpdate.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::OperatorSocketUpdate(bytes32 operatorId, string socket) + * @param context trigger object with contains {event: {operatorId ,socket }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OperatorSocketUpdateHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OperatorSocketUpdate here + + const { event, transaction, block, log } = context; + const { operatorId, socket } = event; +}; diff --git a/EigenDA/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts b/EigenDA/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts new file mode 100644 index 0000000..2596fa9 --- /dev/null +++ b/EigenDA/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::QuorumBlockNumberUpdated(uint8 quorumNumber, uint256 blocknumber) + * @param context trigger object with contains {event: {quorumNumber ,blocknumber }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const QuorumBlockNumberUpdatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for QuorumBlockNumberUpdated here + + const { event, transaction, block, log } = context; + const { quorumNumber, blocknumber } = event; +}; diff --git a/EigenDA/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts b/EigenDA/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts new file mode 100644 index 0000000..ac3d48c --- /dev/null +++ b/EigenDA/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::MinimumStakeForQuorumUpdated(uint8 quorumNumber, uint96 minimumStake) + * @param context trigger object with contains {event: {quorumNumber ,minimumStake }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const MinimumStakeForQuorumUpdatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for MinimumStakeForQuorumUpdated here + + const { event, transaction, block, log } = context; + const { quorumNumber, minimumStake } = event; +}; diff --git a/EigenDA/src/handlers/stakeregistry/OperatorStakeUpdate.ts b/EigenDA/src/handlers/stakeregistry/OperatorStakeUpdate.ts new file mode 100644 index 0000000..2ffdd87 --- /dev/null +++ b/EigenDA/src/handlers/stakeregistry/OperatorStakeUpdate.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::OperatorStakeUpdate(bytes32 operatorId, uint8 quorumNumber, uint96 stake) + * @param context trigger object with contains {event: {operatorId ,quorumNumber ,stake }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OperatorStakeUpdateHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OperatorStakeUpdate here + + const { event, transaction, block, log } = context; + const { operatorId, quorumNumber, stake } = event; +}; diff --git a/EigenDA/src/handlers/stakeregistry/QuorumCreated.ts b/EigenDA/src/handlers/stakeregistry/QuorumCreated.ts new file mode 100644 index 0000000..28e148a --- /dev/null +++ b/EigenDA/src/handlers/stakeregistry/QuorumCreated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::QuorumCreated(uint8 quorumNumber) + * @param context trigger object with contains {event: {quorumNumber }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const QuorumCreatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for QuorumCreated here + + const { event, transaction, block, log } = context; + const { quorumNumber } = event; +}; diff --git a/EigenDA/src/handlers/stakeregistry/StrategyAddedToQuorum.ts b/EigenDA/src/handlers/stakeregistry/StrategyAddedToQuorum.ts new file mode 100644 index 0000000..b1f1381 --- /dev/null +++ b/EigenDA/src/handlers/stakeregistry/StrategyAddedToQuorum.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::StrategyAddedToQuorum(uint8 quorumNumber, address strategy) + * @param context trigger object with contains {event: {quorumNumber ,strategy }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const StrategyAddedToQuorumHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for StrategyAddedToQuorum here + + const { event, transaction, block, log } = context; + const { quorumNumber, strategy } = event; +}; diff --git a/EigenDA/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts b/EigenDA/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts new file mode 100644 index 0000000..3232902 --- /dev/null +++ b/EigenDA/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::StrategyMultiplierUpdated(uint8 quorumNumber, address strategy, uint256 multiplier) + * @param context trigger object with contains {event: {quorumNumber ,strategy ,multiplier }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const StrategyMultiplierUpdatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for StrategyMultiplierUpdated here + + const { event, transaction, block, log } = context; + const { quorumNumber, strategy, multiplier } = event; +}; diff --git a/EigenDA/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts b/EigenDA/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts new file mode 100644 index 0000000..f8e39bd --- /dev/null +++ b/EigenDA/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::StrategyRemovedFromQuorum(uint8 quorumNumber, address strategy) + * @param context trigger object with contains {event: {quorumNumber ,strategy }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const StrategyRemovedFromQuorumHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for StrategyRemovedFromQuorum here + + const { event, transaction, block, log } = context; + const { quorumNumber, strategy } = event; +}; diff --git a/EigenDA/src/types/schema.ts b/EigenDA/src/types/schema.ts new file mode 100644 index 0000000..b767ee4 --- /dev/null +++ b/EigenDA/src/types/schema.ts @@ -0,0 +1,171 @@ +// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + +import { Document } from "@blockflow-labs/utils"; + +export class Batch { + static entity = "Batch"; + static schema = { + id: { type: "String", index: true }, + batchId: "string", + batchHeaderHash: "string", + gasFees: "string", + blockNumber: "string", + blockTimestamp: "string", + transactionHash: "string", + batchHeader: { + id: "String", + blobHeadersRoot: "string", + quorumNumbers: "number[]", + signedStakeForQuorums: "number[]", + referenceBlockNumber: "number", + }, + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class GasFees { + static entity = "GasFees"; + static schema = { + id: { type: "String", index: true }, + gasUsed: "string", + gasPrice: "string", + transactionFee: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class NewPubKeyRegistration { + static entity = "NewPubKeyRegistration"; + static schema = { + id: { type: "String", index: true }, + operator: "string", + pubkeyG1_X: "number", + pubkeyG1_Y: "number", + pubkeyG2_X: "number", + pubkeyG2_Y: "number", + blockNumber: "number", + blockTimestamp: "string", + transactionHash: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class OperatorAddedToQuorum { + static entity = "OperatorAddedToQuorum"; + static schema = { + id: { type: "String", index: true }, + operator: "string", + quorumNumbers: "string", + blockNumber: "number", + blockTimestamp: "string", + transactionHash: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class OperatorRemovedFromQuorum { + static entity = "OperatorRemovedFromQuorum"; + static schema = { + id: { type: "String", index: true }, + operator: "string", + quorumNumbers: "string", + blockNumber: "number", + blockTimestamp: "string", + transactionHash: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +import { String } from "@blockflow-labs/utils"; + +export interface IBatch extends Document { + id: String; + batchId: string; + batchHeaderHash: string; + gasFees: string; + blockNumber: string; + blockTimestamp: string; + transactionHash: string; + batchHeader: BatchHeader; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} +//issue in operator ID, how do ifetch it and nonsigners data too +//is it the same from operatorregistry +export interface IGasFees extends Document { + id: String; + gasUsed: string; + gasPrice: string; + transactionFee: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export type BatchHeader = { + id: String; + blobHeadersRoot: string; + quorumNumbers: number[]; + signedStakeForQuorums: number[]; + referenceBlockNumber: number; +}; + +export interface INewPubKeyRegistration extends Document { + id: String; + operator: string; + pubkeyG1_X: number; + pubkeyG1_Y: number; + pubkeyG2_X: number; + pubkeyG2_Y: number; + blockNumber: number; + blockTimestamp: string; + transactionHash: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IOperatorAddedToQuorum extends Document { + id: String; + operator: string; + quorumNumbers: string; + blockNumber: number; + blockTimestamp: string; + transactionHash: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IOperatorRemovedFromQuorum extends Document { + id: String; + operator: string; + quorumNumbers: string; + blockNumber: number; + blockTimestamp: string; + transactionHash: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/EigenDA/studio.schema.ts b/EigenDA/studio.schema.ts new file mode 100644 index 0000000..496446b --- /dev/null +++ b/EigenDA/studio.schema.ts @@ -0,0 +1,58 @@ +import { String } from "@blockflow-labs/utils"; + +export interface Batch { + id: String; + batchId: string; + batchHeaderHash: string; + gasFees: string; + blockNumber: string; + blockTimestamp: string; + transactionHash: string; + batchHeader: BatchHeader; +} +//issue in operator ID, how do ifetch it and nonsigners data too +//is it the same from operatorregistry +export interface GasFees{ + id: String; + gasUsed: string; + gasPrice: string; + transactionFee: string; +} + +export type BatchHeader = { + id: String; + blobHeadersRoot: string; + quorumNumbers: number[]; + signedStakeForQuorums: number[]; + referenceBlockNumber: number; +} + +export interface NewPubKeyRegistration{ + id: String; + operator: string; + pubkeyG1_X: number; + pubkeyG1_Y: number; + pubkeyG2_X: number; + pubkeyG2_Y: number; + blockNumber: number; + blockTimestamp: string; + transactionHash: string; +} + +export interface OperatorAddedToQuorum{ + id: String; + operator: string; + quorumNumbers: string; + blockNumber: number; + blockTimestamp: string; + transactionHash: string; +} + +export interface OperatorRemovedFromQuorum{ + id: String; + operator: string; + quorumNumbers: string; + blockNumber: number; + blockTimestamp: string; + transactionHash: string; +} \ No newline at end of file diff --git a/EigenDA/studio.yaml b/EigenDA/studio.yaml new file mode 100644 index 0000000..152e153 --- /dev/null +++ b/EigenDA/studio.yaml @@ -0,0 +1,103 @@ +name: Project Apollo +description: A top-secret research project to the moon +startBlock: latest +userId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +projectId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +network: Ethereum +user: Jane-doe +schema: + file: ./studio.schema.ts +execution: parallel +Resources: + - Name: operatorregistry + Abi: src/abis/operatorregistry.json + Type: contract/event + Address: "0x0BAAc79acD45A023E19345c352d8a7a83C4e5656" + Triggers: + - Event: ChurnApproverUpdated(address,address) + Handler: >- + src/handlers/operatorregistry/ChurnApproverUpdated.ChurnApproverUpdatedHandler + - Event: EjectorUpdated(address,address) + Handler: src/handlers/operatorregistry/EjectorUpdated.EjectorUpdatedHandler + - Event: Initialized(uint8) + Handler: src/handlers/operatorregistry/Initialized.InitializedHandler + - Event: OperatorDeregistered(address indexed,bytes32 indexed) + Handler: >- + src/handlers/operatorregistry/OperatorDeregistered.OperatorDeregisteredHandler + - Event: OperatorRegistered(address indexed,bytes32 indexed) + Handler: >- + src/handlers/operatorregistry/OperatorRegistered.OperatorRegisteredHandler + - Event: OperatorSetParamsUpdated(uint8 indexed,tuple(uint32,uint16,uint16)) + Handler: >- + src/handlers/operatorregistry/OperatorSetParamsUpdated.OperatorSetParamsUpdatedHandler + - Event: OperatorSocketUpdate(bytes32 indexed,string) + Handler: >- + src/handlers/operatorregistry/OperatorSocketUpdate.OperatorSocketUpdateHandler + - Event: QuorumBlockNumberUpdated(uint8 indexed,uint256) + Handler: >- + src/handlers/operatorregistry/QuorumBlockNumberUpdated.QuorumBlockNumberUpdatedHandler + - Event: Unpaused(address indexed,uint256) + Handler: src/handlers/operatorregistry/Unpaused.UnpausedHandler + - Name: stakeregistry + Abi: src/abis/stakeregistry.json + Type: contract/event + Address: "0x006124Ae7976137266feeBFb3F4D2BE4C073139D" + Triggers: + - Event: MinimumStakeForQuorumUpdated(uint8 indexed,uint96) + Handler: >- + src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.MinimumStakeForQuorumUpdatedHandler + - Event: OperatorStakeUpdate(bytes32 indexed,uint8,uint96) + Handler: >- + src/handlers/stakeregistry/OperatorStakeUpdate.OperatorStakeUpdateHandler + - Event: QuorumCreated(uint8 indexed) + Handler: src/handlers/stakeregistry/QuorumCreated.QuorumCreatedHandler + - Event: StrategyAddedToQuorum(uint8 indexed,address) + Handler: >- + src/handlers/stakeregistry/StrategyAddedToQuorum.StrategyAddedToQuorumHandler + - Event: StrategyMultiplierUpdated(uint8 indexed,address,uint256) + Handler: >- + src/handlers/stakeregistry/StrategyMultiplierUpdated.StrategyMultiplierUpdatedHandler + - Event: StrategyRemovedFromQuorum(uint8 indexed,address) + Handler: >- + src/handlers/stakeregistry/StrategyRemovedFromQuorum.StrategyRemovedFromQuorumHandler + - Name: indexregistry + Abi: src/abis/indexregistry.json + Type: contract/event + Address: "0xBd35a7a1CDeF403a6a99e4E8BA0974D198455030" + Triggers: + - Event: Initialized(uint8) + Handler: src/handlers/indexregistry/Initialized.InitializedHandler + - Event: QuorumIndexUpdate(bytes32 indexed,uint8,uint32) + Handler: src/handlers/indexregistry/QuorumIndexUpdate.QuorumIndexUpdateHandler + - Name: blsapkregistry + Abi: src/abis/blsapkregistry.json + Type: contract/event + Address: "0x00A5Fd09F6CeE6AE9C8b0E5e33287F7c82880505" + Triggers: + - Event: Initialized(uint8) + Handler: src/handlers/blsapkregistry/Initialized.InitializedHandler + - Event: >- + NewPubkeyRegistration(address + indexed,tuple(uint256,uint256),tuple(uint256[2],uint256[2])) + Handler: >- + src/handlers/blsapkregistry/NewPubkeyRegistration.NewPubkeyRegistrationHandler + - Event: OperatorAddedToQuorums(address,bytes32,bytes) + Handler: >- + src/handlers/blsapkregistry/OperatorAddedToQuorums.OperatorAddedToQuorumsHandler + - Event: OperatorRemovedFromQuorums(address,bytes32,bytes) + Handler: >- + src/handlers/blsapkregistry/OperatorRemovedFromQuorums.OperatorRemovedFromQuorumsHandler + - Name: eigendaservicemanager + Abi: src/abis/eigendaservicemanager.json + Type: contract/event + Address: "0x870679E138bCdf293b7Ff14dD44b70FC97e12fc0" + Triggers: + - Event: BatchConfirmed(bytes32 indexed,uint32) + Handler: >- + src/handlers/eigendaservicemanager/BatchConfirmed.BatchConfirmedHandler + - Event: BatchConfirmerStatusChanged(address,bool) + Handler: >- + src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.BatchConfirmerStatusChangedHandler + - Event: Initialized(uint8) + Handler: src/handlers/eigendaservicemanager/Initialized.InitializedHandler + \ No newline at end of file diff --git a/EigenDA/tsconfig.json b/EigenDA/tsconfig.json new file mode 100644 index 0000000..fb80a42 --- /dev/null +++ b/EigenDA/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "outDir": "./build/bin/", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From 6c7232a378c62953f0e55cf4e70cd7fe20cd30d7 Mon Sep 17 00:00:00 2001 From: vaibhavdwivedi-git Date: Wed, 17 Jul 2024 18:45:01 +0530 Subject: [PATCH 15/22] updated eigenda --- .DS_Store | Bin 6148 -> 8196 bytes EigenDA/.DS_Store | Bin 0 -> 6148 bytes EigenDA/{ => EigenDA-1}/.env.example | 0 EigenDA/{ => EigenDA-1}/.gitignore | 0 EigenDA/{ => EigenDA-1}/.studioignore | 0 EigenDA/{ => EigenDA-1}/README.md | 0 EigenDA/EigenDA-1/package-lock.json | 1923 +++++++++++++++++ EigenDA/EigenDA-1/package.json | 22 + .../src/abis/edasm.json} | 0 .../src/handlers/edasm/BatchConfirmed.ts | 56 + .../src/handlers/edasm/confirmBatch.ts | 96 + EigenDA/EigenDA-1/src/types/schema.ts | 140 ++ EigenDA/EigenDA-1/src/utils/g1.ts | 38 + EigenDA/EigenDA-1/src/utils/index.ts | 40 + EigenDA/EigenDA-1/studio.schema.ts | 41 + EigenDA/EigenDA-1/studio.yaml | 26 + EigenDA/{ => EigenDA-1}/tsconfig.json | 0 EigenDA/EigenDA-2/.DS_Store | Bin 0 -> 6148 bytes EigenDA/EigenDA-2/.env.example | 1 + EigenDA/EigenDA-2/.gitignore | 4 + EigenDA/EigenDA-2/.studioignore | 3 + EigenDA/EigenDA-2/README.md | 95 + EigenDA/{ => EigenDA-2}/package-lock.json | 0 EigenDA/{ => EigenDA-2}/package.json | 0 .../src/abis/blsapkregistry.json | 0 .../src/abis/eigendaservicemanager.json | 869 ++++++++ .../src/abis/indexregistry.json | 0 .../src/abis/operatorregistry.json | 0 .../src/abis/stakeregistry.json | 0 .../handlers/blsapkregistry/Initialized.ts | 0 .../blsapkregistry/NewPubkeyRegistration.ts | 0 .../blsapkregistry/OperatorAddedToQuorums.ts | 0 .../OperatorRemovedFromQuorums.ts | 0 .../eigendaservicemanager/BatchConfirmed.ts | 0 .../BatchConfirmerStatusChanged.ts | 0 .../eigendaservicemanager/Initialized.ts | 0 .../StaleStakesForbiddenUpdate.ts | 0 .../src/handlers/indexregistry/Initialized.ts | 0 .../indexregistry/QuorumIndexUpdate.ts | 0 .../operatorregistry/ChurnApproverUpdated.ts | 0 .../operatorregistry/EjectorUpdated.ts | 0 .../handlers/operatorregistry/Initialized.ts | 0 .../operatorregistry/OperatorDeregistered.ts | 0 .../operatorregistry/OperatorRegistered.ts | 0 .../OperatorSetParamsUpdated.ts | 0 .../operatorregistry/OperatorSocketUpdate.ts | 0 .../QuorumBlockNumberUpdated.ts | 0 .../MinimumStakeForQuorumUpdated.ts | 0 .../stakeregistry/OperatorStakeUpdate.ts | 0 .../handlers/stakeregistry/QuorumCreated.ts | 0 .../stakeregistry/StrategyAddedToQuorum.ts | 0 .../StrategyMultiplierUpdated.ts | 0 .../StrategyRemovedFromQuorum.ts | 0 EigenDA/{ => EigenDA-2}/src/types/schema.ts | 0 EigenDA/{ => EigenDA-2}/studio.schema.ts | 0 EigenDA/{ => EigenDA-2}/studio.yaml | 0 EigenDA/EigenDA-2/tsconfig.json | 14 + 57 files changed, 3368 insertions(+) create mode 100644 EigenDA/.DS_Store rename EigenDA/{ => EigenDA-1}/.env.example (100%) rename EigenDA/{ => EigenDA-1}/.gitignore (100%) rename EigenDA/{ => EigenDA-1}/.studioignore (100%) rename EigenDA/{ => EigenDA-1}/README.md (100%) create mode 100644 EigenDA/EigenDA-1/package-lock.json create mode 100644 EigenDA/EigenDA-1/package.json rename EigenDA/{src/abis/eigendaservicemanager.json => EigenDA-1/src/abis/edasm.json} (100%) create mode 100644 EigenDA/EigenDA-1/src/handlers/edasm/BatchConfirmed.ts create mode 100644 EigenDA/EigenDA-1/src/handlers/edasm/confirmBatch.ts create mode 100644 EigenDA/EigenDA-1/src/types/schema.ts create mode 100644 EigenDA/EigenDA-1/src/utils/g1.ts create mode 100644 EigenDA/EigenDA-1/src/utils/index.ts create mode 100644 EigenDA/EigenDA-1/studio.schema.ts create mode 100644 EigenDA/EigenDA-1/studio.yaml rename EigenDA/{ => EigenDA-1}/tsconfig.json (100%) create mode 100644 EigenDA/EigenDA-2/.DS_Store create mode 100644 EigenDA/EigenDA-2/.env.example create mode 100644 EigenDA/EigenDA-2/.gitignore create mode 100644 EigenDA/EigenDA-2/.studioignore create mode 100644 EigenDA/EigenDA-2/README.md rename EigenDA/{ => EigenDA-2}/package-lock.json (100%) rename EigenDA/{ => EigenDA-2}/package.json (100%) rename EigenDA/{ => EigenDA-2}/src/abis/blsapkregistry.json (100%) create mode 100644 EigenDA/EigenDA-2/src/abis/eigendaservicemanager.json rename EigenDA/{ => EigenDA-2}/src/abis/indexregistry.json (100%) rename EigenDA/{ => EigenDA-2}/src/abis/operatorregistry.json (100%) rename EigenDA/{ => EigenDA-2}/src/abis/stakeregistry.json (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/blsapkregistry/Initialized.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/blsapkregistry/NewPubkeyRegistration.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/eigendaservicemanager/BatchConfirmed.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/eigendaservicemanager/Initialized.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/indexregistry/Initialized.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/indexregistry/QuorumIndexUpdate.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/ChurnApproverUpdated.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/EjectorUpdated.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/Initialized.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/OperatorDeregistered.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/OperatorRegistered.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/OperatorSocketUpdate.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/stakeregistry/OperatorStakeUpdate.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/stakeregistry/QuorumCreated.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/stakeregistry/StrategyAddedToQuorum.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts (100%) rename EigenDA/{ => EigenDA-2}/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts (100%) rename EigenDA/{ => EigenDA-2}/src/types/schema.ts (100%) rename EigenDA/{ => EigenDA-2}/studio.schema.ts (100%) rename EigenDA/{ => EigenDA-2}/studio.yaml (100%) create mode 100644 EigenDA/EigenDA-2/tsconfig.json diff --git a/.DS_Store b/.DS_Store index 50e3c9971f697e66d9aae9a1b6b76465ebe8c551..c65e81c3a86a0188153df24097ce460d6d6476cb 100644 GIT binary patch literal 8196 zcmeHM&2G~`5S~rk#-UWo0i<$3Sn9P3O{u65mn2P*Dp5dn1qVPSsngWpc%%F@NL8hr zIDmKo4!i>5#uM-c@CrNw2L#{#B(gUYI3QHf9cg#$-EU@hzg>?r4iT~HASe+n5Rr=_ zbYTwFPek;KG9?+^atWHjo;D-C*NAun_k}66ZLkbj1}p=X0n318;50CRceW7sg!jJc zwY6oyGH@mt5b?o75xT7PNNE{5P{|Yk+Cj4vT+5&S(4J_3E^9qf8Z8i}Ore!2(Q&z)TO3j^VP7)QH2hH?9m?8DNdu&M^sFVFiTbV3@Lzr!!x}zurpMn zCOt>#rM2D+Mmzl+_Z;Kzr>Zee_AD}u1zZ>n)@5T|2TNptEOb2V*qe|YZS6V9_FL_5dR+g8%)oa&} zkMr)u#j7{Bcb`S=n7_o_AxyszXkOhc3eq!^(I;u);=IK0 z-+?|5b4=r93`*iLJu8-hQ^i15&1OO5{~ITN|36i8wv(|8SO)$s1I(%UwJLm$e@dC| zMXv3kJV6m6a3iIq2`ZV6L(6m=dh&-Mu0247Oy13?8P`F6JNf3X!- I&JY7X03pDY_W%F@ delta 135 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGjUEV6q~50D9Qqo2Z<$>7Z)VuZ6<}d>QQj8W+ diff --git a/EigenDA/.DS_Store b/EigenDA/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..62395eacab3aa593adfe634c7560378e806f5459 GIT binary patch literal 6148 zcmeHK%}N6?5T4Nrk&h;ANlmm&)hnL~+6qaj>wx=uWJ2Gm+(kWSWeDa&2oDD)SX`0i)2m3ukL zoqTxz@#fHv2Y5-%8hZ6o1y(cTY5y?v<8Xu*Tr_H~cKxL0Gorq)x%yNS2_eBiFc1s` z1Hr(L8Q?hunV%cR7z_jh!N5BM+#eE@m>r8@-8wMT768a=bQRdVFf%7PX2)U(4@4~$ zXsPNghFUt-lgDMpVrc22-h8M(`K@`;`gGJ!HC!|s#uy9)15*Z0ZMxw3zr`=pZ1Sfm zF$)HQfq%w;&bocK!AJSo`sMR@)+XpRl)|_|0|I+;3BZK=$VGLUKhZ{9b}WXh!u6UC PjEg`eB!*z%7Z`X25Wq4J literal 0 HcmV?d00001 diff --git a/EigenDA/.env.example b/EigenDA/EigenDA-1/.env.example similarity index 100% rename from EigenDA/.env.example rename to EigenDA/EigenDA-1/.env.example diff --git a/EigenDA/.gitignore b/EigenDA/EigenDA-1/.gitignore similarity index 100% rename from EigenDA/.gitignore rename to EigenDA/EigenDA-1/.gitignore diff --git a/EigenDA/.studioignore b/EigenDA/EigenDA-1/.studioignore similarity index 100% rename from EigenDA/.studioignore rename to EigenDA/EigenDA-1/.studioignore diff --git a/EigenDA/README.md b/EigenDA/EigenDA-1/README.md similarity index 100% rename from EigenDA/README.md rename to EigenDA/EigenDA-1/README.md diff --git a/EigenDA/EigenDA-1/package-lock.json b/EigenDA/EigenDA-1/package-lock.json new file mode 100644 index 0000000..d08a5bd --- /dev/null +++ b/EigenDA/EigenDA-1/package-lock.json @@ -0,0 +1,1923 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blockflow-studio", + "version": "1.0.8", + "dependencies": { + "@blockflow-labs/utils": "latest", + "@ethersproject/bytes": "^5.7.0", + "crypto": "^1.0.1", + "ethers": "^6.13.1" + }, + "devDependencies": { + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "node_modules/@blockflow-labs/utils": { + "version": "1.0.7-beta.1", + "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7-beta.1.tgz", + "integrity": "sha512-hr7WhTX9XaJhnuhuJGKZt9UDcdprEAklQ9y0c0h7GETPXmmO1R/gRlWY5rJk4oTcdufokMXxzAITqMFLWRHqcA==", + "dependencies": { + "mongoose": "^8.0.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "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/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/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "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/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.828", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz", + "integrity": "sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/ethers": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", + "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@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", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", + "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.1.tgz", + "integrity": "sha512-OhVcwVl91A1G6+XpjDcpkGP7l7ikZkxa0DylX7NT/lcEqAjggzSdqDxb48A+xsDxqNAr0ntSJ1yiE3+KJTOd5Q==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/typescript": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "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 + } + } + } + } +} diff --git a/EigenDA/EigenDA-1/package.json b/EigenDA/EigenDA-1/package.json new file mode 100644 index 0000000..0b2779e --- /dev/null +++ b/EigenDA/EigenDA-1/package.json @@ -0,0 +1,22 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8", + "description": "BlockFlow Studio Project", + "scripts": { + "compile": "tsc -b" + }, + "dependencies": { + "@blockflow-labs/utils": "latest", + "@ethersproject/bytes": "^5.7.0", + "crypto": "^1.0.1", + "ethers": "^6.13.1" + }, + "devDependencies": { + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4" + } +} diff --git a/EigenDA/src/abis/eigendaservicemanager.json b/EigenDA/EigenDA-1/src/abis/edasm.json similarity index 100% rename from EigenDA/src/abis/eigendaservicemanager.json rename to EigenDA/EigenDA-1/src/abis/edasm.json diff --git a/EigenDA/EigenDA-1/src/handlers/edasm/BatchConfirmed.ts b/EigenDA/EigenDA-1/src/handlers/edasm/BatchConfirmed.ts new file mode 100644 index 0000000..77cab1d --- /dev/null +++ b/EigenDA/EigenDA-1/src/handlers/edasm/BatchConfirmed.ts @@ -0,0 +1,56 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { BigNumber } from "bignumber.js"; + +import { GasFees, IGasFees } from "../../types/schema"; + +import { Batch, IBatch } from "../../types/schema"; + +/** + * @dev Event::BatchConfirmed(bytes32 batchHeaderHash, uint32 batchId) + * @param context trigger object with contains {event: {batchHeaderHash ,batchId }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const BatchConfirmedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets +) => { + // Implement your event handler logic for BatchConfirmed here + + const { event, transaction, block, log } = context; + const { batchHeaderHash, batchId } = event; + + const gasFeesDB: Instance = bind(GasFees); + const batchDB: Instance = bind(Batch); + + let id = transaction.transaction_hash; + + let gasFeesEntity: IGasFees = await gasFeesDB.findOne({ id: id }); + let batchEntity: IBatch = await batchDB.findOne({ id: id }); + + gasFeesEntity ??= await gasFeesDB.create({ + id: id, + gas_used: transaction.transaction_receipt_gas_used.toString(), + gas_price: transaction.transaction_gas_price.toString(), + transaction_fee: new BigNumber(transaction.transaction_receipt_gas_used) + .times(transaction.transaction_gas_price) + .toString(), + }); + + batchEntity ??= await batchDB.create({ + id: id, + batch_id: batchId.toString(), + batch_header_hash: batchHeaderHash.toString(), + batch_header: id, + non_signing: id, + gas_fees: id, + block_timestamp: block.block_timestamp, + transaction_hash: transaction.transaction_hash, + }); +}; diff --git a/EigenDA/EigenDA-1/src/handlers/edasm/confirmBatch.ts b/EigenDA/EigenDA-1/src/handlers/edasm/confirmBatch.ts new file mode 100644 index 0000000..8de5a93 --- /dev/null +++ b/EigenDA/EigenDA-1/src/handlers/edasm/confirmBatch.ts @@ -0,0 +1,96 @@ +import { + IFunctionContext, + IBind, + ISecrets, + Instance, +} from "@blockflow-labs/utils"; + +import { + hexStringToBigIntArray, + ComputeSignatoryRecordHash, +} from "../../utils"; + +import { BatchHeader, IBatchHeader } from "../../types/schema"; + +import { NonSigning, INonSigning } from "../../types/schema"; + +import { Operator, IOperator } from "../../types/schema"; + +import { G1Point } from "../../utils/g1"; +/** + * @dev Function::confirmBatch(tuple batchHeader, tuple nonSignerStakesAndSignature) + * @param context trigger object with contains {functionParams: {batchHeader ,nonSignerStakesAndSignature }, transaction, block} + * @param bind init function for database wrapper methods + */ +export const ConfirmBatchHandler = async ( + context: IFunctionContext, + bind: IBind, + secrets: ISecrets +) => { + const { functionParams, transaction, block } = context; + const { batchHeader, nonSignerStakesAndSignature } = functionParams; + + const batchHeaderDB: Instance = bind(BatchHeader); + const nonSigningDB: Instance = bind(NonSigning); + const operatorDB: Instance = bind(Operator); + + let id = transaction.transaction_hash; + + let batchHeaderEntity: IBatchHeader = await batchHeaderDB.findOne({ id: id }); + + batchHeaderEntity ??= await batchHeaderDB.create({ + id: id, + blob_headers_root: batchHeader.blobHeadersRoot, + quorum_numbers: hexStringToBigIntArray( + batchHeader.quorumNumbers.toString() + ), + signed_stake_for_quorums: hexStringToBigIntArray( + batchHeader.signedStakeForQuorums.toString() + ), + reference_blocknumber: batchHeader.referenceBlockNumber, + batch: id, + }); + + let nonSigners: string[] = []; + + for ( + let index = 0; + index < nonSignerStakesAndSignature.nonSignerPubkeys.length; + index++ + ) { + const pubKey = nonSignerStakesAndSignature.nonSignerPubkeys[index]; + + const point = new G1Point(pubKey); + + let operatorId = point.getOperatorID(); + + let operatorEntity: IOperator = await operatorDB.findOne({ + id: operatorId, + }); + + if (operatorEntity) { + operatorEntity.non_signings.push(id); + await operatorDB.save(operatorEntity); + } else { + await operatorDB.create({ + id: operatorId, + operator_id: operatorId, + non_signings: [id], + }); + } + } + + let signatoryRecordHash = ComputeSignatoryRecordHash( + parseInt(batchHeader.referenceBlockNumber.toString()), + nonSignerStakesAndSignature.nonSignerPubkeys + ); + + let nonSigningEntity: INonSigning = await nonSigningDB.findOne({ id: id }); + + nonSigningEntity ??= await nonSigningDB.create({ + id: id, + batch: id, + non_signers: nonSigners, + signatory_record_hash: signatoryRecordHash, + }); +}; diff --git a/EigenDA/EigenDA-1/src/types/schema.ts b/EigenDA/EigenDA-1/src/types/schema.ts new file mode 100644 index 0000000..ca76046 --- /dev/null +++ b/EigenDA/EigenDA-1/src/types/schema.ts @@ -0,0 +1,140 @@ +// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + +import { Document } from "@blockflow-labs/utils"; + +export class Batch { + static entity = "Batch"; + static schema = { + id: { type: "String", index: true }, + batch_id: "string", + batch_header_hash: "string", + batch_header: "string", + non_signing: "string", + gas_fees: "string", + block_timestamp: "string", + transaction_hash: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class GasFees { + static entity = "GasFees"; + static schema = { + id: { type: "String", index: true }, + gas_used: "string", + gas_price: "string", + transaction_fee: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class BatchHeader { + static entity = "BatchHeader"; + static schema = { + id: { type: "String", index: true }, + blob_headers_root: "string", + quorum_numbers: ["string"], + signed_stake_for_quorums: ["string"], + reference_blocknumber: "string", + batch: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class NonSigning { + static entity = "NonSigning"; + static schema = { + id: { type: "String", index: true }, + non_signers: ["string"], + batch: "string", + signatory_record_hash: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Operator { + static entity = "Operator"; + static schema = { + id: { type: "String", index: true }, + operator_id: "string", + non_signings: ["string"], + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +import { String } from "@blockflow-labs/utils"; + +export interface IBatch extends Document { + id: String; + batch_id: string; + batch_header_hash: string; + batch_header: string; + non_signing: string; + gas_fees: string; + block_timestamp: string; + transaction_hash: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IGasFees extends Document { + id: String; + gas_used: string; + gas_price: string; + transaction_fee: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IBatchHeader extends Document { + id: String; + blob_headers_root: string; + quorum_numbers: [string]; + signed_stake_for_quorums: [string]; + reference_blocknumber: string; + batch: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface INonSigning extends Document { + id: String; + non_signers: [string]; + batch: string; + signatory_record_hash: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IOperator extends Document { + id: string; + operator_id: string; + non_signings: [string]; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/EigenDA/EigenDA-1/src/utils/g1.ts b/EigenDA/EigenDA-1/src/utils/g1.ts new file mode 100644 index 0000000..2d30888 --- /dev/null +++ b/EigenDA/EigenDA-1/src/utils/g1.ts @@ -0,0 +1,38 @@ +import { keccak256 } from "ethers"; + +export class G1Point { + X: string; + Y: string; + + constructor(key: any) { + this.X = key.X.toHexString(); + this.Y = key.Y.toHexString(); + } + + toUint8Array(hexString: string): Uint8Array { + if (hexString.startsWith("0x")) { + hexString = hexString.slice(2); + } + if (hexString.length % 2 !== 0) { + hexString = "0" + hexString; + } + const byteArray = new Uint8Array(hexString.length / 2); + for (let i = 0; i < hexString.length; i += 2) { + byteArray[i / 2] = parseInt(hexString.slice(i, i + 2), 16); + } + return byteArray; + } + + getOperatorID(): string { + const xBytes = this.toUint8Array(this.X); + const yBytes = this.toUint8Array(this.Y); + const combined = new Uint8Array(xBytes.length + yBytes.length); + + combined.set(xBytes); + combined.set(yBytes, xBytes.length); + + const hash = keccak256(combined); + + return hash; + } +} diff --git a/EigenDA/EigenDA-1/src/utils/index.ts b/EigenDA/EigenDA-1/src/utils/index.ts new file mode 100644 index 0000000..9969e9f --- /dev/null +++ b/EigenDA/EigenDA-1/src/utils/index.ts @@ -0,0 +1,40 @@ +import { G1Point } from "./g1"; + +import { createHash } from "crypto"; + +export function hexStringToBigIntArray(hexString: string): Number[] { + if (hexString.startsWith("0x")) { + hexString = hexString.slice(2); + } + if (hexString.length % 2 !== 0) { + throw new Error("Invalid hex string"); + } + + let result: Number[] = []; + for (let i = 0; i < hexString.length; i += 2) { + let byteHex = hexString.substring(i, i + 2); + let byteValue = parseInt(byteHex, 16); + result.push(byteValue); + } + + return result; +} + +export function ComputeSignatoryRecordHash( + referenceBlockNumber: number, + nonSignerKeys: any[], +): string { + let buf = Buffer.alloc(4); + buf.writeUInt32BE(referenceBlockNumber); + + for (const nonSignerKey of nonSignerKeys) { + const point = new G1Point(nonSignerKey); + let operatorHash = point.getOperatorID(); + const hashBuffer = Buffer.from(operatorHash, "hex"); + buf = Buffer.concat([buf, hashBuffer]); + } + + const hasher = createHash("sha3-256"); + hasher.update(buf); + return hasher.digest("hex").substring(0, 64); +} diff --git a/EigenDA/EigenDA-1/studio.schema.ts b/EigenDA/EigenDA-1/studio.schema.ts new file mode 100644 index 0000000..5e02996 --- /dev/null +++ b/EigenDA/EigenDA-1/studio.schema.ts @@ -0,0 +1,41 @@ +import { String } from "@blockflow-labs/utils"; + +export interface Batch { + id: String; + batch_id: string; + batch_header_hash: string; + batch_header: string; + non_signing: string; + gas_fees: string; + block_timestamp: string; + transaction_hash: string; +} + +export interface GasFees { + id: String; + gas_used: string; + gas_price: string; + transaction_fee: string; +} + +export interface BatchHeader { + id: String; + blob_headers_root: string; + quorum_numbers: [string]; + signed_stake_for_quorums: [string]; + reference_blocknumber: string; + batch: string; +} + +export interface NonSigning { + id: String; + non_signers: [string]; + batch: string; + signatory_record_hash: string; +} + +export interface Operator { + id: string; + operator_id: string; + non_signings: [string]; +} diff --git a/EigenDA/EigenDA-1/studio.yaml b/EigenDA/EigenDA-1/studio.yaml new file mode 100644 index 0000000..b70881a --- /dev/null +++ b/EigenDA/EigenDA-1/studio.yaml @@ -0,0 +1,26 @@ +name: Eigen DA +description: It is to make blob explorer +startBlock: 20325977 +userId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +projectId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +network: Ethereum +user: Vaibhav Dwivedi +schema: + file: ./studio.schema.ts +execution: parallel +Resources: + - Name: edasm + Abi: src/abis/edasm.json + Type: contract/function + Address: "0x870679E138bCdf293b7Ff14dD44b70FC97e12fc0" + Triggers: + - Function: >- + confirmBatch((bytes32,bytes,bytes,uint32),(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][])) + Handler: src/handlers/edasm/confirmBatch.ConfirmBatchHandler + - Name: edasm + Abi: src/abis/edasm.json + Type: contract/event + Address: "0x870679E138bCdf293b7Ff14dD44b70FC97e12fc0" + Triggers: + - Event: BatchConfirmed(bytes32 indexed,uint32) + Handler: src/handlers/edasm/BatchConfirmed.BatchConfirmedHandler diff --git a/EigenDA/tsconfig.json b/EigenDA/EigenDA-1/tsconfig.json similarity index 100% rename from EigenDA/tsconfig.json rename to EigenDA/EigenDA-1/tsconfig.json diff --git a/EigenDA/EigenDA-2/.DS_Store b/EigenDA/EigenDA-2/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1fab4c1da5939f593bf70fa48065bf0797216acb GIT binary patch literal 6148 zcmeHKOHRWu5Pfd5fYM53#|DuL5Q!TEC<_*B-~iAMlut?!Pz1Z|5m(>}oQA`&f;VF$ zH7?yEgl44ii=BC%@vCCj0Nl=Wv;}klEYSs%7MmYT-iyy!BaEyNoz9Wr6p!d*f}6Q$ z8!!b-fxo7Je7kMPcYBQo#qaO8!0CQb4hKa!U<@~iWP_M}s_8OXj346y_w+IOC2r?9 zFA=9h&K((3jL0e%GqFwP>rA$`W*D*3W9}~{`BSh)+|{d8-fWet+>81c;)?B<@tb6o z+Rt#wT1s3;GrUDLx1$*r@Z5UDTgD;wSWgcJ#Eeys>Y3bg#AvdfTMVP9k0`2JQ&99A z;+!j+aD^GQjTC8&BmPRnf6^VhsAp}wN34#_%uLh^XZpJ>(4n~-G1)cyg9`A>7F&`% zz|0gd1x$fi1!R9n>4JH{%A;-_Z1f61OgOB@XSquVCk>bftUU4!&3P)(Q(d@XI8Wzz z8shSRl}As93zrWUGP`g?ahjd;ry35Id$iURFa_!gG<~-#=l|Z~`+uEeJyXCG_*V+J zq<7TY;gZ7HI=47EYg76OT} writes to studio.yaml file, should be used with care, we prefer to use it once you init the project + +```bash +blockflow generate +``` + +#### Generate Handlers + +To generate an events handler in` studio.yaml`, use the `blockflow instance-codegen` command. The handler will be generated at the `Resources?.Trigger?.Handler` path. + +> Once you've everything ready for instances or apis use this command + +```bash +blockflow codegen +``` + +#### Test the Code + +> It is required that you have a mongo db local running at uri "mongodb://localhost:27017" before running tests + +To test the code and generate a local mongo database, use the `blockflow instance-test` command. This will produce a database named blockflow_studio with collection name BLOCKFLOW_STUDIO + +```bash +blockflow instance-test +``` + +> you can even provide a start block `--startBlock `, or range of blocks to test `--range 10` + +#### Deploy the Project + +Once the project is created and tested, you can deploy it using the `blockflow instance-deploy` command. This will deploy the handler to the blockflow server for syncing. + +```bash +blockflow instance-deploy +``` + +### API + +#### Deploy API + +To deploy the API, use the `blockflow api-deploy` command. + +```bash +blockflow api-deploy +``` diff --git a/EigenDA/package-lock.json b/EigenDA/EigenDA-2/package-lock.json similarity index 100% rename from EigenDA/package-lock.json rename to EigenDA/EigenDA-2/package-lock.json diff --git a/EigenDA/package.json b/EigenDA/EigenDA-2/package.json similarity index 100% rename from EigenDA/package.json rename to EigenDA/EigenDA-2/package.json diff --git a/EigenDA/src/abis/blsapkregistry.json b/EigenDA/EigenDA-2/src/abis/blsapkregistry.json similarity index 100% rename from EigenDA/src/abis/blsapkregistry.json rename to EigenDA/EigenDA-2/src/abis/blsapkregistry.json diff --git a/EigenDA/EigenDA-2/src/abis/eigendaservicemanager.json b/EigenDA/EigenDA-2/src/abis/eigendaservicemanager.json new file mode 100644 index 0000000..8864703 --- /dev/null +++ b/EigenDA/EigenDA-2/src/abis/eigendaservicemanager.json @@ -0,0 +1,869 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "contract IAVSDirectory", + "name": "__avsDirectory", + "type": "address" + }, + { + "internalType": "contract IRegistryCoordinator", + "name": "__registryCoordinator", + "type": "address" + }, + { + "internalType": "contract IStakeRegistry", + "name": "__stakeRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHeaderHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "batchId", + "type": "uint32" + } + ], + "name": "BatchConfirmed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "batchConfirmer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "BatchConfirmerStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IPauserRegistry", + "name": "pauserRegistry", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address" + } + ], + "name": "PauserRegistrySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "value", + "type": "bool" + } + ], + "name": "StaleStakesForbiddenUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "BLOCK_STALE_MEASURE", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STORE_DURATION_BLOCKS", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "THRESHOLD_DENOMINATOR", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "avsDirectory", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "batchId", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "name": "batchIdToBatchMetadataHash", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blsApkRegistry", + "outputs": [ + { + "internalType": "contract IBLSApkRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32[]", + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "nonSignerPubkeys", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "quorumApks", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple" + }, + { + "internalType": "uint32[]", + "name": "quorumApkIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[]", + "name": "totalStakeIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[][]", + "name": "nonSignerStakeIndices", + "type": "uint32[][]" + } + ], + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "name": "params", + "type": "tuple" + } + ], + "name": "checkSignatures", + "outputs": [ + { + "components": [ + { + "internalType": "uint96[]", + "name": "signedStakeForQuorum", + "type": "uint96[]" + }, + { + "internalType": "uint96[]", + "name": "totalStakeForQuorum", + "type": "uint96[]" + } + ], + "internalType": "struct IBLSSignatureChecker.QuorumStakeTotals", + "name": "", + "type": "tuple" + }, + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "blobHeadersRoot", + "type": "bytes32" + }, + { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, + { + "internalType": "bytes", + "name": "signedStakeForQuorums", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + } + ], + "internalType": "struct IEigenDAServiceManager.BatchHeader", + "name": "batchHeader", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint32[]", + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "nonSignerPubkeys", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point[]", + "name": "quorumApks", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ], + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple" + }, + { + "internalType": "uint32[]", + "name": "quorumApkIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[]", + "name": "totalStakeIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[][]", + "name": "nonSignerStakeIndices", + "type": "uint32[][]" + } + ], + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "name": "nonSignerStakesAndSignature", + "type": "tuple" + } + ], + "name": "confirmBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delegation", + "outputs": [ + { + "internalType": "contract IDelegationManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "deregisterOperatorFromAVS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" } + ], + "name": "getOperatorRestakedStrategies", + "outputs": [ + { "internalType": "address[]", "name": "", "type": "address[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRestakeableStrategies", + "outputs": [ + { "internalType": "address[]", "name": "", "type": "address[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "_pauserRegistry", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_initialPausedStatus", + "type": "uint256" + }, + { "internalType": "address", "name": "_initialOwner", "type": "address" }, + { + "internalType": "address[]", + "name": "_batchConfirmers", + "type": "address[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "isBatchConfirmer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + } + ], + "name": "latestServeUntilBlock", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "index", "type": "uint8" }], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauserRegistry", + "outputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumAdversaryThresholdPercentages", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumConfirmationThresholdPercentages", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumNumbersRequired", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { + "components": [ + { "internalType": "bytes", "name": "signature", "type": "bytes" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint256", "name": "expiry", "type": "uint256" } + ], + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "name": "operatorSignature", + "type": "tuple" + } + ], + "name": "registerOperatorToAVS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "registryCoordinator", + "outputs": [ + { + "internalType": "contract IRegistryCoordinator", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_batchConfirmer", + "type": "address" + } + ], + "name": "setBatchConfirmer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address" + } + ], + "name": "setPauserRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "value", "type": "bool" }], + "name": "setStaleStakesForbidden", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeRegistry", + "outputs": [ + { + "internalType": "contract IStakeRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "staleStakesForbidden", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "taskNumber", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "apk", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256[2]", "name": "X", "type": "uint256[2]" }, + { "internalType": "uint256[2]", "name": "Y", "type": "uint256[2]" } + ], + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "X", "type": "uint256" }, + { "internalType": "uint256", "name": "Y", "type": "uint256" } + ], + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple" + } + ], + "name": "trySignatureAndApkVerification", + "outputs": [ + { "internalType": "bool", "name": "pairingSuccessful", "type": "bool" }, + { "internalType": "bool", "name": "siganatureIsValid", "type": "bool" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "string", "name": "_metadataURI", "type": "string" } + ], + "name": "updateAVSMetadataURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/EigenDA/src/abis/indexregistry.json b/EigenDA/EigenDA-2/src/abis/indexregistry.json similarity index 100% rename from EigenDA/src/abis/indexregistry.json rename to EigenDA/EigenDA-2/src/abis/indexregistry.json diff --git a/EigenDA/src/abis/operatorregistry.json b/EigenDA/EigenDA-2/src/abis/operatorregistry.json similarity index 100% rename from EigenDA/src/abis/operatorregistry.json rename to EigenDA/EigenDA-2/src/abis/operatorregistry.json diff --git a/EigenDA/src/abis/stakeregistry.json b/EigenDA/EigenDA-2/src/abis/stakeregistry.json similarity index 100% rename from EigenDA/src/abis/stakeregistry.json rename to EigenDA/EigenDA-2/src/abis/stakeregistry.json diff --git a/EigenDA/src/handlers/blsapkregistry/Initialized.ts b/EigenDA/EigenDA-2/src/handlers/blsapkregistry/Initialized.ts similarity index 100% rename from EigenDA/src/handlers/blsapkregistry/Initialized.ts rename to EigenDA/EigenDA-2/src/handlers/blsapkregistry/Initialized.ts diff --git a/EigenDA/src/handlers/blsapkregistry/NewPubkeyRegistration.ts b/EigenDA/EigenDA-2/src/handlers/blsapkregistry/NewPubkeyRegistration.ts similarity index 100% rename from EigenDA/src/handlers/blsapkregistry/NewPubkeyRegistration.ts rename to EigenDA/EigenDA-2/src/handlers/blsapkregistry/NewPubkeyRegistration.ts diff --git a/EigenDA/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts b/EigenDA/EigenDA-2/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts similarity index 100% rename from EigenDA/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts rename to EigenDA/EigenDA-2/src/handlers/blsapkregistry/OperatorAddedToQuorums.ts diff --git a/EigenDA/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts b/EigenDA/EigenDA-2/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts similarity index 100% rename from EigenDA/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts rename to EigenDA/EigenDA-2/src/handlers/blsapkregistry/OperatorRemovedFromQuorums.ts diff --git a/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmed.ts b/EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/BatchConfirmed.ts similarity index 100% rename from EigenDA/src/handlers/eigendaservicemanager/BatchConfirmed.ts rename to EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/BatchConfirmed.ts diff --git a/EigenDA/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts b/EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts similarity index 100% rename from EigenDA/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts rename to EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/BatchConfirmerStatusChanged.ts diff --git a/EigenDA/src/handlers/eigendaservicemanager/Initialized.ts b/EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/Initialized.ts similarity index 100% rename from EigenDA/src/handlers/eigendaservicemanager/Initialized.ts rename to EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/Initialized.ts diff --git a/EigenDA/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts b/EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts similarity index 100% rename from EigenDA/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts rename to EigenDA/EigenDA-2/src/handlers/eigendaservicemanager/StaleStakesForbiddenUpdate.ts diff --git a/EigenDA/src/handlers/indexregistry/Initialized.ts b/EigenDA/EigenDA-2/src/handlers/indexregistry/Initialized.ts similarity index 100% rename from EigenDA/src/handlers/indexregistry/Initialized.ts rename to EigenDA/EigenDA-2/src/handlers/indexregistry/Initialized.ts diff --git a/EigenDA/src/handlers/indexregistry/QuorumIndexUpdate.ts b/EigenDA/EigenDA-2/src/handlers/indexregistry/QuorumIndexUpdate.ts similarity index 100% rename from EigenDA/src/handlers/indexregistry/QuorumIndexUpdate.ts rename to EigenDA/EigenDA-2/src/handlers/indexregistry/QuorumIndexUpdate.ts diff --git a/EigenDA/src/handlers/operatorregistry/ChurnApproverUpdated.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/ChurnApproverUpdated.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/ChurnApproverUpdated.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/ChurnApproverUpdated.ts diff --git a/EigenDA/src/handlers/operatorregistry/EjectorUpdated.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/EjectorUpdated.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/EjectorUpdated.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/EjectorUpdated.ts diff --git a/EigenDA/src/handlers/operatorregistry/Initialized.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/Initialized.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/Initialized.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/Initialized.ts diff --git a/EigenDA/src/handlers/operatorregistry/OperatorDeregistered.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorDeregistered.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/OperatorDeregistered.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorDeregistered.ts diff --git a/EigenDA/src/handlers/operatorregistry/OperatorRegistered.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorRegistered.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/OperatorRegistered.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorRegistered.ts diff --git a/EigenDA/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorSetParamsUpdated.ts diff --git a/EigenDA/src/handlers/operatorregistry/OperatorSocketUpdate.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorSocketUpdate.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/OperatorSocketUpdate.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/OperatorSocketUpdate.ts diff --git a/EigenDA/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts b/EigenDA/EigenDA-2/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts similarity index 100% rename from EigenDA/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts rename to EigenDA/EigenDA-2/src/handlers/operatorregistry/QuorumBlockNumberUpdated.ts diff --git a/EigenDA/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts b/EigenDA/EigenDA-2/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts similarity index 100% rename from EigenDA/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts rename to EigenDA/EigenDA-2/src/handlers/stakeregistry/MinimumStakeForQuorumUpdated.ts diff --git a/EigenDA/src/handlers/stakeregistry/OperatorStakeUpdate.ts b/EigenDA/EigenDA-2/src/handlers/stakeregistry/OperatorStakeUpdate.ts similarity index 100% rename from EigenDA/src/handlers/stakeregistry/OperatorStakeUpdate.ts rename to EigenDA/EigenDA-2/src/handlers/stakeregistry/OperatorStakeUpdate.ts diff --git a/EigenDA/src/handlers/stakeregistry/QuorumCreated.ts b/EigenDA/EigenDA-2/src/handlers/stakeregistry/QuorumCreated.ts similarity index 100% rename from EigenDA/src/handlers/stakeregistry/QuorumCreated.ts rename to EigenDA/EigenDA-2/src/handlers/stakeregistry/QuorumCreated.ts diff --git a/EigenDA/src/handlers/stakeregistry/StrategyAddedToQuorum.ts b/EigenDA/EigenDA-2/src/handlers/stakeregistry/StrategyAddedToQuorum.ts similarity index 100% rename from EigenDA/src/handlers/stakeregistry/StrategyAddedToQuorum.ts rename to EigenDA/EigenDA-2/src/handlers/stakeregistry/StrategyAddedToQuorum.ts diff --git a/EigenDA/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts b/EigenDA/EigenDA-2/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts similarity index 100% rename from EigenDA/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts rename to EigenDA/EigenDA-2/src/handlers/stakeregistry/StrategyMultiplierUpdated.ts diff --git a/EigenDA/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts b/EigenDA/EigenDA-2/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts similarity index 100% rename from EigenDA/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts rename to EigenDA/EigenDA-2/src/handlers/stakeregistry/StrategyRemovedFromQuorum.ts diff --git a/EigenDA/src/types/schema.ts b/EigenDA/EigenDA-2/src/types/schema.ts similarity index 100% rename from EigenDA/src/types/schema.ts rename to EigenDA/EigenDA-2/src/types/schema.ts diff --git a/EigenDA/studio.schema.ts b/EigenDA/EigenDA-2/studio.schema.ts similarity index 100% rename from EigenDA/studio.schema.ts rename to EigenDA/EigenDA-2/studio.schema.ts diff --git a/EigenDA/studio.yaml b/EigenDA/EigenDA-2/studio.yaml similarity index 100% rename from EigenDA/studio.yaml rename to EigenDA/EigenDA-2/studio.yaml diff --git a/EigenDA/EigenDA-2/tsconfig.json b/EigenDA/EigenDA-2/tsconfig.json new file mode 100644 index 0000000..fb80a42 --- /dev/null +++ b/EigenDA/EigenDA-2/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "outDir": "./build/bin/", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From a08112b05be273cc881380fb6ea28316cb1bdcde Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Fri, 19 Jul 2024 21:34:54 +0530 Subject: [PATCH 16/22] xERC20 added Signed-off-by: d4v1d03 --- xERC20/.env.example | 1 + xERC20/.gitignore | 4 + xERC20/.studioignore | 3 + xERC20/README.md | 95 + xERC20/package-lock.json | 1792 +++++++++++++++++ xERC20/package.json | 19 + xERC20/src/abis/blockflow.json | 631 ++++++ .../src/handlers/blockflow/BridgeLimitsSet.ts | 53 + xERC20/src/handlers/blockflow/LockboxSet.ts | 40 + xERC20/src/handlers/blockflow/Transfer.ts | 228 +++ xERC20/src/types/schema.ts | 204 ++ xERC20/src/utils/tokens.ts | 21 + xERC20/studio.schema.ts | 73 + xERC20/studio.yaml | 22 + xERC20/tsconfig.json | 14 + 15 files changed, 3200 insertions(+) create mode 100644 xERC20/.env.example create mode 100644 xERC20/.gitignore create mode 100644 xERC20/.studioignore create mode 100644 xERC20/README.md create mode 100644 xERC20/package-lock.json create mode 100644 xERC20/package.json create mode 100644 xERC20/src/abis/blockflow.json create mode 100644 xERC20/src/handlers/blockflow/BridgeLimitsSet.ts create mode 100644 xERC20/src/handlers/blockflow/LockboxSet.ts create mode 100644 xERC20/src/handlers/blockflow/Transfer.ts create mode 100644 xERC20/src/types/schema.ts create mode 100644 xERC20/src/utils/tokens.ts create mode 100644 xERC20/studio.schema.ts create mode 100644 xERC20/studio.yaml create mode 100644 xERC20/tsconfig.json diff --git a/xERC20/.env.example b/xERC20/.env.example new file mode 100644 index 0000000..be00d3b --- /dev/null +++ b/xERC20/.env.example @@ -0,0 +1 @@ +ITS_A_SECRET=shhhhh \ No newline at end of file diff --git a/xERC20/.gitignore b/xERC20/.gitignore new file mode 100644 index 0000000..fbaaa6d --- /dev/null +++ b/xERC20/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +dist +.env \ No newline at end of file diff --git a/xERC20/.studioignore b/xERC20/.studioignore new file mode 100644 index 0000000..337477c --- /dev/null +++ b/xERC20/.studioignore @@ -0,0 +1,3 @@ +node_modules/** +.env +build/** diff --git a/xERC20/README.md b/xERC20/README.md new file mode 100644 index 0000000..644f951 --- /dev/null +++ b/xERC20/README.md @@ -0,0 +1,95 @@ +# BlockFlow Studio + +This is your BlockFlow Studio project. + +## Configuration (studio.yaml) + +BlockFlow Studio uses a YAML configuration file to manage your project settings. The configuration file should be named `studio.yaml` and located in the root folder of your project. Here are the configuration options: + +- `name`: The name of your BlockFlow project. + +- `description`: A description of your BlockFlow project. + +- `startBlock`: The starting block number from which the instance + +- `network`: The blockchain network you are working with (e.g., Ethereum, Polygon). + +- `userId`: You blockflow account userId. (For auth) + +- `execution`: Whether the execution of instances should be 'parallel' or 'sequencial'. + +- `Resources`: An array of configs. Each config is specific to trigger type. + + - `name`: The name of the contract. (should be camelcase without any spaces) + + - `contract`: The contract address to sync. (should be in string format) + + - `events`: The event signature. (generated by studio create command) + + - `abi`: The path to the ABI file for the contract. (should end with `.json`) + + - `handler`: The path to the code Handler file. + +## How to Use BlockFlow Studio + +### Project Initialization + +To initialize a project in an empty directory, use the `blockflow init` command. This will open a command prompt where you can configure your project interactively. + +```bash +blockflow init +``` + +Before using other commands mentioned below, update the `studio.yaml` file with `userId`, `projectId` and `startBlock` for your project. + +### Instance + +#### Generate Events List + +To generate an events list in `studio.yaml`, which will be used to configure the handler, use the `blockflow instance-generate` command. This will automatically fetch the added contracts ABIs and update the events/functions list. + +> writes to studio.yaml file, should be used with care, we prefer to use it once you init the project + +```bash +blockflow generate +``` + +#### Generate Handlers + +To generate an events handler in` studio.yaml`, use the `blockflow instance-codegen` command. The handler will be generated at the `Resources?.Trigger?.Handler` path. + +> Once you've everything ready for instances or apis use this command + +```bash +blockflow codegen +``` + +#### Test the Code + +> It is required that you have a mongo db local running at uri "mongodb://localhost:27017" before running tests + +To test the code and generate a local mongo database, use the `blockflow instance-test` command. This will produce a database named blockflow_studio with collection name BLOCKFLOW_STUDIO + +```bash +blockflow instance-test +``` + +> you can even provide a start block `--startBlock `, or range of blocks to test `--range 10` + +#### Deploy the Project + +Once the project is created and tested, you can deploy it using the `blockflow instance-deploy` command. This will deploy the handler to the blockflow server for syncing. + +```bash +blockflow instance-deploy +``` + +### API + +#### Deploy API + +To deploy the API, use the `blockflow api-deploy` command. + +```bash +blockflow api-deploy +``` diff --git a/xERC20/package-lock.json b/xERC20/package-lock.json new file mode 100644 index 0000000..0db7ed8 --- /dev/null +++ b/xERC20/package-lock.json @@ -0,0 +1,1792 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/@blockflow-labs/utils": { + "version": "1.0.7-beta.1", + "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7-beta.1.tgz", + "integrity": "sha512-hr7WhTX9XaJhnuhuJGKZt9UDcdprEAklQ9y0c0h7GETPXmmO1R/gRlWY5rJk4oTcdufokMXxzAITqMFLWRHqcA==", + "dependencies": { + "mongoose": "^8.0.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz", + "integrity": "sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "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/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", + "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.829", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.829.tgz", + "integrity": "sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", + "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.1.tgz", + "integrity": "sha512-OhVcwVl91A1G6+XpjDcpkGP7l7ikZkxa0DylX7NT/lcEqAjggzSdqDxb48A+xsDxqNAr0ntSJ1yiE3+KJTOd5Q==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz", + "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/typescript": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + } + } +} diff --git a/xERC20/package.json b/xERC20/package.json new file mode 100644 index 0000000..5f020e8 --- /dev/null +++ b/xERC20/package.json @@ -0,0 +1,19 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "description": "BlockFlow Studio Project", + "scripts": { + "compile": "tsc -b" + }, + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "typescript": "^5.1.6", + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4", + "ts-loader": "^9.5.0" + } +} diff --git a/xERC20/src/abis/blockflow.json b/xERC20/src/abis/blockflow.json new file mode 100644 index 0000000..47d7457 --- /dev/null +++ b/xERC20/src/abis/blockflow.json @@ -0,0 +1,631 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "initialOwner", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { "internalType": "address", "name": "admin", "type": "address" } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "implementation", "type": "address" } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, + { "inputs": [], "name": "ProxyDeniedAdminAccess", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { "stateMutability": "payable", "type": "receive" }, + { "inputs": [], "name": "IXERC20_NotFactory", "type": "error" }, + { "inputs": [], "name": "IXERC20_NotHighEnoughLimits", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_mintingLimit", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_burningLimit", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "_bridge", + "type": "address" + } + ], + "name": "BridgeLimitsSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_lockbox", + "type": "address" + } + ], + "name": "LockboxSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "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": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FACTORY", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" } + ], + "name": "allowance", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "approve", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "balanceOf", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "bridges", + "outputs": [ + { + "components": [ + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + }, + { "internalType": "uint256", "name": "maxLimit", "type": "uint256" }, + { + "internalType": "uint256", + "name": "currentLimit", + "type": "uint256" + } + ], + "internalType": "struct IXERC20.BridgeParameters", + "name": "minterParams", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + }, + { "internalType": "uint256", "name": "maxLimit", "type": "uint256" }, + { + "internalType": "uint256", + "name": "currentLimit", + "type": "uint256" + } + ], + "internalType": "struct IXERC20.BridgeParameters", + "name": "burnerParams", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_user", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_bridge", "type": "address" } + ], + "name": "burningCurrentLimitOf", + "outputs": [ + { "internalType": "uint256", "name": "_limit", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_bridge", "type": "address" } + ], + "name": "burningMaxLimitOf", + "outputs": [ + { "internalType": "uint256", "name": "_limit", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, + { "internalType": "string", "name": "name", "type": "string" }, + { "internalType": "string", "name": "version", "type": "string" }, + { "internalType": "uint256", "name": "chainId", "type": "uint256" }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "addedValue", "type": "uint256" } + ], + "name": "increaseAllowance", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_factory", "type": "address" }, + { "internalType": "address", "name": "_owner", "type": "address" }, + { "internalType": "address[]", "name": "_bridges", "type": "address[]" }, + { + "internalType": "uint256[]", + "name": "_mintingLimits", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_burningLimits", + "type": "uint256[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "lockbox", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_user", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_bridge", "type": "address" } + ], + "name": "mintingCurrentLimitOf", + "outputs": [ + { "internalType": "uint256", "name": "_limit", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_bridge", "type": "address" } + ], + "name": "mintingMaxLimitOf", + "outputs": [ + { "internalType": "uint256", "name": "_limit", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "name": "nonces", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "deadline", "type": "uint256" }, + { "internalType": "uint8", "name": "v", "type": "uint8" }, + { "internalType": "bytes32", "name": "r", "type": "bytes32" }, + { "internalType": "bytes32", "name": "s", "type": "bytes32" } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newlyProposed", "type": "address" } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_factory", "type": "address" } + ], + "name": "setFactory", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_bridge", "type": "address" }, + { "internalType": "uint256", "name": "_mintingLimit", "type": "uint256" }, + { "internalType": "uint256", "name": "_burningLimit", "type": "uint256" } + ], + "name": "setLimits", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_lockbox", "type": "address" } + ], + "name": "setLockbox", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/xERC20/src/handlers/blockflow/BridgeLimitsSet.ts b/xERC20/src/handlers/blockflow/BridgeLimitsSet.ts new file mode 100644 index 0000000..9a3e44c --- /dev/null +++ b/xERC20/src/handlers/blockflow/BridgeLimitsSet.ts @@ -0,0 +1,53 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; +import{ + IBridgeLimitsSet, + BridgeLimitsSet +} from "../../types/schema"; + +/** + * @dev Event::BridgeLimitsSet(uint256 _mintingLimit, uint256 _burningLimit, address _bridge) + * @param context trigger object with contains {event: {_mintingLimit ,_burningLimit ,_bridge }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const BridgeLimitsSetHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for BridgeLimitsSet here + + const { event, transaction, block, log } = context; + const { _mintingLimit, _burningLimit, _bridge } = event; + + const bridgeLimitsSetDB: Instance = bind(BridgeLimitsSet); + const bridgeId = `${_bridge.toString()}`.toLowerCase(); + + let bridgedata = await bridgeLimitsSetDB.findOne({ + id: bridgeId + }); + if(!bridgeId){ + bridgedata = await bridgeLimitsSetDB.create({ + id: bridgeId, + mintingLimit: _mintingLimit, + burningLimit: _burningLimit, + bridge: _bridge, + block_timestamp: block.block_timestamp, + block_hash: block.block_hash, + block_number: block.block_number + }); + } + else{ + bridgedata.mintingLimit = _mintingLimit; + bridgedata.burningLimit = _burningLimit; + bridgedata.block_timestamp = block.block_timestamp; + bridgedata.block_hash = block.block_hash; + bridgedata.block_number = block.block_number; + + await bridgeLimitsSetDB.save(bridgedata); + } +}; diff --git a/xERC20/src/handlers/blockflow/LockboxSet.ts b/xERC20/src/handlers/blockflow/LockboxSet.ts new file mode 100644 index 0000000..9f1a80b --- /dev/null +++ b/xERC20/src/handlers/blockflow/LockboxSet.ts @@ -0,0 +1,40 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { LockBoxSet } from "../../types/schema"; + +/** + * @dev Event::LockboxSet(address _lockbox) + * @param context trigger object with contains {event: {_lockbox }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const LockboxSetHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for LockboxSet here + + const { event, transaction, block, log } = context; + const { _lockbox } = event; + + const LockBoxSetDB: Instance = bind(LockBoxSet); + let lockboxset = await LockBoxSetDB.findOne({ + id: _lockbox + }); + //should lockbox id be the address itself only??? + if(!lockboxset){ + await LockBoxSetDB.create({ + id: _lockbox, + lockboxaddress: _lockbox, + block_timestamp: block.block_timestamp, + block_hash: block.block_hash, + block_number: block.block_number + }) + } + +}; diff --git a/xERC20/src/handlers/blockflow/Transfer.ts b/xERC20/src/handlers/blockflow/Transfer.ts new file mode 100644 index 0000000..373d757 --- /dev/null +++ b/xERC20/src/handlers/blockflow/Transfer.ts @@ -0,0 +1,228 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, + ITransaction, + IBlock, + ILog +} from "@blockflow-labs/utils"; +import { BigNumber } from "bignumber.js"; +import { getTokenMetadata } from "../../utils/tokens"; + +import { ITransfer, Transfer } from "../../types/schema"; +import { IBalance, Balance } from "../../types/schema"; +import { IToken, Token } from "../../types/schema"; + +/** + * @dev Event::Transfer(address from, address to, uint256 value) + * @param context trigger object with contains {event: {from ,to ,value }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const TransferHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Transfer here + + const { event, transaction, block, log } = context; + const { from, to, value } = event; + + const ZERO_ADDR = "0x0000000000000000000000000000000000000000"; + const tokenAddress = log.log_address; + const fromAddress = from.toLowerCase(); + const toAddress = to.toLowerCase(); + const transferType = fromAddress === ZERO_ADDR ? "mint" : toAddress === ZERO_ADDR ? "burn" : "transfer"; + const tokenMetadata = getTokenMetadata(tokenAddress); + const transactionId =`${transaction.transaction_hash.toString()}:${log.log_index.toString()}`.toLowerCase(); + const tokenDecimals = parseInt(tokenMetadata.decimals.toString()); + const amount = new BigNumber(value).dividedBy(10 ** tokenDecimals); + + const transferDB: Instance = bind(Transfer); + const balanceDB: Instance = bind(Balance); + const tokenDB: Instance = bind(Token); + + interface IUpdateBalanceResult { + user: IBalance; + isFirstTimeHolder: boolean; + isActiveHolder: boolean; + } + + const updateBalance = async ( + balanceDB: Instance, + tokenAddress: string, + address: string, + value: string, + block: IBlock, + isSender: boolean + ): Promise => { + const tokenMetadata = getTokenMetadata(tokenAddress); + let isFirstTimeHolder = false; + let isActiveHolder = true; + + const userTokenId = `${address}-${tokenAddress}`.toLowerCase(); + let user: IBalance = await balanceDB.findOne({ id: userTokenId }); + + if (!user) { + user ??= await balanceDB.create({ + id: userTokenId, + is_past_holder: true, + is_holder: true, + }); + + isFirstTimeHolder = true; + } + user.raw_balance = new BigNumber(user.raw_balance || "0") + .plus(isSender ? `-${value}` : value) + .toString(); + + const tokenDecimals = parseInt(tokenMetadata.decimals.toString()); + + const balance = new BigNumber(user.raw_balance) + .dividedBy(10 ** tokenDecimals) + .toString(); + + user.address = address; + user.token_address = tokenAddress; + user.token_name = tokenMetadata.name; + user.token_symbol = tokenMetadata.symbol; + user.balance = balance; + user.usd_amount = balance; + user.usd_exchange_rate = balance; + user.block_timestamp = block.block_timestamp; + user.block_hash = block.block_hash; + + return { user, isFirstTimeHolder, isActiveHolder }; + }; + + const senderResult: IUpdateBalanceResult = await updateBalance( + balanceDB, + tokenAddress, + fromAddress, + value, + block, + true + ); + const receiverResult: IUpdateBalanceResult = await updateBalance( + balanceDB, + tokenAddress, + toAddress, + value, + block, + false + ); + + await Promise.all([ + balanceDB.save(senderResult.user), + balanceDB.save(receiverResult.user), + ]); + let holderCount = + (senderResult.isFirstTimeHolder ? 1 : 0) + + (receiverResult.isFirstTimeHolder ? 1 : 0); + holderCount -= senderResult.isActiveHolder ? 0 : 1; + holderCount -= receiverResult.isActiveHolder ? 0 : 1; + + let transfer = await transferDB.create({ + id: transactionId, + from_address: fromAddress, + to_address: toAddress, + token_address: tokenAddress, + token_name: tokenMetadata.name, + token_symbol: tokenMetadata.symbol, + raw_amount: Number(value), + raw_amount_str: value, + amount: Number(amount), + amount_str: amount.toString(), + usd_amount: Number(value), + usd_exchange_rate: value, + transfer_type: transferType, + transaction_from_address: transaction.transaction_from_address.toString().toLowerCase(), + transaction_to_address: transaction.transaction_to_address.toString().toLowerCase(), + transaction_hash: transaction.transaction_hash.toString(), + log_index: log.log_index.toString(), + block_timestamp: block.block_timestamp, + block_hash: block.block_hash.toString() + }); + //don't need to update transferDB , just create it + //coz transfer data in two same addresses would + //create new transaction hashes hence new id + + const updateToken = async ( + tokenDB: Instance, + tokenAddress: any, + value: string, + transaction_type: string, + holderCount: string + ): Promise => { + const tokenMetadata = getTokenMetadata(tokenAddress); + + let token: IToken = await tokenDB.findOne({ id: tokenAddress }); + token ??= await tokenDB.create({ + id: tokenAddress, + address: tokenAddress, + decimals: tokenMetadata.decimals, + name: tokenMetadata.name, + symbol: tokenMetadata.symbol, + holder_count: "0", + burn_event_count: "0", + mint_event_count: "0", + transfer_event_count: "0", + total_supply: "0", + total_burned: "0", + total_minted: "0", + total_transferred: "0", + }); + + if (transaction_type === "transfer") { + token.transfer_event_count = new BigNumber(token.transfer_event_count) + .plus("1") + .toString(); + token.total_transferred = new BigNumber(token.total_transferred) + .plus(value) + .toString(); + } else if (transaction_type === "mint") { + token.mint_event_count = new BigNumber(token.mint_event_count) + .plus("1") + .toString(); + token.total_minted = new BigNumber(token.total_minted) + .plus(value) + .toString(); + } else { + token.burn_event_count = new BigNumber(token.burn_event_count) + .plus("1") + .toString(); + token.total_burned = new BigNumber(token.total_burned) + .plus(value) + .toString(); + } + token.total_supply = new BigNumber(token.total_minted) + .minus(token.total_burned) + .toString(); + token.holder_count = new BigNumber(token.holder_count) + .plus(holderCount) + .toString(); + + return token; + }; + + const token = await updateToken( + tokenDB, + tokenAddress, + value, + transferType, + holderCount.toString() + ); + await tokenDB.save(token); + + + }; + + + + + + + + + diff --git a/xERC20/src/types/schema.ts b/xERC20/src/types/schema.ts new file mode 100644 index 0000000..fae7af2 --- /dev/null +++ b/xERC20/src/types/schema.ts @@ -0,0 +1,204 @@ +// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + +import { Document } from "@blockflow-labs/utils"; + +export class Transfer { + static entity = "Transfer"; + static schema = { + id: { type: "String", index: true }, + from_address: "string", + to_address: "string", + token_address: "string", + token_name: "string", + token_symbol: "string", + raw_amount: "Number", + raw_amount_str: "string", + amount: "Number", + amount_str: "string", + usd_amount: "Number", + usd_exchange_rate: "string", + transfer_type: "string", + transaction_from_address: "string", + transaction_to_address: "string", + transaction_hash: "string", + log_index: "string", + block_timestamp: "string", + block_hash: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Balance { + static entity = "Balance"; + static schema = { + id: { type: "String", index: true }, + address: "string", + token_address: "string", + token_name: "string", + token_symbol: "string", + balance: "string", + raw_balance: "string", + usd_amount: "string", + usd_exchange_rate: "string", + block_timestamp: "string", + block_hash: "string", + is_past_holder: "Boolean", + is_holder: "Boolean", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Token { + static entity = "Token"; + static schema = { + id: { type: "String", index: true }, + address: "string", + decimals: "string", + name: "string", + symbol: "string", + holder_count: "string", + burn_event_count: "string", + mint_event_count: "string", + transfer_event_count: "string", + total_supply: "string", + total_burned: "string", + total_minted: "string", + total_transferred: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class BridgeLimitsSet { + static entity = "BridgeLimitsSet"; + static schema = { + id: { type: "String", index: true }, + mintingLimit: "Number", + burningLimit: "Number", + bridge: "string", + block_timestamp: "string", + block_hash: "string", + block_number: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class LockBoxSet { + static entity = "LockBoxSet"; + static schema = { + id: { type: "String", index: true }, + lockboxaddress: "string", + block_timestamp: "string", + block_hash: "string", + block_number: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +import { String } from "@blockflow-labs/utils"; + +export interface ITransfer extends Document { + id: String; + from_address: string; + to_address: string; + token_address: string; + token_name: string; + token_symbol: string; + raw_amount: Number; + raw_amount_str: string; + amount: Number; + amount_str: string; + usd_amount: Number; + usd_exchange_rate: string; + transfer_type: string; + transaction_from_address: string; + transaction_to_address: string; + transaction_hash: string; + log_index: string; + block_timestamp: string; + block_hash: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IBalance extends Document { + id: String; + address: string; + token_address: string; + token_name: string; + token_symbol: string; + balance: string; + raw_balance: string; + usd_amount: string; + usd_exchange_rate: string; + block_timestamp: string; + block_hash: string; + is_past_holder: Boolean; + is_holder: Boolean; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IToken extends Document { + id: String; + address: string; + decimals: string; + name: string; + symbol: string; + holder_count: string; + burn_event_count: string; + mint_event_count: string; + transfer_event_count: string; + total_supply: string; + total_burned: string; + total_minted: string; + total_transferred: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IBridgeLimitsSet extends Document { + id: String; + mintingLimit: Number; + burningLimit: Number; + bridge: string; + block_timestamp: string; + block_hash: string; + block_number: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface ILockBoxSet extends Document { + id: String; + lockboxaddress: string; + block_timestamp: string; + block_hash: string; + block_number: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/xERC20/src/utils/tokens.ts b/xERC20/src/utils/tokens.ts new file mode 100644 index 0000000..ecb3f45 --- /dev/null +++ b/xERC20/src/utils/tokens.ts @@ -0,0 +1,21 @@ +interface TokenInfo { + name: string; + symbol: string; + decimals: number; + } + + export const TOKENS: Record = { + "0xeA581cA64e4A384aE4dEA39bb083173CcBd2D817": { + name: "Next", + symbol: "NEXT", + decimals: 18, + } +}; + +export const getTokenMetadata = (token: string) => { + const findedToken = Object.keys(TOKENS).filter( + (tokenAddr) => tokenAddr.toLowerCase() === token.toLowerCase() + ); + + return TOKENS[findedToken[0]]; +}; \ No newline at end of file diff --git a/xERC20/studio.schema.ts b/xERC20/studio.schema.ts new file mode 100644 index 0000000..0ab05e6 --- /dev/null +++ b/xERC20/studio.schema.ts @@ -0,0 +1,73 @@ +import { String } from "@blockflow-labs/utils"; + +export interface Transfer { + id: String; + from_address: string; + to_address: string; + token_address: string; + token_name: string; + token_symbol: string; + raw_amount: Number; + raw_amount_str: string; + amount: Number; + amount_str: string; + usd_amount: Number; + usd_exchange_rate: string; + transfer_type: string; + transaction_from_address: string; + transaction_to_address: string; + transaction_hash: string; + log_index: string; + block_timestamp: string; + block_hash: string; +} + +export interface Balance { + id: String; + address: string; + token_address: string; + token_name: string; + token_symbol: string; + balance: string; + raw_balance: string; + usd_amount: string; + usd_exchange_rate: string; + block_timestamp: string; + block_hash: string; + is_past_holder: Boolean; + is_holder: Boolean; +} + +export interface Token { + id: String; + address: string; + decimals: string; + name: string; + symbol: string; + holder_count: string; + burn_event_count: string; + mint_event_count: string; + transfer_event_count: string; + total_supply: string; + total_burned: string; + total_minted: string; + total_transferred: string; +} + +export interface BridgeLimitsSet{ + id: String; + mintingLimit: Number; + burningLimit: Number; + bridge: string; + block_timestamp: string; + block_hash: string; + block_number: string; +} + +export interface LockBoxSet{ + id: String; + lockboxaddress: string; + block_timestamp: string; + block_hash: string; + block_number: string; +} \ No newline at end of file diff --git a/xERC20/studio.yaml b/xERC20/studio.yaml new file mode 100644 index 0000000..ad9927c --- /dev/null +++ b/xERC20/studio.yaml @@ -0,0 +1,22 @@ +name: Project Apollo +description: A top-secret research project to the moon +startBlock: latest +userId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +projectId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +network: Ethereum +user: Jane-doe +schema: + file: ./studio.schema.ts +execution: parallel +Resources: + - Name: blockflow + Abi: src/abis/blockflow.json + Type: contract/event + Address: "0xeA581cA64e4A384aE4dEA39bb083173CcBd2D817" + Triggers: + - Event: BridgeLimitsSet(uint256,uint256,address indexed) + Handler: src/handlers/blockflow/BridgeLimitsSet.BridgeLimitsSetHandler + - Event: LockboxSet(address) + Handler: src/handlers/blockflow/LockboxSet.LockboxSetHandler + - Event: Transfer(address indexed,address indexed,uint256) + Handler: src/handlers/blockflow/Transfer.TransferHandler diff --git a/xERC20/tsconfig.json b/xERC20/tsconfig.json new file mode 100644 index 0000000..fb80a42 --- /dev/null +++ b/xERC20/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "outDir": "./build/bin/", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From ad1d3b46e2958e33b1544d1cd77340f693404acb Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Sat, 20 Jul 2024 15:37:23 +0530 Subject: [PATCH 17/22] added lockboxdata db Signed-off-by: d4v1d03 --- xERC20/src/abis/lockbox.json | 130 ++++++++++++++++++ .../src/handlers/blockflow/BridgeLimitsSet.ts | 14 +- xERC20/src/handlers/blockflow/LockboxSet.ts | 9 +- xERC20/src/handlers/blockflow/Transfer.ts | 83 ++++++----- xERC20/src/handlers/lockbox/Deposit.ts | 46 +++++++ xERC20/src/handlers/lockbox/Withdraw.ts | 45 ++++++ xERC20/src/types/schema.ts | 29 ++++ xERC20/src/utils/tokens.ts | 24 ++-- xERC20/studio.schema.ts | 15 +- xERC20/studio.yaml | 9 ++ 10 files changed, 333 insertions(+), 71 deletions(-) create mode 100644 xERC20/src/abis/lockbox.json create mode 100644 xERC20/src/handlers/lockbox/Deposit.ts create mode 100644 xERC20/src/handlers/lockbox/Withdraw.ts diff --git a/xERC20/src/abis/lockbox.json b/xERC20/src/abis/lockbox.json new file mode 100644 index 0000000..643c94b --- /dev/null +++ b/xERC20/src/abis/lockbox.json @@ -0,0 +1,130 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_xerc20", "type": "address" }, + { "internalType": "address", "name": "_erc20", "type": "address" }, + { "internalType": "bool", "name": "_isNative", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "name": "IXERC20Lockbox_Native", "type": "error" }, + { "inputs": [], "name": "IXERC20Lockbox_NotNative", "type": "error" }, + { "inputs": [], "name": "IXERC20Lockbox_WithdrawFailed", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "ERC20", + "outputs": [ + { "internalType": "contract IERC20", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "IS_NATIVE", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "XERC20", + "outputs": [ + { "internalType": "contract IXERC20", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "depositNative", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "_to", "type": "address" }], + "name": "depositNativeTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "withdrawTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/xERC20/src/handlers/blockflow/BridgeLimitsSet.ts b/xERC20/src/handlers/blockflow/BridgeLimitsSet.ts index 9a3e44c..feb1f7a 100644 --- a/xERC20/src/handlers/blockflow/BridgeLimitsSet.ts +++ b/xERC20/src/handlers/blockflow/BridgeLimitsSet.ts @@ -4,10 +4,7 @@ import { Instance, ISecrets, } from "@blockflow-labs/utils"; -import{ - IBridgeLimitsSet, - BridgeLimitsSet -} from "../../types/schema"; +import { IBridgeLimitsSet, BridgeLimitsSet } from "../../types/schema"; /** * @dev Event::BridgeLimitsSet(uint256 _mintingLimit, uint256 _burningLimit, address _bridge) @@ -28,9 +25,9 @@ export const BridgeLimitsSetHandler = async ( const bridgeId = `${_bridge.toString()}`.toLowerCase(); let bridgedata = await bridgeLimitsSetDB.findOne({ - id: bridgeId + id: bridgeId, }); - if(!bridgeId){ + if (!bridgeId) { bridgedata = await bridgeLimitsSetDB.create({ id: bridgeId, mintingLimit: _mintingLimit, @@ -38,10 +35,9 @@ export const BridgeLimitsSetHandler = async ( bridge: _bridge, block_timestamp: block.block_timestamp, block_hash: block.block_hash, - block_number: block.block_number + block_number: block.block_number, }); - } - else{ + } else { bridgedata.mintingLimit = _mintingLimit; bridgedata.burningLimit = _burningLimit; bridgedata.block_timestamp = block.block_timestamp; diff --git a/xERC20/src/handlers/blockflow/LockboxSet.ts b/xERC20/src/handlers/blockflow/LockboxSet.ts index 9f1a80b..de3a42f 100644 --- a/xERC20/src/handlers/blockflow/LockboxSet.ts +++ b/xERC20/src/handlers/blockflow/LockboxSet.ts @@ -24,17 +24,16 @@ export const LockboxSetHandler = async ( const LockBoxSetDB: Instance = bind(LockBoxSet); let lockboxset = await LockBoxSetDB.findOne({ - id: _lockbox + id: _lockbox, }); //should lockbox id be the address itself only??? - if(!lockboxset){ + if (!lockboxset) { await LockBoxSetDB.create({ id: _lockbox, lockboxaddress: _lockbox, block_timestamp: block.block_timestamp, block_hash: block.block_hash, - block_number: block.block_number - }) + block_number: block.block_number, + }); } - }; diff --git a/xERC20/src/handlers/blockflow/Transfer.ts b/xERC20/src/handlers/blockflow/Transfer.ts index 373d757..9c69813 100644 --- a/xERC20/src/handlers/blockflow/Transfer.ts +++ b/xERC20/src/handlers/blockflow/Transfer.ts @@ -5,7 +5,7 @@ import { ISecrets, ITransaction, IBlock, - ILog + ILog, } from "@blockflow-labs/utils"; import { BigNumber } from "bignumber.js"; import { getTokenMetadata } from "../../utils/tokens"; @@ -33,9 +33,15 @@ export const TransferHandler = async ( const tokenAddress = log.log_address; const fromAddress = from.toLowerCase(); const toAddress = to.toLowerCase(); - const transferType = fromAddress === ZERO_ADDR ? "mint" : toAddress === ZERO_ADDR ? "burn" : "transfer"; + const transferType = + fromAddress === ZERO_ADDR + ? "mint" + : toAddress === ZERO_ADDR + ? "burn" + : "transfer"; const tokenMetadata = getTokenMetadata(tokenAddress); - const transactionId =`${transaction.transaction_hash.toString()}:${log.log_index.toString()}`.toLowerCase(); + const transactionId = + `${transaction.transaction_hash.toString()}:${log.log_index.toString()}`.toLowerCase(); const tokenDecimals = parseInt(tokenMetadata.decimals.toString()); const amount = new BigNumber(value).dividedBy(10 ** tokenDecimals); @@ -48,41 +54,41 @@ export const TransferHandler = async ( isFirstTimeHolder: boolean; isActiveHolder: boolean; } - + const updateBalance = async ( balanceDB: Instance, tokenAddress: string, address: string, value: string, block: IBlock, - isSender: boolean + isSender: boolean, ): Promise => { const tokenMetadata = getTokenMetadata(tokenAddress); let isFirstTimeHolder = false; let isActiveHolder = true; - + const userTokenId = `${address}-${tokenAddress}`.toLowerCase(); let user: IBalance = await balanceDB.findOne({ id: userTokenId }); - + if (!user) { user ??= await balanceDB.create({ id: userTokenId, is_past_holder: true, is_holder: true, }); - + isFirstTimeHolder = true; } - user.raw_balance = new BigNumber(user.raw_balance || "0") + user.raw_balance = new BigNumber(user.raw_balance || "0") .plus(isSender ? `-${value}` : value) .toString(); - + const tokenDecimals = parseInt(tokenMetadata.decimals.toString()); - + const balance = new BigNumber(user.raw_balance) .dividedBy(10 ** tokenDecimals) .toString(); - + user.address = address; user.token_address = tokenAddress; user.token_name = tokenMetadata.name; @@ -92,17 +98,17 @@ export const TransferHandler = async ( user.usd_exchange_rate = balance; user.block_timestamp = block.block_timestamp; user.block_hash = block.block_hash; - + return { user, isFirstTimeHolder, isActiveHolder }; }; - + const senderResult: IUpdateBalanceResult = await updateBalance( balanceDB, tokenAddress, fromAddress, value, block, - true + true, ); const receiverResult: IUpdateBalanceResult = await updateBalance( balanceDB, @@ -110,7 +116,7 @@ export const TransferHandler = async ( toAddress, value, block, - false + false, ); await Promise.all([ @@ -122,7 +128,7 @@ export const TransferHandler = async ( (receiverResult.isFirstTimeHolder ? 1 : 0); holderCount -= senderResult.isActiveHolder ? 0 : 1; holderCount -= receiverResult.isActiveHolder ? 0 : 1; - + let transfer = await transferDB.create({ id: transactionId, from_address: fromAddress, @@ -137,27 +143,31 @@ export const TransferHandler = async ( usd_amount: Number(value), usd_exchange_rate: value, transfer_type: transferType, - transaction_from_address: transaction.transaction_from_address.toString().toLowerCase(), - transaction_to_address: transaction.transaction_to_address.toString().toLowerCase(), + transaction_from_address: transaction.transaction_from_address + .toString() + .toLowerCase(), + transaction_to_address: transaction.transaction_to_address + .toString() + .toLowerCase(), transaction_hash: transaction.transaction_hash.toString(), log_index: log.log_index.toString(), block_timestamp: block.block_timestamp, - block_hash: block.block_hash.toString() + block_hash: block.block_hash.toString(), }); - //don't need to update transferDB , just create it - //coz transfer data in two same addresses would - //create new transaction hashes hence new id - + //don't need to update transferDB , just create it + //coz transfer data in two same addresses would + //create new transaction hashes hence new id + const updateToken = async ( tokenDB: Instance, tokenAddress: any, value: string, transaction_type: string, - holderCount: string + holderCount: string, ): Promise => { const tokenMetadata = getTokenMetadata(tokenAddress); - - let token: IToken = await tokenDB.findOne({ id: tokenAddress }); + + let token: IToken = await tokenDB.findOne({ id: tokenAddress }); token ??= await tokenDB.create({ id: tokenAddress, address: tokenAddress, @@ -173,7 +183,7 @@ export const TransferHandler = async ( total_minted: "0", total_transferred: "0", }); - + if (transaction_type === "transfer") { token.transfer_event_count = new BigNumber(token.transfer_event_count) .plus("1") @@ -202,7 +212,7 @@ export const TransferHandler = async ( token.holder_count = new BigNumber(token.holder_count) .plus(holderCount) .toString(); - + return token; }; @@ -211,18 +221,7 @@ export const TransferHandler = async ( tokenAddress, value, transferType, - holderCount.toString() + holderCount.toString(), ); await tokenDB.save(token); - - - }; - - - - - - - - - +}; diff --git a/xERC20/src/handlers/lockbox/Deposit.ts b/xERC20/src/handlers/lockbox/Deposit.ts new file mode 100644 index 0000000..0ba9cf6 --- /dev/null +++ b/xERC20/src/handlers/lockbox/Deposit.ts @@ -0,0 +1,46 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; +import { LockBoxData } from "../../types/schema"; +import { WithdrawHandler } from "./Withdraw"; + +/** + * @dev Event::Deposit(address _sender, uint256 _amount) + * @param context trigger object with contains {event: {_sender ,_amount }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const DepositHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Deposit here + + const { event, transaction, block, log } = context; + const { _sender, _amount } = event; + + const id= `${log.log_address}-${_sender}`; + + const lockboxdataDB: Instance = bind(LockBoxData); + let lockboxdata = await lockboxdataDB.findOne({ + id:id + }) + if(!lockboxdata){ + await lockboxdataDB.create({ + id:id, + lockboxaddress: log.log_address, + senderAccount: _sender, + depositedAmount: _amount, + withdrawnAmount: 0, + netAmount: _amount + }) + } + else{ + lockboxdata.depositedAmount += _amount; + lockboxdata.netAmount+= _amount; + await lockboxdataDB.save(lockboxdata); + } +}; diff --git a/xERC20/src/handlers/lockbox/Withdraw.ts b/xERC20/src/handlers/lockbox/Withdraw.ts new file mode 100644 index 0000000..7716a57 --- /dev/null +++ b/xERC20/src/handlers/lockbox/Withdraw.ts @@ -0,0 +1,45 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; +import { LockBoxData } from "../../types/schema"; + +/** + * @dev Event::Withdraw(address _sender, uint256 _amount) + * @param context trigger object with contains {event: {_sender ,_amount }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const WithdrawHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Withdraw here + + const { event, transaction, block, log } = context; + const { _sender, _amount } = event; + + const id= `${log.log_address}-${_sender}`; + + const lockboxdataDB: Instance = bind(LockBoxData); + let lockboxdata = await lockboxdataDB.findOne({ + id:id + }) + if(!lockboxdata){ + await lockboxdataDB.create({ + id:id, + lockboxaddress: log.log_address, + senderAccount: _sender, + depositedAmount: 0, + withdrawnAmount: _amount, + netAmount: _amount + }) + } + else{ + lockboxdata.withdrawnAmount += _amount; + lockboxdata.netAmount-= _amount; + await lockboxdataDB.save(lockboxdata); + } +}; diff --git a/xERC20/src/types/schema.ts b/xERC20/src/types/schema.ts index fae7af2..195dd3e 100644 --- a/xERC20/src/types/schema.ts +++ b/xERC20/src/types/schema.ts @@ -109,6 +109,22 @@ export class LockBoxSet { }; } +export class LockBoxData { + static entity = "LockBoxData"; + static schema = { + id: { type: "String", index: true }, + lockboxaddress: "string", + senderAccount: "string", + depositedAmount: "number", + withdrawnAmount: "number", + netAmount: "number", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + import { String } from "@blockflow-labs/utils"; export interface ITransfer extends Document { @@ -202,3 +218,16 @@ export interface ILockBoxSet extends Document { instanceId: String; chainId: String; } + +export interface ILockBoxData extends Document { + id: String; + lockboxaddress: string; + senderAccount: string; + depositedAmount: number; + withdrawnAmount: number; + netAmount: number; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/xERC20/src/utils/tokens.ts b/xERC20/src/utils/tokens.ts index ecb3f45..524c1b3 100644 --- a/xERC20/src/utils/tokens.ts +++ b/xERC20/src/utils/tokens.ts @@ -1,21 +1,21 @@ interface TokenInfo { - name: string; - symbol: string; - decimals: number; - } + name: string; + symbol: string; + decimals: number; +} - export const TOKENS: Record = { - "0xeA581cA64e4A384aE4dEA39bb083173CcBd2D817": { - name: "Next", - symbol: "NEXT", - decimals: 18, - } +export const TOKENS: Record = { + "0xeA581cA64e4A384aE4dEA39bb083173CcBd2D817": { + name: "Next", + symbol: "NEXT", + decimals: 18, + }, }; export const getTokenMetadata = (token: string) => { const findedToken = Object.keys(TOKENS).filter( - (tokenAddr) => tokenAddr.toLowerCase() === token.toLowerCase() + (tokenAddr) => tokenAddr.toLowerCase() === token.toLowerCase(), ); return TOKENS[findedToken[0]]; -}; \ No newline at end of file +}; diff --git a/xERC20/studio.schema.ts b/xERC20/studio.schema.ts index 0ab05e6..89980b3 100644 --- a/xERC20/studio.schema.ts +++ b/xERC20/studio.schema.ts @@ -54,7 +54,7 @@ export interface Token { total_transferred: string; } -export interface BridgeLimitsSet{ +export interface BridgeLimitsSet { id: String; mintingLimit: Number; burningLimit: Number; @@ -64,10 +64,19 @@ export interface BridgeLimitsSet{ block_number: string; } -export interface LockBoxSet{ +export interface LockBoxSet { id: String; lockboxaddress: string; block_timestamp: string; block_hash: string; block_number: string; -} \ No newline at end of file +} + +export interface LockBoxData{ + id: String; + lockboxaddress: string; + senderAccount: string; + depositedAmount: number; + withdrawnAmount: number; + netAmount: number; +} diff --git a/xERC20/studio.yaml b/xERC20/studio.yaml index ad9927c..8c625d3 100644 --- a/xERC20/studio.yaml +++ b/xERC20/studio.yaml @@ -20,3 +20,12 @@ Resources: Handler: src/handlers/blockflow/LockboxSet.LockboxSetHandler - Event: Transfer(address indexed,address indexed,uint256) Handler: src/handlers/blockflow/Transfer.TransferHandler + - Name: lockbox + Abi: src/abis/lockbox.json + Type: contract/event + Address: "0x9141776017D6A8a8522f913fddFAcAe3e84a7CDb" + Triggers: + - Event: Deposit(address,uint256) + Handler: src/handlers/lockbox/Deposit.DepositHandler + - Event: Withdraw(address,uint256) + Handler: src/handlers/lockbox/Withdraw.WithdrawHandler From 573ea382dd023e411795059e96fcf70755f243fa Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Thu, 25 Jul 2024 06:12:39 +0530 Subject: [PATCH 18/22] solverscan added Signed-off-by: d4v1d03 --- SolverScan/.env.example | 1 + SolverScan/.gitignore | 4 + SolverScan/.studioignore | 3 + SolverScan/README.md | 95 + SolverScan/package-lock.json | 1792 +++++++++++++++++ SolverScan/package.json | 19 + SolverScan/src/abis/dlndestination.json | 1527 ++++++++++++++ SolverScan/src/abis/dlnsource.json | 1583 +++++++++++++++ SolverScan/src/abis/gpv2Settlement.json | 410 ++++ .../handlers/dlndestination/FulfilledOrder.ts | 42 + .../dlndestination/SetDlnSourceAddress.ts | 22 + .../src/handlers/dlnsource/CreatedOrder.ts | 50 + .../dlnsource/SetDlnDestinationAddress.ts | 22 + .../handlers/gpv2Settlement/Interaction.ts | 32 + .../gpv2Settlement/OrderInvalidated.ts | 22 + .../handlers/gpv2Settlement/PreSignature.ts | 22 + .../src/handlers/gpv2Settlement/Settlement.ts | 30 + .../src/handlers/gpv2Settlement/Trade.ts | 86 + SolverScan/src/types/schema.ts | 145 ++ SolverScan/src/utils/utils.ts | 6 + SolverScan/studio.schema.ts | 49 + SolverScan/studio.yaml | 48 + SolverScan/tsconfig.json | 14 + 23 files changed, 6024 insertions(+) create mode 100644 SolverScan/.env.example create mode 100644 SolverScan/.gitignore create mode 100644 SolverScan/.studioignore create mode 100644 SolverScan/README.md create mode 100644 SolverScan/package-lock.json create mode 100644 SolverScan/package.json create mode 100644 SolverScan/src/abis/dlndestination.json create mode 100644 SolverScan/src/abis/dlnsource.json create mode 100644 SolverScan/src/abis/gpv2Settlement.json create mode 100644 SolverScan/src/handlers/dlndestination/FulfilledOrder.ts create mode 100644 SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts create mode 100644 SolverScan/src/handlers/dlnsource/CreatedOrder.ts create mode 100644 SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts create mode 100644 SolverScan/src/handlers/gpv2Settlement/Interaction.ts create mode 100644 SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts create mode 100644 SolverScan/src/handlers/gpv2Settlement/PreSignature.ts create mode 100644 SolverScan/src/handlers/gpv2Settlement/Settlement.ts create mode 100644 SolverScan/src/handlers/gpv2Settlement/Trade.ts create mode 100644 SolverScan/src/types/schema.ts create mode 100644 SolverScan/src/utils/utils.ts create mode 100644 SolverScan/studio.schema.ts create mode 100644 SolverScan/studio.yaml create mode 100644 SolverScan/tsconfig.json diff --git a/SolverScan/.env.example b/SolverScan/.env.example new file mode 100644 index 0000000..be00d3b --- /dev/null +++ b/SolverScan/.env.example @@ -0,0 +1 @@ +ITS_A_SECRET=shhhhh \ No newline at end of file diff --git a/SolverScan/.gitignore b/SolverScan/.gitignore new file mode 100644 index 0000000..fbaaa6d --- /dev/null +++ b/SolverScan/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +dist +.env \ No newline at end of file diff --git a/SolverScan/.studioignore b/SolverScan/.studioignore new file mode 100644 index 0000000..337477c --- /dev/null +++ b/SolverScan/.studioignore @@ -0,0 +1,3 @@ +node_modules/** +.env +build/** diff --git a/SolverScan/README.md b/SolverScan/README.md new file mode 100644 index 0000000..644f951 --- /dev/null +++ b/SolverScan/README.md @@ -0,0 +1,95 @@ +# BlockFlow Studio + +This is your BlockFlow Studio project. + +## Configuration (studio.yaml) + +BlockFlow Studio uses a YAML configuration file to manage your project settings. The configuration file should be named `studio.yaml` and located in the root folder of your project. Here are the configuration options: + +- `name`: The name of your BlockFlow project. + +- `description`: A description of your BlockFlow project. + +- `startBlock`: The starting block number from which the instance + +- `network`: The blockchain network you are working with (e.g., Ethereum, Polygon). + +- `userId`: You blockflow account userId. (For auth) + +- `execution`: Whether the execution of instances should be 'parallel' or 'sequencial'. + +- `Resources`: An array of configs. Each config is specific to trigger type. + + - `name`: The name of the contract. (should be camelcase without any spaces) + + - `contract`: The contract address to sync. (should be in string format) + + - `events`: The event signature. (generated by studio create command) + + - `abi`: The path to the ABI file for the contract. (should end with `.json`) + + - `handler`: The path to the code Handler file. + +## How to Use BlockFlow Studio + +### Project Initialization + +To initialize a project in an empty directory, use the `blockflow init` command. This will open a command prompt where you can configure your project interactively. + +```bash +blockflow init +``` + +Before using other commands mentioned below, update the `studio.yaml` file with `userId`, `projectId` and `startBlock` for your project. + +### Instance + +#### Generate Events List + +To generate an events list in `studio.yaml`, which will be used to configure the handler, use the `blockflow instance-generate` command. This will automatically fetch the added contracts ABIs and update the events/functions list. + +> writes to studio.yaml file, should be used with care, we prefer to use it once you init the project + +```bash +blockflow generate +``` + +#### Generate Handlers + +To generate an events handler in` studio.yaml`, use the `blockflow instance-codegen` command. The handler will be generated at the `Resources?.Trigger?.Handler` path. + +> Once you've everything ready for instances or apis use this command + +```bash +blockflow codegen +``` + +#### Test the Code + +> It is required that you have a mongo db local running at uri "mongodb://localhost:27017" before running tests + +To test the code and generate a local mongo database, use the `blockflow instance-test` command. This will produce a database named blockflow_studio with collection name BLOCKFLOW_STUDIO + +```bash +blockflow instance-test +``` + +> you can even provide a start block `--startBlock `, or range of blocks to test `--range 10` + +#### Deploy the Project + +Once the project is created and tested, you can deploy it using the `blockflow instance-deploy` command. This will deploy the handler to the blockflow server for syncing. + +```bash +blockflow instance-deploy +``` + +### API + +#### Deploy API + +To deploy the API, use the `blockflow api-deploy` command. + +```bash +blockflow api-deploy +``` diff --git a/SolverScan/package-lock.json b/SolverScan/package-lock.json new file mode 100644 index 0000000..b74d4f4 --- /dev/null +++ b/SolverScan/package-lock.json @@ -0,0 +1,1792 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/@blockflow-labs/utils": { + "version": "1.0.7-beta.1", + "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7-beta.1.tgz", + "integrity": "sha512-hr7WhTX9XaJhnuhuJGKZt9UDcdprEAklQ9y0c0h7GETPXmmO1R/gRlWY5rJk4oTcdufokMXxzAITqMFLWRHqcA==", + "dependencies": { + "mongoose": "^8.0.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz", + "integrity": "sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "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/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", + "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", + "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.1.tgz", + "integrity": "sha512-OhVcwVl91A1G6+XpjDcpkGP7l7ikZkxa0DylX7NT/lcEqAjggzSdqDxb48A+xsDxqNAr0ntSJ1yiE3+KJTOd5Q==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + } + } +} diff --git a/SolverScan/package.json b/SolverScan/package.json new file mode 100644 index 0000000..5f020e8 --- /dev/null +++ b/SolverScan/package.json @@ -0,0 +1,19 @@ +{ + "name": "blockflow-studio", + "version": "1.0.8-beta.2", + "description": "BlockFlow Studio Project", + "scripts": { + "compile": "tsc -b" + }, + "dependencies": { + "@blockflow-labs/utils": "latest" + }, + "devDependencies": { + "typescript": "^5.1.6", + "bignumber.js": "^9.1.1", + "prettier": "^3.0.3", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4", + "ts-loader": "^9.5.0" + } +} diff --git a/SolverScan/src/abis/dlndestination.json b/SolverScan/src/abis/dlndestination.json new file mode 100644 index 0000000..dcdf979 --- /dev/null +++ b/SolverScan/src/abis/dlndestination.json @@ -0,0 +1,1527 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { "inputs": [], "name": "AdminBadRole", "type": "error" }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "expectedBeneficiary", + "type": "bytes" + } + ], + "name": "AllowOnlyForBeneficiary", + "type": "error" + }, + { "inputs": [], "name": "CallProxyBadRole", "type": "error" }, + { "inputs": [], "name": "EthTransferFailed", "type": "error" }, + { "inputs": [], "name": "GovMonitoringBadRole", "type": "error" }, + { "inputs": [], "name": "IncorrectOrderStatus", "type": "error" }, + { "inputs": [], "name": "MismatchGiveChainId", "type": "error" }, + { "inputs": [], "name": "MismatchNativeTakerAmount", "type": "error" }, + { "inputs": [], "name": "MismatchTakerAmount", "type": "error" }, + { "inputs": [], "name": "MismatchedOrderId", "type": "error" }, + { "inputs": [], "name": "MismatchedTransferAmount", "type": "error" }, + { + "inputs": [ + { "internalType": "bytes", "name": "nativeSender", "type": "bytes" }, + { "internalType": "uint256", "name": "chainIdFrom", "type": "uint256" } + ], + "name": "NativeSenderBadRole", + "type": "error" + }, + { "inputs": [], "name": "NotSupportedDstChain", "type": "error" }, + { "inputs": [], "name": "SignatureInvalidV", "type": "error" }, + { "inputs": [], "name": "TransferAmountNotCoverFees", "type": "error" }, + { "inputs": [], "name": "Unauthorized", "type": "error" }, + { "inputs": [], "name": "UnexpectedBatchSize", "type": "error" }, + { "inputs": [], "name": "UnknownEngine", "type": "error" }, + { "inputs": [], "name": "WrongAddressLength", "type": "error" }, + { "inputs": [], "name": "WrongArgument", "type": "error" }, + { "inputs": [], "name": "WrongChain", "type": "error" }, + { "inputs": [], "name": "WrongToken", "type": "error" }, + { "inputs": [], "name": "ZeroAddress", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "orderTakeFinalAmount", + "type": "uint256" + } + ], + "name": "DecreasedTakeAmount", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAdapter", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdapter", + "type": "address" + } + ], + "name": "ExternalCallAdapterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "indexed": false, + "internalType": "struct DlnOrderLib.Order", + "name": "order", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "unlockAuthority", + "type": "address" + } + ], + "name": "FulfilledOrder", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "MaxOrderCountPerBatchEvmUnlockChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "MaxOrderCountPerBatchSolanaUnlockChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "indexed": false, + "internalType": "struct DlnOrderLib.Order", + "name": "order", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "cancelBeneficiary", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "submissionId", + "type": "bytes32" + } + ], + "name": "SentOrderCancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "beneficiary", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "submissionId", + "type": "bytes32" + } + ], + "name": "SentOrderUnlock", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "chainIdFrom", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "dlnSourceAddress", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "enum DlnOrderLib.ChainEngine", + "name": "chainEngine", + "type": "uint8" + } + ], + "name": "SetDlnSourceAddress", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "BPS_DENOMINATOR", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "EVM_ADDRESS_LENGTH", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GOVMONITORING_ROLE", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_ADDRESS_LENGTH", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "NATIVE_AMOUNT_DIVIDER_FOR_TRANSFER_TO_SOLANA", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SOLANA_ADDRESS_LENGTH", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "chainEngines", + "outputs": [ + { + "internalType": "enum DlnOrderLib.ChainEngine", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deBridgeGate", + "outputs": [ + { + "internalType": "contract IDeBridgeGate", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "dlnSourceAddresses", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "externalCallAdapter", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_fulFillAmount", + "type": "uint256" + }, + { "internalType": "bytes32", "name": "_orderId", "type": "bytes32" }, + { "internalType": "bytes", "name": "_permitEnvelope", "type": "bytes" }, + { + "internalType": "address", + "name": "_unlockAuthority", + "type": "address" + }, + { + "internalType": "address", + "name": "_externalCallRewardBeneficiary", + "type": "address" + } + ], + "name": "fulfillOrder", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_fulFillAmount", + "type": "uint256" + }, + { "internalType": "bytes32", "name": "_orderId", "type": "bytes32" }, + { "internalType": "bytes", "name": "_permitEnvelope", "type": "bytes" }, + { + "internalType": "address", + "name": "_unlockAuthority", + "type": "address" + } + ], + "name": "fulfillOrder", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getChainId", + "outputs": [ + { "internalType": "uint256", "name": "cid", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + } + ], + "name": "getOrderId", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" } + ], + "name": "getRoleAdmin", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "hasRole", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IDeBridgeGate", + "name": "_deBridgeGate", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxOrderCountPerBatchEvmUnlock", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxOrderCountPerBatchSolanaUnlock", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + }, + { "internalType": "uint256", "name": "_newSubtrahend", "type": "uint256" } + ], + "name": "patchOrderTake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32[]", "name": "_orderIds", "type": "bytes32[]" }, + { "internalType": "address", "name": "_beneficiary", "type": "address" }, + { "internalType": "uint256", "name": "_executionFee", "type": "uint256" } + ], + "name": "sendBatchEvmUnlock", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order[]", + "name": "_orders", + "type": "tuple[]" + }, + { "internalType": "bytes32", "name": "_beneficiary", "type": "bytes32" }, + { "internalType": "uint256", "name": "_executionFee", "type": "uint256" }, + { + "internalType": "uint64", + "name": "_initWalletIfNeededInstructionReward", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_claimUnlockInstructionReward", + "type": "uint64" + } + ], + "name": "sendBatchSolanaUnlock", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_cancelBeneficiary", + "type": "address" + }, + { "internalType": "uint256", "name": "_executionFee", "type": "uint256" } + ], + "name": "sendEvmOrderCancel", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "_orderId", "type": "bytes32" }, + { "internalType": "address", "name": "_beneficiary", "type": "address" }, + { "internalType": "uint256", "name": "_executionFee", "type": "uint256" } + ], + "name": "sendEvmUnlock", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "_cancelBeneficiary", + "type": "bytes32" + }, + { "internalType": "uint256", "name": "_executionFee", "type": "uint256" }, + { "internalType": "uint64", "name": "_reward1", "type": "uint64" }, + { "internalType": "uint64", "name": "_reward2", "type": "uint64" } + ], + "name": "sendSolanaOrderCancel", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + }, + { "internalType": "bytes32", "name": "_beneficiary", "type": "bytes32" }, + { "internalType": "uint256", "name": "_executionFee", "type": "uint256" }, + { + "internalType": "uint64", + "name": "_initWalletIfNeededInstructionReward", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_claimUnlockInstructionReward", + "type": "uint64" + } + ], + "name": "sendSolanaUnlock", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_chainIdFrom", "type": "uint256" }, + { "internalType": "bytes", "name": "_dlnSourceAddress", "type": "bytes" }, + { + "internalType": "enum DlnOrderLib.ChainEngine", + "name": "_chainEngine", + "type": "uint8" + } + ], + "name": "setDlnSourceAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_externalCallAdapter", + "type": "address" + } + ], + "name": "setExternalCallAdapter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_newEvmCount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "_newSolanaCount", + "type": "uint256" + } + ], + "name": "setMaxOrderCountsPerBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } + ], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "takeOrders", + "outputs": [ + { + "internalType": "enum DlnDestination.OrderTakeStatus", + "name": "status", + "type": "uint8" + }, + { "internalType": "address", "name": "takerAddress", "type": "address" }, + { "internalType": "uint256", "name": "giveChainId", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "takePatches", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/SolverScan/src/abis/dlnsource.json b/SolverScan/src/abis/dlnsource.json new file mode 100644 index 0000000..d1e721f --- /dev/null +++ b/SolverScan/src/abis/dlnsource.json @@ -0,0 +1,1583 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "address", "name": "admin_", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { "internalType": "address", "name": "admin_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" }, + { "inputs": [], "name": "AdminBadRole", "type": "error" }, + { "inputs": [], "name": "CallProxyBadRole", "type": "error" }, + { + "inputs": [ + { "internalType": "bytes32", "name": "orderId", "type": "bytes32" }, + { "internalType": "uint48", "name": "takeChainId", "type": "uint48" }, + { + "internalType": "uint256", + "name": "submissionsChainIdFrom", + "type": "uint256" + } + ], + "name": "CriticalMismatchTakeChainId", + "type": "error" + }, + { "inputs": [], "name": "EthTransferFailed", "type": "error" }, + { "inputs": [], "name": "GovMonitoringBadRole", "type": "error" }, + { "inputs": [], "name": "IncorrectOrderStatus", "type": "error" }, + { "inputs": [], "name": "MismatchNativeGiveAmount", "type": "error" }, + { "inputs": [], "name": "MismatchedOrderId", "type": "error" }, + { "inputs": [], "name": "MismatchedTransferAmount", "type": "error" }, + { + "inputs": [ + { "internalType": "bytes", "name": "nativeSender", "type": "bytes" }, + { "internalType": "uint256", "name": "chainIdFrom", "type": "uint256" } + ], + "name": "NativeSenderBadRole", + "type": "error" + }, + { "inputs": [], "name": "NotSupportedDstChain", "type": "error" }, + { "inputs": [], "name": "SignatureInvalidV", "type": "error" }, + { "inputs": [], "name": "Unauthorized", "type": "error" }, + { "inputs": [], "name": "UnknownEngine", "type": "error" }, + { "inputs": [], "name": "WrongAddressLength", "type": "error" }, + { "inputs": [], "name": "WrongAffiliateFeeLength", "type": "error" }, + { "inputs": [], "name": "WrongArgument", "type": "error" }, + { "inputs": [], "name": "WrongChain", "type": "error" }, + { + "inputs": [ + { "internalType": "uint256", "name": "received", "type": "uint256" }, + { "internalType": "uint256", "name": "actual", "type": "uint256" } + ], + "name": "WrongFixedFee", + "type": "error" + }, + { "inputs": [], "name": "ZeroAddress", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "affiliateFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "giveTokenAddress", + "type": "address" + } + ], + "name": "AffiliateFeePaid", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paidAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "giveTokenAddress", + "type": "address" + } + ], + "name": "ClaimedOrderCancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "giveTokenAddress", + "type": "address" + } + ], + "name": "ClaimedUnlock", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "indexed": false, + "internalType": "struct DlnOrderLib.Order", + "name": "order", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "affiliateFee", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nativeFixFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "percentFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "referralCode", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "CreatedOrder", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionChainIdFrom", + "type": "uint256" + } + ], + "name": "CriticalMismatchChainId", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint88", + "name": "oldGlobalFixedNativeFee", + "type": "uint88" + }, + { + "indexed": false, + "internalType": "uint88", + "name": "newGlobalFixedNativeFee", + "type": "uint88" + } + ], + "name": "GlobalFixedNativeFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "oldGlobalTransferFeeBps", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "newGlobalTransferFeeBps", + "type": "uint16" + } + ], + "name": "GlobalTransferFeeBpsUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "orderGiveFinalAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "finalPercentFee", + "type": "uint256" + } + ], + "name": "IncreasedGiveAmount", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "chainIdTo", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "dlnDestinationAddress", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "enum DlnOrderLib.ChainEngine", + "name": "chainEngine", + "type": "uint8" + } + ], + "name": "SetDlnDestinationAddress", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "enum DlnSource.OrderGiveStatus", + "name": "status", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "UnexpectedOrderStatusForCancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "enum DlnSource.OrderGiveStatus", + "name": "status", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "UnexpectedOrderStatusForClaim", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "tokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "WithdrawnFee", + "type": "event" + }, + { + "inputs": [], + "name": "BPS_DENOMINATOR", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "EVM_ADDRESS_LENGTH", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GOVMONITORING_ROLE", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_ADDRESS_LENGTH", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SOLANA_ADDRESS_LENGTH", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "chainEngines", + "outputs": [ + { + "internalType": "enum DlnOrderLib.ChainEngine", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32[]", "name": "_orderIds", "type": "bytes32[]" }, + { "internalType": "address", "name": "_beneficiary", "type": "address" } + ], + "name": "claimBatchCancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32[]", "name": "_orderIds", "type": "bytes32[]" }, + { "internalType": "address", "name": "_beneficiary", "type": "address" } + ], + "name": "claimBatchUnlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "_orderId", "type": "bytes32" }, + { "internalType": "address", "name": "_beneficiary", "type": "address" } + ], + "name": "claimCancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "_orderId", "type": "bytes32" }, + { "internalType": "address", "name": "_beneficiary", "type": "address" } + ], + "name": "claimUnlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "collectedFee", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "giveTokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "address", + "name": "givePatchAuthoritySrc", + "type": "address" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + } + ], + "internalType": "struct DlnOrderLib.OrderCreation", + "name": "_orderCreation", + "type": "tuple" + }, + { "internalType": "bytes", "name": "_affiliateFee", "type": "bytes" }, + { "internalType": "uint32", "name": "_referralCode", "type": "uint32" }, + { "internalType": "bytes", "name": "_permitEnvelope", "type": "bytes" } + ], + "name": "createOrder", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "giveTokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "address", + "name": "givePatchAuthoritySrc", + "type": "address" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + } + ], + "internalType": "struct DlnOrderLib.OrderCreation", + "name": "_orderCreation", + "type": "tuple" + }, + { "internalType": "uint64", "name": "_salt", "type": "uint64" }, + { "internalType": "bytes", "name": "_affiliateFee", "type": "bytes" }, + { "internalType": "uint32", "name": "_referralCode", "type": "uint32" }, + { "internalType": "bytes", "name": "_permitEnvelope", "type": "bytes" }, + { "internalType": "bytes", "name": "_metadata", "type": "bytes" } + ], + "name": "createSaltedOrder", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "deBridgeGate", + "outputs": [ + { + "internalType": "contract IDeBridgeGate", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "dlnDestinationAddresses", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getChainId", + "outputs": [ + { "internalType": "uint256", "name": "cid", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + } + ], + "name": "getOrderId", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" } + ], + "name": "getRoleAdmin", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "giveOrders", + "outputs": [ + { + "internalType": "enum DlnSource.OrderGiveStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "uint160", + "name": "giveTokenAddress", + "type": "uint160" + }, + { "internalType": "uint88", "name": "nativeFixFee", "type": "uint88" }, + { "internalType": "uint48", "name": "takeChainId", "type": "uint48" }, + { "internalType": "uint208", "name": "percentFee", "type": "uint208" }, + { "internalType": "uint256", "name": "giveAmount", "type": "uint256" }, + { + "internalType": "address", + "name": "affiliateBeneficiary", + "type": "address" + }, + { + "internalType": "uint256", + "name": "affiliateAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "givePatches", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalFixedNativeFee", + "outputs": [{ "internalType": "uint88", "name": "", "type": "uint88" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalTransferFeeBps", + "outputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "hasRole", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IDeBridgeGate", + "name": "_deBridgeGate", + "type": "address" + }, + { + "internalType": "uint88", + "name": "_globalFixedNativeFee", + "type": "uint88" + }, + { + "internalType": "uint16", + "name": "_globalTransferFeeBps", + "type": "uint16" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "masterNonce", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "_order", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_addGiveAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "_permitEnvelope", "type": "bytes" } + ], + "name": "patchOrderGive", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_chainIdTo", "type": "uint256" }, + { + "internalType": "bytes", + "name": "_dlnDestinationAddress", + "type": "bytes" + }, + { + "internalType": "enum DlnOrderLib.ChainEngine", + "name": "_chainEngine", + "type": "uint8" + } + ], + "name": "setDlnDestinationAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } + ], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "unclaimedAffiliateETHFees", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "unexpectedOrderStatusForCancel", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "unexpectedOrderStatusForClaim", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint88", + "name": "_globalFixedNativeFee", + "type": "uint88" + }, + { + "internalType": "uint16", + "name": "_globalTransferFeeBps", + "type": "uint16" + } + ], + "name": "updateGlobalFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "giveTokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "address", + "name": "givePatchAuthoritySrc", + "type": "address" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + } + ], + "internalType": "struct DlnOrderLib.OrderCreation", + "name": "_orderCreation", + "type": "tuple" + }, + { "internalType": "address", "name": "_signer", "type": "address" }, + { "internalType": "uint64", "name": "_salt", "type": "uint64" } + ], + "name": "validateCreationOrder", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "order", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "giveTokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "address", + "name": "givePatchAuthoritySrc", + "type": "address" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + } + ], + "internalType": "struct DlnOrderLib.OrderCreation", + "name": "_orderCreation", + "type": "tuple" + }, + { "internalType": "address", "name": "_signer", "type": "address" } + ], + "name": "validateCreationOrder", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "makerOrderNonce", + "type": "uint64" + }, + { "internalType": "bytes", "name": "makerSrc", "type": "bytes" }, + { + "internalType": "uint256", + "name": "giveChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "giveTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "giveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takeChainId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "takeTokenAddress", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "takeAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "receiverDst", "type": "bytes" }, + { + "internalType": "bytes", + "name": "givePatchAuthoritySrc", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "orderAuthorityAddressDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedTakerDst", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "allowedCancelBeneficiarySrc", + "type": "bytes" + }, + { "internalType": "bytes", "name": "externalCall", "type": "bytes" } + ], + "internalType": "struct DlnOrderLib.Order", + "name": "order", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "_tokens", "type": "address[]" }, + { "internalType": "address", "name": "_beneficiary", "type": "address" } + ], + "name": "withdrawFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/SolverScan/src/abis/gpv2Settlement.json b/SolverScan/src/abis/gpv2Settlement.json new file mode 100644 index 0000000..18397cf --- /dev/null +++ b/SolverScan/src/abis/gpv2Settlement.json @@ -0,0 +1,410 @@ +[ + { + "inputs": [ + { + "internalType": "contract GPv2Authentication", + "name": "authenticator_", + "type": "address" + }, + { "internalType": "contract IVault", "name": "vault_", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "Interaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "orderUid", + "type": "bytes" + } + ], + "name": "OrderInvalidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "orderUid", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bool", + "name": "signed", + "type": "bool" + } + ], + "name": "PreSignature", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "solver", + "type": "address" + } + ], + "name": "Settlement", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "sellToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "buyToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sellAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "buyAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "orderUid", + "type": "bytes" + } + ], + "name": "Trade", + "type": "event" + }, + { + "inputs": [], + "name": "authenticator", + "outputs": [ + { + "internalType": "contract GPv2Authentication", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "domainSeparator", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "name": "filledAmount", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes[]", "name": "orderUids", "type": "bytes[]" } + ], + "name": "freeFilledAmountStorage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes[]", "name": "orderUids", "type": "bytes[]" } + ], + "name": "freePreSignatureStorage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "offset", "type": "uint256" }, + { "internalType": "uint256", "name": "length", "type": "uint256" } + ], + "name": "getStorageAt", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "orderUid", "type": "bytes" } + ], + "name": "invalidateOrder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "name": "preSignature", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "orderUid", "type": "bytes" }, + { "internalType": "bool", "name": "signed", "type": "bool" } + ], + "name": "setPreSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "clearingPrices", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "sellTokenIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyTokenIndex", + "type": "uint256" + }, + { "internalType": "address", "name": "receiver", "type": "address" }, + { + "internalType": "uint256", + "name": "sellAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "buyAmount", "type": "uint256" }, + { "internalType": "uint32", "name": "validTo", "type": "uint32" }, + { "internalType": "bytes32", "name": "appData", "type": "bytes32" }, + { "internalType": "uint256", "name": "feeAmount", "type": "uint256" }, + { "internalType": "uint256", "name": "flags", "type": "uint256" }, + { + "internalType": "uint256", + "name": "executedAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "internalType": "struct GPv2Trade.Data[]", + "name": "trades", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ], + "internalType": "struct GPv2Interaction.Data[][3]", + "name": "interactions", + "type": "tuple[][3]" + } + ], + "name": "settle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetContract", + "type": "address" + }, + { "internalType": "bytes", "name": "calldataPayload", "type": "bytes" } + ], + "name": "simulateDelegatecall", + "outputs": [ + { "internalType": "bytes", "name": "response", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetContract", + "type": "address" + }, + { "internalType": "bytes", "name": "calldataPayload", "type": "bytes" } + ], + "name": "simulateDelegatecallInternal", + "outputs": [ + { "internalType": "bytes", "name": "response", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, + { + "internalType": "uint256", + "name": "assetInIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "assetOutIndex", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "bytes", "name": "userData", "type": "bytes" } + ], + "internalType": "struct IVault.BatchSwapStep[]", + "name": "swaps", + "type": "tuple[]" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "sellTokenIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyTokenIndex", + "type": "uint256" + }, + { "internalType": "address", "name": "receiver", "type": "address" }, + { + "internalType": "uint256", + "name": "sellAmount", + "type": "uint256" + }, + { "internalType": "uint256", "name": "buyAmount", "type": "uint256" }, + { "internalType": "uint32", "name": "validTo", "type": "uint32" }, + { "internalType": "bytes32", "name": "appData", "type": "bytes32" }, + { "internalType": "uint256", "name": "feeAmount", "type": "uint256" }, + { "internalType": "uint256", "name": "flags", "type": "uint256" }, + { + "internalType": "uint256", + "name": "executedAmount", + "type": "uint256" + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "internalType": "struct GPv2Trade.Data", + "name": "trade", + "type": "tuple" + } + ], + "name": "swap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { "internalType": "contract IVault", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "vaultRelayer", + "outputs": [ + { + "internalType": "contract GPv2VaultRelayer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts new file mode 100644 index 0000000..7ebd1a9 --- /dev/null +++ b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts @@ -0,0 +1,42 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { BridgeData } from "../../types/schema"; + +/** + * @dev Event::FulfilledOrder(tuple order, bytes32 orderId, address sender, address unlockAuthority) + * @param context trigger object with contains {event: {order ,orderId ,sender ,unlockAuthority }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const FulfilledOrderHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for FulfilledOrder here + + const { event, transaction, block, log } = context; + const { order, orderId, sender, unlockAuthority } = event; + + const bridgeDataDB: Instance = bind(BridgeData); + + let bridgedata = await bridgeDataDB.create({ + id: orderId, + transactionHashSrc:"", + transactionHashDest: transaction.transaction_hash, + from:"", + fromValue:"", + to: log.log_address, + toValue: "", + solver:"", + solverGasCost: "", + timestampSrc:"", + timestampDest: block.block_timestamp, + bridgeTime: "" + }); + +}; diff --git a/SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts b/SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts new file mode 100644 index 0000000..aded752 --- /dev/null +++ b/SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::SetDlnSourceAddress(uint256 chainIdFrom, bytes dlnSourceAddress, uint8 chainEngine) + * @param context trigger object with contains {event: {chainIdFrom ,dlnSourceAddress ,chainEngine }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const SetDlnSourceAddressHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for SetDlnSourceAddress here + + const { event, transaction, block, log } = context; + const { chainIdFrom, dlnSourceAddress, chainEngine } = event; +}; diff --git a/SolverScan/src/handlers/dlnsource/CreatedOrder.ts b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts new file mode 100644 index 0000000..c035c45 --- /dev/null +++ b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts @@ -0,0 +1,50 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { BridgeData } from "../../types/schema"; +/** + * @dev Event::CreatedOrder(tuple order, bytes32 orderId, bytes affiliateFee, uint256 nativeFixFee, uint256 percentFee, uint32 referralCode, bytes metadata) + * @param context trigger object with contains {event: {order ,orderId ,affiliateFee ,nativeFixFee ,percentFee ,referralCode ,metadata }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const CreatedOrderHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for CreatedOrder here + + const { event, transaction, block, log } = context; + const { + order, + orderId, + affiliateFee, + nativeFixFee, + percentFee, + referralCode, + metadata, + } = event; + + const value = parseInt(transaction.transaction_value) - affiliateFee -nativeFixFee; + + const bridgeDataDB: Instance = bind(BridgeData); + + let bridgedata = await bridgeDataDB.create({ + id:orderId, + transactionHashSrc: transaction.transaction_hash, + transactionHashDest: "", + from: log.log_address, + fromValue: value, + to:"", + toValue: "", + solver: "", + solverGasCost:"", + timestampSrc: block.block_timestamp, + timestampDest:"", + bridgeTime:"" + }) +}; diff --git a/SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts b/SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts new file mode 100644 index 0000000..dee7382 --- /dev/null +++ b/SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::SetDlnDestinationAddress(uint256 chainIdTo, bytes dlnDestinationAddress, uint8 chainEngine) + * @param context trigger object with contains {event: {chainIdTo ,dlnDestinationAddress ,chainEngine }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const SetDlnDestinationAddressHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for SetDlnDestinationAddress here + + const { event, transaction, block, log } = context; + const { chainIdTo, dlnDestinationAddress, chainEngine } = event; +}; diff --git a/SolverScan/src/handlers/gpv2Settlement/Interaction.ts b/SolverScan/src/handlers/gpv2Settlement/Interaction.ts new file mode 100644 index 0000000..4976aad --- /dev/null +++ b/SolverScan/src/handlers/gpv2Settlement/Interaction.ts @@ -0,0 +1,32 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { LiqudityData } from "../../types/schema"; +/** + * @dev Event::Interaction(address target, uint256 value, bytes4 selector) + * @param context trigger object with contains {event: {target ,value ,selector }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const InteractionHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Interaction here + + const { event, transaction, block, log } = context; + const { target, value, selector } = event; + + const LiqudityDataDB: Instance = bind(LiqudityData); + + let liquiditydata = await LiqudityDataDB.create({ + id: transaction.transaction_hash, + target: target, + value: value, + selector: selector, + }); +}; diff --git a/SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts b/SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts new file mode 100644 index 0000000..896a459 --- /dev/null +++ b/SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::OrderInvalidated(address owner, bytes orderUid) + * @param context trigger object with contains {event: {owner ,orderUid }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const OrderInvalidatedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for OrderInvalidated here + + const { event, transaction, block, log } = context; + const { owner, orderUid } = event; +}; diff --git a/SolverScan/src/handlers/gpv2Settlement/PreSignature.ts b/SolverScan/src/handlers/gpv2Settlement/PreSignature.ts new file mode 100644 index 0000000..0950d50 --- /dev/null +++ b/SolverScan/src/handlers/gpv2Settlement/PreSignature.ts @@ -0,0 +1,22 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +/** + * @dev Event::PreSignature(address owner, bytes orderUid, bool signed) + * @param context trigger object with contains {event: {owner ,orderUid ,signed }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const PreSignatureHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for PreSignature here + + const { event, transaction, block, log } = context; + const { owner, orderUid, signed } = event; +}; diff --git a/SolverScan/src/handlers/gpv2Settlement/Settlement.ts b/SolverScan/src/handlers/gpv2Settlement/Settlement.ts new file mode 100644 index 0000000..aba621c --- /dev/null +++ b/SolverScan/src/handlers/gpv2Settlement/Settlement.ts @@ -0,0 +1,30 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { SolverData } from "../../types/schema"; +/** + * @dev Event::Settlement(address solver) + * @param context trigger object with contains {event: {solver }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const SettlementHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Settlement here + + const { event, transaction, block, log } = context; + const { solver } = event; + + const swapProtocolDataDB: Instance = bind(SolverData); + + let swapprotocoldata = await swapProtocolDataDB.create({ + id: solver, + solverAddress: solver, + }); +}; diff --git a/SolverScan/src/handlers/gpv2Settlement/Trade.ts b/SolverScan/src/handlers/gpv2Settlement/Trade.ts new file mode 100644 index 0000000..c2e2133 --- /dev/null +++ b/SolverScan/src/handlers/gpv2Settlement/Trade.ts @@ -0,0 +1,86 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; + +import { TradeData, SolverData } from "../../types/schema"; +import { + COW_PROTOCOL_TOPIC0, + COW_PROTOCOL_ADDRESS, + SETTLEMENT_LOG_TOPIC, +} from "../../utils/utils"; + +/** + * @dev Event::Trade(address owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid) + * @param context trigger object with contains {event: {owner ,sellToken ,buyToken ,sellAmount ,buyAmount ,feeAmount ,orderUid }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const TradeHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for Trade here + + const { event, transaction, block, log } = context; + const { + owner, + sellToken, + buyToken, + sellAmount, + buyAmount, + feeAmount, + orderUid, + } = event; + + const tradeDataDB: Instance = bind(TradeData); + const solverDataDB: Instance = bind(SolverData); + + const solver = transaction.logs + ? transaction.logs.find( + (log) => + log.topics[0].toLowerCase() === SETTLEMENT_LOG_TOPIC.toLowerCase(), + ) + : null; + const solverAddress = solver?.topics[1].toLowerCase(); + + let tradedata = await tradeDataDB.create({ + id: transaction.transaction_hash, + protocolAddress: COW_PROTOCOL_ADDRESS, + owner: owner, + sellToken: sellToken, + buyToken: buyToken, + sellAmount: sellAmount, + buyAmount: buyAmount, + solver: solverAddress, + feeAmount: feeAmount, + orderUid: orderUid, + timeStamp: block.block_timestamp, + transactionHash: transaction.transaction_hash, + gasUsed: transaction.transaction_gas, + gasCost: transaction.transaction_gas_price, + }); + + let solverData = await solverDataDB.findOne({ + id: solverAddress, + }); + if (!solverData) { + solverData = await solverDataDB.create({ + id: solverAddress, + solverAddress: solverAddress, + totalTransactions: 1, + totalVolume: buyAmount, + averageVolume: buyAmount, + totalGasUsed: transaction.transaction_gas, + }); + } else { + solverData.totalTransactions += 1; + solverData.totalVolume += buyAmount; + solverData.averageVolume = + solverData.totalVolume / solverData.totalTransactions; + solverData.totalGasUsed += transaction.transaction_gas; + await solverDataDB.save(solverData); + } +}; diff --git a/SolverScan/src/types/schema.ts b/SolverScan/src/types/schema.ts new file mode 100644 index 0000000..27f7333 --- /dev/null +++ b/SolverScan/src/types/schema.ts @@ -0,0 +1,145 @@ +// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + +import { Document } from "@blockflow-labs/utils"; + +export class TradeData { + static entity = "TradeData"; + static schema = { + id: { type: "String", index: true }, + protocolAddress: "string", + owner: "string", + sellToken: "string", + buyToken: "string", + sellAmount: "string", + buyAmount: "string", + solver: "string", + feeAmount: "string", + orderUid: "string", + timeStamp: "string", + transactionHash: "string", + gasUsed: "string", + gasCost: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class SolverData { + static entity = "SolverData"; + static schema = { + id: { type: "String", index: true }, + solverAddress: "string", + totalTransactions: "string", + totalVolume: "string", + averageVolume: "string", + totalGasUsed: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class LiqudityData { + static entity = "LiqudityData"; + static schema = { + id: { type: "String", index: true }, + target: "string", + value: "string", + selector: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class BridgeData { + static entity = "BridgeData"; + static schema = { + id: { type: "String", index: true }, + transactionHashSrc: "string", + transactionHashDest: "string", + from: "string", + fromValue: "string", + to: "string", + toValue: "string", + solver: "string", + solverGasCost: "string", + timestampSrc: "string", + timestampDest: "string", + bridgeTime: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +import { String } from "@blockflow-labs/utils"; + +export interface ITradeData extends Document { + id: String; + protocolAddress: string; + owner: string; + sellToken: string; + buyToken: string; + sellAmount: string; + buyAmount: string; + solver: string; + feeAmount: string; + orderUid: string; + timeStamp: string; + transactionHash: string; + gasUsed: string; + gasCost: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface ISolverData extends Document { + id: String; + solverAddress: string; + totalTransactions: string; + totalVolume: string; + averageVolume: string; + totalGasUsed: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface ILiqudityData extends Document { + id: String; + target: string; + value: string; + selector: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IBridgeData extends Document { + id: String; + transactionHashSrc: string; + transactionHashDest: string; + from: string; + fromValue: string; + to: string; + toValue: string; + solver: string; + solverGasCost: string; + timestampSrc: string; + timestampDest: string; + bridgeTime: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} diff --git a/SolverScan/src/utils/utils.ts b/SolverScan/src/utils/utils.ts new file mode 100644 index 0000000..622cce1 --- /dev/null +++ b/SolverScan/src/utils/utils.ts @@ -0,0 +1,6 @@ +export const COW_PROTOCOL_TOPIC0 = + "0xa07a543ab8a018198e99ca0184c93fe9050a79400a0a723441f84de1d972cc17"; +export const COW_PROTOCOL_ADDRESS = + "0x9008D19f58AAbD9eD0D60971565AA8510560ab41"; +export const SETTLEMENT_LOG_TOPIC = + "0x40338ce1a7c49204f0099533b1e9a7ee0a3d261f84974ab7af36105b8c4e9db4"; diff --git a/SolverScan/studio.schema.ts b/SolverScan/studio.schema.ts new file mode 100644 index 0000000..d96dfff --- /dev/null +++ b/SolverScan/studio.schema.ts @@ -0,0 +1,49 @@ +import { String } from "@blockflow-labs/utils"; + +export interface TradeData { + id: String; + protocolAddress: string; + owner: string; + sellToken: string; + buyToken: string; + sellAmount: string; + buyAmount: string; + solver: string; + feeAmount: string; + orderUid: string; + timeStamp: string; + transactionHash: string; + gasUsed: string; + gasCost: string; +} + +export interface SolverData { + id: String; + solverAddress: string; + totalTransactions: string; + totalVolume: string; + averageVolume: string; + totalGasUsed: string; +} + +export interface LiqudityData { + id: String; + target: string; + value: string; + selector: string; +} + +export interface BridgeData { + id: String; + transactionHashSrc: string; + transactionHashDest: string; + from: string; + fromValue: string; + to: string; + toValue: string; + solver: string; + solverGasCost: string; + timestampSrc: string; + timestampDest: string; + bridgeTime: string; +} diff --git a/SolverScan/studio.yaml b/SolverScan/studio.yaml new file mode 100644 index 0000000..edc61dc --- /dev/null +++ b/SolverScan/studio.yaml @@ -0,0 +1,48 @@ +name: SolverScan +description: A top-secret research project to the moon +startBlock: latest +userId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +projectId: XXXXXXXX-XXXX-XXXX-XXXXXXXX-XXXXXXXX +network: Ethereum +user: Jane-doe +schema: + file: ./studio.schema.ts +execution: parallel +Resources: + - Name: gpv2Settlement + Abi: src/abis/gpv2Settlement.json + Type: contract/event + Address: "0x9008D19f58AAbD9eD0D60971565AA8510560ab41" + Triggers: + - Event: Interaction(address indexed,uint256,bytes4) + Handler: src/handlers/gpv2Settlement/Interaction.InteractionHandler + - Event: OrderInvalidated(address indexed,bytes) + Handler: src/handlers/gpv2Settlement/OrderInvalidated.OrderInvalidatedHandler + - Event: PreSignature(address indexed,bytes,bool) + Handler: src/handlers/gpv2Settlement/PreSignature.PreSignatureHandler + - Event: Settlement(address indexed) + Handler: src/handlers/gpv2Settlement/Settlement.SettlementHandler + - Event: Trade(address indexed,address,address,uint256,uint256,uint256,bytes) + Handler: src/handlers/gpv2Settlement/Trade.TradeHandler + - Name: dlnsource + Abi: src/abis/dlnsource.json + Type: contract/event + Address: "0xeF4fB24aD0916217251F553c0596F8Edc630EB66" + Triggers: + - Event: >- + CreatedOrder(tuple(uint64,bytes,uint256,bytes,uint256,uint256,bytes,uint256,bytes,bytes,bytes,bytes,bytes,bytes),bytes32,bytes,uint256,uint256,uint32,bytes) + Handler: src/handlers/dlnsource/CreatedOrder.CreatedOrderHandler + - Event: SetDlnDestinationAddress(uint256,bytes,uint8) + Handler: >- + src/handlers/dlnsource/SetDlnDestinationAddress.SetDlnDestinationAddressHandler + - Name: dlndestination + Abi: src/abis/dlndestination.json + Type: contract/event + Address: "0xe7351fd770a37282b91d153ee690b63579d6dd7f" + Triggers: + - Event: >- + FulfilledOrder(tuple(uint64,bytes,uint256,bytes,uint256,uint256,bytes,uint256,bytes,bytes,bytes,bytes,bytes,bytes),bytes32,address,address) + Handler: src/handlers/dlndestination/FulfilledOrder.FulfilledOrderHandler + - Event: SetDlnSourceAddress(uint256,bytes,uint8) + Handler: >- + src/handlers/dlndestination/SetDlnSourceAddress.SetDlnSourceAddressHandler diff --git a/SolverScan/tsconfig.json b/SolverScan/tsconfig.json new file mode 100644 index 0000000..fb80a42 --- /dev/null +++ b/SolverScan/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "outDir": "./build/bin/", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From d43119db7dbed1d7578b5e3d9b92f48b2e04918e Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Sat, 27 Jul 2024 14:25:13 +0530 Subject: [PATCH 19/22] solverscan done Signed-off-by: d4v1d03 --- SolverScan/package-lock.json | 3053 ++++++++++++++++- SolverScan/package.json | 7 +- SolverScan/src/abis/across.json | 1702 +++++++++ .../src/handlers/across/FilledV3Relay.ts | 84 + .../src/handlers/across/V3FundsDeposited.ts | 67 + .../handlers/dlndestination/FulfilledOrder.ts | 71 +- .../src/handlers/dlnsource/CreatedOrder.ts | 48 +- .../src/handlers/gpv2Settlement/Trade.ts | 21 +- SolverScan/src/types/schema.ts | 52 +- SolverScan/src/utils/utils.ts | 8 + SolverScan/studio.schema.ts | 15 +- SolverScan/studio.yaml | 15 + 12 files changed, 5043 insertions(+), 100 deletions(-) create mode 100644 SolverScan/src/abis/across.json create mode 100644 SolverScan/src/handlers/across/FilledV3Relay.ts create mode 100644 SolverScan/src/handlers/across/V3FundsDeposited.ts diff --git a/SolverScan/package-lock.json b/SolverScan/package-lock.json index b74d4f4..f9a41ae 100644 --- a/SolverScan/package-lock.json +++ b/SolverScan/package-lock.json @@ -8,6 +8,7 @@ "name": "blockflow-studio", "version": "1.0.8-beta.2", "dependencies": { + "@blockflow-labs/cli": "^1.0.8", "@blockflow-labs/utils": "latest" }, "devDependencies": { @@ -19,6 +20,48 @@ "webpack-cli": "^5.1.4" } }, + "node_modules/@blockflow-labs/cli": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@blockflow-labs/cli/-/cli-1.0.8.tgz", + "integrity": "sha512-8b+XG210ps30Q7qZMbtG+UbEoDgQ7gWEdjrA2fe/tIQjuoe4JsJw4oesPsMM41t3hHsYH3YQ8RvBo78h5s5nYg==", + "dependencies": { + "@iarna/toml": "^2.2.5", + "@inquirer/checkbox": "^1.5.0", + "@supercharge/strings": "^2.0.0", + "archiver": "^6.0.1", + "axios": "^1.6.8", + "bignumber.js": "^9.1.2", + "chalk": "^4.1.2", + "cli-progress": "^3.12.0", + "commander": "^11.0.0", + "cors": "^2.8.5", + "dotenv": "^16.4.4", + "ethers": "^5.7.2", + "express": "^4.19.2", + "glob": "^10.3.10", + "immutable": "^5.0.0-beta.4", + "inquirer": "^8.2.6", + "js-beautify": "^1.14.9", + "js-yaml": "^4.1.0", + "mongoose": "^8.0.3", + "node-fetch": "^2.6.6", + "prettier": "^3.1.1", + "typescript": "^5.2.2", + "uuid": "^10.0.0", + "vm2": "^3.9.19" + }, + "bin": { + "blockflow": "bin/blockflow.js" + } + }, + "node_modules/@blockflow-labs/cli/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "engines": { + "node": ">=16" + } + }, "node_modules/@blockflow-labs/utils": { "version": "1.0.7-beta.1", "resolved": "https://registry.npmjs.org/@blockflow-labs/utils/-/utils-1.0.7-beta.1.tgz", @@ -36,6 +79,821 @@ "node": ">=10.0.0" } }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "node_modules/@inquirer/checkbox": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-1.5.2.tgz", + "integrity": "sha512-CifrkgQjDkUkWexmgYYNyB5603HhTHI91vLFeQXh6qrTKiCMVASol01Rs1cv6LP/A2WccZSRlJKZhbaBIs/9ZA==", + "dependencies": { + "@inquirer/core": "^6.0.0", + "@inquirer/type": "^1.1.6", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "figures": "^3.2.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@inquirer/core": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-6.0.0.tgz", + "integrity": "sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw==", + "dependencies": { + "@inquirer/type": "^1.1.6", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.10.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "figures": "^3.2.0", + "mute-stream": "^1.0.0", + "run-async": "^3.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.1.tgz", + "integrity": "sha512-m3YgGQlKNS0BM+8AFiJkCsTqHEFCWn6s/Rqye3mYwvqY6LdfUv12eSwbsgNzrYyrLXiy7IrrjDLPysaSBwEfhw==", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -102,6 +960,40 @@ "sparse-bitfield": "^3.0.3" } }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@supercharge/strings": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@supercharge/strings/-/strings-2.0.0.tgz", + "integrity": "sha512-x4l2Xfm9Hcag12FBoRtTYQYdgHanL9LMNo9AV2ZDJ6JQyJ7ftgS17DWGEEtsohVhEpAJ0YQk2DeZz0JsdIQuDA==", + "dependencies": { + "uuid": "~9.0.0" + } + }, + "node_modules/@supercharge/strings/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@types/eslint": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", @@ -134,11 +1026,18 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "20.14.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } @@ -156,6 +1055,11 @@ "@types/webidl-conversions": "*" } }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", @@ -358,11 +1262,30 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -379,6 +1302,22 @@ "acorn": "^8" } }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -404,11 +1343,32 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -419,15 +1379,206 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/archiver": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-6.0.2.tgz", + "integrity": "sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==", + "dependencies": { + "archiver-utils": "^4.0.1", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^5.0.1" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/archiver-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-4.0.1.tgz", + "integrity": "sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg==", + "dependencies": { + "glob": "^8.0.0", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "dev": true, "engines": { "node": "*" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -440,6 +1591,11 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, "node_modules/browserslist": { "version": "4.23.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", @@ -480,12 +1636,69 @@ "node": ">=16.20.1" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001643", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", @@ -510,7 +1723,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -522,6 +1734,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "node_modules/chrome-trace-event": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", @@ -531,55 +1748,207 @@ "node": ">=6.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-5.0.3.tgz", + "integrity": "sha512-/UIcLWvwAQyVibgpQDPtfNM3SvqN7G9elAPAV7GM0L53EbNWwWiCsWtK8Fwed/APEbptPHXs5PuW+y8Bq8lFTA==", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^5.0.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.8" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "node_modules/crc32-stream": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-5.0.1.tgz", + "integrity": "sha512-lO1dFui+CEUh/ztYIpgpKItKW9Bb4NWakCRJrnqAbFIYD+OZAwb2VfD5T5eXMw2FNcsDHkQcNl/Wh3iVXYwU6g==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 12.0.0" + } }, "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", @@ -610,12 +1979,156 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, "node_modules/electron-to-chromium": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", "dev": true }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -641,6 +2154,25 @@ "node": ">=4" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -656,6 +2188,19 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -699,6 +2244,61 @@ "node": ">=4.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -708,12 +2308,84 @@ "node": ">=0.8.x" } }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -729,6 +2401,20 @@ "node": ">= 4.9.1" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -741,6 +2427,36 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -763,41 +2479,195 @@ "flat": "cli.js" } }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -805,6 +2675,66 @@ "node": ">= 0.4" } }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.0-rc.1.tgz", + "integrity": "sha512-sW2Rt1jlDeEBTqHapJp6owkChOUwoHtbXhDHTa1tXJUl3WuLghuHaxjBZrL0Ih76awAdkcThu0m8QIXYU6nlrw==" + }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", @@ -824,6 +2754,72 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/inquirer/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/inquirer/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", @@ -833,6 +2829,14 @@ "node": ">=10.13.0" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-core-module": { "version": "2.15.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", @@ -848,6 +2852,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -869,11 +2889,26 @@ "node": ">=0.10.0" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "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/isobject": { "version": "3.0.1", @@ -884,6 +2919,20 @@ "node": ">=0.10.0" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -913,6 +2962,50 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -942,6 +3035,44 @@ "node": ">=0.10.0" } }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -963,17 +3094,63 @@ "node": ">=8" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", @@ -987,11 +3164,21 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -1000,7 +3187,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -1008,6 +3194,46 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mongodb": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", @@ -1107,18 +3333,176 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -1155,6 +3539,19 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -1168,7 +3565,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" } @@ -1179,6 +3575,26 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -1213,7 +3629,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -1224,6 +3639,33 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -1232,6 +3674,25 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -1241,6 +3702,60 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -1291,11 +3806,43 @@ "node": ">=8" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -1311,6 +3858,11 @@ } ] }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -1329,11 +3881,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -1341,6 +3897,42 @@ "node": ">=10" } }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -1350,6 +3942,41 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -1366,7 +3993,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" }, @@ -1378,16 +4004,43 @@ "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/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/sift": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, + "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==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -1424,11 +4077,89 @@ "memory-pager": "^1.0.2" } }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamx": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -1457,6 +4188,16 @@ "node": ">=6" } }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/terser": { "version": "5.31.3", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", @@ -1509,6 +4250,30 @@ } } }, + "node_modules/text-decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", + "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1521,6 +4286,14 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tr46": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", @@ -1552,11 +4325,38 @@ "webpack": "^5.0.0" } }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typescript": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1568,8 +4368,15 @@ "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==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/update-browserslist-db": { "version": "1.1.0", @@ -1610,6 +4417,55 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm2": { + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", + "deprecated": "The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.", + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" + } + }, "node_modules/watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", @@ -1623,6 +4479,14 @@ "node": ">=10.13.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -1771,7 +4635,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" }, @@ -1787,6 +4650,74 @@ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/zip-stream": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-5.0.2.tgz", + "integrity": "sha512-LfOdrUvPB8ZoXtvOBz6DlNClfvi//b5d56mSWyJi7XbH/HfhOHfUhOqxhT/rUiR7yiktlunqRo+jY6y/cWC/5g==", + "dependencies": { + "archiver-utils": "^4.0.1", + "compress-commons": "^5.0.1", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 12.0.0" + } } } } diff --git a/SolverScan/package.json b/SolverScan/package.json index 5f020e8..5bf5e95 100644 --- a/SolverScan/package.json +++ b/SolverScan/package.json @@ -6,14 +6,15 @@ "compile": "tsc -b" }, "dependencies": { + "@blockflow-labs/cli": "^1.0.8", "@blockflow-labs/utils": "latest" }, "devDependencies": { - "typescript": "^5.1.6", "bignumber.js": "^9.1.1", "prettier": "^3.0.3", + "ts-loader": "^9.5.0", + "typescript": "^5.1.6", "webpack": "^5.89.0", - "webpack-cli": "^5.1.4", - "ts-loader": "^9.5.0" + "webpack-cli": "^5.1.4" } } diff --git a/SolverScan/src/abis/across.json b/SolverScan/src/abis/across.json new file mode 100644 index 0000000..a7ba7a7 --- /dev/null +++ b/SolverScan/src/abis/across.json @@ -0,0 +1,1702 @@ +[ + { + "inputs": [ + { "internalType": "address", "name": "_logic", "type": "address" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { "stateMutability": "payable", "type": "receive" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wrappedNativeTokenAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_depositQuoteTimeBuffer", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_fillDeadlineBuffer", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "name": "ClaimedMerkleLeaf", "type": "error" }, + { "inputs": [], "name": "DepositsArePaused", "type": "error" }, + { "inputs": [], "name": "DisabledRoute", "type": "error" }, + { "inputs": [], "name": "ExpiredFillDeadline", "type": "error" }, + { "inputs": [], "name": "FillsArePaused", "type": "error" }, + { "inputs": [], "name": "InvalidChainId", "type": "error" }, + { "inputs": [], "name": "InvalidCrossDomainAdmin", "type": "error" }, + { "inputs": [], "name": "InvalidDepositorSignature", "type": "error" }, + { "inputs": [], "name": "InvalidExclusiveRelayer", "type": "error" }, + { "inputs": [], "name": "InvalidExclusivityDeadline", "type": "error" }, + { "inputs": [], "name": "InvalidFillDeadline", "type": "error" }, + { "inputs": [], "name": "InvalidHubPool", "type": "error" }, + { "inputs": [], "name": "InvalidMerkleLeaf", "type": "error" }, + { "inputs": [], "name": "InvalidMerkleProof", "type": "error" }, + { "inputs": [], "name": "InvalidPayoutAdjustmentPct", "type": "error" }, + { "inputs": [], "name": "InvalidQuoteTimestamp", "type": "error" }, + { "inputs": [], "name": "InvalidRelayerFeePct", "type": "error" }, + { "inputs": [], "name": "InvalidSlowFillRequest", "type": "error" }, + { "inputs": [], "name": "MaxTransferSizeExceeded", "type": "error" }, + { "inputs": [], "name": "MsgValueDoesNotMatchInputAmount", "type": "error" }, + { "inputs": [], "name": "NoSlowFillsInExclusivityWindow", "type": "error" }, + { "inputs": [], "name": "NotEOA", "type": "error" }, + { "inputs": [], "name": "NotExclusiveRelayer", "type": "error" }, + { "inputs": [], "name": "RelayFilled", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "rootBundleId", + "type": "uint256" + } + ], + "name": "EmergencyDeleteRootBundle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "originToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "EnabledDepositRoute", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amountToReturn", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "refundAmounts", + "type": "uint256[]" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "rootBundleId", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "leafId", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "l2TokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "refundAddresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ExecutedRelayerRefundRoot", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalFilledAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fillAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repaymentChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "int64", + "name": "relayerFeePct", + "type": "int64" + }, + { + "indexed": false, + "internalType": "int64", + "name": "realizedLpFeePct", + "type": "int64" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "components": [ + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "bytes", "name": "message", "type": "bytes" }, + { "internalType": "int64", "name": "relayerFeePct", "type": "int64" }, + { "internalType": "bool", "name": "isSlowRelay", "type": "bool" }, + { + "internalType": "int256", + "name": "payoutAdjustmentPct", + "type": "int256" + } + ], + "indexed": false, + "internalType": "struct SpokePool.RelayExecutionInfo", + "name": "updatableRelayData", + "type": "tuple" + } + ], + "name": "FilledRelay", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repaymentChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "fillDeadline", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "updatedRecipient", + "type": "address" + }, + { + "internalType": "bytes", + "name": "updatedMessage", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "updatedOutputAmount", + "type": "uint256" + }, + { + "internalType": "enum V3SpokePoolInterface.FillType", + "name": "fillType", + "type": "uint8" + } + ], + "indexed": false, + "internalType": "struct V3SpokePoolInterface.V3RelayExecutionEventInfo", + "name": "relayExecutionInfo", + "type": "tuple" + } + ], + "name": "FilledV3Relay", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "int64", + "name": "relayerFeePct", + "type": "int64" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "quoteTimestamp", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "FundsDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PausedDeposits", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PausedFills", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "rootBundleId", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "relayerRefundRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "slowRelayRoot", + "type": "bytes32" + } + ], + "name": "RelayedRootBundle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "int64", + "name": "newRelayerFeePct", + "type": "int64" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "updatedRecipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "updatedMessage", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "depositorSignature", + "type": "bytes" + } + ], + "name": "RequestedSpeedUpDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updatedOutputAmount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "updatedRecipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "updatedMessage", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "depositorSignature", + "type": "bytes" + } + ], + "name": "RequestedSpeedUpV3Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "fillDeadline", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "RequestedV3SlowFill", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newHubPool", + "type": "address" + } + ], + "name": "SetHubPool", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetXDomainAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amountToReturn", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "leafId", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2TokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "TokensBridged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "quoteTimestamp", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "fillDeadline", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "V3FundsDeposited", + "type": "event" + }, + { + "inputs": [], + "name": "EMPTY_RELAYER", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "EMPTY_REPAYMENT_CHAIN_ID", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INFINITE_FILL_DEADLINE", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_TRANSFER_SIZE", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "UPDATE_V3_DEPOSIT_DETAILS_HASH", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_initialDepositId", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_crossDomainAdmin", + "type": "address" + }, + { "internalType": "address", "name": "_hubPool", "type": "address" } + ], + "name": "__SpokePool_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "chainId", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "crossDomainAdmin", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "address", "name": "originToken", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { "internalType": "int64", "name": "relayerFeePct", "type": "int64" }, + { "internalType": "uint32", "name": "quoteTimestamp", "type": "uint32" }, + { "internalType": "bytes", "name": "message", "type": "bytes" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "address", "name": "originToken", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { "internalType": "int64", "name": "relayerFeePct", "type": "int64" }, + { "internalType": "uint32", "name": "quoteTimestamp", "type": "uint32" }, + { "internalType": "bytes", "name": "message", "type": "bytes" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "depositFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "depositQuoteTimeBuffer", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "address", "name": "inputToken", "type": "address" }, + { "internalType": "address", "name": "outputToken", "type": "address" }, + { "internalType": "uint256", "name": "inputAmount", "type": "uint256" }, + { "internalType": "uint256", "name": "outputAmount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { "internalType": "uint32", "name": "quoteTimestamp", "type": "uint32" }, + { "internalType": "uint32", "name": "fillDeadline", "type": "uint32" }, + { + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { "internalType": "bytes", "name": "message", "type": "bytes" } + ], + "name": "depositV3", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "address", "name": "inputToken", "type": "address" }, + { "internalType": "address", "name": "outputToken", "type": "address" }, + { "internalType": "uint256", "name": "inputAmount", "type": "uint256" }, + { "internalType": "uint256", "name": "outputAmount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "internalType": "uint32", + "name": "fillDeadlineOffset", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { "internalType": "bytes", "name": "message", "type": "bytes" } + ], + "name": "depositV3Now", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "rootBundleId", "type": "uint256" } + ], + "name": "emergencyDeleteRootBundle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "enabledDepositRoutes", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "rootBundleId", "type": "uint32" }, + { + "components": [ + { + "internalType": "uint256", + "name": "amountToReturn", + "type": "uint256" + }, + { "internalType": "uint256", "name": "chainId", "type": "uint256" }, + { + "internalType": "uint256[]", + "name": "refundAmounts", + "type": "uint256[]" + }, + { "internalType": "uint32", "name": "leafId", "type": "uint32" }, + { + "internalType": "address", + "name": "l2TokenAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "refundAddresses", + "type": "address[]" + } + ], + "internalType": "struct SpokePoolInterface.RelayerRefundLeaf", + "name": "relayerRefundLeaf", + "type": "tuple" + }, + { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } + ], + "name": "executeRelayerRefundLeaf", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "depositId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "fillDeadline", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { "internalType": "bytes", "name": "message", "type": "bytes" } + ], + "internalType": "struct V3SpokePoolInterface.V3RelayData", + "name": "relayData", + "type": "tuple" + }, + { "internalType": "uint256", "name": "chainId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "updatedOutputAmount", + "type": "uint256" + } + ], + "internalType": "struct V3SpokePoolInterface.V3SlowFill", + "name": "slowFillLeaf", + "type": "tuple" + }, + { "internalType": "uint32", "name": "rootBundleId", "type": "uint32" }, + { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } + ], + "name": "executeV3SlowRelayLeaf", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "fillDeadlineBuffer", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "fillStatuses", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { "internalType": "uint32", "name": "depositId", "type": "uint32" }, + { + "internalType": "uint32", + "name": "fillDeadline", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { "internalType": "bytes", "name": "message", "type": "bytes" } + ], + "internalType": "struct V3SpokePoolInterface.V3RelayData", + "name": "relayData", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "repaymentChainId", + "type": "uint256" + } + ], + "name": "fillV3Relay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { "internalType": "uint32", "name": "depositId", "type": "uint32" }, + { + "internalType": "uint32", + "name": "fillDeadline", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { "internalType": "bytes", "name": "message", "type": "bytes" } + ], + "internalType": "struct V3SpokePoolInterface.V3RelayData", + "name": "relayData", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "repaymentChainId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "updatedOutputAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "updatedRecipient", + "type": "address" + }, + { "internalType": "bytes", "name": "updatedMessage", "type": "bytes" }, + { "internalType": "bytes", "name": "depositorSignature", "type": "bytes" } + ], + "name": "fillV3RelayWithUpdatedDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentTime", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hubPool", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_initialDepositId", + "type": "uint32" + }, + { "internalType": "address", "name": "_hubPool", "type": "address" } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } + ], + "name": "multicall", + "outputs": [ + { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "numberOfDeposits", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "pause", "type": "bool" }], + "name": "pauseDeposits", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "pause", "type": "bool" }], + "name": "pauseFills", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pausedDeposits", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pausedFills", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "relayerRefundRoot", + "type": "bytes32" + }, + { "internalType": "bytes32", "name": "slowRelayRoot", "type": "bytes32" } + ], + "name": "relayRootBundle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { + "internalType": "address", + "name": "exclusiveRelayer", + "type": "address" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "originChainId", + "type": "uint256" + }, + { "internalType": "uint32", "name": "depositId", "type": "uint32" }, + { + "internalType": "uint32", + "name": "fillDeadline", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "exclusivityDeadline", + "type": "uint32" + }, + { "internalType": "bytes", "name": "message", "type": "bytes" } + ], + "internalType": "struct V3SpokePoolInterface.V3RelayData", + "name": "relayData", + "type": "tuple" + } + ], + "name": "requestV3SlowFill", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "rootBundles", + "outputs": [ + { "internalType": "bytes32", "name": "slowRelayRoot", "type": "bytes32" }, + { + "internalType": "bytes32", + "name": "relayerRefundRoot", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newCrossDomainAdmin", + "type": "address" + } + ], + "name": "setCrossDomainAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "originToken", "type": "address" }, + { + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { "internalType": "bool", "name": "enabled", "type": "bool" } + ], + "name": "setEnableRoute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newHubPool", "type": "address" } + ], + "name": "setHubPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "depositor", "type": "address" }, + { "internalType": "uint32", "name": "depositId", "type": "uint32" }, + { + "internalType": "uint256", + "name": "updatedOutputAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "updatedRecipient", + "type": "address" + }, + { "internalType": "bytes", "name": "updatedMessage", "type": "bytes" }, + { "internalType": "bytes", "name": "depositorSignature", "type": "bytes" } + ], + "name": "speedUpV3Deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "wrappedNativeToken", + "outputs": [ + { + "internalType": "contract WETH9Interface", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/SolverScan/src/handlers/across/FilledV3Relay.ts b/SolverScan/src/handlers/across/FilledV3Relay.ts new file mode 100644 index 0000000..34aad7f --- /dev/null +++ b/SolverScan/src/handlers/across/FilledV3Relay.ts @@ -0,0 +1,84 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; +import {BridgeData, SolverAnalysis} from "../../types/schema"; + +/** + * @dev Event::FilledV3Relay(address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 repaymentChainId, uint256 originChainId, uint32 depositId, uint32 fillDeadline, uint32 exclusivityDeadline, address exclusiveRelayer, address relayer, address depositor, address recipient, bytes message, tuple relayExecutionInfo) + * @param context trigger object with contains {event: {inputToken ,outputToken ,inputAmount ,outputAmount ,repaymentChainId ,originChainId ,depositId ,fillDeadline ,exclusivityDeadline ,exclusiveRelayer ,relayer ,depositor ,recipient ,message ,relayExecutionInfo }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const FilledV3RelayHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for FilledV3Relay here + + const { event, transaction, block, log } = context; + const { + inputToken, + outputToken, + inputAmount, + outputAmount, + repaymentChainId, + originChainId, + depositId, + fillDeadline, + exclusivityDeadline, + exclusiveRelayer, + relayer, + depositor, + recipient, + message, + relayExecutionInfo, + } = event; + + const bridgeDataDB: Instance = bind(BridgeData); + const solveranalysisDB: Instance = bind(SolverAnalysis); + + let bridgedata = await bridgeDataDB.findOne({ + id:depositId.toString() + }); + if(!bridgedata){ + await bridgeDataDB.create({ + id: depositId.toString(), + transactionHashDest: transaction.transaction_hash, + solver: relayer, + solverGasCost: relayExecutionInfo.gasUsed.toString(), + timestampDest: block.block_timestamp.toString(), + }); + } + else{ + bridgedata.transactionHashDest = transaction.transaction_hash; + bridgedata.solver = relayer; + bridgedata.solverGasCost = relayExecutionInfo.gasUsed.toString(); + bridgedata.timestampDest = block.block_timestamp.toString(); + + await bridgeDataDB.save(bridgedata); + } + + let solverdata = await solveranalysisDB.findOne({ + id: relayer + }); + if(!solverdata){ + await solveranalysisDB.create({ + id: relayer, + totalTransactions: "1", + totalVolume: outputAmount.toString(), + averageVolume: outputAmount.toString(), + totalGasSpent: relayExecutionInfo.gasUsed.toString() + }); + } + else{ + solverdata.totalTransactions+= 1; + solverdata.totalVolume = (parseInt(solverdata.totalVolume) + parseInt(outputAmount)).toString(); + solverdata.averageVolume = (parseInt(solverdata.totalVolume) / parseInt(solverdata.totalTransactions)).toString(); + solverdata.totalGasSpent = (parseInt(solverdata.totalGasSpent) + parseInt(relayExecutionInfo.gasUsed)).toString(); + + await solveranalysisDB.save(solverdata); + } +}; diff --git a/SolverScan/src/handlers/across/V3FundsDeposited.ts b/SolverScan/src/handlers/across/V3FundsDeposited.ts new file mode 100644 index 0000000..804d52f --- /dev/null +++ b/SolverScan/src/handlers/across/V3FundsDeposited.ts @@ -0,0 +1,67 @@ +import { + IEventContext, + IBind, + Instance, + ISecrets, +} from "@blockflow-labs/utils"; +import {BridgeData} from "../../types/schema" + +/** + * @dev Event::V3FundsDeposited(address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 destinationChainId, uint32 depositId, uint32 quoteTimestamp, uint32 fillDeadline, uint32 exclusivityDeadline, address depositor, address recipient, address exclusiveRelayer, bytes message) + * @param context trigger object with contains {event: {inputToken ,outputToken ,inputAmount ,outputAmount ,destinationChainId ,depositId ,quoteTimestamp ,fillDeadline ,exclusivityDeadline ,depositor ,recipient ,exclusiveRelayer ,message }, transaction, block, log} + * @param bind init function for database wrapper methods + */ +export const V3FundsDepositedHandler = async ( + context: IEventContext, + bind: IBind, + secrets: ISecrets, +) => { + // Implement your event handler logic for V3FundsDeposited here + + const { event, transaction, block, log } = context; + const { + inputToken, + outputToken, + inputAmount, + outputAmount, + destinationChainId, + depositId, + quoteTimestamp, + fillDeadline, + exclusivityDeadline, + depositor, + recipient, + exclusiveRelayer, + message, + } = event; + const bridgeDataDB: Instance = bind(BridgeData); + + let bridgedata = await bridgeDataDB.findOne({ + id:depositId.toString() + }) + if(!bridgedata){ + await bridgeDataDB.create({ + id: depositId.toString(), + transactionHashSrc: transaction.transaction_hash, + transactionHashDest: "", + from: inputToken, + fromValue: inputAmount.toString(), + to: outputToken, + toValue: outputAmount.toString(), + solver: "", + solverGasCost: "", + timestampSrc: block.block_timestamp.toString(), + timestampDest: "", + }) + } + else{ + bridgedata.transactionHashSrc = transaction.transaction_hash; + bridgedata.from = inputToken; + bridgedata.fromValue = inputAmount.toString(); + bridgedata.to = outputToken; + bridgedata.toValue = outputAmount.toString(); + bridgedata.timestampSrc = block.block_timestamp.toString(); + + await bridgeDataDB.save(bridgedata); + } +}; diff --git a/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts index 7ebd1a9..632cff4 100644 --- a/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts +++ b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts @@ -5,7 +5,7 @@ import { ISecrets, } from "@blockflow-labs/utils"; -import { BridgeData } from "../../types/schema"; +import { BridgeData, SolverAnalysis } from "../../types/schema"; /** * @dev Event::FulfilledOrder(tuple order, bytes32 orderId, address sender, address unlockAuthority) @@ -17,26 +17,65 @@ export const FulfilledOrderHandler = async ( bind: IBind, secrets: ISecrets, ) => { - // Implement your event handler logic for FulfilledOrder here const { event, transaction, block, log } = context; const { order, orderId, sender, unlockAuthority } = event; - + const bridgeDataDB: Instance = bind(BridgeData); + const solveranalysisDB: Instance = bind(SolverAnalysis); + + const solverGasCost = + parseFloat(transaction.transaction_receipt_gas_used) * + parseFloat(transaction.transaction_gas_price); - let bridgedata = await bridgeDataDB.create({ - id: orderId, - transactionHashSrc:"", - transactionHashDest: transaction.transaction_hash, - from:"", - fromValue:"", - to: log.log_address, - toValue: "", - solver:"", - solverGasCost: "", - timestampSrc:"", - timestampDest: block.block_timestamp, - bridgeTime: "" + const value = parseInt(transaction.transaction_value) - solverGasCost; + + let bridgedata = await bridgeDataDB.findOne({ + id: orderId +}); + if (!bridgedata) { + await bridgeDataDB.create({ + id: orderId, + transactionHashSrc: "", + transactionHashDest: transaction.transaction_hash, + from: "", + fromValue: "", + to: log.log_address, + toValue: value, + solver: sender, + solverGasCost: solverGasCost, + timestampSrc: "", + timestampDest: block.block_timestamp, + }); + } + else{ + bridgedata.transactionHashDest = transaction.transaction_hash; + bridgedata.to = log.log_address; + bridgedata.toValue = value; + bridgedata.solver = sender; + bridgedata.solverGasCost = solverGasCost; + bridgedata.timestampDest = block.block_timestamp; + await bridgeDataDB.save(bridgedata); + } + ; + + let solveranalysis = await solveranalysisDB.findOne({ + id: sender, }); + if (!solveranalysis) { + await solveranalysisDB.create({ + id: sender, + totalTransactions: 1, + totalVolume: value, + averageVolume: value, + totalGasSpent: solverGasCost, + }); + } else { + solveranalysis.totalTransactions += 1; + solveranalysis.totalGasSpent += solverGasCost; + solveranalysis.totalVolume += value; + solveranalysis.averageVolume = solveranalysis.totalVolume/solveranalysis.totalTransactions; + await solveranalysisDB.save(solveranalysis); + } }; diff --git a/SolverScan/src/handlers/dlnsource/CreatedOrder.ts b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts index c035c45..577c241 100644 --- a/SolverScan/src/handlers/dlnsource/CreatedOrder.ts +++ b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts @@ -29,22 +29,38 @@ export const CreatedOrderHandler = async ( metadata, } = event; - const value = parseInt(transaction.transaction_value) - affiliateFee -nativeFixFee; + const value = + parseInt(transaction.transaction_value) - + affiliateFee - + nativeFixFee - + percentFee; - const bridgeDataDB: Instance = bind(BridgeData); + const bridgeDataDB: Instance = bind(BridgeData); - let bridgedata = await bridgeDataDB.create({ - id:orderId, - transactionHashSrc: transaction.transaction_hash, - transactionHashDest: "", - from: log.log_address, - fromValue: value, - to:"", - toValue: "", - solver: "", - solverGasCost:"", - timestampSrc: block.block_timestamp, - timestampDest:"", - bridgeTime:"" - }) + let bridgedata = await bridgeDataDB.findOne({ + id: orderId, + }); + if(!bridgedata){ + await bridgeDataDB.create({ + id: orderId, + transactionHashSrc: transaction.transaction_hash, + transactionHashDest: "", + from: log.log_address, + fromValue: value, + to: "", + toValue: "", + solver: "", + solverGasCost: "", + timestampSrc: block.block_timestamp, + timestampDest: "", + bridgeTime: "", + });} + else{ + bridgedata.transactionHashSrc = transaction.transaction_hash; + bridgedata.from = log.log_address; + bridgedata.fromValue = value; + bridgedata.timestampSrc = block.block_timestamp; + await bridgeDataDB.save(bridgedata); + } }; + diff --git a/SolverScan/src/handlers/gpv2Settlement/Trade.ts b/SolverScan/src/handlers/gpv2Settlement/Trade.ts index c2e2133..5366ea2 100644 --- a/SolverScan/src/handlers/gpv2Settlement/Trade.ts +++ b/SolverScan/src/handlers/gpv2Settlement/Trade.ts @@ -5,11 +5,12 @@ import { ISecrets, } from "@blockflow-labs/utils"; -import { TradeData, SolverData } from "../../types/schema"; +import { TradeData, SolverData, Volumeforeachpair } from "../../types/schema"; import { COW_PROTOCOL_TOPIC0, COW_PROTOCOL_ADDRESS, SETTLEMENT_LOG_TOPIC, + pairIdgenerator, } from "../../utils/utils"; /** @@ -37,6 +38,7 @@ export const TradeHandler = async ( const tradeDataDB: Instance = bind(TradeData); const solverDataDB: Instance = bind(SolverData); + const VolumeforeachpairDB: Instance = bind(Volumeforeachpair); const solver = transaction.logs ? transaction.logs.find( @@ -46,6 +48,8 @@ export const TradeHandler = async ( : null; const solverAddress = solver?.topics[1].toLowerCase(); + const pairId = pairIdgenerator(sellToken, buyToken); + let tradedata = await tradeDataDB.create({ id: transaction.transaction_hash, protocolAddress: COW_PROTOCOL_ADDRESS, @@ -83,4 +87,19 @@ export const TradeHandler = async ( solverData.totalGasUsed += transaction.transaction_gas; await solverDataDB.save(solverData); } + + let volumeforeachpair = await VolumeforeachpairDB.findOne({ + id: pairId, + }); + if (!volumeforeachpair) { + await VolumeforeachpairDB.create({ + id: pairId, + frequency: 1, + volume: buyAmount, + }); + } else { + volumeforeachpair.frequency += 1; + volumeforeachpair.volume += buyAmount; + await VolumeforeachpairDB.save(volumeforeachpair); + } }; diff --git a/SolverScan/src/types/schema.ts b/SolverScan/src/types/schema.ts index 27f7333..b42a592 100644 --- a/SolverScan/src/types/schema.ts +++ b/SolverScan/src/types/schema.ts @@ -70,7 +70,34 @@ export class BridgeData { solverGasCost: "string", timestampSrc: "string", timestampDest: "string", - bridgeTime: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class SolverAnalysis { + static entity = "SolverAnalysis"; + static schema = { + id: { type: "String", index: true }, + totalTransactions: "number", + totalVolume: "string", + averageVolume: "string", + totalGasSpent: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class Volumeforeachpair { + static entity = "Volumeforeachpair"; + static schema = { + id: { type: "String", index: true }, + frequency: "number", + volume: "string", entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, @@ -137,7 +164,28 @@ export interface IBridgeData extends Document { solverGasCost: string; timestampSrc: string; timestampDest: string; - bridgeTime: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface ISolverAnalysis extends Document { + id: String; + totalTransactions: number; + totalVolume: string; + averageVolume: string; + totalGasSpent: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IVolumeforeachpair extends Document { + id: String; + frequency: number; + volume: string; blocknumber: String; entityId: String; instanceId: String; diff --git a/SolverScan/src/utils/utils.ts b/SolverScan/src/utils/utils.ts index 622cce1..ca1c22b 100644 --- a/SolverScan/src/utils/utils.ts +++ b/SolverScan/src/utils/utils.ts @@ -4,3 +4,11 @@ export const COW_PROTOCOL_ADDRESS = "0x9008D19f58AAbD9eD0D60971565AA8510560ab41"; export const SETTLEMENT_LOG_TOPIC = "0x40338ce1a7c49204f0099533b1e9a7ee0a3d261f84974ab7af36105b8c4e9db4"; + +export function pairIdgenerator(str1: string, str2: string): string { + if (str1 > str2) { + return str1 + str2; + } else { + return str2 + str1; + } +} diff --git a/SolverScan/studio.schema.ts b/SolverScan/studio.schema.ts index d96dfff..9609ebf 100644 --- a/SolverScan/studio.schema.ts +++ b/SolverScan/studio.schema.ts @@ -45,5 +45,18 @@ export interface BridgeData { solverGasCost: string; timestampSrc: string; timestampDest: string; - bridgeTime: string; +} + +export interface SolverAnalysis { + id: String; + totalTransactions: number; + totalVolume: string; + averageVolume: string; + totalGasSpent: string; +} + +export interface Volumeforeachpair { + id: String; + frequency: number; + volume: string; } diff --git a/SolverScan/studio.yaml b/SolverScan/studio.yaml index edc61dc..7785b46 100644 --- a/SolverScan/studio.yaml +++ b/SolverScan/studio.yaml @@ -46,3 +46,18 @@ Resources: - Event: SetDlnSourceAddress(uint256,bytes,uint8) Handler: >- src/handlers/dlndestination/SetDlnSourceAddress.SetDlnSourceAddressHandler + - Name: across + Abi: src/abis/across.json + Type: contract/event + Address: "0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5" + Triggers: + - Event: >- + FilledV3Relay(address,address,uint256,uint256,uint256,uint256 + indexed,uint32 indexed,uint32,uint32,address,address + indexed,address,address,bytes,tuple(address,bytes,uint256,uint8)) + Handler: src/handlers/across/FilledV3Relay.FilledV3RelayHandler + - Event: >- + V3FundsDeposited(address,address,uint256,uint256,uint256 + indexed,uint32 indexed,uint32,uint32,uint32,address + indexed,address,address,bytes) + Handler: src/handlers/across/V3FundsDeposited.V3FundsDepositedHandler From 3eccfaa0e6c1e967d3913baf7253087b9c7b1532 Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Mon, 29 Jul 2024 17:13:26 +0530 Subject: [PATCH 20/22] fixes Signed-off-by: d4v1d03 --- .../src/handlers/across/FilledV3Relay.ts | 19 ++++++++---- .../handlers/dlndestination/FulfilledOrder.ts | 15 +++++---- .../dlndestination/SetDlnSourceAddress.ts | 22 ------------- .../dlnsource/SetDlnDestinationAddress.ts | 22 ------------- .../gpv2Settlement/OrderInvalidated.ts | 22 ------------- .../handlers/gpv2Settlement/PreSignature.ts | 22 ------------- .../src/handlers/gpv2Settlement/Trade.ts | 6 ++++ SolverScan/src/types/schema.ts | 6 ++++ SolverScan/src/utils/utils.ts | 31 +++++++++++++++++++ SolverScan/studio.schema.ts | 3 ++ SolverScan/studio.yaml | 10 ------ 11 files changed, 68 insertions(+), 110 deletions(-) delete mode 100644 SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts delete mode 100644 SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts delete mode 100644 SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts delete mode 100644 SolverScan/src/handlers/gpv2Settlement/PreSignature.ts diff --git a/SolverScan/src/handlers/across/FilledV3Relay.ts b/SolverScan/src/handlers/across/FilledV3Relay.ts index 34aad7f..a791a56 100644 --- a/SolverScan/src/handlers/across/FilledV3Relay.ts +++ b/SolverScan/src/handlers/across/FilledV3Relay.ts @@ -5,6 +5,7 @@ import { ISecrets, } from "@blockflow-labs/utils"; import {BridgeData, SolverAnalysis} from "../../types/schema"; +import { BigNumber } from "bignumber.js"; /** * @dev Event::FilledV3Relay(address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 repaymentChainId, uint256 originChainId, uint32 depositId, uint32 fillDeadline, uint32 exclusivityDeadline, address exclusiveRelayer, address relayer, address depositor, address recipient, bytes message, tuple relayExecutionInfo) @@ -40,22 +41,28 @@ export const FilledV3RelayHandler = async ( const bridgeDataDB: Instance = bind(BridgeData); const solveranalysisDB: Instance = bind(SolverAnalysis); + const gasPrice = new BigNumber(transaction.transaction_gas_price); + const gasUsed = new BigNumber(transaction.transaction_receipt_gas_used); + const etherUnit = new BigNumber('1e18'); + + const solverGasCost = gasPrice.multipliedBy(gasUsed).dividedBy(etherUnit); + let bridgedata = await bridgeDataDB.findOne({ - id:depositId.toString() + id:depositId }); if(!bridgedata){ await bridgeDataDB.create({ - id: depositId.toString(), + id: depositId, transactionHashDest: transaction.transaction_hash, solver: relayer, - solverGasCost: relayExecutionInfo.gasUsed.toString(), + solverGasCost: solverGasCost , timestampDest: block.block_timestamp.toString(), }); } else{ bridgedata.transactionHashDest = transaction.transaction_hash; bridgedata.solver = relayer; - bridgedata.solverGasCost = relayExecutionInfo.gasUsed.toString(); + bridgedata.solverGasCost = parseInt(bridgedata.solverGasCost) + solverGasCost.toNumber(); bridgedata.timestampDest = block.block_timestamp.toString(); await bridgeDataDB.save(bridgedata); @@ -70,14 +77,14 @@ export const FilledV3RelayHandler = async ( totalTransactions: "1", totalVolume: outputAmount.toString(), averageVolume: outputAmount.toString(), - totalGasSpent: relayExecutionInfo.gasUsed.toString() + totalGasSpent: solverGasCost.toString(), }); } else{ solverdata.totalTransactions+= 1; solverdata.totalVolume = (parseInt(solverdata.totalVolume) + parseInt(outputAmount)).toString(); solverdata.averageVolume = (parseInt(solverdata.totalVolume) / parseInt(solverdata.totalTransactions)).toString(); - solverdata.totalGasSpent = (parseInt(solverdata.totalGasSpent) + parseInt(relayExecutionInfo.gasUsed)).toString(); + solverdata.totalGasSpent = parseInt(solverdata.totalGasSpent) + solverGasCost.toNumber(); await solveranalysisDB.save(solverdata); } diff --git a/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts index 632cff4..31addb0 100644 --- a/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts +++ b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts @@ -6,6 +6,7 @@ import { } from "@blockflow-labs/utils"; import { BridgeData, SolverAnalysis } from "../../types/schema"; +import { BigNumber } from "bignumber.js"; /** * @dev Event::FulfilledOrder(tuple order, bytes32 orderId, address sender, address unlockAuthority) @@ -24,11 +25,13 @@ export const FulfilledOrderHandler = async ( const bridgeDataDB: Instance = bind(BridgeData); const solveranalysisDB: Instance = bind(SolverAnalysis); - const solverGasCost = - parseFloat(transaction.transaction_receipt_gas_used) * - parseFloat(transaction.transaction_gas_price); +const gasPrice = new BigNumber(transaction.transaction_gas_price); +const gasUsed = new BigNumber(transaction.transaction_receipt_gas_used); +const etherUnit = new BigNumber('1e18'); +const transactionValue = new BigNumber(transaction.transaction_value); - const value = parseInt(transaction.transaction_value) - solverGasCost; +const solverGasCost = gasPrice.multipliedBy(gasUsed).dividedBy(etherUnit); +const value = (transactionValue.minus(solverGasCost)).dividedBy(etherUnit); let bridgedata = await bridgeDataDB.findOne({ id: orderId @@ -73,8 +76,8 @@ export const FulfilledOrderHandler = async ( } else { solveranalysis.totalTransactions += 1; solveranalysis.totalGasSpent += solverGasCost; - solveranalysis.totalVolume += value; - solveranalysis.averageVolume = solveranalysis.totalVolume/solveranalysis.totalTransactions; + solveranalysis.totalVolume = (solveranalysis.totalVolume + value).toString(); + solveranalysis.averageVolume = (parseInt(solveranalysis.totalVolume)/parseInt(solveranalysis.totalTransactions)).toString(); await solveranalysisDB.save(solveranalysis); } diff --git a/SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts b/SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts deleted file mode 100644 index aded752..0000000 --- a/SolverScan/src/handlers/dlndestination/SetDlnSourceAddress.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - IEventContext, - IBind, - Instance, - ISecrets, -} from "@blockflow-labs/utils"; - -/** - * @dev Event::SetDlnSourceAddress(uint256 chainIdFrom, bytes dlnSourceAddress, uint8 chainEngine) - * @param context trigger object with contains {event: {chainIdFrom ,dlnSourceAddress ,chainEngine }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const SetDlnSourceAddressHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - // Implement your event handler logic for SetDlnSourceAddress here - - const { event, transaction, block, log } = context; - const { chainIdFrom, dlnSourceAddress, chainEngine } = event; -}; diff --git a/SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts b/SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts deleted file mode 100644 index dee7382..0000000 --- a/SolverScan/src/handlers/dlnsource/SetDlnDestinationAddress.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - IEventContext, - IBind, - Instance, - ISecrets, -} from "@blockflow-labs/utils"; - -/** - * @dev Event::SetDlnDestinationAddress(uint256 chainIdTo, bytes dlnDestinationAddress, uint8 chainEngine) - * @param context trigger object with contains {event: {chainIdTo ,dlnDestinationAddress ,chainEngine }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const SetDlnDestinationAddressHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - // Implement your event handler logic for SetDlnDestinationAddress here - - const { event, transaction, block, log } = context; - const { chainIdTo, dlnDestinationAddress, chainEngine } = event; -}; diff --git a/SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts b/SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts deleted file mode 100644 index 896a459..0000000 --- a/SolverScan/src/handlers/gpv2Settlement/OrderInvalidated.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - IEventContext, - IBind, - Instance, - ISecrets, -} from "@blockflow-labs/utils"; - -/** - * @dev Event::OrderInvalidated(address owner, bytes orderUid) - * @param context trigger object with contains {event: {owner ,orderUid }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const OrderInvalidatedHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - // Implement your event handler logic for OrderInvalidated here - - const { event, transaction, block, log } = context; - const { owner, orderUid } = event; -}; diff --git a/SolverScan/src/handlers/gpv2Settlement/PreSignature.ts b/SolverScan/src/handlers/gpv2Settlement/PreSignature.ts deleted file mode 100644 index 0950d50..0000000 --- a/SolverScan/src/handlers/gpv2Settlement/PreSignature.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - IEventContext, - IBind, - Instance, - ISecrets, -} from "@blockflow-labs/utils"; - -/** - * @dev Event::PreSignature(address owner, bytes orderUid, bool signed) - * @param context trigger object with contains {event: {owner ,orderUid ,signed }, transaction, block, log} - * @param bind init function for database wrapper methods - */ -export const PreSignatureHandler = async ( - context: IEventContext, - bind: IBind, - secrets: ISecrets, -) => { - // Implement your event handler logic for PreSignature here - - const { event, transaction, block, log } = context; - const { owner, orderUid, signed } = event; -}; diff --git a/SolverScan/src/handlers/gpv2Settlement/Trade.ts b/SolverScan/src/handlers/gpv2Settlement/Trade.ts index 5366ea2..9980507 100644 --- a/SolverScan/src/handlers/gpv2Settlement/Trade.ts +++ b/SolverScan/src/handlers/gpv2Settlement/Trade.ts @@ -13,6 +13,7 @@ import { pairIdgenerator, } from "../../utils/utils"; +import { findMatchingProtocols } from "../../utils/utils"; /** * @dev Event::Trade(address owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid) * @param context trigger object with contains {event: {owner ,sellToken ,buyToken ,sellAmount ,buyAmount ,feeAmount ,orderUid }, transaction, block, log} @@ -47,6 +48,8 @@ export const TradeHandler = async ( ) : null; const solverAddress = solver?.topics[1].toLowerCase(); + + const liquiditySource = findMatchingProtocols(transaction); const pairId = pairIdgenerator(sellToken, buyToken); @@ -59,6 +62,7 @@ export const TradeHandler = async ( sellAmount: sellAmount, buyAmount: buyAmount, solver: solverAddress, + liquiditySource: liquiditySource, feeAmount: feeAmount, orderUid: orderUid, timeStamp: block.block_timestamp, @@ -96,6 +100,8 @@ export const TradeHandler = async ( id: pairId, frequency: 1, volume: buyAmount, + token1address: sellToken, + token2address: buyToken }); } else { volumeforeachpair.frequency += 1; diff --git a/SolverScan/src/types/schema.ts b/SolverScan/src/types/schema.ts index b42a592..804977b 100644 --- a/SolverScan/src/types/schema.ts +++ b/SolverScan/src/types/schema.ts @@ -13,6 +13,7 @@ export class TradeData { sellAmount: "string", buyAmount: "string", solver: "string", + liquiditySource: "string", feeAmount: "string", orderUid: "string", timeStamp: "string", @@ -98,6 +99,8 @@ export class Volumeforeachpair { id: { type: "String", index: true }, frequency: "number", volume: "string", + token1address: "string", + token2address: "string", entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, chainId: { type: "String", index: true }, @@ -116,6 +119,7 @@ export interface ITradeData extends Document { sellAmount: string; buyAmount: string; solver: string; + liquiditySource: string; feeAmount: string; orderUid: string; timeStamp: string; @@ -186,6 +190,8 @@ export interface IVolumeforeachpair extends Document { id: String; frequency: number; volume: string; + token1address: string; + token2address: string; blocknumber: String; entityId: String; instanceId: String; diff --git a/SolverScan/src/utils/utils.ts b/SolverScan/src/utils/utils.ts index ca1c22b..8365a60 100644 --- a/SolverScan/src/utils/utils.ts +++ b/SolverScan/src/utils/utils.ts @@ -1,3 +1,5 @@ +import { ITransaction } from "@blockflow-labs/utils"; + export const COW_PROTOCOL_TOPIC0 = "0xa07a543ab8a018198e99ca0184c93fe9050a79400a0a723441f84de1d972cc17"; export const COW_PROTOCOL_ADDRESS = @@ -12,3 +14,32 @@ export function pairIdgenerator(str1: string, str2: string): string { return str2 + str1; } } + +const balancer = "0x2170c741c41531aec20e7c107c24eecfdd15e69c9bb0a8dd37b1840b9e0b207b"; +const uniswapv3 = "0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67"; +const uniswapv2 = "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822"; +const curve = "0x8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd97140"; + +export const protocolTopics = { + balancer, + uniswapv3, + uniswapv2, + curve +}; + +export function findMatchingProtocols(transaction: any): string { + const matchingProtocols = new Set(); + + if (transaction.logs && Array.isArray(transaction.logs)) { + transaction.logs.forEach((log: any) => { + const logTopic = log.topics[0]; + for (const [protocolName, topic] of Object.entries(protocolTopics)) { + if (logTopic.toLowerCase() === topic.toLowerCase()) { + matchingProtocols.add(protocolName); + } + } + }); + } + + return Array.from(matchingProtocols).join(', '); +} \ No newline at end of file diff --git a/SolverScan/studio.schema.ts b/SolverScan/studio.schema.ts index 9609ebf..1fec08c 100644 --- a/SolverScan/studio.schema.ts +++ b/SolverScan/studio.schema.ts @@ -9,6 +9,7 @@ export interface TradeData { sellAmount: string; buyAmount: string; solver: string; + liquiditySource: string; feeAmount: string; orderUid: string; timeStamp: string; @@ -59,4 +60,6 @@ export interface Volumeforeachpair { id: String; frequency: number; volume: string; + token1address: string; + token2address: string; } diff --git a/SolverScan/studio.yaml b/SolverScan/studio.yaml index 7785b46..dcb4668 100644 --- a/SolverScan/studio.yaml +++ b/SolverScan/studio.yaml @@ -16,10 +16,6 @@ Resources: Triggers: - Event: Interaction(address indexed,uint256,bytes4) Handler: src/handlers/gpv2Settlement/Interaction.InteractionHandler - - Event: OrderInvalidated(address indexed,bytes) - Handler: src/handlers/gpv2Settlement/OrderInvalidated.OrderInvalidatedHandler - - Event: PreSignature(address indexed,bytes,bool) - Handler: src/handlers/gpv2Settlement/PreSignature.PreSignatureHandler - Event: Settlement(address indexed) Handler: src/handlers/gpv2Settlement/Settlement.SettlementHandler - Event: Trade(address indexed,address,address,uint256,uint256,uint256,bytes) @@ -32,9 +28,6 @@ Resources: - Event: >- CreatedOrder(tuple(uint64,bytes,uint256,bytes,uint256,uint256,bytes,uint256,bytes,bytes,bytes,bytes,bytes,bytes),bytes32,bytes,uint256,uint256,uint32,bytes) Handler: src/handlers/dlnsource/CreatedOrder.CreatedOrderHandler - - Event: SetDlnDestinationAddress(uint256,bytes,uint8) - Handler: >- - src/handlers/dlnsource/SetDlnDestinationAddress.SetDlnDestinationAddressHandler - Name: dlndestination Abi: src/abis/dlndestination.json Type: contract/event @@ -43,9 +36,6 @@ Resources: - Event: >- FulfilledOrder(tuple(uint64,bytes,uint256,bytes,uint256,uint256,bytes,uint256,bytes,bytes,bytes,bytes,bytes,bytes),bytes32,address,address) Handler: src/handlers/dlndestination/FulfilledOrder.FulfilledOrderHandler - - Event: SetDlnSourceAddress(uint256,bytes,uint8) - Handler: >- - src/handlers/dlndestination/SetDlnSourceAddress.SetDlnSourceAddressHandler - Name: across Abi: src/abis/across.json Type: contract/event From 2ec1252ec1365b56a89b09bdd85ce0ebc13e723f Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Mon, 29 Jul 2024 18:00:45 +0530 Subject: [PATCH 21/22] minor fixes Signed-off-by: d4v1d03 --- SolverScan/src/handlers/across/FilledV3Relay.ts | 6 +++++- SolverScan/src/handlers/dlnsource/CreatedOrder.ts | 6 +++--- SolverScan/src/handlers/gpv2Settlement/Trade.ts | 7 +++++-- SolverScan/src/utils/utils.ts | 4 ++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/SolverScan/src/handlers/across/FilledV3Relay.ts b/SolverScan/src/handlers/across/FilledV3Relay.ts index a791a56..6345bc8 100644 --- a/SolverScan/src/handlers/across/FilledV3Relay.ts +++ b/SolverScan/src/handlers/across/FilledV3Relay.ts @@ -53,9 +53,13 @@ export const FilledV3RelayHandler = async ( if(!bridgedata){ await bridgeDataDB.create({ id: depositId, + transactionHashSrc:"", transactionHashDest: transaction.transaction_hash, + from:"", + fromValue:"", solver: relayer, - solverGasCost: solverGasCost , + solverGasCost: solverGasCost, + timeStampSrc:"", timestampDest: block.block_timestamp.toString(), }); } diff --git a/SolverScan/src/handlers/dlnsource/CreatedOrder.ts b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts index 577c241..62abeba 100644 --- a/SolverScan/src/handlers/dlnsource/CreatedOrder.ts +++ b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts @@ -31,9 +31,9 @@ export const CreatedOrderHandler = async ( const value = parseInt(transaction.transaction_value) - - affiliateFee - - nativeFixFee - - percentFee; + parseInt(affiliateFee) - + parseInt(nativeFixFee) - + parseInt(percentFee); const bridgeDataDB: Instance = bind(BridgeData); diff --git a/SolverScan/src/handlers/gpv2Settlement/Trade.ts b/SolverScan/src/handlers/gpv2Settlement/Trade.ts index 9980507..ae03521 100644 --- a/SolverScan/src/handlers/gpv2Settlement/Trade.ts +++ b/SolverScan/src/handlers/gpv2Settlement/Trade.ts @@ -53,6 +53,9 @@ export const TradeHandler = async ( const pairId = pairIdgenerator(sellToken, buyToken); + const token1 = buyToken.toString() > sellToken.toString() ? buyToken : sellToken; + const token2 = buyToken.toString() > sellToken.toString() ? sellToken : buyToken; + let tradedata = await tradeDataDB.create({ id: transaction.transaction_hash, protocolAddress: COW_PROTOCOL_ADDRESS, @@ -100,8 +103,8 @@ export const TradeHandler = async ( id: pairId, frequency: 1, volume: buyAmount, - token1address: sellToken, - token2address: buyToken + token1address: token1, + token2address: token2 }); } else { volumeforeachpair.frequency += 1; diff --git a/SolverScan/src/utils/utils.ts b/SolverScan/src/utils/utils.ts index 8365a60..04eb8fd 100644 --- a/SolverScan/src/utils/utils.ts +++ b/SolverScan/src/utils/utils.ts @@ -9,9 +9,9 @@ export const SETTLEMENT_LOG_TOPIC = export function pairIdgenerator(str1: string, str2: string): string { if (str1 > str2) { - return str1 + str2; + return `${str1}-${str2}`; } else { - return str2 + str1; + return `${str2}-${str1}`; } } From e210f56692209ce1d5ba771b80e601a0b643931f Mon Sep 17 00:00:00 2001 From: d4v1d03 Date: Mon, 29 Jul 2024 18:40:35 +0530 Subject: [PATCH 22/22] created 2 dbs each for source and dest Signed-off-by: d4v1d03 --- .../src/handlers/across/FilledV3Relay.ts | 25 ++++---------- .../src/handlers/across/V3FundsDeposited.ts | 24 +++---------- .../handlers/dlndestination/FulfilledOrder.ts | 24 +++---------- .../src/handlers/dlnsource/CreatedOrder.ts | 25 ++++---------- SolverScan/src/types/schema.ts | 34 +++++++++++++++---- SolverScan/studio.schema.ts | 11 ++++-- 6 files changed, 57 insertions(+), 86 deletions(-) diff --git a/SolverScan/src/handlers/across/FilledV3Relay.ts b/SolverScan/src/handlers/across/FilledV3Relay.ts index 6345bc8..35eb65b 100644 --- a/SolverScan/src/handlers/across/FilledV3Relay.ts +++ b/SolverScan/src/handlers/across/FilledV3Relay.ts @@ -4,7 +4,7 @@ import { Instance, ISecrets, } from "@blockflow-labs/utils"; -import {BridgeData, SolverAnalysis} from "../../types/schema"; +import {BridgeDataDest, SolverAnalysis} from "../../types/schema"; import { BigNumber } from "bignumber.js"; /** @@ -38,7 +38,7 @@ export const FilledV3RelayHandler = async ( relayExecutionInfo, } = event; - const bridgeDataDB: Instance = bind(BridgeData); + const bridgeDataDestDB: Instance = bind(BridgeDataDest); const solveranalysisDB: Instance = bind(SolverAnalysis); const gasPrice = new BigNumber(transaction.transaction_gas_price); @@ -47,31 +47,20 @@ export const FilledV3RelayHandler = async ( const solverGasCost = gasPrice.multipliedBy(gasUsed).dividedBy(etherUnit); - let bridgedata = await bridgeDataDB.findOne({ + let bridgedata = await bridgeDataDestDB.findOne({ id:depositId }); if(!bridgedata){ - await bridgeDataDB.create({ + await bridgeDataDestDB.create({ id: depositId, - transactionHashSrc:"", - transactionHashDest: transaction.transaction_hash, - from:"", - fromValue:"", + transactionHashDest: transaction.transaction_hash, + to: outputToken, + toValue: outputAmount.toString(), solver: relayer, solverGasCost: solverGasCost, - timeStampSrc:"", timestampDest: block.block_timestamp.toString(), }); } - else{ - bridgedata.transactionHashDest = transaction.transaction_hash; - bridgedata.solver = relayer; - bridgedata.solverGasCost = parseInt(bridgedata.solverGasCost) + solverGasCost.toNumber(); - bridgedata.timestampDest = block.block_timestamp.toString(); - - await bridgeDataDB.save(bridgedata); - } - let solverdata = await solveranalysisDB.findOne({ id: relayer }); diff --git a/SolverScan/src/handlers/across/V3FundsDeposited.ts b/SolverScan/src/handlers/across/V3FundsDeposited.ts index 804d52f..75581fe 100644 --- a/SolverScan/src/handlers/across/V3FundsDeposited.ts +++ b/SolverScan/src/handlers/across/V3FundsDeposited.ts @@ -4,7 +4,7 @@ import { Instance, ISecrets, } from "@blockflow-labs/utils"; -import {BridgeData} from "../../types/schema" +import {BridgeDataSrc} from "../../types/schema" /** * @dev Event::V3FundsDeposited(address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 destinationChainId, uint32 depositId, uint32 quoteTimestamp, uint32 fillDeadline, uint32 exclusivityDeadline, address depositor, address recipient, address exclusiveRelayer, bytes message) @@ -34,34 +34,18 @@ export const V3FundsDepositedHandler = async ( exclusiveRelayer, message, } = event; - const bridgeDataDB: Instance = bind(BridgeData); + const bridgeDataSrcDB: Instance = bind(BridgeDataSrc); - let bridgedata = await bridgeDataDB.findOne({ + let bridgedata = await bridgeDataSrcDB.findOne({ id:depositId.toString() }) if(!bridgedata){ - await bridgeDataDB.create({ + await bridgeDataSrcDB.create({ id: depositId.toString(), transactionHashSrc: transaction.transaction_hash, - transactionHashDest: "", from: inputToken, fromValue: inputAmount.toString(), - to: outputToken, - toValue: outputAmount.toString(), - solver: "", - solverGasCost: "", timestampSrc: block.block_timestamp.toString(), - timestampDest: "", }) } - else{ - bridgedata.transactionHashSrc = transaction.transaction_hash; - bridgedata.from = inputToken; - bridgedata.fromValue = inputAmount.toString(); - bridgedata.to = outputToken; - bridgedata.toValue = outputAmount.toString(); - bridgedata.timestampSrc = block.block_timestamp.toString(); - - await bridgeDataDB.save(bridgedata); - } }; diff --git a/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts index 31addb0..60c7ccb 100644 --- a/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts +++ b/SolverScan/src/handlers/dlndestination/FulfilledOrder.ts @@ -5,7 +5,7 @@ import { ISecrets, } from "@blockflow-labs/utils"; -import { BridgeData, SolverAnalysis } from "../../types/schema"; +import { BridgeDataDest, SolverAnalysis } from "../../types/schema"; import { BigNumber } from "bignumber.js"; /** @@ -22,7 +22,7 @@ export const FulfilledOrderHandler = async ( const { event, transaction, block, log } = context; const { order, orderId, sender, unlockAuthority } = event; - const bridgeDataDB: Instance = bind(BridgeData); + const bridgeDataDestDB: Instance = bind(BridgeDataDest); const solveranalysisDB: Instance = bind(SolverAnalysis); const gasPrice = new BigNumber(transaction.transaction_gas_price); @@ -33,34 +33,20 @@ const transactionValue = new BigNumber(transaction.transaction_value); const solverGasCost = gasPrice.multipliedBy(gasUsed).dividedBy(etherUnit); const value = (transactionValue.minus(solverGasCost)).dividedBy(etherUnit); - let bridgedata = await bridgeDataDB.findOne({ + let bridgedata = await bridgeDataDestDB.findOne({ id: orderId }); if (!bridgedata) { - await bridgeDataDB.create({ + await bridgeDataDestDB.create({ id: orderId, - transactionHashSrc: "", transactionHashDest: transaction.transaction_hash, - from: "", - fromValue: "", to: log.log_address, toValue: value, solver: sender, solverGasCost: solverGasCost, - timestampSrc: "", timestampDest: block.block_timestamp, }); - } - else{ - bridgedata.transactionHashDest = transaction.transaction_hash; - bridgedata.to = log.log_address; - bridgedata.toValue = value; - bridgedata.solver = sender; - bridgedata.solverGasCost = solverGasCost; - bridgedata.timestampDest = block.block_timestamp; - await bridgeDataDB.save(bridgedata); - } - ; + }; let solveranalysis = await solveranalysisDB.findOne({ id: sender, diff --git a/SolverScan/src/handlers/dlnsource/CreatedOrder.ts b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts index 62abeba..a7d55e9 100644 --- a/SolverScan/src/handlers/dlnsource/CreatedOrder.ts +++ b/SolverScan/src/handlers/dlnsource/CreatedOrder.ts @@ -5,7 +5,7 @@ import { ISecrets, } from "@blockflow-labs/utils"; -import { BridgeData } from "../../types/schema"; +import { BridgeDataSrc } from "../../types/schema"; /** * @dev Event::CreatedOrder(tuple order, bytes32 orderId, bytes affiliateFee, uint256 nativeFixFee, uint256 percentFee, uint32 referralCode, bytes metadata) * @param context trigger object with contains {event: {order ,orderId ,affiliateFee ,nativeFixFee ,percentFee ,referralCode ,metadata }, transaction, block, log} @@ -35,32 +35,19 @@ export const CreatedOrderHandler = async ( parseInt(nativeFixFee) - parseInt(percentFee); - const bridgeDataDB: Instance = bind(BridgeData); + const bridgeDataSrcDB: Instance = bind(BridgeDataSrc); - let bridgedata = await bridgeDataDB.findOne({ + let bridgedata = await bridgeDataSrcDB.findOne({ id: orderId, }); if(!bridgedata){ - await bridgeDataDB.create({ + await bridgeDataSrcDB.create({ id: orderId, transactionHashSrc: transaction.transaction_hash, - transactionHashDest: "", from: log.log_address, fromValue: value, - to: "", - toValue: "", - solver: "", - solverGasCost: "", timestampSrc: block.block_timestamp, - timestampDest: "", - bridgeTime: "", - });} - else{ - bridgedata.transactionHashSrc = transaction.transaction_hash; - bridgedata.from = log.log_address; - bridgedata.fromValue = value; - bridgedata.timestampSrc = block.block_timestamp; - await bridgeDataDB.save(bridgedata); - } + }); +} }; diff --git a/SolverScan/src/types/schema.ts b/SolverScan/src/types/schema.ts index 804977b..893ceb0 100644 --- a/SolverScan/src/types/schema.ts +++ b/SolverScan/src/types/schema.ts @@ -57,19 +57,30 @@ export class LiqudityData { }; } -export class BridgeData { - static entity = "BridgeData"; +export class BridgeDataSrc { + static entity = "BridgeDataSrc"; static schema = { id: { type: "String", index: true }, transactionHashSrc: "string", - transactionHashDest: "string", from: "string", fromValue: "string", + timestampSrc: "string", + entityId: { type: "String", index: true }, + blocknumber: { type: "Number", index: true }, + chainId: { type: "String", index: true }, + instanceId: { type: "String", index: true }, + }; +} + +export class BridgeDataDest { + static entity = "BridgeDataDest"; + static schema = { + id: { type: "String", index: true }, + transactionHashDest: "string", to: "string", toValue: "string", solver: "string", solverGasCost: "string", - timestampSrc: "string", timestampDest: "string", entityId: { type: "String", index: true }, blocknumber: { type: "Number", index: true }, @@ -156,18 +167,27 @@ export interface ILiqudityData extends Document { chainId: String; } -export interface IBridgeData extends Document { +export interface IBridgeDataSrc extends Document { id: String; transactionHashSrc: string; - transactionHashDest: string; from: string; fromValue: string; + timestampSrc: string; + blocknumber: String; + entityId: String; + instanceId: String; + chainId: String; +} + +export interface IBridgeDataDest extends Document { + id: String; + transactionHashDest: string; to: string; toValue: string; solver: string; solverGasCost: string; - timestampSrc: string; timestampDest: string; + blocknumber: String; entityId: String; instanceId: String; diff --git a/SolverScan/studio.schema.ts b/SolverScan/studio.schema.ts index 1fec08c..8e9eacc 100644 --- a/SolverScan/studio.schema.ts +++ b/SolverScan/studio.schema.ts @@ -34,18 +34,23 @@ export interface LiqudityData { selector: string; } -export interface BridgeData { +export interface BridgeDataSrc { id: String; transactionHashSrc: string; - transactionHashDest: string; from: string; fromValue: string; + timestampSrc: string; +} + +export interface BridgeDataDest { + id: String; + transactionHashDest: string; to: string; toValue: string; solver: string; solverGasCost: string; - timestampSrc: string; timestampDest: string; + } export interface SolverAnalysis {