diff --git a/e2e-tests/popup/buy-cspr/buy-cspr.spec.ts b/e2e-tests/popup/buy-cspr/buy-cspr.spec.ts
index e10eec6fb..15ee207df 100644
--- a/e2e-tests/popup/buy-cspr/buy-cspr.spec.ts
+++ b/e2e-tests/popup/buy-cspr/buy-cspr.spec.ts
@@ -22,10 +22,6 @@ popup.describe('Popup UI: buy cspr', () => {
).toBeVisible();
await popupPage.getByRole('button', { name: 'Next' }).click();
- await popupExpect(
- popupPage.getByRole('heading', { name: 'Review provider option' })
- ).toBeVisible();
-
await popupPage.getByText('Topper by Uphold').click();
await popupExpect(
@@ -43,7 +39,7 @@ popup.describe('Popup UI: buy cspr', () => {
}
);
- popup.skip(
+ popup(
'should redirect to Ramp provider page',
async ({ popupPage, unlockVault, context }) => {
await unlockVault();
@@ -64,10 +60,6 @@ popup.describe('Popup UI: buy cspr', () => {
).toBeVisible();
await popupPage.getByRole('button', { name: 'Next' }).click();
- await popupExpect(
- popupPage.getByRole('heading', { name: 'Pick provider' })
- ).toBeVisible();
-
await popupExpect(
popupPage.getByRole('button', { name: 'Confirm' })
).toBeDisabled();
diff --git a/package-lock.json b/package-lock.json
index 6b834366b..daaddd094 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,7 @@
"@noble/ciphers": "^0.3.0",
"@scure/bip32": "1.3.2",
"@scure/bip39": "1.2.1",
+ "@tanstack/react-query": "^5.52.3",
"@types/argon2-browser": "1.18.1",
"@types/webextension-polyfill": "0.9.2",
"@zondax/ledger-casper": "^2.6.1",
@@ -27,6 +28,7 @@
"big.js": "^6.2.1",
"casper-cep18-js-client": "1.0.2",
"casper-js-sdk": "2.15.4",
+ "casper-wallet-core": "git+ssh://git@github.com:make-software/casper-wallet-core.git#v0.9.1",
"date-fns": "^2.30.0",
"i18next": "^23.11.0",
"i18next-browser-languagedetector": "^7.2.1",
@@ -431,12 +433,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.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
@@ -485,34 +487,21 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/@babel/eslint-parser": {
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz",
- "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==",
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
+ "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==",
"dev": true,
"dependencies": {
- "eslint-scope": "^5.1.1",
+ "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
"eslint-visitor-keys": "^2.1.0",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || >=14.0.0"
},
"peerDependencies": {
- "@babel/core": ">=7.11.0",
- "eslint": "^7.5.0 || ^8.0.0"
- }
- },
- "node_modules/@babel/eslint-parser/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@babel/core": "^7.11.0",
+ "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
}
},
"node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": {
@@ -524,23 +513,14 @@
"node": ">=10"
}
},
- "node_modules/@babel/eslint-parser/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/@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.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+ "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"dependencies": {
- "@babel/types": "^7.23.3",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
+ "@babel/types": "^7.25.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
@@ -548,24 +528,24 @@
}
},
"node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -612,19 +592,17 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.23.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz",
- "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
+ "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/traverse": "^7.25.0",
"semver": "^6.3.1"
},
"engines": {
@@ -680,6 +658,7 @@
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "dev": true,
"dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
@@ -692,6 +671,7 @@
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -700,12 +680,13 @@
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
- "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
+ "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.0"
+ "@babel/traverse": "^7.24.8",
+ "@babel/types": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -741,21 +722,21 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
- "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+ "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
- "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+ "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
"engines": {
"node": ">=6.9.0"
}
@@ -778,14 +759,14 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
- "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
+ "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
- "@babel/helper-optimise-call-expression": "^7.22.5"
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -806,12 +787,13 @@
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
- "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+ "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -829,17 +811,17 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
- "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"engines": {
"node": ">=6.9.0"
}
@@ -880,22 +862,26 @@
}
},
"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.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/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.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+ "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+ "dependencies": {
+ "@babel/types": "^7.25.2"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -952,17 +938,14 @@
}
},
"node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz",
- "integrity": "sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
+ "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.17.9",
- "@babel/helper-plugin-utils": "^7.16.7",
- "@babel/helper-replace-supers": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/plugin-syntax-decorators": "^7.17.0",
- "charcodes": "^0.2.0"
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-decorators": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1100,12 +1083,12 @@
}
},
"node_modules/@babel/plugin-syntax-decorators": {
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz",
- "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
+ "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.16.7"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2465,32 +2448,29 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"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==",
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.3",
- "@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",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+ "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/parser": "^7.25.3",
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.2",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -2498,12 +2478,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.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+ "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -4513,9 +4493,9 @@
}
},
"node_modules/@jridgewell/set-array": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz",
- "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"engines": {
"node": ">=6.0.0"
}
@@ -4550,9 +4530,9 @@
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -4712,6 +4692,37 @@
"integrity": "sha512-+VnaO5zYUwFQVuRqp2qLPGR5GwhhJ/lrp0yEmamJ/nI15P2GKwGBEWRDiITZR8i6AYxeiQSu2rOi/gqxehnPuA==",
"dev": true
},
+ "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
+ "version": "5.1.1-v1",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+ "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-scope": "5.1.1"
+ }
+ },
+ "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/@noble/ciphers": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.3.0.tgz",
@@ -5021,6 +5032,11 @@
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
"dev": true
},
+ "node_modules/@react-native/typescript-config": {
+ "version": "0.74.83",
+ "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.83.tgz",
+ "integrity": "sha512-UTcZZYkSD+vv2O67bL/wu0GCGJP3BCbIxXd9ZewNkJmiWl5BbfoNl23+EjmDwM2V66gu24VB/RsSMn0TdmFs8Q=="
+ },
"node_modules/@redux-devtools/cli": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@redux-devtools/cli/-/cli-4.0.0.tgz",
@@ -6244,6 +6260,30 @@
"node": ">=10"
}
},
+ "node_modules/@tanstack/query-core": {
+ "version": "5.52.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.52.3.tgz",
+ "integrity": "sha512-+Gh7lXn+eoAsarvvnndgqBeJ5lOjup8qgQnrTsFuhNTEAo0H934DxEPro4s3TlmvITfDTJ3UDCy7kY8Azm0qsA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "5.52.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.52.3.tgz",
+ "integrity": "sha512-1K7l2hkqlWuh5SdaTYPSwMmHJF5dDk5INK+EtiEwUZW4+usWTXZx7QeHuk078oSzTzaVkEFyT3VquK7F0hYkUw==",
+ "dependencies": {
+ "@tanstack/query-core": "5.52.3"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19"
+ }
+ },
"node_modules/@testing-library/dom": {
"version": "9.3.4",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz",
@@ -7611,6 +7651,11 @@
"resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
"integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
},
+ "node_modules/@types/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="
+ },
"node_modules/@types/webextension-polyfill": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.9.2.tgz",
@@ -8527,6 +8572,22 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
+ "node_modules/addons-linter/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/addons-linter/node_modules/glob": {
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
@@ -8664,6 +8725,18 @@
"node": ">=10"
}
},
+ "node_modules/addons-linter/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/addons-linter/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -8999,6 +9072,14 @@
"node": ">= 8"
}
},
+ "node_modules/apisauce": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/apisauce/-/apisauce-3.0.1.tgz",
+ "integrity": "sha512-4HEmETv0skPW+bFS4TzB5nQ5y2TdafbUpnAjp83MW8Re9lHwngao2hpnk7aIaxExJqSTxkpWl+ThgZbqjx2bpQ==",
+ "dependencies": {
+ "axios": "^1.4.0"
+ }
+ },
"node_modules/append-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
@@ -9271,8 +9352,7 @@
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/at-least-node": {
"version": "1.0.0",
@@ -9328,6 +9408,16 @@
"node": ">=4"
}
},
+ "node_modules/axios": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+ "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"node_modules/axobject-query": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
@@ -10525,6 +10615,54 @@
"webidl-conversions": "^3.0.0"
}
},
+ "node_modules/casper-wallet-core": {
+ "name": "CasperWalletCommon",
+ "version": "0.1.0",
+ "resolved": "git+ssh://git@github.com/make-software/casper-wallet-core.git#1f3412b784ceea227cc2aa721ec0c835fdebb24a",
+ "dependencies": {
+ "@make-software/ces-js-parser": "^1.3.3",
+ "@react-native/typescript-config": "0.74.83",
+ "@types/uuid": "^10.0.0",
+ "apisauce": "^3.0.1",
+ "casper-cep18-js-client": "^1.0.2",
+ "casper-js-sdk": "2.15.4",
+ "date-fns": "^2.30.0",
+ "decimal.js": "^10.4.3",
+ "lru-cache": "10.4.3",
+ "uuid": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/casper-wallet-core/node_modules/@make-software/ces-js-parser": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@make-software/ces-js-parser/-/ces-js-parser-1.3.3.tgz",
+ "integrity": "sha512-uJ7BgnaVbb1pkGfDCgBqES+f5+RVlVPkAYxOC6Qz9kxzIcu9HYH1eA+8EkjRO2T36uBemTjBRO6R0TdH61PIAA==",
+ "dependencies": {
+ "ts-results": "^3.3.0"
+ },
+ "peerDependencies": {
+ "casper-js-sdk": "^2.12.0"
+ }
+ },
+ "node_modules/casper-wallet-core/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "node_modules/casper-wallet-core/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -10547,15 +10685,6 @@
"node": ">=10"
}
},
- "node_modules/charcodes": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz",
- "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
@@ -11142,7 +11271,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -11180,7 +11308,7 @@
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
"dev": true
},
"node_modules/compressible": {
@@ -12465,10 +12593,9 @@
}
},
"node_modules/decimal.js": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
- "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
- "dev": true
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
"node_modules/decompress-response": {
"version": "6.0.0",
@@ -12823,7 +12950,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
"engines": {
"node": ">=0.4.0"
}
@@ -14985,7 +15111,6 @@
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
- "dev": true,
"funding": [
{
"type": "individual",
@@ -15051,7 +15176,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dev": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -21574,7 +21698,6 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
"engines": {
"node": ">= 0.6"
}
@@ -21583,7 +21706,6 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@@ -23734,6 +23856,11 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -29640,12 +29767,12 @@
"dev": true
},
"@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.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"requires": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
}
},
"@babel/compat-data": {
@@ -29683,69 +29810,53 @@
}
},
"@babel/eslint-parser": {
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz",
- "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==",
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
+ "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==",
"dev": true,
"requires": {
- "eslint-scope": "^5.1.1",
+ "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
"eslint-visitor-keys": "^2.1.0",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
},
"dependencies": {
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
"eslint-visitor-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
}
}
},
"@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.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+ "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"requires": {
- "@babel/types": "^7.23.3",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
+ "@babel/types": "^7.25.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"dependencies": {
"@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"requires": {
- "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/trace-mapping": "^0.3.24"
}
}
}
},
"@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
"requires": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
@@ -29785,19 +29896,17 @@
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.23.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz",
- "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
+ "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/traverse": "^7.25.0",
"semver": "^6.3.1"
}
},
@@ -29835,6 +29944,7 @@
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "dev": true,
"requires": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
@@ -29844,17 +29954,19 @@
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
"requires": {
"@babel/types": "^7.22.5"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
- "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
+ "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
"dev": true,
"requires": {
- "@babel/types": "^7.23.0"
+ "@babel/traverse": "^7.24.8",
+ "@babel/types": "^7.24.8"
}
},
"@babel/helper-module-imports": {
@@ -29878,18 +29990,18 @@
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
- "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+ "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
"dev": true,
"requires": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
- "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg=="
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+ "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg=="
},
"@babel/helper-remap-async-to-generator": {
"version": "7.22.20",
@@ -29903,14 +30015,14 @@
}
},
"@babel/helper-replace-supers": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
- "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
+ "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
"dev": true,
"requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
- "@babel/helper-optimise-call-expression": "^7.22.5"
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
}
},
"@babel/helper-simple-access": {
@@ -29922,12 +30034,13 @@
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
- "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+ "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
}
},
"@babel/helper-split-export-declaration": {
@@ -29939,14 +30052,14 @@
}
},
"@babel/helper-string-parser": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
- "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ=="
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ=="
},
"@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w=="
},
"@babel/helper-validator-option": {
"version": "7.22.15",
@@ -29975,19 +30088,23 @@
}
},
"@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.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
}
},
"@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.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+ "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+ "requires": {
+ "@babel/types": "^7.25.2"
+ }
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.22.15",
@@ -30020,17 +30137,14 @@
}
},
"@babel/plugin-proposal-decorators": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz",
- "integrity": "sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
+ "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.17.9",
- "@babel/helper-plugin-utils": "^7.16.7",
- "@babel/helper-replace-supers": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/plugin-syntax-decorators": "^7.17.0",
- "charcodes": "^0.2.0"
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-decorators": "^7.24.7"
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
@@ -30118,12 +30232,12 @@
}
},
"@babel/plugin-syntax-decorators": {
- "version": "7.17.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz",
- "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
+ "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.16.7"
+ "@babel/helper-plugin-utils": "^7.24.7"
}
},
"@babel/plugin-syntax-dynamic-import": {
@@ -31035,39 +31149,36 @@
}
},
"@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
"requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.25.0",
+ "@babel/types": "^7.25.0"
}
},
"@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==",
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.3",
- "@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",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+ "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+ "requires": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/parser": "^7.25.3",
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.2",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
}
},
"@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.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+ "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"requires": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
}
},
@@ -32491,9 +32602,9 @@
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA=="
},
"@jridgewell/set-array": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz",
- "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ=="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="
},
"@jridgewell/source-map": {
"version": "0.3.5",
@@ -32524,9 +32635,9 @@
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
"@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -32669,6 +32780,33 @@
"integrity": "sha512-+VnaO5zYUwFQVuRqp2qLPGR5GwhhJ/lrp0yEmamJ/nI15P2GKwGBEWRDiITZR8i6AYxeiQSu2rOi/gqxehnPuA==",
"dev": true
},
+ "@nicolo-ribaudo/eslint-scope-5-internals": {
+ "version": "5.1.1-v1",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+ "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+ "dev": true,
+ "requires": {
+ "eslint-scope": "5.1.1"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ }
+ }
+ },
"@noble/ciphers": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.3.0.tgz",
@@ -32907,6 +33045,11 @@
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
"dev": true
},
+ "@react-native/typescript-config": {
+ "version": "0.74.83",
+ "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.74.83.tgz",
+ "integrity": "sha512-UTcZZYkSD+vv2O67bL/wu0GCGJP3BCbIxXd9ZewNkJmiWl5BbfoNl23+EjmDwM2V66gu24VB/RsSMn0TdmFs8Q=="
+ },
"@redux-devtools/cli": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@redux-devtools/cli/-/cli-4.0.0.tgz",
@@ -33828,6 +33971,19 @@
"defer-to-connect": "^2.0.0"
}
},
+ "@tanstack/query-core": {
+ "version": "5.52.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.52.3.tgz",
+ "integrity": "sha512-+Gh7lXn+eoAsarvvnndgqBeJ5lOjup8qgQnrTsFuhNTEAo0H934DxEPro4s3TlmvITfDTJ3UDCy7kY8Azm0qsA=="
+ },
+ "@tanstack/react-query": {
+ "version": "5.52.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.52.3.tgz",
+ "integrity": "sha512-1K7l2hkqlWuh5SdaTYPSwMmHJF5dDk5INK+EtiEwUZW4+usWTXZx7QeHuk078oSzTzaVkEFyT3VquK7F0hYkUw==",
+ "requires": {
+ "@tanstack/query-core": "5.52.3"
+ }
+ },
"@testing-library/dom": {
"version": "9.3.4",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz",
@@ -35053,6 +35209,11 @@
"resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
"integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
},
+ "@types/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="
+ },
"@types/webextension-polyfill": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.9.2.tgz",
@@ -35736,6 +35897,16 @@
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true
},
+ "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,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ }
+ },
"glob": {
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
@@ -35833,6 +36004,12 @@
"lru-cache": "^6.0.0"
}
},
+ "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
+ },
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -36101,6 +36278,14 @@
"picomatch": "^2.0.4"
}
},
+ "apisauce": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/apisauce/-/apisauce-3.0.1.tgz",
+ "integrity": "sha512-4HEmETv0skPW+bFS4TzB5nQ5y2TdafbUpnAjp83MW8Re9lHwngao2hpnk7aIaxExJqSTxkpWl+ThgZbqjx2bpQ==",
+ "requires": {
+ "axios": "^1.4.0"
+ }
+ },
"append-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
@@ -36319,8 +36504,7 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"at-least-node": {
"version": "1.0.0",
@@ -36358,6 +36542,16 @@
"integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==",
"dev": true
},
+ "axios": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+ "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+ "requires": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"axobject-query": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
@@ -37269,6 +37463,42 @@
}
}
},
+ "casper-wallet-core": {
+ "version": "git+ssh://git@github.com/make-software/casper-wallet-core.git#1f3412b784ceea227cc2aa721ec0c835fdebb24a",
+ "from": "casper-wallet-core@git+ssh://git@github.com:make-software/casper-wallet-core.git#v0.9.1",
+ "requires": {
+ "@make-software/ces-js-parser": "^1.3.3",
+ "@react-native/typescript-config": "0.74.83",
+ "@types/uuid": "^10.0.0",
+ "apisauce": "^3.0.1",
+ "casper-cep18-js-client": "^1.0.2",
+ "casper-js-sdk": "2.15.4",
+ "date-fns": "^2.30.0",
+ "decimal.js": "^10.4.3",
+ "lru-cache": "10.4.3",
+ "uuid": "^9.0.0"
+ },
+ "dependencies": {
+ "@make-software/ces-js-parser": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@make-software/ces-js-parser/-/ces-js-parser-1.3.3.tgz",
+ "integrity": "sha512-uJ7BgnaVbb1pkGfDCgBqES+f5+RVlVPkAYxOC6Qz9kxzIcu9HYH1eA+8EkjRO2T36uBemTjBRO6R0TdH61PIAA==",
+ "requires": {
+ "ts-results": "^3.3.0"
+ }
+ },
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
+ }
+ }
+ },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -37285,12 +37515,6 @@
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
"dev": true
},
- "charcodes": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz",
- "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==",
- "dev": true
- },
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
@@ -37734,7 +37958,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
@@ -37760,7 +37983,7 @@
"commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
"dev": true
},
"compressible": {
@@ -38721,10 +38944,9 @@
"dev": true
},
"decimal.js": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
- "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
- "dev": true
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
"decompress-response": {
"version": "6.0.0",
@@ -38975,8 +39197,7 @@
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates": {
"version": "1.0.0",
@@ -40625,8 +40846,7 @@
"follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
- "dev": true
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
},
"for-each": {
"version": "0.3.3",
@@ -40665,7 +40885,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -45518,14 +45737,12 @@
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
"requires": {
"mime-db": "1.52.0"
}
@@ -47118,6 +47335,11 @@
"ipaddr.js": "1.9.1"
}
},
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
diff --git a/package.json b/package.json
index 021f1afea..36c89bc6b 100644
--- a/package.json
+++ b/package.json
@@ -64,6 +64,7 @@
"@noble/ciphers": "^0.3.0",
"@scure/bip32": "1.3.2",
"@scure/bip39": "1.2.1",
+ "@tanstack/react-query": "^5.52.3",
"@types/argon2-browser": "1.18.1",
"@types/webextension-polyfill": "0.9.2",
"@zondax/ledger-casper": "^2.6.1",
@@ -71,6 +72,7 @@
"big.js": "^6.2.1",
"casper-cep18-js-client": "1.0.2",
"casper-js-sdk": "2.15.4",
+ "casper-wallet-core": "git+ssh://git@github.com:make-software/casper-wallet-core.git#v0.9.1",
"date-fns": "^2.30.0",
"i18next": "^23.11.0",
"i18next-browser-languagedetector": "^7.2.1",
diff --git a/src/apps/popup/app-router.tsx b/src/apps/popup/app-router.tsx
index 7e67ea351..c48e4e04f 100644
--- a/src/apps/popup/app-router.tsx
+++ b/src/apps/popup/app-router.tsx
@@ -5,7 +5,6 @@ import { HashRouter, Route, Routes } from 'react-router-dom';
import { useUserActivityTracker } from '@src/hooks/use-user-activity-tracker';
import { AccountSettingsPage } from '@popup/pages/account-settings';
-import { ActivityDetailsPage } from '@popup/pages/activity-details';
import { AddContactPage } from '@popup/pages/add-contact';
import { AllAccountsPage } from '@popup/pages/all-accounts';
import { BackupSecretPhrasePage } from '@popup/pages/backup-secret-phrase';
@@ -16,6 +15,7 @@ import { ConnectedSitesPage } from '@popup/pages/connected-sites';
import { ContactDetailsPage } from '@popup/pages/contact-details';
import { ContactsBookPage } from '@popup/pages/contacts';
import { CreateAccountPage } from '@popup/pages/create-account';
+import { DeployDetailsPage } from '@popup/pages/deploy-details';
import { DownloadAccountKeysPage } from '@popup/pages/download-account-keys';
import { HomePageContent } from '@popup/pages/home';
import { ImportAccountFromLedgerPage } from '@popup/pages/import-account-from-ledger';
@@ -203,10 +203,6 @@ function AppRoutes() {
element={}
/>
} />
- }
- />
} />
} />
} />
@@ -252,6 +248,7 @@ function AppRoutes() {
path={RouterPath.SignWithLedgerInNewWindow}
element={}
/>
+ } />
);
}
diff --git a/src/apps/popup/index.tsx b/src/apps/popup/index.tsx
index cc051bf5f..3ca701e98 100644
--- a/src/apps/popup/index.tsx
+++ b/src/apps/popup/index.tsx
@@ -1,3 +1,4 @@
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import React, { Suspense, useState } from 'react';
import { createRoot } from 'react-dom/client';
// skeleton styles
@@ -26,6 +27,20 @@ import { AppRouter } from './app-router';
const Tree = () => {
const [state, setState] = useState(null);
+ const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ staleTime: 3 * 60 * 1000,
+ refetchInterval: 3 * 60 * 1000,
+ gcTime: 3 * 60 * 1000,
+ retry: false
+ },
+ mutations: {
+ retry: false
+ }
+ }
+ });
+
setCSPForSafari();
const isSystemDarkTheme = useSystemThemeDetector();
@@ -60,9 +75,11 @@ const Tree = () => {
-
-
-
+
+
+
+
+
diff --git a/src/apps/popup/pages/activity-details/content.tsx b/src/apps/popup/pages/activity-details/content.tsx
deleted file mode 100644
index a25d0444c..000000000
--- a/src/apps/popup/pages/activity-details/content.tsx
+++ /dev/null
@@ -1,402 +0,0 @@
-import React from 'react';
-import { Trans, useTranslation } from 'react-i18next';
-import { useSelector } from 'react-redux';
-import styled from 'styled-components';
-
-import {
- ActivityType,
- ActivityTypeName,
- AuctionManagerEntryPoint,
- getBlockExplorerContractUrl
-} from '@src/constants';
-
-import { selectApiConfigBasedOnActiveNetwork } from '@background/redux/settings/selectors';
-
-import {
- AlignedFlexRow,
- AlignedSpaceBetweenFlexRow,
- BorderBottomPseudoElementProps,
- ContentContainer,
- FlexColumn,
- ParagraphContainer,
- RightAlignedFlexColumn,
- SpaceBetweenFlexRow,
- SpacingSize,
- borderBottomPseudoElementRules
-} from '@libs/layout';
-import { ExtendedDeploy } from '@libs/services/account-activity-service';
-import {
- Avatar,
- ContractIcon,
- CopyToClipboard,
- DeployStatus,
- Hash,
- HashVariant,
- Link,
- SvgIcon,
- Tile,
- Tooltip,
- Typography,
- isPendingStatus
-} from '@libs/ui/components';
-import {
- divideErc20Balance,
- formatCurrency,
- formatNumber,
- formatTimestamp,
- formatTimestampAge,
- motesToCSPR,
- motesToCurrency
-} from '@libs/ui/utils';
-
-interface ActivityDetailsPageContentProps {
- fromAccount?: string;
- toAccount?: string;
- deployInfo?: ExtendedDeploy | null;
- type?: ActivityType | null;
- amount?: string | null;
- symbol?: string | null;
-}
-
-export const ExecutionTypesMap = {
- 1: 'WASM deploy', //"ModuleBytes"
- 2: 'Contract call', //"StoredContractByHash"
- 3: 'Contract call', //"StoredContractByName",
- 4: 'Contract call', //"StoredVersionedContractByHash",
- 5: 'Contract call', //"StoredVersionedContractByName",
- 6: 'Transfer'
-};
-
-const Erc20EventType = {
- erc20_approve: 'approve',
- erc20_transfer: 'transfer',
- erc20_transfer_from: 'transfer_from',
- erc20_mint: 'mint',
- erc20_burn: 'burn'
-};
-
-const ItemContainer = styled(AlignedSpaceBetweenFlexRow)`
- padding: 16px 16px 16px 0;
-`;
-
-const AddressContainer = styled(FlexColumn)`
- padding: 16px 12px 16px 0;
-`;
-
-const AmountRowContainer = styled(AlignedSpaceBetweenFlexRow)<{
- emptyAmount?: boolean;
-}>`
- padding: ${({ emptyAmount }) =>
- emptyAmount ? '16px 16px 16px 0' : '8px 16px 8px 0'};
-`;
-
-const AmountContainer = styled.div`
- max-width: 160px;
-`;
-
-const RowsContainer = styled(FlexColumn)`
- margin-top: 12px;
-
- & > *:not(:last-child) {
- ${borderBottomPseudoElementRules};
- }
-
- & > *:last-child {
- padding-left: ${({ marginLeftForSeparatorLine }) =>
- marginLeftForSeparatorLine}px;
- }
-`;
-
-export const ActivityDetailsPageContent = ({
- fromAccount,
- toAccount,
- deployInfo,
- type,
- amount,
- symbol
-}: ActivityDetailsPageContentProps) => {
- const { t } = useTranslation();
-
- const { casperLiveUrl } = useSelector(selectApiConfigBasedOnActiveNetwork);
-
- if (deployInfo == null) return null;
-
- // TODO: update when activity will be added for NFT
- const EVENT_TYPE_LOCALE = {
- [Erc20EventType.erc20_transfer]: t('Transfer of'),
- [Erc20EventType.erc20_transfer_from]: t('Transfer from'),
- [Erc20EventType.erc20_approve]: t('Approve of'),
- [Erc20EventType.erc20_burn]: t('Burn of'),
- [Erc20EventType.erc20_mint]: t('Mint of'),
- [AuctionManagerEntryPoint.delegate]: t('Delegate with'),
- [AuctionManagerEntryPoint.undelegate]: t('Undelegate with'),
- [AuctionManagerEntryPoint.redelegate]: t('Redelegate with')
- };
-
- const decimals = deployInfo.contractPackage?.metadata?.decimals;
- const eventType = EVENT_TYPE_LOCALE[deployInfo.entryPoint?.name!];
-
- const transferAmount =
- deployInfo.amount != null
- ? Number.isInteger(decimals) && decimals !== undefined
- ? divideErc20Balance(deployInfo?.amount, decimals)
- : motesToCSPR(deployInfo.amount)
- : null;
-
- const formattedTransferAmount = transferAmount
- ? formatNumber(transferAmount, {
- precision: { min: 5 }
- })
- : '-';
- const transferAmountInUSD =
- deployInfo.amount != null &&
- deployInfo.rate &&
- formatCurrency(motesToCurrency(deployInfo.amount, deployInfo.rate), 'USD', {
- precision: 5
- });
-
- const paymentAmountInCSPR =
- deployInfo.paymentAmount != null &&
- formatNumber(motesToCSPR(deployInfo.paymentAmount), {
- precision: { min: 5 }
- });
- const paymentAmountInUSD =
- deployInfo.paymentAmount != null &&
- deployInfo.rate &&
- formatCurrency(
- motesToCurrency(deployInfo.paymentAmount, deployInfo.rate),
- 'USD',
- {
- precision: 5
- }
- );
-
- const costAmountInCSPR = formatNumber(motesToCSPR(deployInfo.cost || '0'), {
- precision: { min: 5 }
- });
- const costAmountInUSD = formatCurrency(
- String(deployInfo.currencyCost) || '0',
- 'USD',
- {
- precision: 5
- }
- );
-
- return (
-
-
-
- {type && {ActivityTypeName[type]}}
-
-
-
-
-
-
-
-
-
-
- From
-
-
- To
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Deploy hash
-
-
-
-
-
- Age
-
-
-
- {formatTimestampAge(deployInfo.timestamp)}
-
-
-
-
-
- Action
-
- {deployInfo.contractPackage && eventType ? (
-
- {eventType}
-
-
-
-
- {deployInfo.contractPackage.contract_name}
-
-
-
- isClicked ? (
-
- ) : (
-
- )
- }
- valueToCopy={
- deployInfo.contractPackage.contract_package_hash ||
- deployInfo.contractHash!
- }
- />
-
-
- {deployInfo.contractPackage.contract_name === 'Auction'
- ? 'System Contract'
- : 'contract'}
-
-
-
-
- ) : (
-
- {ExecutionTypesMap[deployInfo.executionTypeId]}
-
- )}
-
-
-
- Amount
-
- 18
- ? `${formattedTransferAmount} ${
- formattedTransferAmount !== '-'
- ? deployInfo.contractPackage?.metadata?.symbol || 'CSPR'
- : ''
- }`
- : undefined
- }
- >
-
-
-
- {isPendingStatus(deployInfo.status)
- ? `${amount} ${symbol || 'CSPR'}`
- : `${formattedTransferAmount} ${
- formattedTransferAmount !== '-'
- ? deployInfo.contractPackage?.metadata?.symbol ||
- 'CSPR'
- : ''
- }`}
-
-
- {!deployInfo.contractPackage?.metadata?.symbol && (
-
- {transferAmountInUSD}
-
- )}
-
-
-
-
-
- Payment Amount
-
-
- {isPendingStatus(deployInfo.status) ? (
-
- {`${paymentAmountInCSPR} CSPR`}
-
- ) : (
- <>
-
- {`${paymentAmountInCSPR} CSPR`}
-
-
- {paymentAmountInUSD}
-
- >
- )}
-
-
-
-
- Cost
-
-
- {isPendingStatus(deployInfo.status) ? (
- -
- ) : (
- <>
-
- {`${costAmountInCSPR} CSPR`}
-
-
- {costAmountInUSD}
-
- >
- )}
-
-
-
-
-
- );
-};
diff --git a/src/apps/popup/pages/activity-details/index.tsx b/src/apps/popup/pages/activity-details/index.tsx
deleted file mode 100644
index 10faec7c8..000000000
--- a/src/apps/popup/pages/activity-details/index.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import React, { useEffect, useState } from 'react';
-
-import { RouterPath, useTypedLocation, useTypedNavigate } from '@popup/router';
-
-import {
- HeaderPopup,
- HeaderSubmenuBarNavLink,
- HeaderViewInExplorer,
- PopupLayout
-} from '@libs/layout';
-import {
- ExtendedDeploy,
- dispatchFetchExtendedDeploysInfo
-} from '@libs/services/account-activity-service';
-import { HomePageTabsId } from '@libs/ui/components';
-
-import { ActivityDetailsPageContent } from './content';
-
-export const ActivityDetailsPage = () => {
- const [deployInfo, setDeployInfo] = useState(null);
-
- const location = useTypedLocation();
- const navigate = useTypedNavigate();
-
- const { activityDetailsData } = location.state;
-
- useEffect(() => {
- if (!activityDetailsData) {
- navigate(RouterPath.Home);
- }
- }, [activityDetailsData, navigate]);
-
- useEffect(() => {
- if (activityDetailsData?.deployHash) {
- dispatchFetchExtendedDeploysInfo(activityDetailsData?.deployHash).then(
- ({ payload: deployInfoResponse }) => {
- setDeployInfo(deployInfoResponse);
- }
- );
- }
- }, [activityDetailsData?.deployHash]);
-
- return (
- (
- (
- <>
- {
- if (activityDetailsData?.isDeploysList) {
- navigate(RouterPath.Home, {
- state: {
- // set the active tab to deploys
- activeTabId: HomePageTabsId.Deploys
- }
- });
- }
- }
- : undefined
- }
- />
-
- >
- )}
- />
- )}
- renderContent={() => (
-
- )}
- />
- );
-};
diff --git a/src/apps/popup/pages/deploy-details/components/action-rows/associated-action-rows.tsx b/src/apps/popup/pages/deploy-details/components/action-rows/associated-action-rows.tsx
new file mode 100644
index 000000000..083aa1f86
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/action-rows/associated-action-rows.tsx
@@ -0,0 +1,71 @@
+import { IAccountInfo } from 'casper-wallet-core/src/domain/accountInfo';
+import { Maybe } from 'casper-wallet-core/src/typings/common';
+import React from 'react';
+import { Trans, useTranslation } from 'react-i18next';
+import { useSelector } from 'react-redux';
+
+import { DeployIcon, getBlockExplorerContractUrl } from '@src/constants';
+
+import { SimpleContainer } from '@popup/pages/deploy-details/components/common';
+
+import { selectApiConfigBasedOnActiveNetwork } from '@background/redux/settings/selectors';
+
+import { AlignedFlexRow, SpacingSize } from '@libs/layout';
+import { Link, Typography } from '@libs/ui/components';
+import { AccountInfoIcon } from '@libs/ui/components/account-info-icon/account-info-icon';
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface AssociatedActionRowsProps {
+ publicKey: string;
+ contractPackageHash: string;
+ contractName: string;
+ callerAccountInfo: Maybe;
+}
+
+export const AssociatedActionRows = ({
+ publicKey,
+ contractPackageHash,
+ contractName,
+ callerAccountInfo
+}: AssociatedActionRowsProps) => {
+ const { t } = useTranslation();
+
+ const { casperLiveUrl } = useSelector(selectApiConfigBasedOnActiveNetwork);
+
+ const link = getBlockExplorerContractUrl(
+ casperLiveUrl,
+ contractPackageHash || ''
+ );
+
+ return (
+
+
+
+
+
+
+ with
+
+
+
+ {contractName}
+
+
+
+
+ contract
+
+
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/action-rows/auction-action-rows.tsx b/src/apps/popup/pages/deploy-details/components/action-rows/auction-action-rows.tsx
new file mode 100644
index 000000000..e12acc2c8
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/action-rows/auction-action-rows.tsx
@@ -0,0 +1,166 @@
+import { IAccountInfo } from 'casper-wallet-core/src/domain/accountInfo';
+import { IAuctionDeploy } from 'casper-wallet-core/src/domain/deploys/entities';
+import { Maybe } from 'casper-wallet-core/src/typings/common';
+import React from 'react';
+
+import { AuctionDeployEntryPoint, DeployIcon } from '@src/constants';
+
+import { DefaultActionRows } from '@popup/pages/deploy-details/components/action-rows/default-action-rows';
+import {
+ ActionContainerWithLink,
+ AmountRow,
+ ContainerWithAmount
+} from '@popup/pages/deploy-details/components/common';
+import { getEntryPointName } from '@popup/pages/deploy-details/utils';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+const ManageAuctionBidAction = ({
+ amount,
+ title,
+ fiatAmount,
+ contractPackageHash,
+ contractName
+}: {
+ amount: string;
+ title: string;
+ fiatAmount: string;
+ contractPackageHash: string;
+ contractName: string;
+}) => (
+
+
+
+);
+
+const DelegationAuctionAction = ({
+ amount,
+ title,
+ fiatAmount,
+ toValidatorAccountInfo,
+ fromValidatorAccountInfo,
+ entryPoint,
+ toValidator,
+ fromValidator
+}: {
+ amount: string;
+ title: string;
+ fiatAmount: string;
+ toValidatorAccountInfo: Maybe;
+ fromValidatorAccountInfo: Maybe;
+ entryPoint: string;
+ toValidator: Maybe;
+ fromValidator: Maybe;
+}) => {
+ const isDelegate = entryPoint === AuctionDeployEntryPoint.delegate;
+ const isUndelegate = entryPoint === AuctionDeployEntryPoint.undelegate;
+ const isRedelegate = entryPoint === AuctionDeployEntryPoint.redelegate;
+
+ return (
+
+ {isDelegate && (
+
+ )}
+ {(isUndelegate || isRedelegate) && (
+ <>
+
+
+ >
+ )}
+
+ );
+};
+
+interface AuctionActionRowsProps {
+ deploy: IAuctionDeploy;
+}
+
+export const AuctionActionRows = ({ deploy }: AuctionActionRowsProps) => {
+ const {
+ entryPoint,
+ formattedDecimalAmount,
+ fiatAmount,
+ fromValidator,
+ toValidator,
+ fromValidatorAccountInfo,
+ toValidatorAccountInfo
+ } = deploy;
+ const isManageAuctionBidDeploy =
+ entryPoint === AuctionDeployEntryPoint.activate ||
+ entryPoint === AuctionDeployEntryPoint.withdraw ||
+ entryPoint === AuctionDeployEntryPoint.add;
+
+ const isDelegationDeploy =
+ entryPoint === AuctionDeployEntryPoint.delegate ||
+ entryPoint === AuctionDeployEntryPoint.undelegate ||
+ entryPoint === AuctionDeployEntryPoint.redelegate;
+
+ const title = getEntryPointName(deploy, true);
+
+ if (isManageAuctionBidDeploy) {
+ return (
+
+ );
+ }
+
+ if (isDelegationDeploy) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/action-rows/cep18-action-rows.tsx b/src/apps/popup/pages/deploy-details/components/action-rows/cep18-action-rows.tsx
new file mode 100644
index 000000000..08e73f1a8
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/action-rows/cep18-action-rows.tsx
@@ -0,0 +1,107 @@
+import { ICep18Deploy } from 'casper-wallet-core/src/domain/deploys/entities';
+import React from 'react';
+
+import { Cep18DeployEntryPoint, DeployIcon } from '@src/constants';
+
+import { DefaultActionRows } from '@popup/pages/deploy-details/components/action-rows/default-action-rows';
+import {
+ AmountRow,
+ ContractInfoRow,
+ SimpleContainer
+} from '@popup/pages/deploy-details/components/common';
+import { getEntryPointName } from '@popup/pages/deploy-details/utils';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface Cep18ActionRowsProps {
+ deploy: ICep18Deploy;
+}
+
+export const Cep18ActionRows = ({ deploy }: Cep18ActionRowsProps) => {
+ const {
+ entryPoint,
+ recipientKey,
+ contractPackageHash,
+ contractName,
+ formattedDecimalAmount,
+ symbol,
+ iconUrl
+ } = deploy;
+ const isTransfer = entryPoint === Cep18DeployEntryPoint.transfer;
+ const isMint = entryPoint === Cep18DeployEntryPoint.mint;
+ const isBurn = entryPoint === Cep18DeployEntryPoint.burn;
+ const isApprove = entryPoint === Cep18DeployEntryPoint.approve;
+
+ const title = getEntryPointName(deploy, true);
+
+ if (isTransfer || isMint) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (isApprove) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (isBurn) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ return (
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/action-rows/cspr-market-action-rows.tsx b/src/apps/popup/pages/deploy-details/components/action-rows/cspr-market-action-rows.tsx
new file mode 100644
index 000000000..2db0f6773
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/action-rows/cspr-market-action-rows.tsx
@@ -0,0 +1,94 @@
+import { ICasperMarketDeploy } from 'casper-wallet-core/src/domain/deploys/entities';
+import React from 'react';
+
+import { CsprMarketDeployEntryPoint } from '@src/constants';
+
+import { DefaultActionRows } from '@popup/pages/deploy-details/components/action-rows/default-action-rows';
+import {
+ AmountRow,
+ ContractInfoRow,
+ NftInfoRow,
+ SimpleContainer
+} from '@popup/pages/deploy-details/components/common';
+import { getEntryPointName } from '@popup/pages/deploy-details/utils';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface CsprMarketActionRowsProps {
+ deploy: ICasperMarketDeploy;
+}
+
+export const CsprMarketActionRows = ({ deploy }: CsprMarketActionRowsProps) => {
+ const {
+ entryPoint,
+ contractName,
+ contractPackageHash,
+ nftTokenIds,
+ offererAccountInfo
+ } = deploy;
+ const isDelist = entryPoint === CsprMarketDeployEntryPoint.delist_token;
+ const isListAction =
+ entryPoint === CsprMarketDeployEntryPoint.delist_token ||
+ entryPoint === CsprMarketDeployEntryPoint.list_token;
+ const isOfferAction =
+ entryPoint === CsprMarketDeployEntryPoint.accept_offer ||
+ entryPoint === CsprMarketDeployEntryPoint.make_offer ||
+ entryPoint === CsprMarketDeployEntryPoint.cancel_offer;
+
+ const title = getEntryPointName(deploy, true);
+
+ if (isListAction) {
+ return (
+
+
+
+
+ );
+ }
+
+ if (isOfferAction) {
+ return (
+
+
+
+
+
+
+ );
+ }
+
+ return (
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/action-rows/default-action-rows.tsx b/src/apps/popup/pages/deploy-details/components/action-rows/default-action-rows.tsx
new file mode 100644
index 000000000..00212a195
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/action-rows/default-action-rows.tsx
@@ -0,0 +1,64 @@
+import { Maybe } from 'casper-wallet-core/src/typings/common';
+import React from 'react';
+import { Trans, useTranslation } from 'react-i18next';
+import { useSelector } from 'react-redux';
+
+import { DeployIcon, getBlockExplorerContractUrl } from '@src/constants';
+
+import { SimpleContainer } from '@popup/pages/deploy-details/components/common';
+
+import { selectApiConfigBasedOnActiveNetwork } from '@background/redux/settings/selectors';
+
+import { AlignedFlexRow, SpacingSize } from '@libs/layout';
+import { Link, Typography } from '@libs/ui/components';
+import { AccountInfoIcon } from '@libs/ui/components/account-info-icon/account-info-icon';
+
+interface DefaultActionRowsProps {
+ title: string;
+ contractName: Maybe;
+ additionalInfo?: string;
+ iconUrl?: string;
+ contractPackageHash: string;
+}
+
+export const DefaultActionRows = ({
+ title,
+ contractName,
+ additionalInfo,
+ iconUrl,
+ contractPackageHash
+}: DefaultActionRowsProps) => {
+ const { t } = useTranslation();
+
+ const { casperLiveUrl } = useSelector(selectApiConfigBasedOnActiveNetwork);
+
+ const link = getBlockExplorerContractUrl(
+ casperLiveUrl,
+ contractPackageHash || ''
+ );
+
+ return (
+
+
+
+ with
+
+
+
+ {contractName}
+
+ {additionalInfo && (
+
+ {additionalInfo}
+
+ )}
+
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/action-rows/native-transfer-action-rows.tsx b/src/apps/popup/pages/deploy-details/components/action-rows/native-transfer-action-rows.tsx
new file mode 100644
index 000000000..b3b9de9e3
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/action-rows/native-transfer-action-rows.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+
+import { ContainerWithAmount } from '@popup/pages/deploy-details/components/common';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface NativeTransferActionRowsProps {
+ amount: string;
+ publicKey: string;
+ fiatAmount: string;
+ isReceive: boolean;
+ title: string;
+ accountName?: string;
+}
+
+export const NativeTransferActionRows = ({
+ amount,
+ publicKey,
+ fiatAmount,
+ isReceive,
+ title,
+ accountName
+}: NativeTransferActionRowsProps) => (
+
+
+
+);
diff --git a/src/apps/popup/pages/deploy-details/components/action-rows/nft-actions-rows.tsx b/src/apps/popup/pages/deploy-details/components/action-rows/nft-actions-rows.tsx
new file mode 100644
index 000000000..e5e15369e
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/action-rows/nft-actions-rows.tsx
@@ -0,0 +1,156 @@
+import { INftDeploy } from 'casper-wallet-core/src/domain/deploys/entities';
+import React from 'react';
+
+import { DeployIcon, NftDeployEntryPoint } from '@src/constants';
+
+import { DefaultActionRows } from '@popup/pages/deploy-details/components/action-rows/default-action-rows';
+import {
+ ContractInfoRow,
+ NftInfoRow,
+ SimpleContainer
+} from '@popup/pages/deploy-details/components/common';
+import { getEntryPointName } from '@popup/pages/deploy-details/utils';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface NftActionsRowsProps {
+ deploy: INftDeploy;
+}
+
+export const NftActionsRows = ({ deploy }: NftActionsRowsProps) => {
+ const {
+ entryPoint,
+ nftTokenIds,
+ recipientKey,
+ contractPackageHash,
+ contractName,
+ callerPublicKey,
+ iconUrl,
+ callerAccountInfo,
+ recipientAccountInfo
+ } = deploy;
+ const isBurn = entryPoint === NftDeployEntryPoint.burn;
+ const isMint = entryPoint === NftDeployEntryPoint.mint;
+ const isTransfer = entryPoint === NftDeployEntryPoint.transfer;
+ const isUpdate = entryPoint === NftDeployEntryPoint.update_token_meta;
+ const isApprove =
+ entryPoint === NftDeployEntryPoint.approve ||
+ entryPoint === NftDeployEntryPoint.set_approval_for_all;
+
+ const title = getEntryPointName(deploy, true);
+
+ if (isBurn) {
+ return (
+
+
+
+
+ );
+ }
+
+ if (isMint) {
+ return (
+
+
+
+
+ );
+ }
+
+ if (isTransfer) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (isUpdate) {
+ return (
+
+
+
+ );
+ }
+
+ if (isApprove) {
+ return (
+
+
+
+
+ );
+ }
+
+ return (
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/common.tsx b/src/apps/popup/pages/deploy-details/components/common.tsx
new file mode 100644
index 000000000..993e5b362
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/common.tsx
@@ -0,0 +1,263 @@
+import { Maybe } from 'casper-wallet-core/src/typings/common';
+import React, { useCallback } from 'react';
+import { Trans, useTranslation } from 'react-i18next';
+import { useSelector } from 'react-redux';
+import styled from 'styled-components';
+
+import { getBlockExplorerContractUrl } from '@src/constants';
+import { isEqualCaseInsensitive } from '@src/utils';
+
+import { selectApiConfigBasedOnActiveNetwork } from '@background/redux/settings/selectors';
+
+import {
+ AlignedFlexRow,
+ LeftAlignedFlexColumn,
+ SpacingSize
+} from '@libs/layout';
+import { Link, SvgIcon, Typography } from '@libs/ui/components';
+import { AccountInfoIcon } from '@libs/ui/components/account-info-icon/account-info-icon';
+
+const AlignedFlexRowContainer = styled(AlignedFlexRow)`
+ column-gap: 8px;
+ flex-wrap: wrap;
+`;
+
+export const NftIndexContainer = styled.div`
+ padding: 0 6px;
+ background: ${({ theme }) => theme.color.backgroundSecondary};
+ max-width: 296px;
+`;
+
+interface ContainerProps {
+ title: string;
+ children: React.ReactNode;
+}
+
+export const SimpleContainer = ({ title, children }: ContainerProps) => (
+
+ {title}
+ {children}
+
+);
+
+interface ActionContainerWithAmountProps {
+ title: string;
+ children: React.ReactNode;
+ amount: string;
+ fiatAmount: string;
+}
+
+export const ContainerWithAmount = ({
+ title,
+ children,
+ amount,
+ fiatAmount
+}: ActionContainerWithAmountProps) => (
+
+
+ {title}
+ {amount}
+
+ CSPR
+
+
+ {`(${fiatAmount})`}
+
+
+ {children}
+
+);
+
+interface ActionContainerWithLinkProps {
+ title: string;
+ children: React.ReactNode;
+ contractName: string;
+ contractIcon: string;
+ contractPackageHash: string;
+}
+
+export const ActionContainerWithLink = ({
+ title,
+ children,
+ contractName,
+ contractIcon,
+ contractPackageHash
+}: ActionContainerWithLinkProps) => {
+ const { casperLiveUrl } = useSelector(selectApiConfigBasedOnActiveNetwork);
+
+ const link = getBlockExplorerContractUrl(
+ casperLiveUrl,
+ contractPackageHash || ''
+ );
+
+ return (
+
+
+ {title}
+
+
+ {contractName}
+
+
+ {children}
+
+ );
+};
+
+interface NftInfoRowProps {
+ nftTokenIds: string[];
+ label?: string;
+ contractName?: string;
+ imgLogo?: Maybe;
+ publicKey?: string;
+ isApprove?: boolean;
+ defaultSvg?: string;
+}
+
+export const NftInfoRow = ({
+ nftTokenIds,
+ imgLogo,
+ contractName,
+ label,
+ publicKey,
+ isApprove,
+ defaultSvg
+}: NftInfoRowProps) => {
+ const { t } = useTranslation();
+
+ const { csprStudioCep47ContractHash, casperLiveUrl } = useSelector(
+ selectApiConfigBasedOnActiveNetwork
+ );
+
+ const link = getBlockExplorerContractUrl(casperLiveUrl, publicKey || '');
+
+ const getCollectionName = useCallback(() => {
+ if (
+ publicKey &&
+ isEqualCaseInsensitive(publicKey, csprStudioCep47ContractHash)
+ ) {
+ return 'CSPR.studio';
+ }
+
+ return contractName;
+ }, [publicKey, contractName, csprStudioCep47ContractHash]);
+
+ return (
+
+ {label && (
+
+ {label}
+
+ )}
+ {nftTokenIds.length > 1 && (
+
+ all
+
+ )}
+
+
+ {getCollectionName()}
+
+
+ {isApprove || nftTokenIds.length > 1 ? 'NFT(s)' : 'NFT'}
+
+ {nftTokenIds.map(id => (
+
+
+ {id}
+
+
+ ))}
+
+ );
+};
+
+interface AmountRowProps {
+ label?: string;
+ amount: string;
+ symbol: string;
+ fiatAmount?: string;
+}
+
+export const AmountRow = ({
+ label,
+ amount,
+ symbol,
+ fiatAmount
+}: AmountRowProps) => {
+ const { t } = useTranslation();
+
+ return (
+
+ {label && (
+
+ {label}
+
+ )}
+ {amount}
+
+ {symbol}
+
+ {fiatAmount && (
+
+ {`(${fiatAmount})`}
+
+ )}
+
+ );
+};
+
+interface ContractInfoRowProps {
+ publicKey: string;
+ contractName: string;
+ iconUrl?: Maybe;
+ label?: string;
+ additionalInfo?: string;
+ defaultSvg?: string;
+}
+
+export const ContractInfoRow = ({
+ publicKey,
+ contractName,
+ label,
+ additionalInfo,
+ iconUrl,
+ defaultSvg
+}: ContractInfoRowProps) => {
+ const { t } = useTranslation();
+
+ const { casperLiveUrl } = useSelector(selectApiConfigBasedOnActiveNetwork); // Fetch the live Casper network URL from Redux store. // Assuming 'publicKey' is the public key of the contract. // Replace 'casperLiveUrl' with the actual live Casper network URL. // Fetch the contract details using the public key. // Display the contract name, icon, and additional information. // If the contract details are not found, display a
+
+ const link = getBlockExplorerContractUrl(casperLiveUrl, publicKey || '');
+
+ return (
+
+ {label && (
+
+ {label}
+
+ )}
+
+
+ {contractName}
+
+ {additionalInfo && (
+
+ {additionalInfo}
+
+ )}
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/deploy-details-action.tsx b/src/apps/popup/pages/deploy-details/components/deploy-details-action.tsx
new file mode 100644
index 000000000..37c59748d
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/deploy-details-action.tsx
@@ -0,0 +1,153 @@
+import { IDeploy } from 'casper-wallet-core';
+import {
+ isAssociatedKeysDeploy,
+ isAuctionDeploy,
+ isCasperMarketDeploy,
+ isCep18Deploy,
+ isNativeCsprDeploy,
+ isNftDeploy,
+ isWasmDeployExecutionType
+} from 'casper-wallet-core/src/utils/deploy';
+import React from 'react';
+import { Trans, useTranslation } from 'react-i18next';
+import styled from 'styled-components';
+
+import { AssociatedActionRows } from '@popup/pages/deploy-details/components/action-rows/associated-action-rows';
+import { AuctionActionRows } from '@popup/pages/deploy-details/components/action-rows/auction-action-rows';
+import { Cep18ActionRows } from '@popup/pages/deploy-details/components/action-rows/cep18-action-rows';
+import { CsprMarketActionRows } from '@popup/pages/deploy-details/components/action-rows/cspr-market-action-rows';
+import { DefaultActionRows } from '@popup/pages/deploy-details/components/action-rows/default-action-rows';
+import { NativeTransferActionRows } from '@popup/pages/deploy-details/components/action-rows/native-transfer-action-rows';
+import { NftActionsRows } from '@popup/pages/deploy-details/components/action-rows/nft-actions-rows';
+import { getEntryPointName } from '@popup/pages/deploy-details/utils';
+
+import {
+ AlignedSpaceBetweenFlexRow,
+ BorderBottomPseudoElementProps,
+ FlexColumn,
+ borderBottomPseudoElementRules
+} from '@libs/layout';
+import { Tile, Typography } from '@libs/ui/components';
+
+const RowsContainer = styled(FlexColumn)`
+ margin-top: 16px;
+
+ & > *:not(:last-child) {
+ ${borderBottomPseudoElementRules};
+ }
+
+ & > *:first-child {
+ padding: 8px 0;
+ }
+`;
+
+const RowContainer = styled(AlignedSpaceBetweenFlexRow)`
+ padding: 16px;
+`;
+
+interface ActionProps {
+ deploy: IDeploy;
+}
+
+const Container = ({ children }: { children: React.ReactNode }) => {
+ const { t } = useTranslation();
+
+ return (
+
+
+
+ Action
+
+ {children}
+
+
+ );
+};
+
+export const DeployDetailsAction = ({ deploy }: ActionProps) => {
+ const title = getEntryPointName(deploy, true);
+
+ if (isNativeCsprDeploy(deploy)) {
+ return (
+
+
+
+ );
+ }
+
+ if (isWasmDeployExecutionType(deploy)) {
+ return (
+
+ {title}
+
+ );
+ }
+
+ if (isAuctionDeploy(deploy)) {
+ return (
+
+
+
+ );
+ }
+
+ if (isAssociatedKeysDeploy(deploy)) {
+ return (
+
+
+
+ );
+ }
+
+ if (isCasperMarketDeploy(deploy)) {
+ return (
+
+
+
+ );
+ }
+
+ if (isCep18Deploy(deploy)) {
+ return (
+
+
+
+ );
+ }
+
+ if (isNftDeploy(deploy)) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/components/deploy-details-result.tsx b/src/apps/popup/pages/deploy-details/components/deploy-details-result.tsx
new file mode 100644
index 000000000..5b20b34b4
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/deploy-details-result.tsx
@@ -0,0 +1,126 @@
+import { IDeploy } from 'casper-wallet-core';
+import {
+ isAssociatedKeysDeploy,
+ isCasperMarketDeploy,
+ isCep18Deploy,
+ isNftDeploy
+} from 'casper-wallet-core/src/utils/deploy';
+import React from 'react';
+import { Trans, useTranslation } from 'react-i18next';
+import styled from 'styled-components';
+
+import { AssociatedResultRows } from '@popup/pages/deploy-details/components/result-rows/associated-result-rows';
+import { Cep18ResultRows } from '@popup/pages/deploy-details/components/result-rows/cep18-result-rows';
+import { NativeTransferResultRows } from '@popup/pages/deploy-details/components/result-rows/native-transfer-result-rows';
+import { NftResultRows } from '@popup/pages/deploy-details/components/result-rows/nft-result-rows';
+
+import {
+ BorderBottomPseudoElementProps,
+ FlexColumn,
+ borderBottomPseudoElementRules
+} from '@libs/layout';
+import { Status, Tile, Typography, getDeployStatus } from '@libs/ui/components';
+
+const RowsContainer = styled(FlexColumn)`
+ margin: 0;
+
+ & > *:not(:last-child) {
+ padding: 16px 16px 16px 0;
+ ${borderBottomPseudoElementRules};
+ }
+
+ & > *:first-child {
+ padding: 8px 0;
+ }
+
+ & > *:last-child {
+ padding: 16px 16px 16px
+ ${({ marginLeftForSeparatorLine }) => marginLeftForSeparatorLine}px;
+ }
+`;
+
+const Container = ({ children }: { children: React.ReactNode }) => {
+ const { t } = useTranslation();
+
+ return (
+
+
+
+ Results
+
+ {children}
+
+
+ );
+};
+
+interface DeployDetailsResultProps {
+ deploy: IDeploy;
+}
+
+export const DeployDetailsResult = ({ deploy }: DeployDetailsResultProps) => {
+ const deployStatus = getDeployStatus(deploy);
+
+ if (deployStatus === Status.Error) {
+ return null;
+ }
+
+ if (isAssociatedKeysDeploy(deploy)) {
+ return (
+
+
+
+ );
+ }
+
+ if (deploy.transfersActionsResult.length) {
+ return (
+
+ {deploy?.transfersActionsResult.map((action, id) => (
+
+ ))}
+
+ );
+ }
+
+ if (
+ (isNftDeploy(deploy) || isCasperMarketDeploy(deploy)) &&
+ deploy.nftActionsResult.length
+ ) {
+ return (
+
+ {deploy.nftActionsResult.map((action, id) => (
+
+ ))}
+
+ );
+ }
+
+ if (isCep18Deploy(deploy) && deploy.cep18ActionsResult.length) {
+ return (
+
+ {deploy.cep18ActionsResult.map((action, id) => (
+
+ ))}
+
+ );
+ }
+
+ return null;
+};
diff --git a/src/apps/popup/pages/deploy-details/components/result-rows/associated-result-rows.tsx b/src/apps/popup/pages/deploy-details/components/result-rows/associated-result-rows.tsx
new file mode 100644
index 000000000..ca5a4e303
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/result-rows/associated-result-rows.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+
+import { SimpleContainer } from '@popup/pages/deploy-details/components/common';
+
+import { AlignedFlexRow, SpacingSize } from '@libs/layout';
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface AssociatedResultRowsProps {
+ publicKey: string;
+}
+
+export const AssociatedResultRows = ({
+ publicKey
+}: AssociatedResultRowsProps) => (
+
+
+
+
+
+);
diff --git a/src/apps/popup/pages/deploy-details/components/result-rows/cep18-result-rows.tsx b/src/apps/popup/pages/deploy-details/components/result-rows/cep18-result-rows.tsx
new file mode 100644
index 000000000..47a19bba2
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/result-rows/cep18-result-rows.tsx
@@ -0,0 +1,138 @@
+import { ICep18ActionsResult } from 'casper-wallet-core/src/domain/deploys/entities';
+import React from 'react';
+
+import {
+ Cep18DeployEntryPoint,
+ DeployIcon,
+ DeployResultEntryPointNameMap
+} from '@src/constants';
+
+import {
+ AmountRow,
+ ContractInfoRow,
+ SimpleContainer
+} from '@popup/pages/deploy-details/components/common';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface Cep18ResultRowsProps {
+ action: ICep18ActionsResult;
+ contractPackageHash: string;
+}
+
+export const Cep18ResultRows = ({
+ action,
+ contractPackageHash
+}: Cep18ResultRowsProps) => {
+ const {
+ entryPoint,
+ formattedDecimalAmount,
+ symbol,
+ recipientKey,
+ callerPublicKey,
+ contractName,
+ iconUrl
+ } = action;
+ const isTransfer = entryPoint === Cep18DeployEntryPoint.transfer;
+ const isMint = entryPoint === Cep18DeployEntryPoint.mint;
+ const isBurn = entryPoint === Cep18DeployEntryPoint.burn;
+ const isApprove = entryPoint === Cep18DeployEntryPoint.approve;
+
+ const title = DeployResultEntryPointNameMap[action.entryPoint];
+
+ if (isApprove) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (isBurn) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (isMint) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (isTransfer) {
+ return (
+
+
+
+
+
+
+ );
+ }
+
+ return null;
+};
diff --git a/src/apps/popup/pages/deploy-details/components/result-rows/native-transfer-result-rows.tsx b/src/apps/popup/pages/deploy-details/components/result-rows/native-transfer-result-rows.tsx
new file mode 100644
index 000000000..321808a6c
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/result-rows/native-transfer-result-rows.tsx
@@ -0,0 +1,46 @@
+import { IAccountInfo } from 'casper-wallet-core/src/domain/accountInfo';
+import { Maybe } from 'casper-wallet-core/src/typings/common';
+import React from 'react';
+
+import { ContainerWithAmount } from '@popup/pages/deploy-details/components/common';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface NativeTransferResultRowsProps {
+ amount: string;
+ toPublicKey: string;
+ fromPublicKey: string;
+ fiatAmount: string;
+ callerAccountInfo: Maybe;
+ recipientAccountInfo: Maybe;
+}
+
+export const NativeTransferResultRows = ({
+ amount,
+ toPublicKey,
+ fromPublicKey,
+ fiatAmount,
+ callerAccountInfo,
+ recipientAccountInfo
+}: NativeTransferResultRowsProps) => (
+
+
+
+
+);
diff --git a/src/apps/popup/pages/deploy-details/components/result-rows/nft-result-rows.tsx b/src/apps/popup/pages/deploy-details/components/result-rows/nft-result-rows.tsx
new file mode 100644
index 000000000..ab888eefa
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/components/result-rows/nft-result-rows.tsx
@@ -0,0 +1,155 @@
+import { INftActionsResult } from 'casper-wallet-core/src/domain/deploys/entities';
+import React from 'react';
+
+import {
+ DeployIcon,
+ DeployResultEntryPointNameMap,
+ NftDeployEntryPoint
+} from '@src/constants';
+
+import {
+ ContractInfoRow,
+ NftInfoRow,
+ SimpleContainer
+} from '@popup/pages/deploy-details/components/common';
+
+import { AccountInfoRow } from '@libs/ui/components/account-info-row/account-info-row';
+
+interface NftResultRowsProps {
+ action: INftActionsResult;
+ contractPackageHash: string;
+}
+
+export const NftResultRows = ({
+ action,
+ contractPackageHash
+}: NftResultRowsProps) => {
+ const {
+ entryPoint,
+ nftTokenIds,
+ recipientKey,
+ callerPublicKey,
+ contractName,
+ iconUrl,
+ recipientAccountInfo,
+ callerAccountInfo
+ } = action;
+
+ const isBurn = entryPoint === NftDeployEntryPoint.burn;
+ const isMint = entryPoint === NftDeployEntryPoint.mint;
+ const isTransfer = entryPoint === NftDeployEntryPoint.transfer;
+ const isUpdate = entryPoint === NftDeployEntryPoint.update_token_meta;
+ const isApprove =
+ entryPoint === NftDeployEntryPoint.approve ||
+ entryPoint === NftDeployEntryPoint.set_approval_for_all;
+
+ const title = DeployResultEntryPointNameMap[action.entryPoint];
+
+ if (isBurn) {
+ return (
+
+
+
+
+ );
+ }
+
+ if (isMint) {
+ return (
+
+
+
+
+ );
+ }
+
+ if (isTransfer) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (isUpdate) {
+ return (
+
+
+
+ );
+ }
+
+ if (isApprove) {
+ return (
+
+
+
+
+ );
+ }
+
+ return null;
+};
diff --git a/src/apps/popup/pages/deploy-details/content.tsx b/src/apps/popup/pages/deploy-details/content.tsx
new file mode 100644
index 000000000..eac6ffefa
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/content.tsx
@@ -0,0 +1,180 @@
+import { IDeploy } from 'casper-wallet-core';
+import React, { useEffect, useState } from 'react';
+import { Trans, useTranslation } from 'react-i18next';
+import { useSelector } from 'react-redux';
+import styled from 'styled-components';
+
+import { DeployDetailsAction } from '@popup/pages/deploy-details/components/deploy-details-action';
+import { DeployDetailsResult } from '@popup/pages/deploy-details/components/deploy-details-result';
+import { getEntryPointName } from '@popup/pages/deploy-details/utils';
+
+import { selectVaultActiveAccount } from '@background/redux/vault/selectors';
+
+import {
+ AlignedSpaceBetweenFlexRow,
+ BorderBottomPseudoElementProps,
+ ContentContainer,
+ FlexColumn,
+ FlexRow,
+ ParagraphContainer,
+ RightAlignedFlexColumn,
+ SpaceBetweenFlexRow,
+ SpacingSize,
+ borderBottomPseudoElementRules
+} from '@libs/layout';
+import { dispatchFetchExtendedDeploysInfo } from '@libs/services/account-activity-service';
+import {
+ DeployStatus,
+ Hash,
+ HashVariant,
+ Tile,
+ Typography
+} from '@libs/ui/components';
+import { formatShortTimestamp } from '@libs/ui/utils';
+
+const TitleContainer = styled(SpaceBetweenFlexRow)`
+ align-items: end;
+`;
+
+const RowsContainer = styled(FlexColumn)`
+ margin-top: 12px;
+
+ & > *:not(:last-child) {
+ ${borderBottomPseudoElementRules};
+ }
+
+ & > *:last-child {
+ padding-left: ${({ marginLeftForSeparatorLine }) =>
+ marginLeftForSeparatorLine}px;
+ }
+`;
+
+const RowContainer = styled(AlignedSpaceBetweenFlexRow)<{
+ withTwoRows?: boolean;
+}>`
+ padding: ${({ withTwoRows }) =>
+ withTwoRows ? '12px 16px 12px 0' : '16px 16px 16px 0'};
+`;
+
+interface DeployDetailsPageContentProps {
+ deploy?: IDeploy;
+}
+
+export const DeployDetailsPageContent = ({
+ deploy
+}: DeployDetailsPageContentProps) => {
+ const [singleDeploy, setSingleDeploy] = useState(
+ null
+ );
+
+ const { t } = useTranslation();
+
+ const activeAccount = useSelector(selectVaultActiveAccount);
+ // const activeAccount = {
+ // publicKey:
+ // '0203b9b4cd6085590b68bfccaf7ea1744766e5225928beba99155a1bd79870f7a984'
+ // };
+
+ useEffect(() => {
+ setSingleDeploy(deploy);
+ }, [deploy]);
+
+ useEffect(() => {
+ if (deploy?.deployHash && activeAccount?.publicKey) {
+ dispatchFetchExtendedDeploysInfo(
+ deploy.deployHash,
+ activeAccount?.publicKey
+ ).then(({ payload: resp }) => {
+ setSingleDeploy(resp);
+ });
+ }
+ }, [activeAccount?.publicKey, deploy?.deployHash]);
+
+ if (!singleDeploy) {
+ return null;
+ }
+
+ const deployName = getEntryPointName(singleDeploy, true);
+
+ return (
+
+
+
+
+ {deployName}
+
+
+
+
+
+
+
+
+
+
+ Deploy hash
+
+
+
+
+
+ Timestamp
+
+
+ {formatShortTimestamp(singleDeploy.timestamp)}
+
+
+
+
+ Payment amount
+
+
+
+
+ {singleDeploy.formattedPaymentAmount}
+
+
+ CSPR
+
+
+
+ {singleDeploy.fiatPaymentAmount}
+
+
+
+
+
+ Cost
+
+
+
+
+ {singleDeploy.formattedCost}
+
+
+ CSPR
+
+
+
+ {singleDeploy.fiatCost}
+
+
+
+
+
+
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/index.tsx b/src/apps/popup/pages/deploy-details/index.tsx
new file mode 100644
index 000000000..003aa0b99
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/index.tsx
@@ -0,0 +1,52 @@
+import React from 'react';
+
+import { DeployDetailsPageContent } from '@popup/pages/deploy-details/content';
+import { RouterPath, useTypedLocation, useTypedNavigate } from '@popup/router';
+
+import {
+ HeaderPopup,
+ HeaderSubmenuBarNavLink,
+ HeaderViewInExplorer,
+ PopupLayout
+} from '@libs/layout';
+import { HomePageTabsId } from '@libs/ui/components';
+
+export const DeployDetailsPage = () => {
+ const location = useTypedLocation();
+ const navigate = useTypedNavigate();
+
+ const { deploy, navigateHome } = location.state;
+
+ return (
+ (
+ (
+ <>
+ {
+ navigate(RouterPath.Home, {
+ state: {
+ // set the active tab to deploys
+ activeTabId: HomePageTabsId.Deploys
+ }
+ });
+ }
+ : undefined
+ }
+ />
+
+ >
+ )}
+ />
+ )}
+ renderContent={() => }
+ />
+ );
+};
diff --git a/src/apps/popup/pages/deploy-details/utils.ts b/src/apps/popup/pages/deploy-details/utils.ts
new file mode 100644
index 000000000..439c8c7f9
--- /dev/null
+++ b/src/apps/popup/pages/deploy-details/utils.ts
@@ -0,0 +1,23 @@
+import { IDeploy } from 'casper-wallet-core';
+
+import {
+ DeployActionEntryPointNameMap,
+ DeployPlateEntryPointNameMap,
+ ExecutionTypesMap
+} from '@src/constants';
+
+export const getEntryPointName = (deploy: IDeploy, isAction?: boolean) => {
+ if (deploy?.type === 'CSPR_NATIVE') {
+ return 'Transfer';
+ } else if (deploy?.type === 'ASSOCIATED_KEYS') {
+ return 'Update account';
+ }
+
+ const entryPointName = deploy?.entryPoint
+ ? isAction
+ ? DeployActionEntryPointNameMap[deploy.entryPoint]
+ : DeployPlateEntryPointNameMap[deploy.entryPoint]
+ : ExecutionTypesMap[deploy.executionTypeId ?? 2];
+
+ return entryPointName ?? deploy?.entryPoint;
+};
diff --git a/src/apps/popup/pages/home/components/deploys-list/index.tsx b/src/apps/popup/pages/home/components/deploys-list/index.tsx
index 9cff364f9..381fb6456 100644
--- a/src/apps/popup/pages/home/components/deploys-list/index.tsx
+++ b/src/apps/popup/pages/home/components/deploys-list/index.tsx
@@ -1,34 +1,25 @@
import React, { useEffect } from 'react';
import useInfiniteScroll from 'react-infinite-scroll-hook';
-import { useSelector } from 'react-redux';
-
-import { selectAccountDeploys } from '@background/redux/account-info/selectors';
-
-import { useFetchAccountDeploys } from '@hooks/use-fetch-account-deploys';
-import { useMapAccountDeploysListWithPendingTransactions } from '@hooks/use-map-account-deploys-list-with-pending-transactions';
import { SpacingSize } from '@libs/layout';
-import {
- AccountActivityPlate,
- List,
- LoadingActivityView,
- NoActivityView
-} from '@libs/ui/components';
+import { useFetchDeploys } from '@libs/services/deploys';
+import { List, LoadingActivityView, NoActivityView } from '@libs/ui/components';
+import { DeployPlate } from '@libs/ui/components/deploy-plate/deploy-plate';
export const DeploysList = () => {
- const { loadMoreDeploys, loading, hasNextPage } = useFetchAccountDeploys();
+ const {
+ deploys,
+ isDeploysLoading,
+ fetchDeploysNextPage,
+ hasDeploysNextPage
+ } = useFetchDeploys();
const [sentryRef] = useInfiniteScroll({
- loading,
- hasNextPage,
- onLoadMore: loadMoreDeploys,
+ loading: isDeploysLoading,
+ hasNextPage: hasDeploysNextPage,
+ onLoadMore: fetchDeploysNextPage,
delayInMs: 0
});
- const accountDeploysList = useSelector(selectAccountDeploys);
-
- const { accountDeploysListWithPendingTransactions } =
- useMapAccountDeploysListWithPendingTransactions(accountDeploysList);
-
useEffect(() => {
const container = document.querySelector('#ms-container');
@@ -53,32 +44,28 @@ export const DeploysList = () => {
return (
<>
- {accountDeploysListWithPendingTransactions != null &&
- accountDeploysListWithPendingTransactions?.length > 0 && (
- (
-
- )}
- marginLeftForItemSeparatorLine={54}
- />
- )}
+ {deploys != null && deploys?.length > 0 && (
+ (
+
+ )}
+ marginLeftForItemSeparatorLine={54}
+ />
+ )}
- {(loading || hasNextPage) && }
+ {(isDeploysLoading || hasDeploysNextPage) && (
+
+ )}
- {(accountDeploysListWithPendingTransactions == null ||
- accountDeploysListWithPendingTransactions.length === 0) &&
- !loading && (
-
- )}
+ {(deploys == null || deploys.length === 0) && !isDeploysLoading && (
+
+ )}
>
);
};
diff --git a/src/apps/popup/pages/nft-details/content.tsx b/src/apps/popup/pages/nft-details/content.tsx
index e2bb53b6b..77f6257ad 100644
--- a/src/apps/popup/pages/nft-details/content.tsx
+++ b/src/apps/popup/pages/nft-details/content.tsx
@@ -19,6 +19,7 @@ import { RouterPath, useTypedNavigate } from '@popup/router';
import { accountTrackingIdOfSentNftTokensRemoved } from '@background/redux/account-info/actions';
import { selectAccountTrackingIdOfSentNftTokens } from '@background/redux/account-info/selectors';
import { dispatchToMainStore } from '@background/redux/utils';
+import { selectVaultActiveAccount } from '@background/redux/vault/selectors';
import { useAsyncEffect } from '@hooks/use-async-effect';
@@ -110,6 +111,7 @@ export const NftDetailsContent = ({
const accountTrackingIdOfSentNftTokens = useSelector(
selectAccountTrackingIdOfSentNftTokens
);
+ const activeAccount = useSelector(selectVaultActiveAccount);
const isButtonDisabled = Boolean(
accountTrackingIdOfSentNftTokens[nftToken?.tracking_id!]
@@ -145,7 +147,10 @@ export const NftDetailsContent = ({
const interval = setInterval(async () => {
const { payload: extendedDeployInfo } =
- await dispatchFetchExtendedDeploysInfo(deployHash);
+ await dispatchFetchExtendedDeploysInfo(
+ deployHash,
+ activeAccount?.publicKey!
+ );
if (extendedDeployInfo) {
if (extendedDeployInfo.status === Status.Executed) {
@@ -159,7 +164,11 @@ export const NftDetailsContent = ({
}, 10000);
return () => clearInterval(interval);
- }, [accountTrackingIdOfSentNftTokens, nftToken?.tracking_id]);
+ }, [
+ accountTrackingIdOfSentNftTokens,
+ activeAccount?.publicKey,
+ nftToken?.tracking_id
+ ]);
const tokenStandard = nftToken
? MapNFTTokenStandardToName[nftToken.token_standard_id]
diff --git a/src/apps/popup/pages/sign-with-ledger-in-new-window/index.tsx b/src/apps/popup/pages/sign-with-ledger-in-new-window/index.tsx
index 8f3b04e16..455d052a4 100644
--- a/src/apps/popup/pages/sign-with-ledger-in-new-window/index.tsx
+++ b/src/apps/popup/pages/sign-with-ledger-in-new-window/index.tsx
@@ -2,8 +2,7 @@ import { DeployUtil } from 'casper-js-sdk';
import React, { useState } from 'react';
import { useSelector } from 'react-redux';
-import { fetchAndDispatchExtendedDeployInfo } from '@src/utils';
-
+import { accountPendingDeployHashesChanged } from '@background/redux/account-info/actions';
import {
selectLedgerDeploy,
selectLedgerRecipientToSaveOnSuccess
@@ -55,7 +54,9 @@ export const SignWithLedgerInNewWindowPage = () => {
}
if ('result' in resp) {
- fetchAndDispatchExtendedDeployInfo(resp.result.deploy_hash);
+ dispatchToMainStore(
+ accountPendingDeployHashesChanged(resp.result.deploy_hash)
+ );
}
setIsSuccess(true);
diff --git a/src/apps/popup/pages/stakes/index.tsx b/src/apps/popup/pages/stakes/index.tsx
index 42c97f58b..bb1b32d65 100644
--- a/src/apps/popup/pages/stakes/index.tsx
+++ b/src/apps/popup/pages/stakes/index.tsx
@@ -9,7 +9,6 @@ import {
STAKE_COST_MOTES,
StakeSteps
} from '@src/constants';
-import { fetchAndDispatchExtendedDeployInfo } from '@src/utils';
import { AmountStep } from '@popup/pages/stakes/amount-step';
import { ConfirmStep } from '@popup/pages/stakes/confirm-step';
@@ -24,6 +23,7 @@ import {
import { ValidatorDropdownInput } from '@popup/pages/stakes/validator-dropdown-input';
import { RouterPath, useTypedNavigate } from '@popup/router';
+import { accountPendingDeployHashesChanged } from '@background/redux/account-info/actions';
import { selectAccountBalance } from '@background/redux/account-info/selectors';
import { ledgerDeployChanged } from '@background/redux/ledger/actions';
import {
@@ -180,7 +180,9 @@ export const StakesPage = () => {
sendSignDeploy(signedDeploy, nodeUrl)
.then(resp => {
if ('result' in resp) {
- fetchAndDispatchExtendedDeployInfo(resp.result.deploy_hash);
+ dispatchToMainStore(
+ accountPendingDeployHashesChanged(resp.result.deploy_hash)
+ );
setStakeStep(StakeSteps.Success);
} else {
diff --git a/src/apps/popup/pages/token-details/content.tsx b/src/apps/popup/pages/token-details/content.tsx
index 2074b8c47..0fa17c1f9 100644
--- a/src/apps/popup/pages/token-details/content.tsx
+++ b/src/apps/popup/pages/token-details/content.tsx
@@ -9,8 +9,8 @@ import {
} from '@libs/layout';
import { ContractPackageWithBalance } from '@libs/services/erc20-service';
import {
- CasperTokenActivityList,
- Erc20TokenActivityList,
+ CasperTokenTransferDeploysList,
+ Cep18TokenDeploysList,
Typography
} from '@libs/ui/components';
@@ -41,9 +41,9 @@ export const TokenPageContent: React.FC = ({
{tokenName === 'Casper' ? (
-
+
) : (
-
+
)}
);
diff --git a/src/apps/popup/pages/transfer-nft/index.tsx b/src/apps/popup/pages/transfer-nft/index.tsx
index 3a5b4ba7c..ad7f190e3 100644
--- a/src/apps/popup/pages/transfer-nft/index.tsx
+++ b/src/apps/popup/pages/transfer-nft/index.tsx
@@ -4,10 +4,7 @@ import { Trans, useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import { useParams } from 'react-router-dom';
-import {
- MapNFTTokenStandardToName,
- fetchAndDispatchExtendedDeployInfo
-} from '@src/utils';
+import { MapNFTTokenStandardToName } from '@src/utils';
import {
TransferNFTSteps,
@@ -16,7 +13,10 @@ import {
} from '@popup/pages/transfer-nft/utils';
import { RouterPath, useTypedLocation, useTypedNavigate } from '@popup/router';
-import { accountTrackingIdOfSentNftTokensChanged } from '@background/redux/account-info/actions';
+import {
+ accountPendingDeployHashesChanged,
+ accountTrackingIdOfSentNftTokensChanged
+} from '@background/redux/account-info/actions';
import {
selectAccountBalance,
selectAccountNftTokens
@@ -203,7 +203,7 @@ export const TransferNftPage = () => {
})
);
- fetchAndDispatchExtendedDeployInfo(deployHash);
+ dispatchToMainStore(accountPendingDeployHashesChanged(deployHash));
setTransferNFTStep(TransferNFTSteps.Success);
} else {
diff --git a/src/apps/popup/pages/transfer/index.tsx b/src/apps/popup/pages/transfer/index.tsx
index 24955ad32..f896a7900 100644
--- a/src/apps/popup/pages/transfer/index.tsx
+++ b/src/apps/popup/pages/transfer/index.tsx
@@ -5,10 +5,10 @@ import { useSelector } from 'react-redux';
import styled from 'styled-components';
import { ERC20_PAYMENT_AMOUNT_AVERAGE_MOTES } from '@src/constants';
-import { fetchAndDispatchExtendedDeployInfo } from '@src/utils';
import { RouterPath, useTypedLocation, useTypedNavigate } from '@popup/router';
+import { accountPendingDeployHashesChanged } from '@background/redux/account-info/actions';
import { selectAllPublicKeys } from '@background/redux/contacts/selectors';
import {
ledgerDeployChanged,
@@ -165,7 +165,9 @@ export const TransferPage = () => {
dispatchToMainStore(recipientPublicKeyAdded(recipientPublicKey));
if ('result' in resp) {
- fetchAndDispatchExtendedDeployInfo(resp.result.deploy_hash);
+ dispatchToMainStore(
+ accountPendingDeployHashesChanged(resp.result.deploy_hash)
+ );
setTransferStep(TransactionSteps.Success);
} else {
diff --git a/src/apps/popup/router/paths.ts b/src/apps/popup/router/paths.ts
index 4778a5822..23bb70415 100644
--- a/src/apps/popup/router/paths.ts
+++ b/src/apps/popup/router/paths.ts
@@ -14,7 +14,6 @@ export enum RouterPath {
BackupSecretPhrase = '/backup-secret-phrase',
DownloadAccountKeys = '/download-account-keys',
Transfer = '/transfer',
- ActivityDetails = '/activity-details',
Token = '/token/:tokenName',
Receive = '/receive',
NftDetails = '/nft-details/:contractPackageHash/nfts/:tokenId',
@@ -32,5 +31,6 @@ export enum RouterPath {
ImportAccountFromTorus = '/import-account-from-torus',
BuyCSPR = '/buy-cspr',
ImportAccountFromLedger = '/import-account-from-ledger',
- SignWithLedgerInNewWindow = '/sign-with-ledger-in-new-window'
+ SignWithLedgerInNewWindow = '/sign-with-ledger-in-new-window',
+ DeployDetails = '/deploys-details'
}
diff --git a/src/apps/popup/router/types.ts b/src/apps/popup/router/types.ts
index 1d624bf6a..cb8db1ff4 100644
--- a/src/apps/popup/router/types.ts
+++ b/src/apps/popup/router/types.ts
@@ -1,4 +1,4 @@
-import { ActivityType } from '@src/constants';
+import { IDeploy } from 'casper-wallet-core';
import { TokenType } from '@hooks/use-casper-token';
@@ -6,15 +6,6 @@ import { ErrorLocationState } from '@libs/layout/error/types';
export interface LocationState extends ErrorLocationState {
showNavigationMenu?: boolean;
- activityDetailsData?: {
- fromAccount: string;
- toAccount: string;
- deployHash: string;
- type: ActivityType | null;
- amount?: string;
- symbol?: string;
- isDeploysList?: boolean;
- };
activeTabId?: number;
tokenData?: TokenType | null;
nftData?: {
@@ -22,4 +13,6 @@ export interface LocationState extends ErrorLocationState {
url?: string;
};
recipientPublicKey?: string;
+ deploy?: IDeploy;
+ navigateHome?: boolean;
}
diff --git a/src/assets/icons/associated-keys.svg b/src/assets/icons/associated-keys.svg
new file mode 100644
index 000000000..89fda99c8
--- /dev/null
+++ b/src/assets/icons/associated-keys.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/icons/auction.svg b/src/assets/icons/auction.svg
new file mode 100644
index 000000000..7e2e9df83
--- /dev/null
+++ b/src/assets/icons/auction.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/assets/icons/cep-18-default.svg b/src/assets/icons/cep-18-default.svg
new file mode 100644
index 000000000..b71d10588
--- /dev/null
+++ b/src/assets/icons/cep-18-default.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/copy.svg b/src/assets/icons/copy.svg
index b32b3b9c4..9a9d6afe6 100644
--- a/src/assets/icons/copy.svg
+++ b/src/assets/icons/copy.svg
@@ -1,3 +1,3 @@
diff --git a/src/assets/icons/cspr-market.svg b/src/assets/icons/cspr-market.svg
new file mode 100644
index 000000000..8f702bcce
--- /dev/null
+++ b/src/assets/icons/cspr-market.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/cspr-studio.svg b/src/assets/icons/cspr-studio.svg
new file mode 100644
index 000000000..0866d0562
--- /dev/null
+++ b/src/assets/icons/cspr-studio.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/generic.svg b/src/assets/icons/generic.svg
new file mode 100644
index 000000000..05dbbdd15
--- /dev/null
+++ b/src/assets/icons/generic.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/icons/nft-contract-icon.svg b/src/assets/icons/nft-contract-icon.svg
index 9dea5d081..60911cd6e 100644
--- a/src/assets/icons/nft-contract-icon.svg
+++ b/src/assets/icons/nft-contract-icon.svg
@@ -1,4 +1,6 @@
-