diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index 0f5d238..f3f3f8f 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -14,7 +14,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v3
with:
- node-version: "16"
+ node-version: "20"
cache: "npm"
- run: npm ci
- run: npm run test -- --coverage
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..9a2a0e2
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+v20
diff --git a/package-lock.json b/package-lock.json
index 017edd9..23998ce 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,38 +1,38 @@
{
"name": "ethereum-store",
- "version": "0.2.3",
+ "version": "0.2.8",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ethereum-store",
- "version": "0.2.3",
+ "version": "0.2.8",
"license": "MIT",
"dependencies": {
"big.js": "^6.2.1",
"buffer": "^6.0.3",
- "ethers": "^5.7.2",
+ "ethers": "^6.9.0",
"lodash": "^4.17.21",
"lodash.clonedeep": "^4.5.0",
- "react-redux": "^8.1.2",
- "react-router-dom": "^5.2.0",
- "reactstrap": "^9.2.0",
- "redux": "^4.2.1",
+ "react-redux": "^9.0.4",
+ "react-router-dom": "^6.21.0",
+ "reactstrap": "^9.2.1",
+ "redux": "^5.0.0",
"redux-saga": "^1.2.3",
"reselect": "^4.1.8",
- "web3": "^4.1.1"
+ "web3": "^4.3.0"
},
"devDependencies": {
- "@babel/cli": "^7.23.0",
- "@babel/core": "^7.23.3",
- "@babel/preset-env": "^7.23.3",
- "@openzeppelin/contracts": "^4.9.3",
- "@testing-library/jest-dom": "^6.1.4",
- "@testing-library/react": "^14.0.0",
+ "@babel/cli": "^7.23.4",
+ "@babel/core": "^7.23.6",
+ "@babel/preset-env": "^7.23.6",
+ "@openzeppelin/contracts": "^5.0.1",
+ "@testing-library/jest-dom": "^6.1.5",
+ "@testing-library/react": "^14.1.2",
"@testing-library/user-event": "^14.5.1",
- "prettier": "^3.0.2",
+ "prettier": "^3.1.1",
"react-scripts": "^5.0.1",
- "sinon": "^15.2.0"
+ "sinon": "^17.0.1"
},
"peerDependencies": {
"react": "^18.2.0",
@@ -50,9 +50,9 @@
}
},
"node_modules/@adobe/css-tools": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz",
- "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz",
+ "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==",
"dev": true
},
"node_modules/@adraffy/ens-normalize": {
@@ -86,9 +86,9 @@
}
},
"node_modules/@babel/cli": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.0.tgz",
- "integrity": "sha512-17E1oSkGk2IwNILM4jtfAvgjt+ohmpfBky8aLerUfYZhiPNg7ca+CRCxZn8QDxwNhV/upsc2VHBCqGFIR+iBfA==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.4.tgz",
+ "integrity": "sha512-j3luA9xGKCXVyCa5R7lJvOMM+Kc2JEnAEIgz2ggtjQ/j5YUVgfsg/WsG95bbsgq7YLHuiCOzMnoSasuY16qiCw==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.17",
@@ -115,12 +115,12 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.22.13",
+ "@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
},
"engines": {
@@ -128,30 +128,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz",
- "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
+ "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz",
- "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
+ "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.3",
- "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.23.2",
- "@babel/parser": "^7.23.3",
+ "@babel/helpers": "^7.23.7",
+ "@babel/parser": "^7.23.6",
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.3",
- "@babel/types": "^7.23.3",
+ "@babel/traverse": "^7.23.7",
+ "@babel/types": "^7.23.6",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -194,12 +194,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz",
- "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.3",
+ "@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -233,14 +233,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
- "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+ "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -249,17 +249,17 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz",
- "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz",
+ "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-member-expression-to-functions": "^7.23.0",
"@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.9",
+ "@babel/helper-replace-supers": "^7.22.20",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"semver": "^6.3.1"
@@ -289,9 +289,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz",
- "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==",
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz",
+ "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
@@ -473,9 +473,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -491,9 +491,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
- "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+ "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -514,23 +514,23 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz",
- "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz",
+ "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==",
"dev": true,
"dependencies": {
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0"
+ "@babel/traverse": "^7.23.7",
+ "@babel/types": "^7.23.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
@@ -542,9 +542,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz",
- "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -586,9 +586,9 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz",
- "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz",
+ "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
@@ -619,15 +619,13 @@
}
},
"node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.3.tgz",
- "integrity": "sha512-u8SwzOcP0DYSsa++nHd/9exlHb0NAlHCb890qtZZbSwPX2bFv8LBEztxwN7Xg/dS8oAFFidhrI9PBcLBJSkGRQ==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz",
+ "integrity": "sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-create-class-features-plugin": "^7.23.7",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20",
- "@babel/helper-split-export-declaration": "^7.22.6",
"@babel/plugin-syntax-decorators": "^7.23.3"
},
"engines": {
@@ -1041,9 +1039,9 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz",
- "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz",
+ "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
@@ -1091,9 +1089,9 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz",
- "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz",
+ "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
@@ -1122,9 +1120,9 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz",
- "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz",
+ "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==",
"dev": true,
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.22.15",
@@ -1139,9 +1137,9 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz",
- "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz",
+ "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
@@ -1224,9 +1222,9 @@
}
},
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz",
- "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz",
+ "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1256,9 +1254,9 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz",
- "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz",
+ "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1288,12 +1286,13 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz",
- "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz",
+ "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1320,9 +1319,9 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz",
- "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz",
+ "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1351,9 +1350,9 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz",
- "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz",
+ "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1480,9 +1479,9 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz",
- "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz",
+ "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1496,9 +1495,9 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz",
- "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz",
+ "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1512,9 +1511,9 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz",
- "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
+ "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.23.3",
@@ -1547,9 +1546,9 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz",
- "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz",
+ "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1563,9 +1562,9 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz",
- "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz",
+ "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1611,9 +1610,9 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz",
- "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz",
+ "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
@@ -1674,16 +1673,16 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz",
- "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
+ "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
"@babel/helper-module-imports": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-jsx": "^7.22.5",
- "@babel/types": "^7.22.15"
+ "@babel/plugin-syntax-jsx": "^7.23.3",
+ "@babel/types": "^7.23.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1755,16 +1754,16 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.3.tgz",
- "integrity": "sha512-XcQ3X58CKBdBnnZpPaQjgVMePsXtSZzHoku70q9tUAQp02ggPQNM04BF3RvlW1GSM/McbSOQAzEK4MXbS7/JFg==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz",
+ "integrity": "sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
- "babel-plugin-polyfill-corejs2": "^0.4.6",
- "babel-plugin-polyfill-corejs3": "^0.8.5",
- "babel-plugin-polyfill-regenerator": "^0.5.3",
+ "babel-plugin-polyfill-corejs2": "^0.4.7",
+ "babel-plugin-polyfill-corejs3": "^0.8.7",
+ "babel-plugin-polyfill-regenerator": "^0.5.4",
"semver": "^6.3.1"
},
"engines": {
@@ -1851,13 +1850,13 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.3.tgz",
- "integrity": "sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
+ "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-create-class-features-plugin": "^7.23.6",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-typescript": "^7.23.3"
},
@@ -1932,18 +1931,18 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz",
- "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.7.tgz",
+ "integrity": "sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.23.3",
- "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
+ "@babel/helper-validator-option": "^7.23.5",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
@@ -1964,25 +1963,25 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.23.3",
- "@babel/plugin-transform-async-generator-functions": "^7.23.3",
+ "@babel/plugin-transform-async-generator-functions": "^7.23.7",
"@babel/plugin-transform-async-to-generator": "^7.23.3",
"@babel/plugin-transform-block-scoped-functions": "^7.23.3",
- "@babel/plugin-transform-block-scoping": "^7.23.3",
+ "@babel/plugin-transform-block-scoping": "^7.23.4",
"@babel/plugin-transform-class-properties": "^7.23.3",
- "@babel/plugin-transform-class-static-block": "^7.23.3",
- "@babel/plugin-transform-classes": "^7.23.3",
+ "@babel/plugin-transform-class-static-block": "^7.23.4",
+ "@babel/plugin-transform-classes": "^7.23.5",
"@babel/plugin-transform-computed-properties": "^7.23.3",
"@babel/plugin-transform-destructuring": "^7.23.3",
"@babel/plugin-transform-dotall-regex": "^7.23.3",
"@babel/plugin-transform-duplicate-keys": "^7.23.3",
- "@babel/plugin-transform-dynamic-import": "^7.23.3",
+ "@babel/plugin-transform-dynamic-import": "^7.23.4",
"@babel/plugin-transform-exponentiation-operator": "^7.23.3",
- "@babel/plugin-transform-export-namespace-from": "^7.23.3",
- "@babel/plugin-transform-for-of": "^7.23.3",
+ "@babel/plugin-transform-export-namespace-from": "^7.23.4",
+ "@babel/plugin-transform-for-of": "^7.23.6",
"@babel/plugin-transform-function-name": "^7.23.3",
- "@babel/plugin-transform-json-strings": "^7.23.3",
+ "@babel/plugin-transform-json-strings": "^7.23.4",
"@babel/plugin-transform-literals": "^7.23.3",
- "@babel/plugin-transform-logical-assignment-operators": "^7.23.3",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
"@babel/plugin-transform-member-expression-literals": "^7.23.3",
"@babel/plugin-transform-modules-amd": "^7.23.3",
"@babel/plugin-transform-modules-commonjs": "^7.23.3",
@@ -1990,15 +1989,15 @@
"@babel/plugin-transform-modules-umd": "^7.23.3",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
"@babel/plugin-transform-new-target": "^7.23.3",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3",
- "@babel/plugin-transform-numeric-separator": "^7.23.3",
- "@babel/plugin-transform-object-rest-spread": "^7.23.3",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4",
+ "@babel/plugin-transform-numeric-separator": "^7.23.4",
+ "@babel/plugin-transform-object-rest-spread": "^7.23.4",
"@babel/plugin-transform-object-super": "^7.23.3",
- "@babel/plugin-transform-optional-catch-binding": "^7.23.3",
- "@babel/plugin-transform-optional-chaining": "^7.23.3",
+ "@babel/plugin-transform-optional-catch-binding": "^7.23.4",
+ "@babel/plugin-transform-optional-chaining": "^7.23.4",
"@babel/plugin-transform-parameters": "^7.23.3",
"@babel/plugin-transform-private-methods": "^7.23.3",
- "@babel/plugin-transform-private-property-in-object": "^7.23.3",
+ "@babel/plugin-transform-private-property-in-object": "^7.23.4",
"@babel/plugin-transform-property-literals": "^7.23.3",
"@babel/plugin-transform-regenerator": "^7.23.3",
"@babel/plugin-transform-reserved-words": "^7.23.3",
@@ -2012,9 +2011,9 @@
"@babel/plugin-transform-unicode-regex": "^7.23.3",
"@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.6",
- "babel-plugin-polyfill-corejs3": "^0.8.5",
- "babel-plugin-polyfill-regenerator": "^0.5.3",
+ "babel-plugin-polyfill-corejs2": "^0.4.7",
+ "babel-plugin-polyfill-corejs3": "^0.8.7",
+ "babel-plugin-polyfill-regenerator": "^0.5.4",
"core-js-compat": "^3.31.0",
"semver": "^6.3.1"
},
@@ -2085,9 +2084,9 @@
"dev": true
},
"node_modules/@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz",
+ "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -2110,20 +2109,20 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz",
- "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
+ "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.3",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.3",
- "@babel/types": "^7.23.3",
- "debug": "^4.1.0",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -2131,12 +2130,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz",
- "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -2151,9 +2150,9 @@
"dev": true
},
"node_modules/@csstools/normalize.css": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz",
- "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==",
+ "version": "12.1.1",
+ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz",
+ "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==",
"dev": true
},
"node_modules/@csstools/postcss-cascade-layers": {
@@ -2461,9 +2460,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -2490,9 +2489,9 @@
"dev": true
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -2528,697 +2527,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@eslint/js": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
- "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@ethereumjs/rlp": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz",
- "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==",
- "bin": {
- "rlp": "bin/rlp"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "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/@eslint/js": {
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
+ "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@ethereumjs/rlp": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz",
+ "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==",
+ "bin": {
+ "rlp": "bin/rlp"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.13",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
@@ -3252,6 +2580,96 @@
"integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -3377,9 +2795,9 @@
}
},
"node_modules/@jest/console/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -3596,9 +3014,9 @@
}
},
"node_modules/@jest/core/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -3943,9 +3361,9 @@
}
},
"node_modules/@jest/environment/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -4114,9 +3532,9 @@
}
},
"node_modules/@jest/fake-timers/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -4262,9 +3680,9 @@
}
},
"node_modules/@jest/globals/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -4447,9 +3865,9 @@
}
},
"node_modules/@jest/reporters/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -4780,9 +4198,9 @@
}
},
"node_modules/@jest/test-result/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -4909,9 +4327,9 @@
}
},
"node_modules/@jest/test-sequencer/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -5412,20 +4830,20 @@
}
},
"node_modules/@noble/curves": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
- "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
+ "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.1"
+ "@noble/hashes": "1.3.2"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/@noble/hashes": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
- "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
+ "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==",
"engines": {
"node": ">= 16"
},
@@ -5469,11 +4887,21 @@
}
},
"node_modules/@openzeppelin/contracts": {
- "version": "4.9.3",
- "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz",
- "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.1.tgz",
+ "integrity": "sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==",
"dev": true
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
"version": "0.5.11",
"resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz",
@@ -5534,9 +4962,9 @@
}
},
"node_modules/@react-aria/ssr": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.0.tgz",
- "integrity": "sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg==",
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.1.tgz",
+ "integrity": "sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg==",
"peer": true,
"dependencies": {
"@swc/helpers": "^0.5.0"
@@ -5549,9 +4977,9 @@
}
},
"node_modules/@redux-saga/core": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz",
- "integrity": "sha512-U1JO6ncFBAklFTwoQ3mjAeQZ6QGutsJzwNBjgVLSWDpZTRhobUzuVDS1qH3SKGJD8fvqoaYOjp6XJ3gCmeZWgA==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.3.0.tgz",
+ "integrity": "sha512-L+i+qIGuyWn7CIg7k1MteHGfttKPmxwZR5E7OsGikCL2LzYA0RERlaUY00Y3P3ZV2EYgrsYlBrGs6cJP5OKKqA==",
"dependencies": {
"@babel/runtime": "^7.6.3",
"@redux-saga/deferred": "^1.2.1",
@@ -5559,7 +4987,6 @@
"@redux-saga/is": "^1.1.3",
"@redux-saga/symbols": "^1.1.3",
"@redux-saga/types": "^1.2.1",
- "redux": "^4.0.4",
"typescript-tuple": "^2.2.1"
},
"funding": {
@@ -5599,10 +5026,18 @@
"resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.2.1.tgz",
"integrity": "sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA=="
},
+ "node_modules/@remix-run/router": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz",
+ "integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@restart/hooks": {
- "version": "0.4.11",
- "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.11.tgz",
- "integrity": "sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw==",
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.15.tgz",
+ "integrity": "sha512-cZFXYTxbpzYcieq/mBwSyXgqnGMHoBVh3J7MU0CCoIB4NRZxV9/TuwTBAaLMqpNhC3zTPMCgkQ5Ey07L02Xmcw==",
"peer": true,
"dependencies": {
"dequal": "^2.0.3"
@@ -5721,15 +5156,15 @@
"dev": true
},
"node_modules/@rushstack/eslint-patch": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz",
- "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz",
+ "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==",
"dev": true
},
"node_modules/@scure/base": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz",
- "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz",
+ "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==",
"funding": {
"url": "https://paulmillr.com/funding/"
}
@@ -5747,6 +5182,28 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/@scure/bip32/node_modules/@noble/curves": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
+ "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
+ "dependencies": {
+ "@noble/hashes": "1.3.1"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32/node_modules/@noble/hashes": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
+ "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/@scure/bip39": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
@@ -6143,17 +5600,17 @@
}
},
"node_modules/@testing-library/jest-dom": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.4.tgz",
- "integrity": "sha512-wpoYrCYwSZ5/AxcrjLxJmCU6I5QAJXslEeSiMQqaWmP2Kzpd1LvF/qxmAIW2qposULGWq2gw30GgVNFLSc2Jnw==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.2.0.tgz",
+ "integrity": "sha512-+BVQlJ9cmEn5RDMUS8c2+TU6giLvzaHZ8sU/x0Jj7fk+6/46wPdwlgOPcpxS17CjcanBi/3VmGMqVr2rmbUmNw==",
"dev": true,
"dependencies": {
- "@adobe/css-tools": "^4.3.1",
+ "@adobe/css-tools": "^4.3.2",
"@babel/runtime": "^7.9.2",
"aria-query": "^5.0.0",
"chalk": "^3.0.0",
"css.escape": "^1.5.1",
- "dom-accessibility-api": "^0.5.6",
+ "dom-accessibility-api": "^0.6.3",
"lodash": "^4.17.15",
"redent": "^3.0.0"
},
@@ -6229,6 +5686,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
+ "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+ "dev": true
+ },
"node_modules/@testing-library/jest-dom/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6251,9 +5714,9 @@
}
},
"node_modules/@testing-library/react": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.0.tgz",
- "integrity": "sha512-hcvfZEEyO0xQoZeHmUbuMs7APJCGELpilL7bY+BaJaMP57aWc6q1etFwScnoZDheYjk4ESdlzPdQ33IbsKAK/A==",
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz",
+ "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
@@ -6269,9 +5732,9 @@
}
},
"node_modules/@testing-library/user-event": {
- "version": "14.5.1",
- "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.1.tgz",
- "integrity": "sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==",
+ "version": "14.5.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz",
+ "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==",
"dev": true,
"engines": {
"node": ">=12",
@@ -6306,9 +5769,9 @@
"dev": true
},
"node_modules/@types/babel__core": {
- "version": "7.20.4",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz",
- "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.20.7",
@@ -6319,9 +5782,9 @@
}
},
"node_modules/@types/babel__generator": {
- "version": "7.6.7",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz",
- "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==",
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
"dev": true,
"dependencies": {
"@babel/types": "^7.0.0"
@@ -6338,9 +5801,9 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.20.4",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz",
- "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
+ "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.20.7"
@@ -6375,9 +5838,9 @@
}
},
"node_modules/@types/connect-history-api-fallback": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.3.tgz",
- "integrity": "sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
+ "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
"dev": true,
"dependencies": {
"@types/express-serve-static-core": "*",
@@ -6385,9 +5848,9 @@
}
},
"node_modules/@types/eslint": {
- "version": "8.44.7",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz",
- "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==",
+ "version": "8.56.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.1.tgz",
+ "integrity": "sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==",
"dev": true,
"dependencies": {
"@types/estree": "*",
@@ -6443,15 +5906,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/hoist-non-react-statics": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
- "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
- "dependencies": {
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0"
- }
- },
"node_modules/@types/html-minifier-terser": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
@@ -6516,17 +5970,14 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.9.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
- "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
- "dependencies": {
- "undici-types": "~5.26.4"
- }
+ "version": "18.15.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz",
+ "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q=="
},
"node_modules/@types/node-forge": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.9.tgz",
- "integrity": "sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==",
+ "version": "1.3.11",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
+ "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -6545,9 +5996,9 @@
"dev": true
},
"node_modules/@types/prop-types": {
- "version": "15.7.10",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz",
- "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A=="
+ "version": "15.7.11",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
},
"node_modules/@types/q": {
"version": "1.5.8",
@@ -6556,9 +6007,9 @@
"dev": true
},
"node_modules/@types/qs": {
- "version": "6.9.10",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
- "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==",
+ "version": "6.9.11",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
+ "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
"dev": true
},
"node_modules/@types/range-parser": {
@@ -6568,9 +6019,9 @@
"dev": true
},
"node_modules/@types/react": {
- "version": "18.2.37",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz",
- "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==",
+ "version": "18.2.46",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz",
+ "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==",
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -6578,18 +6029,18 @@
}
},
"node_modules/@types/react-dom": {
- "version": "18.2.15",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz",
- "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==",
- "devOptional": true,
+ "version": "18.2.18",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz",
+ "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==",
+ "dev": true,
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react-transition-group": {
- "version": "4.4.9",
- "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz",
- "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==",
+ "version": "4.4.10",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz",
+ "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==",
"peer": true,
"dependencies": {
"@types/react": "*"
@@ -6611,14 +6062,14 @@
"dev": true
},
"node_modules/@types/scheduler": {
- "version": "0.16.6",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz",
- "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA=="
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A=="
},
"node_modules/@types/semver": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
- "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
"dev": true
},
"node_modules/@types/send": {
@@ -6667,9 +6118,9 @@
"dev": true
},
"node_modules/@types/trusted-types": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.6.tgz",
- "integrity": "sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
"dev": true
},
"node_modules/@types/use-sync-external-store": {
@@ -6692,9 +6143,9 @@
}
},
"node_modules/@types/yargs": {
- "version": "16.0.8",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.8.tgz",
- "integrity": "sha512-1GwLEkmFafeb/HbE6pC7tFlgYSQ4Iqh2qlWCq8xN+Qfaiaxr2PcLfuhfRFRYqI6XJyeFoLYyKnhFbNsst9FMtQ==",
+ "version": "16.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz",
+ "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -7202,6 +6653,7 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
+ "deprecated": "Use your platform's native atob() and btoa() methods instead",
"dev": true
},
"node_modules/abitype": {
@@ -7232,9 +6684,9 @@
}
},
"node_modules/acorn": {
- "version": "8.11.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -7315,9 +6767,9 @@
}
},
"node_modules/aes-js": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
- "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw=="
+ "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/agent-base": {
"version": "6.0.2",
@@ -7500,9 +6952,9 @@
}
},
"node_modules/array-flatten": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
- "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"dev": true
},
"node_modules/array-includes": {
@@ -7958,13 +7410,13 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz",
- "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==",
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz",
+ "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.4.3",
+ "@babel/helper-define-polyfill-provider": "^0.4.4",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -7972,12 +7424,12 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.8.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz",
- "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==",
+ "version": "0.8.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz",
+ "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.3",
+ "@babel/helper-define-polyfill-provider": "^0.4.4",
"core-js-compat": "^3.33.1"
},
"peerDependencies": {
@@ -7985,12 +7437,12 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz",
- "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz",
+ "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.3"
+ "@babel/helper-define-polyfill-provider": "^0.4.4"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -8096,11 +7548,6 @@
"integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
"dev": true
},
- "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/bfj": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz",
@@ -8144,11 +7591,6 @@
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
"dev": true
},
- "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.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -8210,13 +7652,11 @@
"dev": true
},
"node_modules/bonjour-service": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz",
- "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.0.tgz",
+ "integrity": "sha512-xdzMA6JGckxyJzZByjEWRcfKmDxXaGXZWVftah3FkCqdlePNS9DjHSUN5zkP4oEfz/t0EXXlro88EIhzwMB4zA==",
"dev": true,
"dependencies": {
- "array-flatten": "^2.1.2",
- "dns-equal": "^1.0.0",
"fast-deep-equal": "^3.1.3",
"multicast-dns": "^7.2.5"
}
@@ -8249,11 +7689,6 @@
"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/browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
@@ -8261,9 +7696,9 @@
"dev": true
},
"node_modules/browserslist": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
- "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
"dev": true,
"funding": [
{
@@ -8280,9 +7715,9 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
"bin": {
@@ -8417,9 +7852,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001562",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz",
- "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==",
+ "version": "1.0.30001574",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz",
+ "integrity": "sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==",
"dev": true,
"funding": [
{
@@ -8532,14 +7967,14 @@
"dev": true
},
"node_modules/classnames": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
- "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
},
"node_modules/clean-css": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz",
- "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
+ "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
"dev": true,
"dependencies": {
"source-map": "~0.6.0"
@@ -8787,9 +8222,9 @@
"dev": true
},
"node_modules/core-js": {
- "version": "3.33.2",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.2.tgz",
- "integrity": "sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ==",
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.0.tgz",
+ "integrity": "sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg==",
"dev": true,
"hasInstallScript": true,
"funding": {
@@ -8798,12 +8233,12 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.33.2",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz",
- "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==",
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz",
+ "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==",
"dev": true,
"dependencies": {
- "browserslist": "^4.22.1"
+ "browserslist": "^4.22.2"
},
"funding": {
"type": "opencollective",
@@ -8811,9 +8246,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.33.2",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.33.2.tgz",
- "integrity": "sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q==",
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.0.tgz",
+ "integrity": "sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew==",
"dev": true,
"hasInstallScript": true,
"funding": {
@@ -8897,9 +8332,9 @@
}
},
"node_modules/create-jest/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -9324,9 +8759,9 @@
"dev": true
},
"node_modules/cssdb": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.9.0.tgz",
- "integrity": "sha512-WPMT9seTQq6fPAa1yN4zjgZZeoTriSN2LqW9C+otjar12DQIWA4LuSfFrvFJiKp4oD0xIk1vumDLw8K9ur4NBw==",
+ "version": "7.10.0",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.10.0.tgz",
+ "integrity": "sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA==",
"dev": true,
"funding": [
{
@@ -9492,9 +8927,9 @@
"dev": true
},
"node_modules/csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/damerau-levenshtein": {
"version": "1.0.8",
@@ -9780,12 +9215,6 @@
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"dev": true
},
- "node_modules/dns-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
- "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
- "dev": true
- },
"node_modules/dns-packet": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
@@ -9864,6 +9293,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
"integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+ "deprecated": "Use your platform's native DOMException instead",
"dev": true,
"dependencies": {
"webidl-conversions": "^5.0.0"
@@ -9941,6 +9371,12 @@
"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
"dev": true
},
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -9963,30 +9399,11 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.583",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.583.tgz",
- "integrity": "sha512-93y1gcONABZ7uqYe/JWDVQP/Pj/sQSunF0HVAPdlg/pfBnOyBMLlQUxWvkqcljJg1+W6cjvPuYD+r1Th9Tn8mA==",
+ "version": "1.4.620",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz",
+ "integrity": "sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g==",
"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/emittery": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
@@ -10268,15 +9685,15 @@
}
},
"node_modules/eslint": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
- "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
+ "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.53.0",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.56.0",
"@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
@@ -10415,9 +9832,9 @@
}
},
"node_modules/eslint-plugin-import": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
- "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
"dev": true,
"dependencies": {
"array-includes": "^3.1.7",
@@ -10436,7 +9853,7 @@
"object.groupby": "^1.0.1",
"object.values": "^1.1.7",
"semver": "^6.3.1",
- "tsconfig-paths": "^3.14.2"
+ "tsconfig-paths": "^3.15.0"
},
"engines": {
"node": ">=4"
@@ -10839,9 +10256,9 @@
}
},
"node_modules/eslint/node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -10996,14 +10413,36 @@
"@scure/bip39": "1.2.1"
}
},
+ "node_modules/ethereum-cryptography/node_modules/@noble/curves": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
+ "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
+ "dependencies": {
+ "@noble/hashes": "1.3.1"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ethereum-cryptography/node_modules/@noble/hashes": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
+ "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/ethers": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz",
- "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==",
+ "version": "6.9.2",
+ "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.9.2.tgz",
+ "integrity": "sha512-YpkrtILnMQz5jSEsJQRTpduaGT/CXuLnUIuOYzHA0v/7c8IX91m2J48wSKjzGL5L9J/Us3tLoUdb+OwE3U+FFQ==",
"funding": [
{
"type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ "url": "https://github.com/sponsors/ethers-io/"
},
{
"type": "individual",
@@ -11011,36 +10450,16 @@
}
],
"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"
+ "@adraffy/ens-normalize": "1.10.0",
+ "@noble/curves": "1.2.0",
+ "@noble/hashes": "1.3.2",
+ "@types/node": "18.15.13",
+ "aes-js": "4.0.0-beta.5",
+ "tslib": "2.4.0",
+ "ws": "8.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
"node_modules/eventemitter3": {
@@ -11128,9 +10547,9 @@
}
},
"node_modules/expect/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -11292,12 +10711,6 @@
"node": ">= 0.10.0"
}
},
- "node_modules/express/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==",
- "dev": true
- },
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -11354,9 +10767,9 @@
"dev": true
},
"node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
+ "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
"dev": true,
"dependencies": {
"reusify": "^1.0.4"
@@ -11568,9 +10981,9 @@
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.15.3",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
- "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
+ "version": "1.15.4",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
+ "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
"dev": true,
"funding": [
{
@@ -11595,6 +11008,34 @@
"is-callable": "^1.1.3"
}
},
+ "node_modules/foreground-child": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/fork-ts-checker-webpack-plugin": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz",
@@ -12240,15 +11681,6 @@
"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.0",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
@@ -12269,42 +11701,6 @@
"he": "bin/he"
}
},
- "node_modules/history": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
- "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
- "dependencies": {
- "@babel/runtime": "^7.1.2",
- "loose-envify": "^1.2.0",
- "resolve-pathname": "^3.0.0",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0",
- "value-equal": "^1.0.1"
- }
- },
- "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/hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "dependencies": {
- "react-is": "^16.7.0"
- }
- },
- "node_modules/hoist-non-react-statics/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
"node_modules/hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -12427,9 +11823,9 @@
}
},
"node_modules/html-webpack-plugin": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz",
- "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz",
+ "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==",
"dev": true,
"dependencies": {
"@types/html-minifier-terser": "^6.0.0",
@@ -12446,7 +11842,16 @@
"url": "https://opencollective.com/html-webpack-plugin"
},
"peerDependencies": {
+ "@rspack/core": "0.x || 1.x",
"webpack": "^5.20.0"
+ },
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
}
},
"node_modules/htmlparser2": {
@@ -12632,9 +12037,9 @@
]
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -13400,6 +12805,24 @@
"set-function-name": "^2.0.1"
}
},
+ "node_modules/jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"node_modules/jake": {
"version": "10.8.7",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
@@ -13552,9 +12975,9 @@
}
},
"node_modules/jest-changed-files/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -13716,9 +13139,9 @@
}
},
"node_modules/jest-circus/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -13931,9 +13354,9 @@
}
},
"node_modules/jest-cli/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -14205,9 +13628,9 @@
}
},
"node_modules/jest-config/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -14773,9 +14196,9 @@
}
},
"node_modules/jest-each/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -15152,9 +14575,9 @@
}
},
"node_modules/jest-environment-node/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -15980,9 +15403,9 @@
}
},
"node_modules/jest-message-util/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -16157,9 +15580,9 @@
}
},
"node_modules/jest-mock/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -16502,9 +15925,9 @@
}
},
"node_modules/jest-runner/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -16918,9 +16341,9 @@
}
},
"node_modules/jest-runtime/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -17322,9 +16745,9 @@
}
},
"node_modules/jest-snapshot/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -17834,9 +17257,9 @@
}
},
"node_modules/jest-watcher/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -18003,9 +17426,9 @@
}
},
"node_modules/jest/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"optional": true,
"peer": true,
@@ -18104,11 +17527,6 @@
"jiti": "bin/jiti.js"
}
},
- "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-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -18173,6 +17591,27 @@
}
}
},
+ "node_modules/jsdom/node_modules/ws": {
+ "version": "7.5.9",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "dev": true,
+ "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/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -18761,12 +18200,8 @@
"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=="
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
},
"node_modules/minimatch": {
"version": "3.1.2",
@@ -18789,6 +18224,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/minipass": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/mkdirp": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -18962,9 +18406,9 @@
"dev": true
},
"node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "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/normalize-path": {
@@ -19079,13 +18523,13 @@
}
},
"node_modules/object.assign": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
"has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
},
@@ -19423,10 +18867,36 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/path-scurry": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^9.1.1 || ^10.0.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+ "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "dev": true,
+ "engines": {
+ "node": "14 || >=16.14"
+ }
+ },
"node_modules/path-to-regexp": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
"integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
"dependencies": {
"isarray": "0.0.1"
}
@@ -19434,7 +18904,8 @@
"node_modules/path-to-regexp/node_modules/isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "dev": true
},
"node_modules/path-type": {
"version": "4.0.0",
@@ -19625,9 +19096,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.4.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+ "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
"dev": true,
"funding": [
{
@@ -19644,7 +19115,7 @@
}
],
"dependencies": {
- "nanoid": "^3.3.6",
+ "nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -20111,21 +19582,27 @@
}
},
"node_modules/postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"dependencies": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
},
"engines": {
"node": ">= 14"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0"
@@ -20139,6 +19616,15 @@
}
}
},
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/postcss-load-config/node_modules/yaml": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
@@ -20355,9 +19841,9 @@
}
},
"node_modules/postcss-modules-scope": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
- "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz",
+ "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==",
"dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.4"
@@ -20806,9 +20292,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "version": "6.0.15",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+ "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -20923,9 +20409,9 @@
}
},
"node_modules/prettier": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
- "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
+ "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
@@ -21252,9 +20738,9 @@
"dev": true
},
"node_modules/react-bootstrap": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.9.1.tgz",
- "integrity": "sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA==",
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.9.2.tgz",
+ "integrity": "sha512-a36B+EHsAI/aH+ZhXNILBFnqscE3zr10dWmjBmfhIb2QR7KSXJiGzYd6Faf/25G8G7/CP9TCL2B0WhUBOD2UBQ==",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.22.5",
@@ -21458,35 +20944,23 @@
}
},
"node_modules/react-redux": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz",
- "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==",
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.0.4.tgz",
+ "integrity": "sha512-9J1xh8sWO0vYq2sCxK2My/QO7MzUMRi3rpiILP/+tDr8krBHixC6JMM17fMK88+Oh3e4Ae6/sHIhNBgkUivwFA==",
"dependencies": {
- "@babel/runtime": "^7.12.1",
- "@types/hoist-non-react-statics": "^3.3.1",
"@types/use-sync-external-store": "^0.0.3",
- "hoist-non-react-statics": "^3.3.2",
- "react-is": "^18.0.0",
"use-sync-external-store": "^1.0.0"
},
"peerDependencies": {
- "@types/react": "^16.8 || ^17.0 || ^18.0",
- "@types/react-dom": "^16.8 || ^17.0 || ^18.0",
- "react": "^16.8 || ^17.0 || ^18.0",
- "react-dom": "^16.8 || ^17.0 || ^18.0",
- "react-native": ">=0.59",
- "redux": "^4 || ^5.0.0-beta.0"
+ "@types/react": "^18.2.25",
+ "react": "^18.0",
+ "react-native": ">=0.69",
+ "redux": "^5.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
- "@types/react-dom": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- },
"react-native": {
"optional": true
},
@@ -21495,11 +20969,6 @@
}
}
},
- "node_modules/react-redux/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
- },
"node_modules/react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@@ -21510,46 +20979,35 @@
}
},
"node_modules/react-router": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
- "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
+ "version": "6.21.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz",
+ "integrity": "sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==",
"dependencies": {
- "@babel/runtime": "^7.12.13",
- "history": "^4.9.0",
- "hoist-non-react-statics": "^3.1.0",
- "loose-envify": "^1.3.1",
- "path-to-regexp": "^1.7.0",
- "prop-types": "^15.6.2",
- "react-is": "^16.6.0",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0"
+ "@remix-run/router": "1.14.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "react": ">=15"
+ "react": ">=16.8"
}
},
"node_modules/react-router-dom": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz",
- "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==",
+ "version": "6.21.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.1.tgz",
+ "integrity": "sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA==",
"dependencies": {
- "@babel/runtime": "^7.12.13",
- "history": "^4.9.0",
- "loose-envify": "^1.3.1",
- "prop-types": "^15.6.2",
- "react-router": "5.3.4",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0"
+ "@remix-run/router": "1.14.1",
+ "react-router": "6.21.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "react": ">=15"
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
}
},
- "node_modules/react-router/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
"node_modules/react-scripts": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz",
@@ -21858,9 +21316,9 @@
}
},
"node_modules/react-scripts/node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -22882,19 +22340,16 @@
}
},
"node_modules/redux": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
- "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
- "dependencies": {
- "@babel/runtime": "^7.9.2"
- }
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="
},
"node_modules/redux-saga": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.2.3.tgz",
- "integrity": "sha512-HDe0wTR5nhd8Xr5xjGzoyTbdAw6rjy1GDplFt3JKtKN8/MnkQSRqK/n6aQQhpw5NI4ekDVOaW+w4sdxPBaCoTQ==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.3.0.tgz",
+ "integrity": "sha512-J9RvCeAZXSTAibFY0kGw6Iy4EdyDNW7k6Q+liwX+bsck7QVsU78zz8vpBRweEfANxnnlG/xGGeOvf6r8UXzNJQ==",
"dependencies": {
- "@redux-saga/core": "^1.2.3"
+ "@redux-saga/core": "^1.3.0"
}
},
"node_modules/reflect.getprototypeof": {
@@ -22936,9 +22391,9 @@
}
},
"node_modules/regenerator-runtime": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
- "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/regenerator-transform": {
"version": "0.15.2",
@@ -22950,9 +22405,9 @@
}
},
"node_modules/regex-parser": {
- "version": "2.2.11",
- "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz",
- "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz",
+ "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==",
"dev": true
},
"node_modules/regexp.prototype.flags": {
@@ -23099,11 +22554,6 @@
"node": ">=8"
}
},
- "node_modules/resolve-pathname": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
- "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
- },
"node_modules/resolve-url-loader": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz",
@@ -23458,11 +22908,6 @@
"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/select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -23728,17 +23173,16 @@
"dev": true
},
"node_modules/sinon": {
- "version": "15.2.0",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz",
- "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==",
- "deprecated": "16.1.1",
+ "version": "17.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz",
+ "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==",
"dev": true,
"dependencies": {
"@sinonjs/commons": "^3.0.0",
- "@sinonjs/fake-timers": "^10.3.0",
+ "@sinonjs/fake-timers": "^11.2.2",
"@sinonjs/samsam": "^8.0.0",
"diff": "^5.1.0",
- "nise": "^5.1.4",
+ "nise": "^5.1.5",
"supports-color": "^7.2.0"
},
"funding": {
@@ -23746,6 +23190,15 @@
"url": "https://opencollective.com/sinon"
}
},
+ "node_modules/sinon/node_modules/@sinonjs/fake-timers": {
+ "version": "11.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz",
+ "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
"node_modules/sinon/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -24098,6 +23551,27 @@
"node": ">=8"
}
},
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "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/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==",
+ "dev": true
+ },
"node_modules/string-width/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -24195,6 +23669,19 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
@@ -24279,14 +23766,14 @@
}
},
"node_modules/sucrase": {
- "version": "3.34.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
- "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
- "glob": "7.1.6",
+ "glob": "^10.3.10",
"lines-and-columns": "^1.1.6",
"mz": "^2.7.0",
"pirates": "^4.0.1",
@@ -24297,24 +23784,50 @@
"sucrase-node": "bin/sucrase-node"
},
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/sucrase/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
}
},
"node_modules/sucrase/node_modules/glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"dev": true,
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": "*"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sucrase/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -24478,9 +23991,9 @@
"dev": true
},
"node_modules/tailwindcss": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
- "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz",
+ "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==",
"dev": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
@@ -24591,9 +24104,9 @@
}
},
"node_modules/terser": {
- "version": "5.24.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz",
- "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==",
+ "version": "5.26.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
+ "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -24609,16 +24122,16 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.9",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
- "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
+ "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.17",
+ "@jridgewell/trace-mapping": "^0.3.20",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.1",
- "terser": "^5.16.8"
+ "terser": "^5.26.0"
},
"engines": {
"node": ">= 10.13.0"
@@ -24701,16 +24214,6 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true
},
- "node_modules/tiny-invariant": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
- "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw=="
- },
- "node_modules/tiny-warning": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
- "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
- },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -24796,9 +24299,9 @@
"dev": true
},
"node_modules/tsconfig-paths": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
- "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
"dev": true,
"dependencies": {
"@types/json5": "^0.0.29",
@@ -24829,9 +24332,9 @@
}
},
"node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
},
"node_modules/tsutils": {
"version": "3.21.0",
@@ -25044,11 +24547,6 @@
"integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==",
"dev": true
},
- "node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
- },
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
@@ -25250,9 +24748,9 @@
}
},
"node_modules/v8-to-istanbul": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz",
- "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
+ "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
"dev": true,
"optional": true,
"peer": true,
@@ -25265,11 +24763,6 @@
"node": ">=10.12.0"
}
},
- "node_modules/value-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
- "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
- },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -25341,25 +24834,25 @@
}
},
"node_modules/web3": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/web3/-/web3-4.2.2.tgz",
- "integrity": "sha512-im7weoHY7TW87nhFk10ysupZnsDJEO/xDpz985AgrTd/7KxExlzjjKd+4nue0WskUF0th0mgoMs1YaA8xUjCjw==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/web3/-/web3-4.3.0.tgz",
+ "integrity": "sha512-YiLCsb5wmgJlSxRLzt7Z7H+CmlVVIKD8VaUQaZ+xKVG3Q7CpsO5Z6jmeKnlr6M9c6fDDsDnRM6G8g+nchZehbA==",
"dependencies": {
- "web3-core": "^4.3.1",
+ "web3-core": "^4.3.2",
"web3-errors": "^1.1.4",
"web3-eth": "^4.3.1",
"web3-eth-abi": "^4.1.4",
"web3-eth-accounts": "^4.1.0",
- "web3-eth-contract": "^4.1.3",
+ "web3-eth-contract": "^4.1.4",
"web3-eth-ens": "^4.0.8",
"web3-eth-iban": "^4.0.7",
"web3-eth-personal": "^4.0.8",
"web3-net": "^4.0.7",
"web3-providers-http": "^4.1.0",
"web3-providers-ws": "^4.0.7",
- "web3-rpc-methods": "^1.1.3",
+ "web3-rpc-methods": "^1.1.4",
"web3-types": "^1.3.1",
- "web3-utils": "^4.0.7",
+ "web3-utils": "^4.1.0",
"web3-validator": "^2.0.3"
},
"engines": {
@@ -25368,16 +24861,17 @@
}
},
"node_modules/web3-core": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.3.1.tgz",
- "integrity": "sha512-xa3w5n/ESxp5HIbrwsYBhpAPx2KI5LprjRFEtRwP0GpqqhTcCSMMYoyItRqQQ+k9YnB0PoFpWJfJI6Qn5x8YUQ==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.3.2.tgz",
+ "integrity": "sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==",
"dependencies": {
"web3-errors": "^1.1.4",
+ "web3-eth-accounts": "^4.1.0",
"web3-eth-iban": "^4.0.7",
"web3-providers-http": "^4.1.0",
"web3-providers-ws": "^4.0.7",
"web3-types": "^1.3.1",
- "web3-utils": "^4.0.7",
+ "web3-utils": "^4.1.0",
"web3-validator": "^2.0.3"
},
"engines": {
@@ -25457,16 +24951,16 @@
}
},
"node_modules/web3-eth-contract": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.1.3.tgz",
- "integrity": "sha512-F6e3eyetUDiNOb78EDVJtNOb0H1GPz3xAZH8edSfYdhaxI9tTutP2V3p++kh2ZJ/RrdE2+xil7H/nPLgHymBvg==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.1.4.tgz",
+ "integrity": "sha512-tJ4z6QLgtu8EQu2sXnLA7g427oxmngnbAUh+9kJKbP6Yep/oe+z79PqJv7H3MwqwUNW9T+/FeB2PnSQSyxz6ig==",
"dependencies": {
- "web3-core": "^4.3.1",
+ "web3-core": "^4.3.2",
"web3-errors": "^1.1.4",
"web3-eth": "^4.3.1",
"web3-eth-abi": "^4.1.4",
"web3-types": "^1.3.1",
- "web3-utils": "^4.0.7",
+ "web3-utils": "^4.1.0",
"web3-validator": "^2.0.3"
},
"engines": {
@@ -25589,9 +25083,9 @@
}
},
"node_modules/web3-providers-ws/node_modules/ws": {
- "version": "8.14.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
- "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
+ "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
"engines": {
"node": ">=10.0.0"
},
@@ -25609,12 +25103,12 @@
}
},
"node_modules/web3-rpc-methods": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.1.3.tgz",
- "integrity": "sha512-XB6SsCZZPdZUMPIRqDxJkZFKMu0/Y+yaExAt+Z7RqmuM7xF55fJ/Qb84LQho8zarvUoYziy4jnIfs+SXImxQUw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.1.4.tgz",
+ "integrity": "sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ==",
"dependencies": {
- "web3-core": "^4.3.0",
- "web3-types": "^1.3.0",
+ "web3-core": "^4.3.2",
+ "web3-types": "^1.3.1",
"web3-validator": "^2.0.3"
},
"engines": {
@@ -25632,13 +25126,13 @@
}
},
"node_modules/web3-utils": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.0.7.tgz",
- "integrity": "sha512-sy8S6C2FIa5NNHc8DjND+Fx3S8KDAizuh5RbL1RX3h0PRbFgPfWzF5RfUns8gTt0mjJuOhs/IaDhrZfeTszG5A==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.1.0.tgz",
+ "integrity": "sha512-+VJWR6FtCsgwuJr5tvSvQlSEG06586df8h2CxGc9tcNtIDyJKNkSDDWJkdNPvyDhhXFzQYFh8QOGymD1CIP6fw==",
"dependencies": {
"ethereum-cryptography": "^2.0.0",
- "web3-errors": "^1.1.3",
- "web3-types": "^1.3.0",
+ "web3-errors": "^1.1.4",
+ "web3-types": "^1.3.1",
"web3-validator": "^2.0.3"
},
"engines": {
@@ -25854,9 +25348,9 @@
}
},
"node_modules/webpack-dev-server/node_modules/@types/ws": {
- "version": "8.5.9",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz",
- "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==",
+ "version": "8.5.10",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
+ "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -25916,9 +25410,9 @@
}
},
"node_modules/webpack-dev-server/node_modules/ws": {
- "version": "8.14.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
- "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
+ "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
"dev": true,
"engines": {
"node": ">=10.0.0"
@@ -26050,9 +25544,9 @@
}
},
"node_modules/whatwg-fetch": {
- "version": "3.6.19",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz",
- "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==",
+ "version": "3.6.20",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
+ "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",
"dev": true
},
"node_modules/whatwg-mimetype": {
@@ -26513,6 +26007,57 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -26565,11 +26110,11 @@
}
},
"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==",
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
+ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
"engines": {
- "node": ">=8.3.0"
+ "node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
diff --git a/package.json b/package.json
index 06d60a7..99bed99 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ethereum-store",
- "version": "0.2.4",
+ "version": "0.2.8",
"description": "Ethereum store for react redux",
"scripts": {
"prettier": "prettier --write .",
@@ -34,28 +34,28 @@
"dependencies": {
"big.js": "^6.2.1",
"buffer": "^6.0.3",
- "ethers": "^5.7.2",
+ "ethers": "^6.9.0",
"lodash": "^4.17.21",
"lodash.clonedeep": "^4.5.0",
- "react-redux": "^8.1.2",
- "react-router-dom": "^5.2.0",
- "reactstrap": "^9.2.0",
- "redux": "^4.2.1",
+ "react-redux": "^9.0.4",
+ "react-router-dom": "^6.21.0",
+ "reactstrap": "^9.2.1",
+ "redux": "^5.0.0",
"redux-saga": "^1.2.3",
"reselect": "^4.1.8",
- "web3": "^4.1.1"
+ "web3": "^4.3.0"
},
"devDependencies": {
- "@babel/cli": "^7.23.0",
- "@babel/core": "^7.23.3",
- "@babel/preset-env": "^7.23.3",
- "@openzeppelin/contracts": "^4.9.3",
- "@testing-library/jest-dom": "^6.1.4",
- "@testing-library/react": "^14.0.0",
+ "@babel/cli": "^7.23.4",
+ "@babel/core": "^7.23.6",
+ "@babel/preset-env": "^7.23.6",
+ "@openzeppelin/contracts": "^5.0.1",
+ "@testing-library/jest-dom": "^6.1.5",
+ "@testing-library/react": "^14.1.2",
"@testing-library/user-event": "^14.5.1",
- "prettier": "^3.0.2",
+ "prettier": "^3.1.1",
"react-scripts": "^5.0.1",
- "sinon": "^15.2.0"
+ "sinon": "^17.0.1"
},
"peerDependencies": {
"react": "^18.2.0",
diff --git a/src/App.js b/src/App.js
index c05caf0..ff1b1f7 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,12 +1,12 @@
-import React, { useEffect } from "react";
-import { Switch, BrowserRouter as Router } from "react-router-dom";
+import React, { useEffect, useRef } from "react";
+import { Route, Routes } from "react-router-dom";
import { useDispatch } from "react-redux";
// Import Routes all
import { userRoutes } from "./routes/allRoutes";
-import Middleware from "./routes/middleware/Middleware";
function App() {
let dispatch = useDispatch();
+ const mounted = useRef(false);
useEffect(() => {
const interval = setInterval(() => {
@@ -15,15 +15,22 @@ function App() {
return () => clearInterval(interval);
}, [dispatch]);
+ // Initial useEffects
+ useEffect(() => {
+ mounted.current = true;
+ dispatch({ type: "SET_USER_CURRENT_CHAIN", name: "Mumbai", id: 80001, rpc: "https://rpc.ankr.com/polygon_mumbai" });
+ return () => {
+ mounted.current = false;
+ };
+ }, [dispatch]);
+
return (
-
-
- {userRoutes.map((route, idx) => (
-
- ))}
-
-
+
+ {userRoutes.map((route) => (
+ } />
+ ))}
+
);
}
diff --git a/src/helpers/contractRegistry.js b/src/helpers/contractRegistry.js
index eff55b1..10e0552 100644
--- a/src/helpers/contractRegistry.js
+++ b/src/helpers/contractRegistry.js
@@ -1,7 +1,7 @@
/* This file is used only for testing purposes. */
const { ethers } = require("ethers");
-const roProvider = new ethers.providers.JsonRpcProvider("https://rpc.ankr.com/polygon_mumbai");
+const roProvider = new ethers.JsonRpcProvider("https://rpc.ankr.com/polygon_mumbai");
const abis = {}; // Mapping (abiName => abi)
const formatters = {}; // Mapping (abiName => method => outputFormatterFunction)
diff --git a/src/helpers/mock_helper.js b/src/helpers/mock_helper.js
index f190291..a1a3974 100644
--- a/src/helpers/mock_helper.js
+++ b/src/helpers/mock_helper.js
@@ -46,7 +46,7 @@ export const mockProviderFn = () => {
ret._defaultProvider = {
getSigner: sinon.fake.resolves({
signMessage: () => "0x1234567890",
- _signTypedData: () => "0x0987654321",
+ signTypedData: () => "0x0987654321",
}),
}; // Default provider
ret.default = (provider) => {
@@ -63,7 +63,7 @@ export const mockProviderRejectsFn = () => {
ret._defaultProvider = {
getSigner: sinon.fake.resolves({
signMessage: sinon.fake.rejects("Error signing message"),
- _signTypedData: sinon.fake.rejects("Error signing typed message"),
+ signTypedData: sinon.fake.rejects("Error signing typed message"),
}),
}; // Default provider
ret.default = (provider) => {
diff --git a/src/package-index.js b/src/package-index.js
index 77e79bf..673f796 100644
--- a/src/package-index.js
+++ b/src/package-index.js
@@ -14,9 +14,6 @@ let selectUserAddressFn;
let selectChainIdFn;
let selectProviderFn;
-// Chain
-let envChain;
-
export function initializeEthereumStore(options) {
const {
getEncodedCall,
@@ -29,7 +26,6 @@ export function initializeEthereumStore(options) {
selectUserAddress,
selectChainId,
selectProvider,
- chain,
} = options;
getEncodedCallFn = getEncodedCall;
@@ -42,7 +38,6 @@ export function initializeEthereumStore(options) {
selectUserAddressFn = selectUserAddress;
selectChainIdFn = selectChainId;
selectProviderFn = selectProvider;
- envChain = chain;
}
export {
@@ -56,5 +51,4 @@ export {
selectUserAddressFn,
selectChainIdFn,
selectProviderFn,
- envChain,
};
diff --git a/src/pages/StaticDashboard/staticDashboard.js b/src/pages/StaticDashboard/staticDashboard.js
index ad219af..fecfc29 100644
--- a/src/pages/StaticDashboard/staticDashboard.js
+++ b/src/pages/StaticDashboard/staticDashboard.js
@@ -5,7 +5,7 @@ import { Container } from "reactstrap";
import { Button } from "react-bootstrap";
import { useDispatch } from "react-redux";
import { connect } from "react-redux";
-import { selectEthCallMultiple } from "../../store/ethereum/selectors";
+import { selectCurrentChain, selectEthCallMultiple } from "../../store/ethereum/selectors";
import SubsManager from "./subsManager";
const componentEthCalls = function () {
@@ -19,7 +19,7 @@ const componentEthCalls = function () {
];
};
-const Static = ({ totalSupply, subscriptions }) => {
+const Static = ({ totalSupply, subscriptions, currentChain }) => {
let dispatch = useDispatch();
const [sub, setSub] = useState(false);
const mounted = useRef(false);
@@ -36,7 +36,7 @@ const Static = ({ totalSupply, subscriptions }) => {
dispatch({ type: "ETH_REMOVE_SUBSCRIPTION", key: "staticDashboard" });
mounted.current = false;
};
- }, [dispatch]);
+ }, [dispatch, currentChain]);
return (
@@ -94,8 +94,9 @@ const Static = ({ totalSupply, subscriptions }) => {
const mapStateToProps = (state) => {
const [totalSupply] = selectEthCallMultiple(state.EthereumReducer, componentEthCalls());
+ const currentChain = selectCurrentChain(state.EthereumReducer);
const subscriptions = state.EthereumReducer.subscriptions;
- return { totalSupply, subscriptions };
+ return { totalSupply, subscriptions, currentChain };
};
export default connect(mapStateToProps, null)(Static);
diff --git a/src/pages/StaticDashboard/subsManager.js b/src/pages/StaticDashboard/subsManager.js
index cfc5ced..82a0cee 100644
--- a/src/pages/StaticDashboard/subsManager.js
+++ b/src/pages/StaticDashboard/subsManager.js
@@ -1,7 +1,7 @@
import React, { useEffect, useRef } from "react";
import { useDispatch } from "react-redux";
import { connect } from "react-redux";
-import { selectEthCallMultiple } from "../../store/ethereum/selectors";
+import { selectCurrentChain, selectEthCallMultiple } from "../../store/ethereum/selectors";
const componentEthCalls = function () {
return [
@@ -14,7 +14,7 @@ const componentEthCalls = function () {
];
};
-const SubsManager = ({ symbol }) => {
+const SubsManager = ({ symbol, currentChain }) => {
let dispatch = useDispatch();
const mounted = useRef(false);
@@ -30,7 +30,7 @@ const SubsManager = ({ symbol }) => {
dispatch({ type: "ETH_REMOVE_SUBSCRIPTION", key: "subsManager" });
mounted.current = false;
};
- }, [dispatch]);
+ }, [dispatch, currentChain]);
return (
@@ -47,7 +47,8 @@ const SubsManager = ({ symbol }) => {
const mapStateToProps = (state) => {
const [symbol] = selectEthCallMultiple(state.EthereumReducer, componentEthCalls());
- return { symbol };
+ const currentChain = selectCurrentChain(state.EthereumReducer);
+ return { symbol, currentChain };
};
export default connect(mapStateToProps, null)(SubsManager);
diff --git a/src/routes/middleware/Middleware.js b/src/routes/middleware/Middleware.js
deleted file mode 100644
index b45e096..0000000
--- a/src/routes/middleware/Middleware.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-import PropTypes from "prop-types";
-import { Route } from "react-router-dom";
-
-const Middleware = ({ component: Component, ...rest }) => (
- {
- return ;
- }}
- />
-);
-
-Middleware.propTypes = {
- component: PropTypes.any,
- location: PropTypes.object,
- layout: PropTypes.any,
-};
-
-export default Middleware;
diff --git a/src/store/ethereum/actionTypes.js b/src/store/ethereum/actionTypes.js
index f7246e7..32f3eb4 100644
--- a/src/store/ethereum/actionTypes.js
+++ b/src/store/ethereum/actionTypes.js
@@ -82,3 +82,5 @@ export const ETH_PLAIN_SIGN_FAILED = "ETH_PLAIN_SIGN_FAILED";
* {type: ETH_PLAIN_SIGN_PROCESSED, key: userAddress, signature: "0x1234...", message: "message to sign"}
* {type: ETH_PLAIN_SIGN_FAILED, key: userAddress, payload: error.message }
*/
+
+export const SET_USER_CURRENT_CHAIN = "SET_USER_CURRENT_CHAIN";
diff --git a/src/store/ethereum/reducer.js b/src/store/ethereum/reducer.js
index c5103a6..a417f6d 100644
--- a/src/store/ethereum/reducer.js
+++ b/src/store/ethereum/reducer.js
@@ -23,254 +23,222 @@ import {
ETH_PLAIN_SIGN,
ETH_PLAIN_SIGN_PROCESSED,
ETH_PLAIN_SIGN_FAILED,
+ SET_USER_CURRENT_CHAIN,
} from "./actionTypes";
const { ethers } = require("ethers");
const INIT_STATE = {
- calls: {},
- /*
- * calls: { "0xsfsdf"_getBalance(nicolas): {
- * _: {
- * state: "LOADING|LOADED|ERROR",
- * value: ,
- * retries: undefined | number
- * }
- * }
- *
- */
- call_metadata: {}, // Different dictionary to avoid re-rendering if only timestamp changes
- /*
- * : {timestamp: }
- */
- subscriptions: {},
- /*
- * : [ ETH call list ]
- */
timestamp: 0,
- transacts: [],
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: { name: "Mumbai", id: 80001, rpc: "https://rpc.ankr.com/polygon_mumbai" },
+ chainState: {
+ /*
+ * : {
+ * calls: { "0xsfsdf"_getBalance(nicolas): {
+ * _: {
+ * state: "LOADING|LOADED|ERROR",
+ * value: ,
+ * retries: undefined | number
+ * }
+ * }
+ * // Different dictionary to avoid re-rendering if only timestamp changes
+ * call_metadata: {
+ * call_key>: {timestamp: }
+ * },
+ * subscriptions: {
+ * : [ ETH call list ]
+ * },
+ * transacts: [],
+ * signs: {},
+ * siweSigns: {},
+ * eipSigns: {},
+ */
+ },
};
+function modifyNode(state, path, newValueFn) {
+ if (path.length === 1) return { ...state, [path[0]]: newValueFn(state[path[0]] || {}) };
+ else {
+ return { ...state, [path[0]]: modifyNode(state[path[0]] || {}, path.slice(1, path.length), newValueFn) };
+ }
+}
+
const EthereumReducer = (state = INIT_STATE, action) => {
+ let chainId;
switch (action.type) {
case ETH_CALL:
- let key = action.address + "_" + getEncodedCallFn(action.address, action.abi, action.method, action.args);
- let newCallState = state.calls[key] ? { ...state.calls[key] } : {};
- if (newCallState.state !== "LOADED")
- newCallState.state = newCallState.state !== "LOADED" ? "LOADING" : newCallState.state;
- if (action.retry !== undefined) newCallState.retries = action.retry;
- state = { ...state, calls: { ...state.calls, [key]: newCallState } };
+ chainId = state.currentChain.id;
+ let rpc = state.currentChain.rpc;
+ let key = action.address + "_" + getEncodedCallFn(action.address, action.abi, action.method, action.args, rpc);
+ state = modifyNode(state, ["chainState", chainId, "calls", key], (call) => {
+ call = call || {};
+ call.state = call.state !== "LOADED" ? "LOADING" : call.state;
+ if (action.retry !== undefined) call.retries = action.retry;
+ return call;
+ });
break;
case ETH_CALL_SUCCESS:
- state = {
- ...state,
- calls: {
- ...state.calls,
- [action.call_key]: { state: "LOADED", value: action.value },
- },
- call_metadata: {
- ...state.call_metadata,
- [action.call_key]: {
- ...(state.call_metadata[action.call_key] || {}),
- timestamp: action.timestamp,
- },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "call_metadata", action.call_key], () => {
+ return { timestamp: action.timestamp };
+ });
+ state = modifyNode(state, ["chainState", chainId, "calls", action.call_key], () => {
+ return { state: "LOADED", value: action.value };
+ });
break;
case ETH_CALL_FAIL:
- state = {
- ...state,
- calls: {
- ...state.calls,
- [action.call_key]: { ...state.calls[action.call_key], state: "ERROR" },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "calls", action.call_key], (x) => {
+ return { ...x, state: "ERROR" };
+ });
break;
case ETH_ADD_SUBSCRIPTION:
- state = {
- ...state,
- subscriptions: {
- ...state.subscriptions,
- [action.key]: action.componentEthCalls,
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "subscriptions", action.key], () => action.componentEthCalls);
break;
case ETH_REMOVE_SUBSCRIPTION:
- let newMountedComponents = { ...state.subscriptions };
- delete newMountedComponents[action.key];
- state = {
- ...state,
- subscriptions: newMountedComponents,
- };
+ let newChainState = { ...state.chainState };
+ delete newChainState[state.currentChain.id]?.subscriptions[action.key];
+ state = { ...state, chainState: newChainState };
break;
case SET_TIMESTAMP_TO_REFRESH:
- state = {
- ...state,
- timestamp: action.timestamp,
- };
+ state = { ...state, timestamp: action.timestamp };
break;
case ETH_TRANSACT:
- state = {
- ...state,
- transacts: [...state.transacts, { address: action.address, method: action.method, args: action.args }],
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId], (x) => {
+ x.transacts = [...(x.transacts || []), { address: action.address, method: action.method, args: action.args }];
+ return x;
+ });
break;
case ETH_TRANSACT_QUEUED:
- let newTransacts = [...state.transacts];
- newTransacts[action.id] = { ...newTransacts[action.id], txHash: action.txHash, state: "QUEUED" };
- state = { ...state, transacts: newTransacts };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "transacts"], (transacts) => {
+ return (transacts || []).with(action.id, { ...transacts[action.id], txHash: action.txHash, state: "QUEUED" });
+ });
break;
case ETH_TRANSACT_REJECTED:
- let transactWithError = [...state.transacts];
- transactWithError[action.id] = { ...transactWithError[action.id], error: action.payload, state: "REJECTED" };
- state = { ...state, transacts: transactWithError };
-
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "transacts"], (transacts) => {
+ return (transacts || []).with(action.id, { ...transacts[action.id], error: action.payload, state: "REJECTED" });
+ });
break;
case ETH_TRANSACT_MINED:
- let transactMined = [...state.transacts];
- transactMined[action.id] = { ...transactMined[action.id], state: "MINED" };
- state = { ...state, transacts: transactMined };
-
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "transacts"], (transacts) => {
+ return (transacts || []).with(action.id, { ...transacts[action.id], state: "MINED" });
+ });
break;
case ETH_TRANSACT_REVERTED:
- let transactRejected = [...state.transacts];
- transactRejected[action.id] = { ...transactRejected[action.id], state: "REVERTED" };
- state = { ...state, transacts: transactRejected };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "transacts"], (transacts) => {
+ return (transacts || []).with(action.id, { ...transacts[action.id], state: "REVERTED" });
+ });
break;
case ETH_TRANSACT_EXPIRED:
- let transactExpired = [...state.transacts];
- transactExpired[action.id] = { ...transactExpired[action.id], state: "EXPIRED" };
- state = { ...state, transacts: transactExpired };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "transacts"], (transacts) => {
+ return (transacts || []).with(action.id, { ...transacts[action.id], state: "EXPIRED" });
+ });
break;
case ETH_SIWE_SIGN:
- state = {
- ...state,
- siweSigns: {
- ...state.siweSigns,
- [action.userAddress]: { state: "PENDING" },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "siweSigns", action.userAddress], () => {
+ return { state: "PENDING" };
+ });
break;
case SET_ETH_SIWE_SIGN:
case ETH_SIWE_SIGN_PROCESSED:
- state = {
- ...state,
- siweSigns: {
- ...state.siweSigns,
- [action.key]: {
- state: "SIGNED",
- signature: action.signature,
- message: action.message,
- email: action.email,
- country: action.country,
- occupation: action.occupation,
- whitelist: action.whitelist,
- },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "siweSigns", action.key], () => {
+ return {
+ state: "SIGNED",
+ signature: action.signature,
+ message: action.message,
+ email: action.email,
+ country: action.country,
+ occupation: action.occupation,
+ whitelist: action.whitelist,
+ };
+ });
break;
case ETH_SIWE_SIGN_FAILED:
- state = {
- ...state,
- siweSigns: {
- ...state.siweSigns,
- [action.key]: { ...state.siweSigns[action.key], state: "ERROR", error: action.payload },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "siweSigns", action.key], (x) => {
+ return { ...x, state: "ERROR", error: action.payload };
+ });
break;
case ETH_EIP_712_SIGN:
- const eipKey = ethers.utils._TypedDataEncoder.encode(action.domain, action.types, action.value);
- state = {
- ...state,
- eipSigns: {
- ...state.eipSigns,
- [eipKey]: { state: "PENDING" },
- },
- };
+ chainId = state.currentChain.id;
+ const eipKey = ethers.TypedDataEncoder.encode(action.domain, action.types, action.value);
+ state = modifyNode(state, ["chainState", chainId, "eipSigns", eipKey], () => {
+ return { state: "PENDING" };
+ });
break;
case ETH_EIP_712_SIGN_PROCESSED:
- state = {
- ...state,
- eipSigns: {
- ...state.eipSigns,
- [action.key]: {
- state: "SIGNED",
- userAddress: action.userAddress,
- signature: action.signature,
- domain: action.domain,
- types: action.types,
- value: action.value,
- },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "eipSigns", action.key], () => {
+ return {
+ state: "SIGNED",
+ userAddress: action.userAddress,
+ signature: action.signature,
+ domain: action.domain,
+ types: action.types,
+ value: action.value,
+ };
+ });
break;
case ETH_EIP_712_SIGN_FAILED:
- state = {
- ...state,
- eipSigns: {
- ...state.eipSigns,
- [action.key]: {
- ...state.eipSigns[action.key],
- state: "ERROR",
- error: action.payload,
- userAddress: action.userAddress,
- },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "eipSigns", action.key], (x) => {
+ return { ...x, state: "ERROR", error: action.payload, userAddress: action.userAddress };
+ });
break;
case ETH_PLAIN_SIGN:
- state = {
- ...state,
- signs: {
- ...state.signs,
- [action.userAddress]: { state: "PENDING" },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "signs", action.userAddress], () => {
+ return { state: "PENDING" };
+ });
break;
case ETH_PLAIN_SIGN_PROCESSED:
- state = {
- ...state,
- signs: {
- ...state.signs,
- [action.key]: {
- state: "SIGNED",
- signature: action.signature,
- message: action.message,
- },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "signs", action.key], () => {
+ return {
+ state: "SIGNED",
+ signature: action.signature,
+ message: action.message,
+ };
+ });
break;
case ETH_PLAIN_SIGN_FAILED:
- state = {
- ...state,
- signs: {
- ...state.signs,
- [action.key]: { ...state.signs[action.key], state: "ERROR", error: action.payload },
- },
- };
+ chainId = state.currentChain.id;
+ state = modifyNode(state, ["chainState", chainId, "signs", action.key], (x) => {
+ return { ...x, state: "ERROR", error: action.payload };
+ });
+ break;
+
+ case SET_USER_CURRENT_CHAIN:
+ state = { ...state, currentChain: { name: action.name, id: action.id, rpc: action.rpc } };
break;
default:
diff --git a/src/store/ethereum/reducer.test.js b/src/store/ethereum/reducer.test.js
new file mode 100644
index 0000000..a10aade
--- /dev/null
+++ b/src/store/ethereum/reducer.test.js
@@ -0,0 +1,728 @@
+import EthereumReducer from "./reducer.js";
+import { initializeEthereumStore } from "../../package-index";
+import * as contractRegistry from "../../helpers/contractRegistry";
+
+const { ethers } = require("ethers");
+
+const currencyAddress = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; // Polygon USDC address
+contractRegistry.registerABI("ERC20Permit", require("@openzeppelin/contracts/build/contracts/ERC20Permit.json").abi);
+contractRegistry.registerContract(currencyAddress, "ERC20Permit");
+contractRegistry.registerFormatter("ERC20Permit", "totalSupply", undefined);
+contractRegistry.registerFormatter("ERC20Permit", "name", undefined);
+
+describe("Ethereum Reducer tests", () => {
+ /* Mocking tx receipt function and initialize saga */
+ initializeEthereumStore({
+ getEncodedCall: contractRegistry.getEncodedCall,
+ getContract: contractRegistry.getContract,
+ getAbiName: contractRegistry.getAbiName,
+ getFormatter: contractRegistry.getFormatter,
+ getSignerContract: contractRegistry.getSignerContract,
+ getTxReceiptStatus: () => 1, // just for testing
+ selectChainId: () => 1234, // just for testing
+ selectProvider: () => {},
+ selectUserAddress: () => "0x4d68Cf31d613070b18E406AFd6A42719a62a0785", // just for testing
+ });
+
+ const state = {
+ timestamp: 0,
+ currentChain: { name: "Mumbai", id: 80001, rpc: "https://rpc.ankr.com/polygon_mumbai" },
+ chainState: {},
+ };
+
+ it("Should handle initial state", () => {
+ const initialState = state;
+ const action = { type: "fake_action" };
+ const expectedState = initialState;
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should SET_USER_CURRENT_CHAIN", () => {
+ const initialState = { ...state };
+ const action = {
+ type: "SET_USER_CURRENT_CHAIN",
+ name: "NewChain",
+ id: 1234,
+ rpc: "https://foo-rpc.com/",
+ };
+ const expectedState = { ...state, currentChain: { name: "NewChain", id: 1234, rpc: "https://foo-rpc.com/" } };
+
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add one subscription", () => {
+ const initialState = { ...state, chainState: { 80001: { subscriptions: {} } } };
+ const action = {
+ type: "ETH_ADD_SUBSCRIPTION",
+ key: "foo",
+ componentEthCalls: [{ address: "0x00", abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { subscriptions: { foo: [{ address: "0x00", abi: "ERC20Permit", method: "totalSupply", args: [] }] } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should remove one subscription", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: { subscriptions: { foo: [{ address: "0x00", abi: "ERC20Permit", method: "totalSupply", args: [] }] } },
+ },
+ };
+ const action = {
+ type: "ETH_ADD_SUBSCRIPTION",
+ key: "foo",
+ componentEthCalls: [{ address: "0x00", abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { subscriptions: { foo: [{ address: "0x00", abi: "ERC20Permit", method: "totalSupply", args: [] }] } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add new subscription", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: { subscriptions: { foo: [{ address: "0x00", abi: "ERC20Permit", method: "totalSupply", args: [] }] } },
+ },
+ };
+ const action = {
+ type: "ETH_ADD_SUBSCRIPTION",
+ key: "bar",
+ componentEthCalls: [{ address: "0x01", abi: "ERC20Permit", method: "name", args: [] }],
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ subscriptions: {
+ foo: [{ address: "0x00", abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ bar: [{ address: "0x01", abi: "ERC20Permit", method: "name", args: [] }],
+ },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add one ETH_CALL", () => {
+ const initialState = { ...state, chainState: { 80001: { calls: {} } } };
+ const action = {
+ type: "ETH_CALL",
+ address: "0x00",
+ abi: "ERC20Permit",
+ method: "name",
+ args: [],
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { calls: { "0x00_0x06fdde03": { state: "LOADING" } } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add one ETH_CALL and there is already another one", () => {
+ const initialState = { ...state, chainState: { 80001: { calls: { "0x00_0x06fdde03": { state: "LOADING" } } } } };
+ const action = {
+ type: "ETH_CALL",
+ address: "0x00",
+ abi: "ERC20Permit",
+ method: "totalSupply",
+ args: [],
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { calls: { "0x00_0x06fdde03": { state: "LOADING" }, "0x00_0x18160ddd": { state: "LOADING" } } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should retry the ETH_CALL", () => {
+ const initialState = { ...state, chainState: { 80001: { calls: {} } } };
+ const action = {
+ type: "ETH_CALL",
+ address: "0x00",
+ abi: "ERC20Permit",
+ method: "name",
+ args: [],
+ retry: 5,
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { calls: { "0x00_0x06fdde03": { state: "LOADING", retries: 5 } } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("The ETH_CALL was successful", () => {
+ const initialState = { ...state, chainState: { 80001: { calls: { "0x00_0x06fdde03": { state: "LOADING" } } } } };
+ const action = {
+ type: "ETH_CALL_SUCCESS",
+ call_key: "0x00_0x06fdde03",
+ value: "FakeUSDC",
+ timestamp: 1703683845252,
+ };
+
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ calls: { "0x00_0x06fdde03": { state: "LOADED", value: "FakeUSDC" } },
+ call_metadata: { "0x00_0x06fdde03": { timestamp: 1703683845252 } },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("The ETH_CALL was successful and there is already another one", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: {
+ calls: { "0x00_0x06fdde03": { state: "LOADED", value: "FakeUSDC" }, "0x00_0x18160ddd": { state: "LOADING" } },
+ call_metadata: { "0x00_0x06fdde03": { timestamp: 1703683845252 } },
+ },
+ },
+ };
+ const action = {
+ type: "ETH_CALL_SUCCESS",
+ call_key: "0x00_0x18160ddd",
+ value: 100,
+ timestamp: 1703683849000,
+ };
+
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ calls: {
+ "0x00_0x06fdde03": { state: "LOADED", value: "FakeUSDC" },
+ "0x00_0x18160ddd": { state: "LOADED", value: 100 },
+ },
+ call_metadata: {
+ "0x00_0x06fdde03": { timestamp: 1703683845252 },
+ "0x00_0x18160ddd": { timestamp: 1703683849000 },
+ },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("The ETH_CALL fails", () => {
+ const initialState = {
+ ...state,
+ chainState: { 80001: { calls: { "0x00_0x06fdde03": { state: "LOADING", retries: 9 } } } },
+ };
+ const action = { type: "ETH_CALL_FAIL", payload: "eth call fails", call_key: "0x00_0x06fdde03" };
+
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ calls: { "0x00_0x06fdde03": { state: "ERROR", retries: 9 } },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add one ETH_TRANSACT", () => {
+ const initialState = { ...state, chainState: { 80001: { transacts: [] } } };
+ const action = {
+ type: "ETH_TRANSACT",
+ address: currencyAddress,
+ abi: "ERC20Permit",
+ method: "deposit",
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ },
+ ],
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Queued the ETH_TRANSACT", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ },
+ ],
+ },
+ },
+ };
+ const action = {
+ type: "ETH_TRANSACT_QUEUED",
+ id: 0,
+ txHash: "0x1234567890",
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ txHash: "0x1234567890",
+ state: "QUEUED",
+ },
+ ],
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Reject the ETH_TRANSACT", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ },
+ ],
+ },
+ },
+ };
+ const action = {
+ type: "ETH_TRANSACT_REJECTED",
+ id: 0,
+ payload: "user rejects the transaction",
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ error: "user rejects the transaction",
+ state: "REJECTED",
+ },
+ ],
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Mined the ETH_TRANSACT", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ txHash: "0x1234567890",
+ state: "QUEUED",
+ },
+ ],
+ },
+ },
+ };
+ const action = {
+ type: "ETH_TRANSACT_MINED",
+ id: 0,
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ txHash: "0x1234567890",
+ state: "MINED",
+ },
+ ],
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Revert the ETH_TRANSACT", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ txHash: "0x1234567890",
+ state: "QUEUED",
+ },
+ ],
+ },
+ },
+ };
+ const action = {
+ type: "ETH_TRANSACT_REVERTED",
+ id: 0,
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ txHash: "0x1234567890",
+ state: "REVERTED",
+ },
+ ],
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Expire the ETH_TRANSACT", () => {
+ const initialState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ txHash: "0x1234567890",
+ state: "QUEUED",
+ },
+ ],
+ },
+ },
+ };
+ const action = {
+ type: "ETH_TRANSACT_EXPIRED",
+ id: 0,
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ transacts: [
+ {
+ address: currencyAddress,
+ args: ["0x4d68Cf31d613070b18E406AFd6A42719a62a0785", 100000000],
+ method: "deposit",
+ txHash: "0x1234567890",
+ state: "EXPIRED",
+ },
+ ],
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add one ETH_SIWE_SIGN", () => {
+ const initialState = { ...state, chainState: { 80001: { siweSigns: {} } } };
+ const action = {
+ type: "ETH_SIWE_SIGN",
+ message: "Please sign this message",
+ userAddress: "0x4d68Cf31d613070b18E406AFd6A42719a62a0785",
+ email: "test@test.com",
+ country: "Argentina",
+ occupation: "Dev",
+ whitelist: "0xEE18C16327F7c8C6aA740394f7f5F8d90FFB4BC0", // random address
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { siweSigns: { "0x4d68Cf31d613070b18E406AFd6A42719a62a0785": { state: "PENDING" } } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should PROCESS the ETH_SIWE_SIGN", () => {
+ const initialState = {
+ ...state,
+ chainState: { 80001: { siweSigns: { "0x4d68Cf31d613070b18E406AFd6A42719a62a0785": { state: "PENDING" } } } },
+ };
+ const action = {
+ type: "ETH_SIWE_SIGN_PROCESSED",
+ key: "0x4d68Cf31d613070b18E406AFd6A42719a62a0785",
+ signature: "0xabcd12345",
+ message: "Please sign this message",
+ email: "test@test.com",
+ country: "Argentina",
+ occupation: "Dev",
+ whitelist: "0xEE18C16327F7c8C6aA740394f7f5F8d90FFB4BC0", // random address
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ siweSigns: {
+ "0x4d68Cf31d613070b18E406AFd6A42719a62a0785": {
+ state: "SIGNED",
+ signature: "0xabcd12345",
+ message: "Please sign this message",
+ email: "test@test.com",
+ country: "Argentina",
+ occupation: "Dev",
+ whitelist: "0xEE18C16327F7c8C6aA740394f7f5F8d90FFB4BC0", // random address
+ },
+ },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("ETH_SIWE_SIGN should fail", () => {
+ const initialState = {
+ ...state,
+ chainState: { 80001: { siweSigns: { "0x4d68Cf31d613070b18E406AFd6A42719a62a0785": { state: "PENDING" } } } },
+ };
+ const action = {
+ type: "ETH_SIWE_SIGN_FAILED",
+ key: "0x4d68Cf31d613070b18E406AFd6A42719a62a0785",
+ payload: "Error in the signature",
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ siweSigns: {
+ "0x4d68Cf31d613070b18E406AFd6A42719a62a0785": {
+ state: "ERROR",
+ error: "Error in the signature",
+ },
+ },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add one ETH_EIP_712_SIGN", () => {
+ const initialState = { ...state, chainState: { 80001: { eipSigns: {} } } };
+ const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
+ const spenderAddr = "0x78f1626224f48A4E24FD7Cc7bF070A1740D5cafD"; // receive money address
+ const deadline = Math.floor(Date.now() / 1000) + 60 * 60; // 1 hour
+ const types = {
+ Permit: [
+ { name: "owner", type: "address" },
+ { name: "spender", type: "address" },
+ { name: "value", type: "uint256" },
+ { name: "nonce", type: "uint256" },
+ { name: "deadline", type: "uint256" },
+ ],
+ };
+ const value = {
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 100e6,
+ nonce: 10,
+ deadline: deadline,
+ };
+ const usdcDomain = { name: "USDC", version: "1", chainId: 80001, verifyingContract: currencyAddress };
+ const action = {
+ type: "ETH_EIP_712_SIGN",
+ domain: usdcDomain,
+ types: types,
+ value: value,
+ };
+
+ const key = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { eipSigns: { [key]: { state: "PENDING" } } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Proccess the ETH_EIP_712_SIGN", () => {
+ const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
+ const spenderAddr = "0x78f1626224f48A4E24FD7Cc7bF070A1740D5cafD"; // receive money address
+ const deadline = Math.floor(Date.now() / 1000) + 60 * 60; // 1 hour
+ const types = {
+ Permit: [
+ { name: "owner", type: "address" },
+ { name: "spender", type: "address" },
+ { name: "value", type: "uint256" },
+ { name: "nonce", type: "uint256" },
+ { name: "deadline", type: "uint256" },
+ ],
+ };
+ const value = {
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 100e6,
+ nonce: 10,
+ deadline: deadline,
+ };
+ const usdcDomain = { name: "USDC", version: "1", chainId: 80001, verifyingContract: currencyAddress };
+ const key = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ const initialState = { ...state, chainState: { 80001: { eipSigns: { [key]: { state: "PENDING" } } } } };
+ const action = {
+ type: "ETH_EIP_712_SIGN_PROCESSED",
+ key: key,
+ userAddress: ethers.getAddress(userAddr),
+ signature: "0xabcd12345",
+ domain: usdcDomain,
+ types: types,
+ value: value,
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ eipSigns: {
+ [key]: {
+ state: "SIGNED",
+ signature: "0xabcd12345",
+ types: types,
+ domain: usdcDomain,
+ userAddress: ethers.getAddress(userAddr),
+ value: value,
+ },
+ },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("The ETH_EIP_712_SIGN failed", () => {
+ const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
+ const spenderAddr = "0x78f1626224f48A4E24FD7Cc7bF070A1740D5cafD"; // receive money address
+ const deadline = Math.floor(Date.now() / 1000) + 60 * 60; // 1 hour
+ const types = {
+ Permit: [
+ { name: "owner", type: "address" },
+ { name: "spender", type: "address" },
+ { name: "value", type: "uint256" },
+ { name: "nonce", type: "uint256" },
+ { name: "deadline", type: "uint256" },
+ ],
+ };
+ const value = {
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 100e6,
+ nonce: 10,
+ deadline: deadline,
+ };
+ const usdcDomain = { name: "USDC", version: "1", chainId: 80001, verifyingContract: currencyAddress };
+ const key = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ const initialState = { ...state, chainState: { 80001: { eipSigns: { [key]: { state: "PENDING" } } } } };
+ const action = {
+ type: "ETH_EIP_712_SIGN_FAILED",
+ key: key,
+ userAddress: ethers.getAddress(userAddr),
+ payload: "error processing the sign",
+ };
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ eipSigns: {
+ [key]: {
+ state: "ERROR",
+ error: "error processing the sign",
+ userAddress: ethers.getAddress(userAddr),
+ },
+ },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Should add one ETH_PLAIN_SIGN", () => {
+ const initialState = { ...state, chainState: { 80001: { signs: {} } } };
+ const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
+ const action = { type: "ETH_PLAIN_SIGN", message: "Please sign this message", userAddress: userAddr };
+
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: { signs: { [userAddr]: { state: "PENDING" } } },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+
+ it("Proccess the ETH_PLAIN_SIGN", () => {
+ const initialState = { ...state, chainState: { 80001: { signs: {} } } };
+ const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
+ const action = {
+ type: "ETH_PLAIN_SIGN_PROCESSED",
+ key: userAddr,
+ signature: "0xabcd1234",
+ message: "Please sign this message",
+ };
+
+ const expectedState = {
+ ...state,
+ chainState: {
+ 80001: {
+ signs: {
+ [userAddr]: {
+ state: "SIGNED",
+ signature: "0xabcd1234",
+ message: "Please sign this message",
+ },
+ },
+ },
+ },
+ };
+ expect(EthereumReducer(initialState, action)).toEqual(expectedState);
+ });
+});
diff --git a/src/store/ethereum/saga.js b/src/store/ethereum/saga.js
index 2ebd6d0..0342d2b 100644
--- a/src/store/ethereum/saga.js
+++ b/src/store/ethereum/saga.js
@@ -36,21 +36,20 @@ import {
getTxReceiptStatusFn,
selectChainIdFn,
selectProviderFn,
- envChain,
selectUserAddressFn,
} from "../../package-index";
const { ethers } = require("ethers");
async function signMessageTyped(userState, domain, types, value) {
- const provider = new ethers.providers.Web3Provider(selectProviderFn(userState), "any");
+ const provider = new ethers.BrowserProvider(selectProviderFn(userState), "any");
const signer = await provider.getSigner();
- const signatureHash = await signer._signTypedData(domain, types, value);
+ const signatureHash = await signer.signTypedData(domain, types, value);
return signatureHash;
}
async function signMessage(userState, address, message) {
- const provider = new ethers.providers.Web3Provider(selectProviderFn(userState), "any");
+ const provider = new ethers.BrowserProvider(selectProviderFn(userState), "any");
const signer = await provider.getSigner();
const signatureHash = await signer.signMessage(message);
return signatureHash;
@@ -77,18 +76,21 @@ async function ethCall(address, abi, method, args) {
}
async function ethSignerCall(address, abi, method, args, userState) {
- let provider = new ethers.providers.Web3Provider(selectProviderFn(userState), "any");
- let contract = getSignerContractFn(address, abi, provider);
- const estimatedGas = await contract["estimateGas"][method](...args).then((gas) => {
+ let provider = new ethers.BrowserProvider(selectProviderFn(userState), "any");
+ let contract = await getSignerContractFn(address, abi, provider);
+ const estimatedGas = await contract[method].estimateGas(...args).then((gas) => {
return gas;
});
args = args || [];
- return await contract[method](...args, { gasLimit: estimatedGas.mul(gas.increase).div(100) });
+ const gasLimit = (estimatedGas * ethers.toBigInt(gas.increase)) / 100n;
+ return await contract[method](...args, { gasLimit: gasLimit });
}
export function* makeEthCall({ retry, address, abi, method, args, forceCall, maxAge }) {
- const key = address + "_" + getEncodedCallFn(address, abi, method, args);
+ const state = yield select((state) => state.EthereumReducer);
+ const rpc = state.currentChain.rpc;
+ const key = address + "_" + getEncodedCallFn(address, abi, method, args, rpc);
if (forceCall === undefined || forceCall === false) {
maxAge = maxAge === undefined ? ethereum.defaultMaxAge : maxAge;
const state = yield select((state) => state.EthereumReducer);
@@ -124,9 +126,10 @@ export function* makeEthCall({ retry, address, abi, method, args, forceCall, max
export function* makeEthTransact({ address, abi, method, args }) {
const state = yield select((state) => state.EthereumReducer);
const userState = yield select((state) => state.UserReducer);
- const id = state.transacts.length - 1;
+ const chainId = state.currentChain.id;
+ const id = state.chainState[chainId].transacts.length - 1;
try {
- if (selectChainIdFn(userState) === envChain.id) {
+ if (selectChainIdFn(userState) === chainId) {
const response = yield call(_.partial(ethSignerCall, address, abi, method, args, userState));
yield put({ type: ETH_TRANSACT_QUEUED, id: id, txHash: response.hash });
}
@@ -140,7 +143,7 @@ export function* makeEthTransact({ address, abi, method, args }) {
export function* listenTransact({ id, txHash, retry }) {
let response;
const userState = yield select((state) => state.UserReducer);
- let provider = new ethers.providers.Web3Provider(selectProviderFn(userState), "any");
+ let provider = new ethers.BrowserProvider(selectProviderFn(userState), "any");
try {
yield delay(ethereum.retry.timeout * 10);
if (!retry || retry < ethereum.retry.transactCount) {
@@ -163,7 +166,9 @@ export function* listenTransact({ id, txHash, retry }) {
export function* refreshAllSubscriptionsCalls() {
const state = yield select((state) => state.EthereumReducer);
- const subscriptions = state.subscriptions;
+ const chainId = state.currentChain.id;
+ const rpc = state.currentChain.rpc;
+ const subscriptions = state.chainState[chainId]?.subscriptions;
const now = new Date().getTime();
const timestamp = state.timestamp;
if (timestamp === 0 || timestamp < now) {
@@ -172,7 +177,7 @@ export function* refreshAllSubscriptionsCalls() {
for (const key in subscriptions) {
const subscriptionArray = subscriptions[key];
for (const sub of subscriptionArray) {
- let key = sub.address + "_" + getEncodedCallFn(sub.address, sub.abi, sub.method, sub.args);
+ let key = sub.address + "_" + getEncodedCallFn(sub.address, sub.abi, sub.method, sub.args, rpc);
if (!keyArray.has(key)) ethCalls.add(sub);
keyArray.add(key);
}
@@ -202,7 +207,7 @@ export function* makeEthEipSign({ domain, types, value }) {
const signatureHash = yield call(signMessageTyped, userState, domain, types, value);
yield put({
type: ETH_EIP_712_SIGN_PROCESSED,
- key: ethers.utils._TypedDataEncoder.encode(domain, types, value),
+ key: ethers.TypedDataEncoder.encode(domain, types, value),
userAddress: addr,
signature: signatureHash,
domain: domain,
@@ -212,7 +217,7 @@ export function* makeEthEipSign({ domain, types, value }) {
} catch (error) {
yield put({
type: ETH_EIP_712_SIGN_FAILED,
- key: ethers.utils._TypedDataEncoder.encode(domain, types, value),
+ key: ethers.TypedDataEncoder.encode(domain, types, value),
userAddress: addr,
payload: error.message,
});
@@ -221,7 +226,7 @@ export function* makeEthEipSign({ domain, types, value }) {
export function* makeEthSiweSign({ message, userAddress, email, country, occupation, whitelist }) {
const userState = yield select((state) => state.UserReducer);
- const addr = ethers.utils.getAddress(userAddress);
+ const addr = ethers.getAddress(userAddress);
try {
const signatureHash = yield call(signMessage, userState, addr, message);
yield put({
@@ -241,7 +246,7 @@ export function* makeEthSiweSign({ message, userAddress, email, country, occupat
export function* makeSign({ message, userAddress }) {
const userState = yield select((state) => state.UserReducer);
- const addr = ethers.utils.getAddress(userAddress);
+ const addr = ethers.getAddress(userAddress);
try {
const signatureHash = yield call(signMessage, userState, addr, message);
yield put({
diff --git a/src/store/ethereum/saga.test.js b/src/store/ethereum/saga.test.js
index 42a39b2..768ada1 100644
--- a/src/store/ethereum/saga.test.js
+++ b/src/store/ethereum/saga.test.js
@@ -14,11 +14,12 @@ import {
selectEthCallTimestampByKey,
selectSign,
selectEthSiweSign,
+ selectLastTransact,
} from "./selectors";
import { ethereum } from "../../config";
const sinon = require("sinon");
-const { ethers, BigNumber } = require("ethers");
+const { ethers } = require("ethers");
let contractMock;
let providerMock;
@@ -37,7 +38,7 @@ contractRegistry.registerFormatter("ERC20Permit", "balanceOf", _.partial(BNToDec
const usdcContract = contractRegistry.getContract(currencyAddress);
let fakeUsdcContract = {};
-beforeEach(() => {
+beforeEach(async () => {
store.dispatch({ type: "RESET_ALL" });
contractMock = sinon.spy(mock_helper.mockContractFn());
sinon.replaceGetter(ethers, "Contract", () => contractMock);
@@ -45,6 +46,13 @@ beforeEach(() => {
fakeUsdcContract = { interface: usdcContract.interface };
contractMock.byAddress(currencyAddress, fakeUsdcContract);
contractRegistry.registerContract(currencyAddress, "ERC20Permit");
+
+ await store.dispatch({
+ type: "SET_USER_CURRENT_CHAIN",
+ name: "NewChain",
+ id: 1234,
+ rpc: "https://foo-rpc.com/",
+ });
});
afterEach(() => {
@@ -55,11 +63,11 @@ afterEach(() => {
describe("All the test with provider resolver mock", () => {
beforeEach(() => {
providerMock = sinon.spy(mock_helper.mockProviderFn());
- sinon.replaceGetter(ethers.providers, "Web3Provider", () => providerMock);
+ sinon.replaceGetter(ethers, "BrowserProvider", () => providerMock);
});
test("ETH_ADD_SUBSCRIPTION and ETH_DISPATCH_CLOCK with one ethCall", async () => {
- const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(ethers.BigNumber.from(12.345e6)));
+ const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(12.345e6));
assert.strictEqual(ethers.Contract.callCount, 1);
await store.dispatch({
@@ -69,16 +77,19 @@ describe("All the test with provider resolver mock", () => {
});
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {},
- call_metadata: {},
- transacts: [],
timestamp: 0,
- subscriptions: {
- totalSupplyComponent: [{ address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ chainState: {
+ 1234: {
+ subscriptions: {
+ totalSupplyComponent: [{ address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ },
+ },
+ },
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
},
- signs: {},
- siweSigns: {},
- eipSigns: {},
});
assert.strictEqual(
@@ -91,7 +102,7 @@ describe("All the test with provider resolver mock", () => {
await new Promise((r) => setTimeout(r, 0));
- assert.deepEqual(store.getState().EthereumReducer.calls, {
+ assert.deepEqual(store.getState().EthereumReducer.chainState["1234"].calls, {
[call_key]: {
state: "LOADED",
value: Big(12.345),
@@ -104,7 +115,7 @@ describe("All the test with provider resolver mock", () => {
});
test("ETH_ADD_SUBSCRIPTION and ETH_DISPATCH_CLOCK with two ethCall", async () => {
- const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(ethers.BigNumber.from(12.345e6)));
+ const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(12.345e6));
const fakeName = (fakeUsdcContract.name = sinon.fake.resolves("Peso"));
assert.strictEqual(ethers.Contract.callCount, 1);
@@ -118,19 +129,22 @@ describe("All the test with provider resolver mock", () => {
});
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {},
- call_metadata: {},
- transacts: [],
timestamp: 0,
- subscriptions: {
- totalSupplyComponent: [
- { address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] },
- { address: currencyAddress, abi: "ERC20Permit", method: "name", args: [] },
- ],
+ chainState: {
+ 1234: {
+ subscriptions: {
+ totalSupplyComponent: [
+ { address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] },
+ { address: currencyAddress, abi: "ERC20Permit", method: "name", args: [] },
+ ],
+ },
+ },
+ },
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
},
- signs: {},
- siweSigns: {},
- eipSigns: {},
});
assert.strictEqual(
@@ -144,7 +158,7 @@ describe("All the test with provider resolver mock", () => {
await new Promise((r) => setTimeout(r, 0));
- assert.deepEqual(store.getState().EthereumReducer.calls, {
+ assert.deepEqual(store.getState().EthereumReducer.chainState["1234"].calls, {
[call_key]: {
state: "LOADED",
value: Big(12.345),
@@ -167,7 +181,7 @@ describe("All the test with provider resolver mock", () => {
});
test("Only ONE call with TWO subscritions to the SAME METHOD", async () => {
- const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(ethers.BigNumber.from(12.345e6)));
+ const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(12.345e6));
assert.strictEqual(ethers.Contract.callCount, 1);
await store.dispatch({
@@ -183,23 +197,26 @@ describe("All the test with provider resolver mock", () => {
});
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {},
- call_metadata: {},
- transacts: [],
timestamp: 0,
- subscriptions: {
- totalSupplyComponent: [{ address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] }],
- secondComponent: [{ address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ chainState: {
+ 1234: {
+ subscriptions: {
+ totalSupplyComponent: [{ address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ secondComponent: [{ address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] }],
+ },
+ },
+ },
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
},
- signs: {},
- siweSigns: {},
- eipSigns: {},
});
store.dispatch({ type: "ETH_DISPATCH_CLOCK" });
const call_key = currencyAddress + "_0x18160ddd"; // "18160ddd" == kekac256("totalSupply()")
await new Promise((r) => setTimeout(r, 0));
- assert.deepEqual(store.getState().EthereumReducer.calls, {
+ assert.deepEqual(store.getState().EthereumReducer.chainState["1234"].calls, {
[call_key]: {
state: "LOADED",
value: Big(12.345),
@@ -211,14 +228,15 @@ describe("All the test with provider resolver mock", () => {
);
await store.dispatch({ type: "ETH_REMOVE_SUBSCRIPTION", key: "secondComponent" });
- assert.deepStrictEqual(store.getState().EthereumReducer.subscriptions, {
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].subscriptions, {
totalSupplyComponent: [{ address: currencyAddress, abi: "ERC20Permit", method: "totalSupply", args: [] }],
});
});
test("ETH_CALL with simple method", async () => {
- const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(ethers.BigNumber.from(12.345e6)));
+ const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(12.345e6));
assert.strictEqual(ethers.Contract.callCount, 1);
+
await store.dispatch({
type: "ETH_CALL",
address: currencyAddress,
@@ -232,29 +250,32 @@ describe("All the test with provider resolver mock", () => {
assert.strictEqual(ethers.Contract.callCount, 1);
const call_key = currencyAddress + "_0x18160ddd"; // "18160ddd" == kekac256("totalSupply()")
assert.deepStrictEqual(store.getState().EthereumReducer, {
- call_metadata: {},
- calls: {
- [call_key]: {
- state: "LOADING",
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ state: "LOADING",
+ },
+ },
},
},
- transacts: [],
- timestamp: 0,
- subscriptions: {},
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
});
const now = new Date().getTime();
await new Promise((r) => setTimeout(r, 0));
const ethStore = store.getState().EthereumReducer;
- assert.deepEqual(ethStore.calls, {
+ assert.deepEqual(ethStore.chainState["1234"].calls, {
[call_key]: {
state: "LOADED",
value: Big(12.345),
},
});
- assert(now - ethStore.call_metadata[call_key].timestamp < 100);
+ assert(now - ethStore.chainState["1234"].call_metadata[call_key].timestamp < 100);
sinon.assert.calledOnce(fakeTotalSupply);
assert.ok(
selectEthCall(store.getState().EthereumReducer, currencyAddress, "ERC20Permit", "totalSupply").eq(Big(12.345))
@@ -264,6 +285,7 @@ describe("All the test with provider resolver mock", () => {
test("ETH_CALL with simple without formatter", async () => {
const fakeName = (fakeUsdcContract.name = sinon.fake.resolves("Peso"));
assert.strictEqual(ethers.Contract.callCount, 1);
+
await store.dispatch({
type: "ETH_CALL",
address: currencyAddress,
@@ -273,21 +295,24 @@ describe("All the test with provider resolver mock", () => {
assert.strictEqual(ethers.Contract.callCount, 1);
const call_key = currencyAddress + "_0x06fdde03"; // "06fdde03" == kekac256("name()")
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {
- [call_key]: {
- state: "LOADING",
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ state: "LOADING",
+ },
+ },
},
},
- call_metadata: {},
- transacts: [],
- timestamp: 0,
- subscriptions: {},
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
});
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.calls, {
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].calls, {
[call_key]: {
state: "LOADED",
value: "Peso",
@@ -297,7 +322,7 @@ describe("All the test with provider resolver mock", () => {
});
test("ETH_CALL method with parameter", async () => {
- const fakeBalanceOf = (fakeUsdcContract.balanceOf = sinon.fake.resolves(ethers.BigNumber.from(78.345678e6)));
+ const fakeBalanceOf = (fakeUsdcContract.balanceOf = sinon.fake.resolves(78.345678e6));
assert.strictEqual(ethers.Contract.callCount, 1);
const addr = "0x4d68cf31d613070b18e406afd6a42719a62a0785";
await store.dispatch({
@@ -311,21 +336,24 @@ describe("All the test with provider resolver mock", () => {
assert.strictEqual(ethers.Contract.callCount, 1);
const call_key = currencyAddress + "_0x70a08231000000000000000000000000" + addr.substring(2);
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {
- [call_key]: {
- state: "LOADING",
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ state: "LOADING",
+ },
+ },
},
},
- call_metadata: {},
- transacts: [],
- timestamp: 0,
- subscriptions: {},
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
});
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.calls, {
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].calls, {
[call_key]: {
state: "LOADED",
value: Big(78.345678),
@@ -352,34 +380,40 @@ describe("All the test with provider resolver mock", () => {
assert.strictEqual(ethers.Contract.callCount, 1);
const call_key = currencyAddress + "_0x18160ddd"; // "18160ddd" == kekac256("totalSupply()")
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {
- [call_key]: {
- state: "LOADING",
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ state: "LOADING",
+ },
+ },
},
},
- call_metadata: {},
- transacts: [],
- timestamp: 0,
- subscriptions: {},
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
});
await new Promise((r) => setTimeout(r, 100));
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {
- [call_key]: {
- retries: 4,
- state: "ERROR",
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ retries: 4,
+ state: "ERROR",
+ },
+ },
},
},
- call_metadata: {},
- transacts: [],
- timestamp: 0,
- subscriptions: {},
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
});
});
@@ -387,7 +421,6 @@ describe("All the test with provider resolver mock", () => {
sinon.replace(ethereum, "retry", { timeout: 10, count: 5 });
const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.rejects("Error"));
assert.strictEqual(ethers.Contract.callCount, 1);
-
await store.dispatch({
type: "ETH_CALL",
address: currencyAddress,
@@ -397,39 +430,45 @@ describe("All the test with provider resolver mock", () => {
assert.strictEqual(ethers.Contract.callCount, 1);
const call_key = currencyAddress + "_0x18160ddd"; // "18160ddd" == kekac256("totalSupply()")
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {
- [call_key]: {
- state: "LOADING",
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ state: "LOADING",
+ },
+ },
},
},
- call_metadata: {},
- transacts: [],
- timestamp: 0,
- subscriptions: {},
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
});
await new Promise((r) => setTimeout(r, 15));
- fakeUsdcContract.totalSupply = sinon.fake.resolves(ethers.BigNumber.from(123.2e6));
+ fakeUsdcContract.totalSupply = sinon.fake.resolves(123.2e6);
assert.deepStrictEqual(store.getState().EthereumReducer, {
- calls: {
- [call_key]: {
- state: "LOADING",
- retries: 1,
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ retries: 1,
+ state: "LOADING",
+ },
+ },
},
},
- call_metadata: {},
- transacts: [],
- timestamp: 0,
- subscriptions: {},
- signs: {},
- siweSigns: {},
- eipSigns: {},
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
});
sinon.assert.calledTwice(fakeTotalSupply);
await new Promise((r) => setTimeout(r, 21));
- assert.deepStrictEqual(store.getState().EthereumReducer.calls, {
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].calls, {
[call_key]: {
state: "LOADED",
value: Big(123.2),
@@ -441,10 +480,7 @@ describe("All the test with provider resolver mock", () => {
const txHash = "0x000001";
const txStatus = 1; // 1 == "success"
const fakeApprove = (fakeUsdcContract.approve = sinon.fake.resolves({ hash: txHash })); //TxHash
- const fakeEstimateGas = (fakeUsdcContract["estimateGas"] = {
- approve: sinon.fake.resolves(BigNumber.from(100000)),
- });
-
+ const fakeEstimateGas = (fakeUsdcContract.approve["estimateGas"] = sinon.fake.resolves(100000n));
/* Mocking tx receipt function and initialize saga */
initializeEthereumStore({
getEncodedCall: contractRegistry.getEncodedCall,
@@ -453,14 +489,9 @@ describe("All the test with provider resolver mock", () => {
getFormatter: contractRegistry.getFormatter,
getSignerContract: contractRegistry.getSignerContract,
getTxReceiptStatus: sinon.fake.resolves(txStatus),
- selectChainId: () => 80001, // just for testing
+ selectChainId: () => 1234, // just for testing
selectProvider: () => {},
selectUserAddress: () => "0x4d68Cf31d613070b18E406AFd6A42719a62a0785", // just for testing
- // just for testing
- chain: {
- id: 80001,
- rpc: "https://matic-mumbai.chainstacklabs.com/",
- },
});
assert.strictEqual(ethers.Contract.callCount, 1);
@@ -470,31 +501,32 @@ describe("All the test with provider resolver mock", () => {
address: currencyAddress,
abi: "ERC20Permit",
method: "approve",
- args: ["0x01", ethers.BigNumber.from(10)],
+ args: ["0x01", 10],
});
- const id = store.getState().EthereumReducer.transacts.length - 1;
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].method, "approve");
+ const id = store.getState().EthereumReducer.chainState["1234"].transacts.length - 1;
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].transacts[id].method, "approve");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].state, "QUEUED");
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].txHash, txHash);
+ let lastTx = selectLastTransact(store.getState().EthereumReducer);
+ assert.deepStrictEqual(lastTx.state, "QUEUED");
+ assert.deepStrictEqual(lastTx.txHash, txHash);
await new Promise((r) => setTimeout(r, 1000));
sinon.assert.callCount(fakeApprove, 1);
- sinon.assert.callCount(fakeEstimateGas["approve"], 1);
+ sinon.assert.callCount(fakeEstimateGas, 1);
+
+ lastTx = selectLastTransact(store.getState().EthereumReducer);
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].state, "MINED");
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].txHash, txHash);
+ assert.deepStrictEqual(lastTx.state, "MINED");
+ assert.deepStrictEqual(lastTx.txHash, txHash);
});
test("ETH_TRANSACT reverted", async () => {
const txHash = "0x000001";
const txStatus = 0; // 0 == reverted
const fakeApprove = (fakeUsdcContract.approve = sinon.fake.resolves({ hash: txHash })); //TxHash
- const fakeEstimateGas = (fakeUsdcContract["estimateGas"] = {
- approve: sinon.fake.resolves(BigNumber.from(100000)),
- });
+ const fakeEstimateGas = (fakeUsdcContract.approve["estimateGas"] = sinon.fake.resolves(100000n));
/* Mocking tx receipt function and initialize saga */
initializeEthereumStore({
@@ -504,14 +536,9 @@ describe("All the test with provider resolver mock", () => {
getFormatter: contractRegistry.getFormatter,
getSignerContract: contractRegistry.getSignerContract,
getTxReceiptStatus: sinon.fake.resolves(txStatus),
- selectChainId: () => 80001, // just for testing
+ selectChainId: () => 1234, // just for testing
selectProvider: () => {},
selectUserAddress: () => "0x4d68Cf31d613070b18E406AFd6A42719a62a0785", // just for testing
- // just for testing
- chain: {
- id: 80001,
- rpc: "https://matic-mumbai.chainstacklabs.com/",
- },
});
assert.strictEqual(ethers.Contract.callCount, 1);
@@ -521,30 +548,30 @@ describe("All the test with provider resolver mock", () => {
address: currencyAddress,
abi: "ERC20Permit",
method: "approve",
- args: ["0x01", ethers.BigNumber.from(10)],
+ args: ["0x01", 10],
});
- const id = store.getState().EthereumReducer.transacts.length - 1;
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].method, "approve");
+ let lastTx = selectLastTransact(store.getState().EthereumReducer);
+ assert.deepStrictEqual(lastTx.method, "approve");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].state, "QUEUED");
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].txHash, txHash);
+ lastTx = selectLastTransact(store.getState().EthereumReducer);
+ assert.deepStrictEqual(lastTx.state, "QUEUED");
+ assert.deepStrictEqual(lastTx.txHash, txHash);
await new Promise((r) => setTimeout(r, 1001));
+ lastTx = selectLastTransact(store.getState().EthereumReducer);
sinon.assert.callCount(fakeApprove, 1);
- sinon.assert.callCount(fakeEstimateGas["approve"], 1);
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].state, "REVERTED");
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].txHash, txHash);
+ sinon.assert.callCount(fakeEstimateGas, 1);
+ assert.deepStrictEqual(lastTx.state, "REVERTED");
+ assert.deepStrictEqual(lastTx.txHash, txHash);
});
test("ETH_TRANSACT rejected", async () => {
const txHash = "0x000001";
const txStatus = 0; // 0 == reverted
const fakeApprove = (fakeUsdcContract.approve = sinon.fake.resolves({ hash: txHash })); //TxHash
- const fakeEstimateGas = (fakeUsdcContract["estimateGas"] = {
- approve: sinon.fake.resolves(BigNumber.from(100000)),
- });
+ const fakeEstimateGas = (fakeUsdcContract.approve["estimateGas"] = sinon.fake.resolves(100000n));
/* Mocking tx receipt function and initialize saga */
initializeEthereumStore({
@@ -554,14 +581,9 @@ describe("All the test with provider resolver mock", () => {
getFormatter: contractRegistry.getFormatter,
getSignerContract: contractRegistry.getSignerContract,
getTxReceiptStatus: sinon.fake.rejects(txStatus),
- selectChainId: () => 80001, // just for testing
+ selectChainId: () => 1234, // just for testing
selectProvider: () => {},
selectUserAddress: () => "0x4d68Cf31d613070b18E406AFd6A42719a62a0785", // just for testing
- // just for testing
- chain: {
- id: 80001,
- rpc: "https://matic-mumbai.chainstacklabs.com/",
- },
});
assert.strictEqual(ethers.Contract.callCount, 1);
@@ -571,25 +593,27 @@ describe("All the test with provider resolver mock", () => {
address: currencyAddress,
abi: "ERC20Permit",
method: "approve",
- args: ["0x01", ethers.BigNumber.from(10)],
+ args: ["0x01", 10],
});
- const id = store.getState().EthereumReducer.transacts.length - 1;
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].method, "approve");
+ let lastTx = selectLastTransact(store.getState().EthereumReducer);
+ assert.deepStrictEqual(lastTx.method, "approve");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].state, "QUEUED");
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].txHash, txHash);
+ lastTx = selectLastTransact(store.getState().EthereumReducer);
+ assert.deepStrictEqual(lastTx.state, "QUEUED");
+ assert.deepStrictEqual(lastTx.txHash, txHash);
await new Promise((r) => setTimeout(r, 1001));
+ lastTx = selectLastTransact(store.getState().EthereumReducer);
sinon.assert.callCount(fakeApprove, 1);
- sinon.assert.callCount(fakeEstimateGas["approve"], 1);
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].state, "REJECTED");
- assert.deepStrictEqual(store.getState().EthereumReducer.transacts[id].txHash, txHash);
+ sinon.assert.callCount(fakeEstimateGas, 1);
+ assert.deepStrictEqual(lastTx.state, "REJECTED");
+ assert.deepStrictEqual(lastTx.txHash, txHash);
});
test("ETH_CALL method with timestamp", async () => {
- fakeUsdcContract.totalSupply = sinon.fake.resolves(ethers.BigNumber.from(12.345e6));
+ fakeUsdcContract.totalSupply = sinon.fake.resolves(12.345e6);
assert.strictEqual(ethers.Contract.callCount, 1);
await store.dispatch({
type: "ETH_CALL",
@@ -636,7 +660,7 @@ describe("All the test with provider resolver mock", () => {
userAddress: userAddr,
});
- assert.deepStrictEqual(store.getState().EthereumReducer.signs[userAddr].state, "PENDING");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].signs[userAddr].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
@@ -649,6 +673,7 @@ describe("All the test with provider resolver mock", () => {
test("ETH_SIWE_SIGN resolves", async () => {
const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
const whitelistAddr = "0x99b2949F4b12bF14F9AD66De374Cd5A2BF6a0C15";
+
await store.dispatch({
type: "ETH_SIWE_SIGN",
userAddress: userAddr,
@@ -659,7 +684,7 @@ describe("All the test with provider resolver mock", () => {
whitelist: whitelistAddr,
});
- assert.deepStrictEqual(store.getState().EthereumReducer.siweSigns[userAddr].state, "PENDING");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].siweSigns[userAddr].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
@@ -674,11 +699,10 @@ describe("All the test with provider resolver mock", () => {
const spenderAddr = "0x78f1626224f48A4E24FD7Cc7bF070A1740D5cafD"; // receive money address
const deadline = Math.floor(Date.now() / 1000) + 60 * 60; // 1 hour
fakeUsdcContract.nonces = sinon.fake.resolves(2);
-
const usdcDomain = {
name: "USDC",
version: "1",
- chainId: 8001,
+ chainId: 80001,
verifyingContract: currencyAddress,
};
@@ -693,9 +717,9 @@ describe("All the test with provider resolver mock", () => {
};
const value = {
- owner: ethers.utils.getAddress(userAddr),
- spender: ethers.utils.getAddress(spenderAddr),
- value: ethers.BigNumber.from(100e6),
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 100e6,
nonce: await fakeUsdcContract.nonces(userAddr),
deadline: deadline,
};
@@ -707,26 +731,25 @@ describe("All the test with provider resolver mock", () => {
value: value,
});
- const key = ethers.utils._TypedDataEncoder.encode(usdcDomain, types, value);
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "PENDING");
+ const key = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "SIGNED");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].signature, "0x0987654321");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].value, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "SIGNED");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].signature, "0x0987654321");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].value, value);
});
test("Signed two eip712 message ETH_EIP_712_SIGN and get the bigger sign", async () => {
const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
const spenderAddr = "0x78f1626224f48A4E24FD7Cc7bF070A1740D5cafD"; // receive money address
const deadline = Math.floor(Date.now() / 1000) + 60 * 60; // 1 hour
- fakeUsdcContract.nonces = sinon.fake.resolves(BigNumber.from(2));
-
+ fakeUsdcContract.nonces = sinon.fake.resolves(2);
const usdcDomain = {
name: "USDC",
version: "1",
- chainId: 8001,
+ chainId: 80001,
verifyingContract: currencyAddress,
};
@@ -741,9 +764,9 @@ describe("All the test with provider resolver mock", () => {
};
let value = {
- owner: ethers.utils.getAddress(userAddr),
- spender: ethers.utils.getAddress(spenderAddr),
- value: ethers.BigNumber.from(100e6),
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 100e6,
nonce: await fakeUsdcContract.nonces(userAddr),
deadline: deadline,
};
@@ -755,19 +778,19 @@ describe("All the test with provider resolver mock", () => {
value: value,
});
- const key = ethers.utils._TypedDataEncoder.encode(usdcDomain, types, value);
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "PENDING");
+ const key = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "SIGNED");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].signature, "0x0987654321");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].value, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "SIGNED");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].signature, "0x0987654321");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].value, value);
value = {
- owner: ethers.utils.getAddress(userAddr),
- spender: ethers.utils.getAddress(spenderAddr),
- value: ethers.BigNumber.from(200e6),
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 200e6,
nonce: await fakeUsdcContract.nonces(userAddr),
deadline: deadline,
};
@@ -779,14 +802,17 @@ describe("All the test with provider resolver mock", () => {
value: value,
});
- const key2 = ethers.utils._TypedDataEncoder.encode(usdcDomain, types, value);
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].state, "PENDING");
+ const key2 = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].state, "SIGNED");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].signature, "0x0987654321");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].value, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].state, "SIGNED");
+ assert.deepStrictEqual(
+ store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].signature,
+ "0x0987654321"
+ );
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].value, value);
let biggerSign = selectBiggerSign(
store.getState().EthereumReducer,
@@ -803,12 +829,11 @@ describe("All the test with provider resolver mock", () => {
const spenderAddr = "0x78f1626224f48A4E24FD7Cc7bF070A1740D5cafD"; // receive money address
const secondSpender = "0x329731D4FB96Ec52039e222bC4cC67a86b582A86";
const deadline = Math.floor(Date.now() / 1000) + 60 * 60; // 1 hour
- fakeUsdcContract.nonces = sinon.fake.resolves(BigNumber.from(2));
-
+ fakeUsdcContract.nonces = sinon.fake.resolves(2);
const usdcDomain = {
name: "USDC",
version: "1",
- chainId: 8001,
+ chainId: 80001,
verifyingContract: currencyAddress,
};
@@ -823,9 +848,9 @@ describe("All the test with provider resolver mock", () => {
};
let value = {
- owner: ethers.utils.getAddress(userAddr),
- spender: ethers.utils.getAddress(spenderAddr),
- value: ethers.BigNumber.from(100e6),
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 100e6,
nonce: await fakeUsdcContract.nonces(userAddr),
deadline: deadline,
};
@@ -837,24 +862,24 @@ describe("All the test with provider resolver mock", () => {
value: value,
});
- const key = ethers.utils._TypedDataEncoder.encode(usdcDomain, types, value);
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "PENDING");
+ const key = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "SIGNED");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].signature, "0x0987654321");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].value, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "SIGNED");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].signature, "0x0987654321");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].value, value);
assert.deepStrictEqual(
- store.getState().EthereumReducer.eipSigns[key].value.spender,
- ethers.utils.getAddress(spenderAddr)
+ store.getState().EthereumReducer.chainState["1234"].eipSigns[key].value.spender,
+ ethers.getAddress(spenderAddr)
);
// second spender
value = {
- owner: ethers.utils.getAddress(userAddr),
- spender: ethers.utils.getAddress(secondSpender),
- value: ethers.BigNumber.from(200e6),
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(secondSpender),
+ value: 200e6,
nonce: await fakeUsdcContract.nonces(userAddr),
deadline: deadline,
};
@@ -866,17 +891,20 @@ describe("All the test with provider resolver mock", () => {
value: value,
});
- const key2 = ethers.utils._TypedDataEncoder.encode(usdcDomain, types, value);
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].state, "PENDING");
+ const key2 = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].state, "SIGNED");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].signature, "0x0987654321");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key2].value, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].state, "SIGNED");
+ assert.deepStrictEqual(
+ store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].signature,
+ "0x0987654321"
+ );
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].value, value);
assert.deepStrictEqual(
- store.getState().EthereumReducer.eipSigns[key2].value.spender,
- ethers.utils.getAddress(secondSpender)
+ store.getState().EthereumReducer.chainState["1234"].eipSigns[key2].value.spender,
+ ethers.getAddress(secondSpender)
);
let biggerSign = selectBiggerSign(
@@ -899,25 +927,118 @@ describe("All the test with provider resolver mock", () => {
);
assert.deepStrictEqual(biggerSign, undefined);
});
+
+ test("ETH_CALL, change Chain and ETH_CALL again", async () => {
+ const fakeTotalSupply = (fakeUsdcContract.totalSupply = sinon.fake.resolves(12.345e6));
+ const fakeName = (fakeUsdcContract.name = sinon.fake.resolves("FakeUSDC"));
+ assert.strictEqual(ethers.Contract.callCount, 1);
+
+ await store.dispatch({
+ type: "ETH_CALL",
+ address: currencyAddress,
+ abi: "ERC20Permit",
+ method: "totalSupply",
+ });
+ assert.strictEqual(
+ selectEthCall(store.getState().EthereumReducer, currencyAddress, "ERC20Permit", "totalSupply"),
+ undefined
+ );
+ assert.strictEqual(ethers.Contract.callCount, 1);
+ const call_key = currencyAddress + "_0x18160ddd"; // "18160ddd" == kekac256("totalSupply()")
+ assert.deepStrictEqual(store.getState().EthereumReducer, {
+ timestamp: 0,
+ chainState: {
+ 1234: {
+ calls: {
+ [call_key]: {
+ state: "LOADING",
+ },
+ },
+ },
+ },
+ currentChain: {
+ id: 1234,
+ name: "NewChain",
+ rpc: "https://foo-rpc.com/",
+ },
+ });
+ const now = new Date().getTime();
+ await new Promise((r) => setTimeout(r, 0));
+ let ethStore = store.getState().EthereumReducer;
+ assert.deepEqual(ethStore.chainState["1234"].calls, {
+ [call_key]: {
+ state: "LOADED",
+ value: Big(12.345),
+ },
+ });
+ assert(now - ethStore.chainState["1234"].call_metadata[call_key].timestamp < 100);
+ sinon.assert.calledOnce(fakeTotalSupply);
+ assert.ok(
+ selectEthCall(store.getState().EthereumReducer, currencyAddress, "ERC20Permit", "totalSupply").eq(Big(12.345))
+ );
+
+ store.dispatch({
+ type: "SET_USER_CURRENT_CHAIN",
+ name: "SecondChain",
+ id: 5678,
+ rpc: "https://foo-rpc.com/",
+ });
+
+ ethStore = store.getState().EthereumReducer;
+ assert.deepEqual(ethStore.currentChain, {
+ id: 5678,
+ name: "SecondChain",
+ rpc: "https://foo-rpc.com/",
+ });
+
+ await store.dispatch({
+ type: "ETH_CALL",
+ address: currencyAddress,
+ abi: "ERC20Permit",
+ method: "name",
+ });
+ assert.strictEqual(
+ selectEthCall(store.getState().EthereumReducer, currencyAddress, "ERC20Permit", "name"),
+ undefined
+ );
+ const call_key_2 = currencyAddress + "_0x06fdde03"; // "06fdde03" == kekac256("name()")
+ await new Promise((r) => setTimeout(r, 0));
+
+ ethStore = store.getState().EthereumReducer;
+ assert.deepEqual(ethStore.chainState["1234"].calls, {
+ [call_key]: {
+ state: "LOADED",
+ value: Big(12.345),
+ },
+ });
+ assert.deepEqual(ethStore.chainState["5678"].calls, {
+ [call_key_2]: {
+ state: "LOADED",
+ value: "FakeUSDC",
+ },
+ });
+
+ sinon.assert.calledOnce(fakeTotalSupply);
+ sinon.assert.calledOnce(fakeName);
+ });
});
describe("All the tests with provider REJECTED Mock", () => {
beforeEach(() => {
let rejectedMock = sinon.spy(mock_helper.mockProviderRejectsFn());
- sinon.replaceGetter(ethers.providers, "Web3Provider", () => rejectedMock);
+ sinon.replaceGetter(ethers, "BrowserProvider", () => rejectedMock);
});
test("Rejects eip712 message ETH_EIP_712_SIGN", async () => {
const userAddr = "0x4d68Cf31d613070b18E406AFd6A42719a62a0785";
const spenderAddr = "0x78f1626224f48A4E24FD7Cc7bF070A1740D5cafD"; // receive money address
const deadline = Math.floor(Date.now() / 1000) + 60 * 60; // 1 hour
-
fakeUsdcContract.nonces = sinon.fake.resolves(2);
const usdcDomain = {
name: "USDC",
version: "1",
- chainId: 8001,
+ chainId: 80001,
verifyingContract: currencyAddress,
};
@@ -932,9 +1053,9 @@ describe("All the tests with provider REJECTED Mock", () => {
};
const value = {
- owner: ethers.utils.getAddress(userAddr),
- spender: ethers.utils.getAddress(spenderAddr),
- value: ethers.BigNumber.from(100e6),
+ owner: ethers.getAddress(userAddr),
+ spender: ethers.getAddress(spenderAddr),
+ value: 100e6,
nonce: await fakeUsdcContract.nonces(userAddr),
deadline: deadline,
};
@@ -946,13 +1067,16 @@ describe("All the tests with provider REJECTED Mock", () => {
value: value,
});
- const key = ethers.utils._TypedDataEncoder.encode(usdcDomain, types, value);
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "PENDING");
+ const key = ethers.TypedDataEncoder.encode(usdcDomain, types, value);
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].state, "ERROR");
- assert.deepStrictEqual(store.getState().EthereumReducer.eipSigns[key].error, "Error signing typed message");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].eipSigns[key].state, "ERROR");
+ assert.deepStrictEqual(
+ store.getState().EthereumReducer.chainState["1234"].eipSigns[key].error,
+ "Error signing typed message"
+ );
});
test("Rejects ETH_PLAIN_SIGN with message", async () => {
@@ -963,7 +1087,7 @@ describe("All the tests with provider REJECTED Mock", () => {
userAddress: userAddr,
});
- assert.deepStrictEqual(store.getState().EthereumReducer.signs[userAddr].state, "PENDING");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].signs[userAddr].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
@@ -985,7 +1109,7 @@ describe("All the tests with provider REJECTED Mock", () => {
whitelist: whitelistAddr,
});
- assert.deepStrictEqual(store.getState().EthereumReducer.siweSigns[userAddr].state, "PENDING");
+ assert.deepStrictEqual(store.getState().EthereumReducer.chainState["1234"].siweSigns[userAddr].state, "PENDING");
await new Promise((r) => setTimeout(r, 0));
diff --git a/src/store/ethereum/selectors.js b/src/store/ethereum/selectors.js
index c00eaa5..9f4b652 100644
--- a/src/store/ethereum/selectors.js
+++ b/src/store/ethereum/selectors.js
@@ -4,70 +4,114 @@ import { getEncodedCallFn } from "../../package-index";
const { ethers } = require("ethers");
-const getCalls = (state) => state.calls;
-const getCallMetadata = (state) => state.call_metadata;
-const getTransacts = (state) => state.transacts;
-const getSigns = (state) => state.signs;
-const getSiweSigns = (state) => state.siweSigns;
-const getEIPSigns = (state) => state.eipSigns;
+const getCurrentChain = (state) => state.currentChain;
+const getChainState = (state) => state.chainState;
+
+const getChainStateCalls = (state) => {
+ const chainId = getCurrentChain(state).id;
+ const chainState = getChainState(state);
+ return chainState[chainId] ? chainState[chainId].calls : {};
+};
+
+const getChainStateCallMetadata = (state) => {
+ const chainId = getCurrentChain(state).id;
+ const chainState = getChainState(state);
+ return chainState[chainId] ? chainState[chainId].call_metadata : {};
+};
+
+const getChainStateEIPSigns = (state) => {
+ const chainId = getCurrentChain(state).id;
+ const chainState = getChainState(state);
+ return chainState[chainId] && chainState[chainId].eipSigns ? chainState[chainId].eipSigns : {};
+};
+
+const getChainStatePlainSigns = (state) => {
+ const chainId = getCurrentChain(state).id;
+ const chainState = getChainState(state);
+ return chainState[chainId] && chainState[chainId].signs ? chainState[chainId].signs : {};
+};
+
+const getChainStateSiweSigns = (state) => {
+ const chainId = getCurrentChain(state).id;
+ const chainState = getChainState(state);
+ return chainState[chainId] && chainState[chainId].siweSigns ? chainState[chainId].siweSigns : {};
+};
+
+const getChainStateTransacts = (state) => {
+ const chainId = getCurrentChain(state).id;
+ const chainState = getChainState(state);
+ return chainState[chainId] && chainState[chainId].transacts ? chainState[chainId].transacts : [];
+};
const getSignKey = (__, address) => {
return address;
};
-const getCallKey = (__, address, abiName, method, ...args) =>
- address + "_" + getEncodedCallFn(address, abiName, method, args);
+const getCallKey = (state, address, abiName, method, ...args) => {
+ const rpc = state.currentChain.rpc;
+ return address + "_" + getEncodedCallFn(address, abiName, method, args, rpc);
+};
-const getCallKeys = (__, calls) =>
- _.map(calls, (call) => {
- return call.address + "_" + getEncodedCallFn(call.address, call.abi, call.method, call.args);
+const getCallKeys = (state, calls) => {
+ const rpc = state.currentChain.rpc;
+ return _.map(calls, (call) => {
+ return call.address + "_" + getEncodedCallFn(call.address, call.abi, call.method, call.args, rpc);
});
+};
+
+export const selectCurrentChain = createSelector([getCurrentChain], (currentChain) => currentChain);
export const selectEthCall = createSelector(
- [getCalls, getCallKey],
- (calls, callKey) => calls[callKey] && calls[callKey].value
+ [getChainStateCalls, getCallKey],
+ (calls, callKey) => calls && calls[callKey] && calls[callKey].value
);
export const selectEthCallTimestamp = createSelector(
- [getCallMetadata, getCallKey],
- (callMeta, callKey) => callMeta[callKey] && callMeta[callKey].timestamp
+ [getChainStateCallMetadata, getCallKey],
+ (callMeta, callKey) => callMeta && callMeta[callKey] && callMeta[callKey].timestamp
);
export const selectEthCallTimestampByKey = createSelector(
- [getCallMetadata, (__, callKey) => callKey],
- (callMeta, callKey) => callMeta[callKey] && callMeta[callKey].timestamp
+ [getChainStateCallMetadata, (__, callKey) => callKey],
+ (callMeta, callKey) => callMeta && callMeta[callKey] && callMeta[callKey].timestamp
);
export const selectEthCallState = createSelector(
- [getCalls, getCallKey],
+ [getChainStateCalls, getCallKey],
(calls, callKey) => calls[callKey] && calls[callKey].state
);
-export const selectEthCallMultiple = createSelector([getCalls, getCallKeys], (calls, callKeys) =>
- _.map(callKeys, (callKey) => {
- return calls[callKey] === undefined ? {} : { value: calls[callKey].value, state: calls[callKey].state };
- })
-);
+export const selectEthCallMultiple = createSelector([getChainStateCalls, getCallKeys], (calls, callKeys) => {
+ return _.map(callKeys, (callKey) => {
+ return !calls || calls[callKey] === undefined ? {} : { value: calls[callKey].value, state: calls[callKey].state };
+ });
+});
-export const selectLastTransact = createSelector([getTransacts], (transacts) => transacts[transacts.length - 1]);
+export const selectLastTransact = createSelector(
+ [getChainStateTransacts],
+ (transacts) => transacts[transacts.length - 1]
+);
-export const selectSign = createSelector([getSigns, getSignKey], (signs, signKey) => signs[signKey]);
+export const selectSign = createSelector([getChainStatePlainSigns, getSignKey], (signs, signKey) => signs[signKey]);
-export const selectEthSiweSign = createSelector([getSiweSigns, getSignKey], (signs, ethSignKey) => signs[ethSignKey]);
+export const selectEthSiweSign = createSelector(
+ [getChainStateSiweSigns, getSignKey],
+ (signs, ethSignKey) => signs[ethSignKey]
+);
export const selectBiggerSign = createSelector(
- [getEIPSigns, (__, addr, nonce, spender) => ({ addr, nonce, spender })],
+ [getChainStateEIPSigns, (__, addr, nonce, spender) => ({ addr, nonce, spender })],
(signs, params) => {
- const userAddr = ethers.utils.getAddress(params.addr);
+ const userAddr = ethers.getAddress(params.addr);
const nonce = params.nonce;
- const spenderAddr = params.spender ? ethers.utils.getAddress(params.spender) : "";
+ const spenderAddr = params.spender ? ethers.getAddress(params.spender) : "";
const filteredSigns = Object.keys(signs).filter((sign) => {
return (
signs[sign].state === "SIGNED" &&
- userAddr === ethers.utils.getAddress(signs[sign].userAddress) &&
- signs[sign].value.nonce.eq(nonce) &&
+ userAddr === ethers.getAddress(signs[sign].userAddress) &&
+ signs[sign].value.nonce === nonce &&
spenderAddr &&
- spenderAddr === ethers.utils.getAddress(signs[sign].value.spender)
+ spenderAddr === ethers.getAddress(signs[sign].value.spender)
);
});
const sortedSigns = filteredSigns.sort((s1, s2) => {
diff --git a/src/store/sagas.js b/src/store/sagas.js
index 7a8b082..30fd968 100644
--- a/src/store/sagas.js
+++ b/src/store/sagas.js
@@ -20,12 +20,6 @@ initializeEthereumStore({
selectChainId: () => 80001, // just for testing
selectProvider: () => {},
selectUserAddress: () => "0x4d68cf31d613070b18e406afd6a42719a62a0785", // just for testing
- // just for testing
- chain: {
- id: 80001,
- rpc: "https://rpc.ankr.com/polygon_mumbai",
- network: "maticmum",
- },
});
export default function* rootSaga() {