diff --git a/package-lock.json b/package-lock.json index 5faf5988c..812de272e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.7.0", "dependencies": { "@react-spring/web": "^9.6.1", - "@secretkeylabs/xverse-core": "0.16.1", + "@secretkeylabs/xverse-core": "0.17.0", "@stacks/connect": "^6.10.2", "@stacks/encryption": "4.3.5", "@stacks/stacks-blockchain-api-types": "^6.1.1", @@ -50,7 +50,7 @@ "react-tooltip": "^5.4.0", "redux": "^4.0.5", "redux-persist": "^6.0.0", - "sats-connect": "^0.1.11", + "sats-connect": "0.2.0", "stream-browserify": "^3.0.0", "string-to-color": "^2.2.2", "styled-components": "^5.3.5", @@ -140,30 +140,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "version": "7.21.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", + "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -179,11 +179,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", + "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", "dependencies": { - "@babel/types": "^7.21.4", + "@babel/types": "^7.21.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -204,12 +204,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", + "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.4", + "@babel/compat-data": "^7.21.5", "@babel/helper-validator-option": "^7.21.0", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", @@ -223,9 +223,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", + "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", "engines": { "node": ">=6.9.0" } @@ -265,40 +265,40 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", + "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", + "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", + "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -316,9 +316,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", "engines": { "node": ">=6.9.0" } @@ -341,14 +341,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", + "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", "dev": true, "dependencies": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -368,9 +368,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", + "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -571,16 +571,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz", + "integrity": "sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -641,9 +641,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -665,18 +665,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", + "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", "dependencies": { "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", + "@babel/generator": "^7.21.5", + "@babel/helper-environment-visitor": "^7.21.5", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", + "@babel/parser": "^7.21.5", + "@babel/types": "^7.21.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -685,11 +685,11 @@ } }, "node_modules/@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, @@ -713,9 +713,9 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.8.tgz", + "integrity": "sha512-gxNky50AJL3AlkbjvTARiwAqei6/tNUxDZPSKd+3jqWVM3AmdVTTdpjHorR/an/M0VJqdsuq5oGcFH+rjtyujQ==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", @@ -727,7 +727,7 @@ "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.1.3" + "stylis": "4.1.4" } }, "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { @@ -750,15 +750,15 @@ } }, "node_modules/@emotion/cache": { - "version": "11.10.7", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.7.tgz", - "integrity": "sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.8.tgz", + "integrity": "sha512-5fyqGHi51LU95o7qQ/vD1jyvC4uCY5GcBT+UgP4LHdpO9jPDlXqhrRr9/wCKmfoAvh5G/F7aOh4MwQa+8uEqhA==", "dependencies": { "@emotion/memoize": "^0.8.0", "@emotion/sheet": "^1.2.1", "@emotion/utils": "^1.2.0", "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" + "stylis": "4.1.4" } }, "node_modules/@emotion/hash": { @@ -780,13 +780,13 @@ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "node_modules/@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.8.tgz", + "integrity": "sha512-ZfGfiABtJ1P1OXqOBsW08EgCDp5fK6C5I8hUJauc/VcJBGSzqAirMnFslhFWnZJ/w5HxPI36XbvMV0l4KZHl+w==", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", + "@emotion/babel-plugin": "^11.10.8", + "@emotion/cache": "^11.10.8", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0", @@ -863,9 +863,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -1995,9 +1995,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", - "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.0.tgz", + "integrity": "sha512-N13NRw3T2+6Xi9J//3CGLsK2OqC8NMme3d/YX+nh05K9YHWGcv8DycHJrqGScSP4T75o8IN6nqIMhVFU8ohg8w==", "engines": { "node": ">=14" } @@ -2062,9 +2062,9 @@ } }, "node_modules/@secretkeylabs/xverse-core": { - "version": "0.16.1", - "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.16.1/7f0d2811fd58b9aed2614a3e7695e773b3526801", - "integrity": "sha512-DgSxjnJDzVkmZoNSiOZOG99o0wk2AzYROwvoQ2Bq31SYsXe5mRZ48LUUgGx7c1sgdPNJ97a//tQqmFH2lPKYbw==", + "version": "0.17.0", + "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.17.0/bca930299524780c42a6d403c531b86e17021980", + "integrity": "sha512-/cmeXo44tWnYsKhuC7i2i7eNFPDgPHyEyaWUtfVZwrxw0PNNJ0DC/kzsY6drdu1B97ZY+BQxJ/ORD4qroJh0bA==", "license": "ISC", "dependencies": { "@noble/secp256k1": "^1.7.1", @@ -2081,13 +2081,15 @@ "bip39": "3.0.3", "bitcoin-address-validation": "^2.2.1", "bitcoinjs-lib": "5.2.0", + "bitcoinjs-message": "^2.2.0", "bn.js": "^5.1.3", "buffer": "6.0.3", "c32check": "^2.0.0", "ecpair": "^2.1.0", "jsontokens": "^4.0.1", "process": "^0.11.10", - "util": "^0.12.4" + "util": "^0.12.4", + "varuint-bitcoin": "^1.1.2" } }, "node_modules/@secretkeylabs/xverse-core/node_modules/@noble/hashes": { @@ -2133,9 +2135,9 @@ } }, "node_modules/@secretkeylabs/xverse-core/node_modules/@stacks/encryption/node_modules/@stacks/common": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.0.0.tgz", - "integrity": "sha512-tETwccvbYvaZ7u3ZucWNMOIPN97r6IPeZXKIFhLc1KSVaWSGEPTtZcwVp+Rz3mu2XgI2pg37SUrOWXSL7OOkDw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.5.2.tgz", + "integrity": "sha512-tnkyEIA7YgX9GIkqlHocQPPax25uaboJ4aTX5wVs6kAGXY10+XI7VamRG4o+4DqnFVKwvIHR2fGcxdhtxNb/+Q==", "dependencies": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" @@ -2159,42 +2161,6 @@ "smart-buffer": "^4.1.0" } }, - "node_modules/@secretkeylabs/xverse-core/node_modules/@stacks/transactions/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/@secretkeylabs/xverse-core/node_modules/@stacks/transactions/node_modules/c32check": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.1.3.tgz", - "integrity": "sha512-ADADE/PjAbJRlwpG3ShaOMbBUlJJZO7xaYSRD5Tub6PixQlgR4s36y9cvMf/YRGpkqX+QOxIdMw216iC320q9A==", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.6.0", - "cross-sha256": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@secretkeylabs/xverse-core/node_modules/axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", @@ -2236,6 +2202,42 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" }, + "node_modules/@secretkeylabs/xverse-core/node_modules/c32check": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.1.3.tgz", + "integrity": "sha512-ADADE/PjAbJRlwpG3ShaOMbBUlJJZO7xaYSRD5Tub6PixQlgR4s36y9cvMf/YRGpkqX+QOxIdMw216iC320q9A==", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.6.0", + "cross-sha256": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@secretkeylabs/xverse-core/node_modules/c32check/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -2463,14 +2465,14 @@ "integrity": "sha512-zrjKPGJN4p1azzmh8j0Yj+ZjQ0L9F01qJjAxOtBpapmFbGr1NUuPT1GthIg76y+dobdjSDPN39LpoJG/FbWFLw==" }, "node_modules/@stacks/storage": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.5.1.tgz", - "integrity": "sha512-4taTVk1Jw4Xu6+mG/lWDDWmoay8+IBoW3mBKuKmjKVzDxlTNP54TPjoVv0qRXlwHDBqTLTGq6nD4fWERd0XHpQ==", - "dependencies": { - "@stacks/auth": "^6.5.1", - "@stacks/common": "^6.0.0", - "@stacks/encryption": "^6.5.1", - "@stacks/network": "^6.5.1", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.5.2.tgz", + "integrity": "sha512-D8gq+sNSyO9+qc/HGjg8LCQoM9eWNvu3bhkLSygZnLLaxxdXOB9e9pkIXCDK30FNmKB0fhkRC/tk/AsKFcOULw==", + "dependencies": { + "@stacks/auth": "^6.5.2", + "@stacks/common": "^6.5.2", + "@stacks/encryption": "^6.5.2", + "@stacks/network": "^6.5.2", "base64-js": "^1.5.1", "jsontokens": "^4.0.1" } @@ -2502,36 +2504,36 @@ } }, "node_modules/@stacks/storage/node_modules/@stacks/auth": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.5.1.tgz", - "integrity": "sha512-t1f+Hf384Gcp8bI2ulSqAq5/1Osszha1VYr/uPVK7IzHutvypPib7mT5aK14/D91rnGp4JG6JlrygQ1WBZoVtQ==", - "dependencies": { - "@stacks/common": "^6.0.0", - "@stacks/encryption": "^6.5.1", - "@stacks/network": "^6.5.1", - "@stacks/profile": "^6.5.1", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.5.2.tgz", + "integrity": "sha512-kIdfpoPAIyJ/WBvJKaBLW/87A2ew8dKIUnv4T1qeZfcJwWc6qyR3bcI5gCMvYlJ460SVi1ajSnyANPWU3qIGaQ==", + "dependencies": { + "@stacks/common": "^6.5.2", + "@stacks/encryption": "^6.5.2", + "@stacks/network": "^6.5.2", + "@stacks/profile": "^6.5.2", "cross-fetch": "^3.1.5", "jsontokens": "^4.0.1" } }, "node_modules/@stacks/storage/node_modules/@stacks/common": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.0.0.tgz", - "integrity": "sha512-tETwccvbYvaZ7u3ZucWNMOIPN97r6IPeZXKIFhLc1KSVaWSGEPTtZcwVp+Rz3mu2XgI2pg37SUrOWXSL7OOkDw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.5.2.tgz", + "integrity": "sha512-tnkyEIA7YgX9GIkqlHocQPPax25uaboJ4aTX5wVs6kAGXY10+XI7VamRG4o+4DqnFVKwvIHR2fGcxdhtxNb/+Q==", "dependencies": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" } }, "node_modules/@stacks/storage/node_modules/@stacks/encryption": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.5.1.tgz", - "integrity": "sha512-QB33fMOQPHhjB6pXT0HuM4ZcB2/E0oiBWpI+G9eYxLO2KZODJ64iF0z28IdfWSluRuOsLCh45cxm9pdaIQ/8+A==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.5.2.tgz", + "integrity": "sha512-+xh0aEIal9XZ/E3XEKP7KklbhWYcaXUmDboJdj2cCKlVv3g7gzKWNgCEsc8+6asbKjy2ClAYvIEFaQRDDjFljw==", "dependencies": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", "@scure/bip39": "1.1.0", - "@stacks/common": "^6.0.0", + "@stacks/common": "^6.5.2", "@types/node": "^18.0.4", "base64-js": "^1.5.1", "bs58": "^5.0.0", @@ -2540,36 +2542,36 @@ } }, "node_modules/@stacks/storage/node_modules/@stacks/network": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.5.1.tgz", - "integrity": "sha512-VPsozRMVJ8Qe4qGdcvESv9L6YWFrzFlelv+El8vL8vTIqJOanfSyRJgUuPVil/V1f5Mf4p38gzdKCJmibxzVlw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.5.2.tgz", + "integrity": "sha512-+XNneecXCitis7OGDoCMqfKp0j4SICaij6XN9JTq+pAoaCbuJqLRZrrVP/ApkWbotTzeVZIbrZPqMLqkdgGTrg==", "dependencies": { - "@stacks/common": "^6.0.0", + "@stacks/common": "^6.5.2", "cross-fetch": "^3.1.5" } }, "node_modules/@stacks/storage/node_modules/@stacks/profile": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.5.1.tgz", - "integrity": "sha512-YN6Qnel7rfFfMw/k/zfI3y4z6anei4SPF6CXmiYQ1t/dA58z3d3QA7ojg4i5elmbmR2soXByGDovazjuqKj8Aw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.5.2.tgz", + "integrity": "sha512-OtVHmqyMK/Iumo/sXHswqEZIIj/ZBgKyR5Wc609rcC1ZPpN60kXmLLzMq9cCKYZWxFLM1utjYskkGL0FcU5wQw==", "dependencies": { - "@stacks/common": "^6.0.0", - "@stacks/network": "^6.5.1", - "@stacks/transactions": "^6.5.1", + "@stacks/common": "^6.5.2", + "@stacks/network": "^6.5.2", + "@stacks/transactions": "^6.5.2", "jsontokens": "^4.0.1", "schema-inspector": "^2.0.2", "zone-file": "^2.0.0-beta.3" } }, "node_modules/@stacks/storage/node_modules/@stacks/transactions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.5.1.tgz", - "integrity": "sha512-Zb2Bwh/On3Uga47975RJjyfEaGiqgqpvA3FqucoZt6IOQoPd9yaTdw4GoARnAIXmYd8/1gEZN+8aE+gHLl1wPg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.5.2.tgz", + "integrity": "sha512-xL4XF4xSFFJ+VMzeahBenGdg1T+y0Q0fSNA09jz7knTnnXvdAzzC+RP59xzuIjrAY/IWYO3X1sf0MGm9IIhYOg==", "dependencies": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", - "@stacks/common": "^6.0.0", - "@stacks/network": "^6.5.1", + "@stacks/common": "^6.5.2", + "@stacks/network": "^6.5.2", "c32check": "^2.0.0", "lodash.clonedeep": "^4.5.0" } @@ -3177,9 +3179,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.4.tgz", - "integrity": "sha512-TLG7CsGZZmX9aDF78UuJxnNTfQyRUFU0OYIVyIblr0/wd/HvsIo8wmuB90CszeD2MtLLAE9Tt4cWvk+KVkyGIw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.5.tgz", + "integrity": "sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -3232,9 +3234,9 @@ } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -3280,14 +3282,15 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "version": "4.17.34", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz", + "integrity": "sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==", "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/filesystem": { @@ -3400,9 +3403,9 @@ "dev": true }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "node_modules/@types/minimatch": { @@ -3412,9 +3415,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.16.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz", - "integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==" + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3507,6 +3510,16 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -3599,15 +3612,15 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz", - "integrity": "sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz", + "integrity": "sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/type-utils": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/type-utils": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -3666,14 +3679,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.1.tgz", - "integrity": "sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz", + "integrity": "sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/typescript-estree": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/typescript-estree": "5.59.2", "debug": "^4.3.4" }, "engines": { @@ -3693,13 +3706,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz", - "integrity": "sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", + "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/visitor-keys": "5.59.1" + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3710,13 +3723,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz", - "integrity": "sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz", + "integrity": "sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/typescript-estree": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -3737,9 +3750,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.1.tgz", - "integrity": "sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3750,13 +3763,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz", - "integrity": "sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", + "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/visitor-keys": "5.59.1", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3810,17 +3823,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.1.tgz", - "integrity": "sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.2.tgz", + "integrity": "sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/typescript-estree": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/typescript-estree": "5.59.2", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -3869,12 +3882,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz", - "integrity": "sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.1", + "@typescript-eslint/types": "5.59.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4329,7 +4342,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -4486,9 +4498,9 @@ } }, "node_modules/axios": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.6.tgz", - "integrity": "sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -5813,6 +5825,27 @@ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, + "node_modules/bitcoinjs-message": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bitcoinjs-message/-/bitcoinjs-message-2.2.0.tgz", + "integrity": "sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==", + "dependencies": { + "bech32": "^1.1.3", + "bs58check": "^2.1.2", + "buffer-equals": "^1.0.3", + "create-hash": "^1.1.2", + "secp256k1": "^3.0.1", + "varuint-bitcoin": "^1.0.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/bitcoinjs-message/node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", @@ -6094,6 +6127,14 @@ "ieee754": "^1.2.1" } }, + "node_modules/buffer-equals": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz", + "integrity": "sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -6174,9 +6215,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001481", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", - "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", + "version": "1.0.30001482", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz", + "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==", "dev": true, "funding": [ { @@ -6977,9 +7018,12 @@ } }, "node_modules/date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, "engines": { "node": ">=0.11" }, @@ -7025,15 +7069,16 @@ "dev": true }, "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", "dependencies": { + "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", + "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -7041,7 +7086,7 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", @@ -7415,6 +7460,19 @@ "tslib": "^2.0.3" } }, + "node_modules/drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==", + "dependencies": { + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -7443,9 +7501,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.372", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.372.tgz", - "integrity": "sha512-MrlFq/j+TYHOjeWsWGYfzevc25HNeJdsF6qaLFrqBTRWZQtWkb1myq/Q2veLWezVaa5OcSZ99CFwTT4aF4Mung==", + "version": "1.4.380", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz", + "integrity": "sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg==", "dev": true }, "node_modules/elliptic": { @@ -13549,9 +13607,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", + "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -14025,9 +14083,9 @@ } }, "node_modules/react-hot-toast": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.0.tgz", - "integrity": "sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz", + "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==", "dependencies": { "goober": "^2.1.10" }, @@ -14168,11 +14226,11 @@ } }, "node_modules/react-router": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", - "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.0.tgz", + "integrity": "sha512-hTm6KKNpj9SDG4syIWRjCU219O0RZY8RUPobCFt9p+PlF7nnkRgMoh2DieTKvw3F3Mw6zg565HGnSv8BuoY5oQ==", "dependencies": { - "@remix-run/router": "1.5.0" + "@remix-run/router": "1.6.0" }, "engines": { "node": ">=14" @@ -14182,12 +14240,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", - "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.0.tgz", + "integrity": "sha512-Q3mK1c/CYoF++J6ZINz7EZzwlgSOZK/kc7lxIA7PhtWhKju4KfF1WHqlx0kVCIFJAWztuYVpXZeljEbds8z4Og==", "dependencies": { - "@remix-run/router": "1.5.0", - "react-router": "6.10.0" + "@remix-run/router": "1.6.0", + "react-router": "6.11.0" }, "engines": { "node": ">=14" @@ -14198,9 +14256,9 @@ } }, "node_modules/react-select": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.2.tgz", - "integrity": "sha512-cTlJkQ8YjV6T/js8wW0owTzht0hHGABh29vjLscY4HfZGkv7hc3FFTmRp9NzY/Ib1uQ36GieAKEjxpHdpCFpcA==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.3.tgz", + "integrity": "sha512-z8i3NCuFFWL3w27xq92rBkVI2onT0jzIIPe480HlBjXJ3b5o6Q+Clp4ydyeKrj9DZZ3lrjawwLC5NGl0FSvUDg==", "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", @@ -14668,9 +14726,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sats-connect": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/sats-connect/-/sats-connect-0.1.11.tgz", - "integrity": "sha512-8o6TJ+loIjrtzl002xFwbGfFlZYWcN7FDE/6alHTRUOFgFLKQ+ICcslxEg1tSqzQNRYpBnMv2kJlP6Zz9BAj0g==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sats-connect/-/sats-connect-0.2.0.tgz", + "integrity": "sha512-PEeqgPmAASPwGnBRmKYAmOey2HRbzW733EOVia067MoDAoai+/Buzx1NzaJ5FXZzpzHbG2YFQDp+43vkFWTQxw==", "dependencies": { "jsontokens": "^4.0.1", "process": "^0.11.10", @@ -14723,6 +14781,30 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/secp256k1": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", + "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.5.2", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/secp256k1/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -15408,9 +15490,9 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.4.tgz", + "integrity": "sha512-USf5pszRYwuE6hg9by0OkKChkQYEXfkeTtm0xKw+jqQhwyjCVLdYyMBK7R+n7dhzsblAWJnGxju4vxq5eH20GQ==" }, "node_modules/supports-color": { "version": "5.5.0", @@ -16474,9 +16556,9 @@ } }, "node_modules/webpack": { - "version": "5.80.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", - "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", + "version": "5.81.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.81.0.tgz", + "integrity": "sha512-AAjaJ9S4hYCVODKLQTgG5p5e11hiMawBwV2v8MYLE0C/6UAGLuAF4n1qa9GOwdxnicaP+5k6M5HrLmD4+gIB8Q==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -17167,27 +17249,27 @@ } }, "@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "version": "7.21.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", + "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", "dev": true }, "@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -17196,11 +17278,11 @@ } }, "@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", + "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", "requires": { - "@babel/types": "^7.21.4", + "@babel/types": "^7.21.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -17215,12 +17297,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", + "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", "dev": true, "requires": { - "@babel/compat-data": "^7.21.4", + "@babel/compat-data": "^7.21.5", "@babel/helper-validator-option": "^7.21.0", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", @@ -17228,9 +17310,9 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", + "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==" }, "@babel/helper-function-name": { "version": "7.21.0", @@ -17258,34 +17340,34 @@ } }, "@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", + "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", + "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", + "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", "dev": true, "requires": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.21.5" } }, "@babel/helper-split-export-declaration": { @@ -17297,9 +17379,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", @@ -17313,14 +17395,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", + "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", "dev": true, "requires": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" } }, "@babel/highlight": { @@ -17334,9 +17416,9 @@ } }, "@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==" + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", + "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -17474,16 +17556,16 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz", + "integrity": "sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/types": "^7.21.5" } }, "@babel/plugin-transform-react-jsx-development": { @@ -17520,9 +17602,9 @@ } }, "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -17538,28 +17620,28 @@ } }, "@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", + "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", "requires": { "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", + "@babel/generator": "^7.21.5", + "@babel/helper-environment-visitor": "^7.21.5", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", + "@babel/parser": "^7.21.5", + "@babel/types": "^7.21.5", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", "requires": { - "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } @@ -17577,9 +17659,9 @@ "dev": true }, "@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.8.tgz", + "integrity": "sha512-gxNky50AJL3AlkbjvTARiwAqei6/tNUxDZPSKd+3jqWVM3AmdVTTdpjHorR/an/M0VJqdsuq5oGcFH+rjtyujQ==", "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", @@ -17591,7 +17673,7 @@ "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.1.3" + "stylis": "4.1.4" }, "dependencies": { "escape-string-regexp": { @@ -17607,15 +17689,15 @@ } }, "@emotion/cache": { - "version": "11.10.7", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.7.tgz", - "integrity": "sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.8.tgz", + "integrity": "sha512-5fyqGHi51LU95o7qQ/vD1jyvC4uCY5GcBT+UgP4LHdpO9jPDlXqhrRr9/wCKmfoAvh5G/F7aOh4MwQa+8uEqhA==", "requires": { "@emotion/memoize": "^0.8.0", "@emotion/sheet": "^1.2.1", "@emotion/utils": "^1.2.0", "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" + "stylis": "4.1.4" } }, "@emotion/hash": { @@ -17637,13 +17719,13 @@ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "version": "11.10.8", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.8.tgz", + "integrity": "sha512-ZfGfiABtJ1P1OXqOBsW08EgCDp5fK6C5I8hUJauc/VcJBGSzqAirMnFslhFWnZJ/w5HxPI36XbvMV0l4KZHl+w==", "requires": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", + "@emotion/babel-plugin": "^11.10.8", + "@emotion/cache": "^11.10.8", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0", @@ -17704,9 +17786,9 @@ } }, "@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", "dev": true }, "@eslint/eslintrc": { @@ -18531,9 +18613,9 @@ } }, "@remix-run/router": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", - "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.0.tgz", + "integrity": "sha512-N13NRw3T2+6Xi9J//3CGLsK2OqC8NMme3d/YX+nh05K9YHWGcv8DycHJrqGScSP4T75o8IN6nqIMhVFU8ohg8w==" }, "@scure/base": { "version": "1.1.1", @@ -18571,9 +18653,9 @@ } }, "@secretkeylabs/xverse-core": { - "version": "0.16.1", - "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.16.1/7f0d2811fd58b9aed2614a3e7695e773b3526801", - "integrity": "sha512-DgSxjnJDzVkmZoNSiOZOG99o0wk2AzYROwvoQ2Bq31SYsXe5mRZ48LUUgGx7c1sgdPNJ97a//tQqmFH2lPKYbw==", + "version": "0.17.0", + "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.17.0/bca930299524780c42a6d403c531b86e17021980", + "integrity": "sha512-/cmeXo44tWnYsKhuC7i2i7eNFPDgPHyEyaWUtfVZwrxw0PNNJ0DC/kzsY6drdu1B97ZY+BQxJ/ORD4qroJh0bA==", "requires": { "@noble/secp256k1": "^1.7.1", "@scure/base": "^1.1.1", @@ -18589,13 +18671,15 @@ "bip39": "3.0.3", "bitcoin-address-validation": "^2.2.1", "bitcoinjs-lib": "5.2.0", + "bitcoinjs-message": "^2.2.0", "bn.js": "^5.1.3", "buffer": "6.0.3", "c32check": "^2.0.0", "ecpair": "^2.1.0", "jsontokens": "^4.0.1", "process": "^0.11.10", - "util": "^0.12.4" + "util": "^0.12.4", + "varuint-bitcoin": "^1.1.2" }, "dependencies": { "@noble/hashes": { @@ -18629,9 +18713,9 @@ }, "dependencies": { "@stacks/common": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.0.0.tgz", - "integrity": "sha512-tETwccvbYvaZ7u3ZucWNMOIPN97r6IPeZXKIFhLc1KSVaWSGEPTtZcwVp+Rz3mu2XgI2pg37SUrOWXSL7OOkDw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.5.2.tgz", + "integrity": "sha512-tnkyEIA7YgX9GIkqlHocQPPax25uaboJ4aTX5wVs6kAGXY10+XI7VamRG4o+4DqnFVKwvIHR2fGcxdhtxNb/+Q==", "requires": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" @@ -18655,27 +18739,6 @@ "ripemd160-min": "^0.0.6", "sha.js": "^2.4.11", "smart-buffer": "^4.1.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "c32check": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.1.3.tgz", - "integrity": "sha512-ADADE/PjAbJRlwpG3ShaOMbBUlJJZO7xaYSRD5Tub6PixQlgR4s36y9cvMf/YRGpkqX+QOxIdMw216iC320q9A==", - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.6.0", - "cross-sha256": "^1.2.0" - } - } } }, "axios": { @@ -18717,6 +18780,27 @@ "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" } } + }, + "c32check": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.1.3.tgz", + "integrity": "sha512-ADADE/PjAbJRlwpG3ShaOMbBUlJJZO7xaYSRD5Tub6PixQlgR4s36y9cvMf/YRGpkqX+QOxIdMw216iC320q9A==", + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.6.0", + "cross-sha256": "^1.2.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } } } }, @@ -18938,14 +19022,14 @@ "integrity": "sha512-zrjKPGJN4p1azzmh8j0Yj+ZjQ0L9F01qJjAxOtBpapmFbGr1NUuPT1GthIg76y+dobdjSDPN39LpoJG/FbWFLw==" }, "@stacks/storage": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.5.1.tgz", - "integrity": "sha512-4taTVk1Jw4Xu6+mG/lWDDWmoay8+IBoW3mBKuKmjKVzDxlTNP54TPjoVv0qRXlwHDBqTLTGq6nD4fWERd0XHpQ==", - "requires": { - "@stacks/auth": "^6.5.1", - "@stacks/common": "^6.0.0", - "@stacks/encryption": "^6.5.1", - "@stacks/network": "^6.5.1", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.5.2.tgz", + "integrity": "sha512-D8gq+sNSyO9+qc/HGjg8LCQoM9eWNvu3bhkLSygZnLLaxxdXOB9e9pkIXCDK30FNmKB0fhkRC/tk/AsKFcOULw==", + "requires": { + "@stacks/auth": "^6.5.2", + "@stacks/common": "^6.5.2", + "@stacks/encryption": "^6.5.2", + "@stacks/network": "^6.5.2", "base64-js": "^1.5.1", "jsontokens": "^4.0.1" }, @@ -18965,36 +19049,36 @@ } }, "@stacks/auth": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.5.1.tgz", - "integrity": "sha512-t1f+Hf384Gcp8bI2ulSqAq5/1Osszha1VYr/uPVK7IzHutvypPib7mT5aK14/D91rnGp4JG6JlrygQ1WBZoVtQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.5.2.tgz", + "integrity": "sha512-kIdfpoPAIyJ/WBvJKaBLW/87A2ew8dKIUnv4T1qeZfcJwWc6qyR3bcI5gCMvYlJ460SVi1ajSnyANPWU3qIGaQ==", "requires": { - "@stacks/common": "^6.0.0", - "@stacks/encryption": "^6.5.1", - "@stacks/network": "^6.5.1", - "@stacks/profile": "^6.5.1", + "@stacks/common": "^6.5.2", + "@stacks/encryption": "^6.5.2", + "@stacks/network": "^6.5.2", + "@stacks/profile": "^6.5.2", "cross-fetch": "^3.1.5", "jsontokens": "^4.0.1" } }, "@stacks/common": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.0.0.tgz", - "integrity": "sha512-tETwccvbYvaZ7u3ZucWNMOIPN97r6IPeZXKIFhLc1KSVaWSGEPTtZcwVp+Rz3mu2XgI2pg37SUrOWXSL7OOkDw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.5.2.tgz", + "integrity": "sha512-tnkyEIA7YgX9GIkqlHocQPPax25uaboJ4aTX5wVs6kAGXY10+XI7VamRG4o+4DqnFVKwvIHR2fGcxdhtxNb/+Q==", "requires": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" } }, "@stacks/encryption": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.5.1.tgz", - "integrity": "sha512-QB33fMOQPHhjB6pXT0HuM4ZcB2/E0oiBWpI+G9eYxLO2KZODJ64iF0z28IdfWSluRuOsLCh45cxm9pdaIQ/8+A==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.5.2.tgz", + "integrity": "sha512-+xh0aEIal9XZ/E3XEKP7KklbhWYcaXUmDboJdj2cCKlVv3g7gzKWNgCEsc8+6asbKjy2ClAYvIEFaQRDDjFljw==", "requires": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", "@scure/bip39": "1.1.0", - "@stacks/common": "^6.0.0", + "@stacks/common": "^6.5.2", "@types/node": "^18.0.4", "base64-js": "^1.5.1", "bs58": "^5.0.0", @@ -19003,36 +19087,36 @@ } }, "@stacks/network": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.5.1.tgz", - "integrity": "sha512-VPsozRMVJ8Qe4qGdcvESv9L6YWFrzFlelv+El8vL8vTIqJOanfSyRJgUuPVil/V1f5Mf4p38gzdKCJmibxzVlw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.5.2.tgz", + "integrity": "sha512-+XNneecXCitis7OGDoCMqfKp0j4SICaij6XN9JTq+pAoaCbuJqLRZrrVP/ApkWbotTzeVZIbrZPqMLqkdgGTrg==", "requires": { - "@stacks/common": "^6.0.0", + "@stacks/common": "^6.5.2", "cross-fetch": "^3.1.5" } }, "@stacks/profile": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.5.1.tgz", - "integrity": "sha512-YN6Qnel7rfFfMw/k/zfI3y4z6anei4SPF6CXmiYQ1t/dA58z3d3QA7ojg4i5elmbmR2soXByGDovazjuqKj8Aw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.5.2.tgz", + "integrity": "sha512-OtVHmqyMK/Iumo/sXHswqEZIIj/ZBgKyR5Wc609rcC1ZPpN60kXmLLzMq9cCKYZWxFLM1utjYskkGL0FcU5wQw==", "requires": { - "@stacks/common": "^6.0.0", - "@stacks/network": "^6.5.1", - "@stacks/transactions": "^6.5.1", + "@stacks/common": "^6.5.2", + "@stacks/network": "^6.5.2", + "@stacks/transactions": "^6.5.2", "jsontokens": "^4.0.1", "schema-inspector": "^2.0.2", "zone-file": "^2.0.0-beta.3" } }, "@stacks/transactions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.5.1.tgz", - "integrity": "sha512-Zb2Bwh/On3Uga47975RJjyfEaGiqgqpvA3FqucoZt6IOQoPd9yaTdw4GoARnAIXmYd8/1gEZN+8aE+gHLl1wPg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.5.2.tgz", + "integrity": "sha512-xL4XF4xSFFJ+VMzeahBenGdg1T+y0Q0fSNA09jz7knTnnXvdAzzC+RP59xzuIjrAY/IWYO3X1sf0MGm9IIhYOg==", "requires": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", - "@stacks/common": "^6.0.0", - "@stacks/network": "^6.5.1", + "@stacks/common": "^6.5.2", + "@stacks/network": "^6.5.2", "c32check": "^2.0.0", "lodash.clonedeep": "^4.5.0" } @@ -19504,9 +19588,9 @@ } }, "@types/babel__traverse": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.4.tgz", - "integrity": "sha512-TLG7CsGZZmX9aDF78UuJxnNTfQyRUFU0OYIVyIblr0/wd/HvsIo8wmuB90CszeD2MtLLAE9Tt4cWvk+KVkyGIw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.5.tgz", + "integrity": "sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -19559,9 +19643,9 @@ } }, "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dev": true, "requires": { "@types/express-serve-static-core": "*", @@ -19607,14 +19691,15 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "version": "4.17.34", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz", + "integrity": "sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==", "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "@types/filesystem": { @@ -19727,9 +19812,9 @@ "dev": true }, "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "@types/minimatch": { @@ -19739,9 +19824,9 @@ "dev": true }, "@types/node": { - "version": "18.16.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz", - "integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==" + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==" }, "@types/parse-json": { "version": "4.0.0", @@ -19834,6 +19919,16 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -19926,15 +20021,15 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz", - "integrity": "sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz", + "integrity": "sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/type-utils": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/type-utils": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -19970,53 +20065,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.1.tgz", - "integrity": "sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz", + "integrity": "sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/typescript-estree": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/typescript-estree": "5.59.2", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz", - "integrity": "sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", + "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/visitor-keys": "5.59.1" + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2" } }, "@typescript-eslint/type-utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz", - "integrity": "sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz", + "integrity": "sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/typescript-estree": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.1.tgz", - "integrity": "sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz", - "integrity": "sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", + "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/visitor-keys": "5.59.1", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -20051,17 +20146,17 @@ } }, "@typescript-eslint/utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.1.tgz", - "integrity": "sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.2.tgz", + "integrity": "sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/typescript-estree": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/typescript-estree": "5.59.2", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -20093,12 +20188,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz", - "integrity": "sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", "dev": true, "requires": { - "@typescript-eslint/types": "5.59.1", + "@typescript-eslint/types": "5.59.2", "eslint-visitor-keys": "^3.3.0" } }, @@ -20469,7 +20564,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, "requires": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -20592,9 +20686,9 @@ "dev": true }, "axios": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.6.tgz", - "integrity": "sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -21795,6 +21889,26 @@ } } }, + "bitcoinjs-message": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bitcoinjs-message/-/bitcoinjs-message-2.2.0.tgz", + "integrity": "sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==", + "requires": { + "bech32": "^1.1.3", + "bs58check": "^2.1.2", + "buffer-equals": "^1.0.3", + "create-hash": "^1.1.2", + "secp256k1": "^3.0.1", + "varuint-bitcoin": "^1.0.1" + }, + "dependencies": { + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + } + } + }, "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", @@ -22034,6 +22148,11 @@ "ieee754": "^1.2.1" } }, + "buffer-equals": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz", + "integrity": "sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==" + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -22096,9 +22215,9 @@ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" }, "caniuse-lite": { - "version": "1.0.30001481", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", - "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", + "version": "1.0.30001482", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz", + "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==", "dev": true }, "chalk": { @@ -22717,9 +22836,12 @@ } }, "date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "requires": { + "@babel/runtime": "^7.21.0" + } }, "debug": { "version": "4.3.4", @@ -22747,15 +22869,16 @@ "dev": true }, "deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", "requires": { + "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", + "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -22763,7 +22886,7 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", @@ -23059,6 +23182,16 @@ "tslib": "^2.0.3" } }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==", + "requires": { + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" + } + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -23084,9 +23217,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.372", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.372.tgz", - "integrity": "sha512-MrlFq/j+TYHOjeWsWGYfzevc25HNeJdsF6qaLFrqBTRWZQtWkb1myq/Q2veLWezVaa5OcSZ99CFwTT4aF4Mung==", + "version": "1.4.380", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz", + "integrity": "sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg==", "dev": true }, "elliptic": { @@ -27653,9 +27786,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", + "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -28006,9 +28139,9 @@ } }, "react-hot-toast": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.0.tgz", - "integrity": "sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz", + "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==", "requires": { "goober": "^2.1.10" } @@ -28095,26 +28228,26 @@ "requires": {} }, "react-router": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", - "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.0.tgz", + "integrity": "sha512-hTm6KKNpj9SDG4syIWRjCU219O0RZY8RUPobCFt9p+PlF7nnkRgMoh2DieTKvw3F3Mw6zg565HGnSv8BuoY5oQ==", "requires": { - "@remix-run/router": "1.5.0" + "@remix-run/router": "1.6.0" } }, "react-router-dom": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", - "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.0.tgz", + "integrity": "sha512-Q3mK1c/CYoF++J6ZINz7EZzwlgSOZK/kc7lxIA7PhtWhKju4KfF1WHqlx0kVCIFJAWztuYVpXZeljEbds8z4Og==", "requires": { - "@remix-run/router": "1.5.0", - "react-router": "6.10.0" + "@remix-run/router": "1.6.0", + "react-router": "6.11.0" } }, "react-select": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.2.tgz", - "integrity": "sha512-cTlJkQ8YjV6T/js8wW0owTzht0hHGABh29vjLscY4HfZGkv7hc3FFTmRp9NzY/Ib1uQ36GieAKEjxpHdpCFpcA==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.3.tgz", + "integrity": "sha512-z8i3NCuFFWL3w27xq92rBkVI2onT0jzIIPe480HlBjXJ3b5o6Q+Clp4ydyeKrj9DZZ3lrjawwLC5NGl0FSvUDg==", "requires": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", @@ -28448,9 +28581,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sats-connect": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/sats-connect/-/sats-connect-0.1.11.tgz", - "integrity": "sha512-8o6TJ+loIjrtzl002xFwbGfFlZYWcN7FDE/6alHTRUOFgFLKQ+ICcslxEg1tSqzQNRYpBnMv2kJlP6Zz9BAj0g==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sats-connect/-/sats-connect-0.2.0.tgz", + "integrity": "sha512-PEeqgPmAASPwGnBRmKYAmOey2HRbzW733EOVia067MoDAoai+/Buzx1NzaJ5FXZzpzHbG2YFQDp+43vkFWTQxw==", "requires": { "jsontokens": "^4.0.1", "process": "^0.11.10", @@ -28493,6 +28626,28 @@ "ajv-keywords": "^3.5.2" } }, + "secp256k1": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", + "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", + "requires": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.5.2", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -29043,9 +29198,9 @@ } }, "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.4.tgz", + "integrity": "sha512-USf5pszRYwuE6hg9by0OkKChkQYEXfkeTtm0xKw+jqQhwyjCVLdYyMBK7R+n7dhzsblAWJnGxju4vxq5eH20GQ==" }, "supports-color": { "version": "5.5.0", @@ -29833,9 +29988,9 @@ "dev": true }, "webpack": { - "version": "5.80.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", - "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", + "version": "5.81.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.81.0.tgz", + "integrity": "sha512-AAjaJ9S4hYCVODKLQTgG5p5e11hiMawBwV2v8MYLE0C/6UAGLuAF4n1qa9GOwdxnicaP+5k6M5HrLmD4+gIB8Q==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", diff --git a/package.json b/package.json index b60414ea7..a3f64b1ec 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "private": true, "dependencies": { "@react-spring/web": "^9.6.1", - "@secretkeylabs/xverse-core": "0.16.1", + "@secretkeylabs/xverse-core": "0.17.0", "@stacks/connect": "^6.10.2", "@stacks/encryption": "4.3.5", "@stacks/stacks-blockchain-api-types": "^6.1.1", @@ -46,7 +46,7 @@ "react-tooltip": "^5.4.0", "redux": "^4.0.5", "redux-persist": "^6.0.0", - "sats-connect": "^0.1.11", + "sats-connect": "0.2.0", "stream-browserify": "^3.0.0", "string-to-color": "^2.2.2", "styled-components": "^5.3.5", diff --git a/src/app/components/AlertMessage/index.tsx b/src/app/components/AlertMessage/index.tsx index 4cc02d33b..3aebb4983 100644 --- a/src/app/components/AlertMessage/index.tsx +++ b/src/app/components/AlertMessage/index.tsx @@ -12,12 +12,13 @@ const Container = styled.div((props) => ({ width: 312, borderRadius: 12, zIndex: 16000, - background: props.theme.colors.background.elevation2, + background: props.theme.colors.background.elevation3, filter: 'drop-shadow(0px 16px 36px rgba(0, 0, 0, 0.5))', })); const HeaderText = styled.h1((props) => ({ ...props.theme.body_bold_m, + fontSize: 16, flex: 1, })); @@ -25,6 +26,7 @@ const DescriptionText = styled.h1((props) => ({ ...props.theme.body_m, color: props.theme.colors.white[200], margin: 16, + fontSize: 16, })); const RowContainer = styled.div((props) => ({ @@ -32,7 +34,7 @@ const RowContainer = styled.div((props) => ({ flexDirection: 'row', padding: '20px 16px 16px 16px', alignItems: 'space-between', - borderBottom: `1px solid ${props.theme.colors.background.elevation3}`, + borderBottom: `1px solid ${props.theme.colors.background.elevation6}`, })); const TickMarkButtonContainer = styled.div((props) => ({ @@ -110,6 +112,7 @@ interface Props { description: string; buttonText?: string; secondButtonText?: string; + isWarningAlert?: boolean; tickMarkButtonText?: string; onButtonClick?: () => void; onSecondButtonClick?: () => void; @@ -118,7 +121,7 @@ interface Props { } function AlertMessage({ - onClose, title, description, buttonText, secondButtonText, tickMarkButtonText, onButtonClick, onSecondButtonClick, tickMarkButtonClick, + onClose, title, description, buttonText, secondButtonText, tickMarkButtonText, isWarningAlert, onButtonClick, onSecondButtonClick, tickMarkButtonClick, }: Props) { return ( <> @@ -143,6 +146,7 @@ function AlertMessage({ )} diff --git a/src/app/components/confirmBtcTransactionComponent/btcRecipientComponent.tsx b/src/app/components/confirmBtcTransactionComponent/btcRecipientComponent.tsx deleted file mode 100644 index 3ef0c39f3..000000000 --- a/src/app/components/confirmBtcTransactionComponent/btcRecipientComponent.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import TransferDetailView from '@components/transferDetailView'; -import OutputIcon from '@assets/img/transactions/output.svg'; -import { currencySymbolMap } from '@secretkeylabs/xverse-core/types/currency'; -import { StoreState } from '@stores/index'; -import BigNumber from 'bignumber.js'; -import { useTranslation } from 'react-i18next'; -import { NumericFormat } from 'react-number-format'; -import { useSelector } from 'react-redux'; -import styled from 'styled-components'; - -const Container = styled.div((props) => ({ - display: 'flex', - flexDirection: 'column', - background: props.theme.colors.background.elevation1, - borderRadius: 12, - padding: '16px 16px', - justifyContent: 'center', - marginBottom: 12, -})); - -const RecipientTitleText = styled.h1((props) => ({ - ...props.theme.body_medium_m, - color: props.theme.colors.white[200], - marginBottom: 16, -})); - -const RowContainer = styled.div({ - display: 'flex', - flexDirection: 'row', - width: '100%', - alignItems: 'center', -}); - -const AddressContainer = styled.div({ - marginTop: 22, -}); - -const Icon = styled.img((props) => ({ - marginRight: props.theme.spacing(4), - width: 32, - height: 32, - borderRadius: 30, -})); - -const TitleText = styled.h1((props) => ({ - ...props.theme.body_medium_m, - color: props.theme.colors.white[200], -})); - -const ValueText = styled.h1((props) => ({ - ...props.theme.body_medium_m, - color: props.theme.colors.white[0], -})); - -const SubValueText = styled.h1((props) => ({ - ...props.theme.body_m, - fontSize: 12, - color: props.theme.colors.white[400], -})); - -const ColumnContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - flex: 1, - justifyContent: 'flex-end', - alignItems: 'flex-end', -}); - -interface Props { - recipientIndex?: number; - address?: string; - value: string; - subValue?: BigNumber; - totalRecipient?: number; - icon: string; - title: string; - heading?: string; -} -function BtcRecipientComponent({ - recipientIndex, - address, - value, - totalRecipient, - subValue, - icon, - title, - heading, -}: Props) { - const { t } = useTranslation('translation', { keyPrefix: 'CONFIRM_TRANSACTION' }); - const { fiatCurrency } = useSelector((state: StoreState) => state.walletState); - - const getFiatAmountString = (fiatAmount: BigNumber) => { - if (fiatAmount) { - if (fiatAmount.isLessThan(0.01)) { - return `<${currencySymbolMap[fiatCurrency]}0.01 ${fiatCurrency}`; - } - return ( - {text}} - /> - ); - } - return ''; - }; - - return ( - - {recipientIndex && totalRecipient && ( - {`${t( - 'RECIPIENT' - )} ${recipientIndex}/${totalRecipient}`} - )} - {heading && {heading}} - - - {title} - - {value} - {subValue && {getFiatAmountString(subValue)}} - - - {address && ( - - - - )} - - ); -} - -export default BtcRecipientComponent; diff --git a/src/app/components/confirmBtcTransactionComponent/index.tsx b/src/app/components/confirmBtcTransactionComponent/index.tsx index 4339c4744..8636f73d4 100644 --- a/src/app/components/confirmBtcTransactionComponent/index.tsx +++ b/src/app/components/confirmBtcTransactionComponent/index.tsx @@ -8,7 +8,6 @@ import AssetIcon from '@assets/img/transactions/Assets.svg'; import SettingIcon from '@assets/img/dashboard/faders_horizontal.svg'; import TransactionSettingAlert from '@components/transactionSetting'; import { useSelector } from 'react-redux'; -import IconBitcoin from '@assets/img/dashboard/bitcoin_icon.svg'; import { StoreState } from '@stores/index'; import { signBtcTransaction } from '@secretkeylabs/xverse-core/transactions'; import { useMutation } from '@tanstack/react-query'; @@ -25,8 +24,10 @@ import { ResponseError, satsToBtc, } from '@secretkeylabs/xverse-core'; +import RecipientComponent from '@components/recipientComponent'; +import TransferFeeView from '@components/transferFeeView'; +import { NumericFormat } from 'react-number-format'; import TransactionDetailComponent from '../transactionDetailComponent'; -import BtcRecipientComponent from './btcRecipientComponent'; const OuterContainer = styled.div` display: flex; @@ -113,6 +114,7 @@ interface Props { assetDetail?: string; isRestoreFundFlow?: boolean; nonOrdinalUtxos?: BtcUtxoDataResponse []; + amount?: string; onConfirmClick: (signedTxHex: string) => void; onCancelClick: () => void; onBackButtonClick: () => void; @@ -128,6 +130,7 @@ function ConfirmBtcTransactionComponent({ assetDetail, isRestoreFundFlow, nonOrdinalUtxos, + amount, onConfirmClick, onCancelClick, onBackButtonClick, @@ -144,6 +147,7 @@ function ConfirmBtcTransactionComponent({ const [currentFee, setCurrentFee] = useState(fee); const [error, setError] = useState(''); const [signedTx, setSignedTx] = useState(signedTxHex); + const [total, setTotal] = useState(new BigNumber(0)); const { isLoading, data, @@ -216,6 +220,19 @@ function ConfirmBtcTransactionComponent({ } }, [ordinalData]); + useEffect(() => { + const totalAmount: BigNumber = new BigNumber(0); + let sum: BigNumber = new BigNumber(0); + if (recipients) { + recipients.map((recipient) => { + sum = totalAmount.plus(recipient.amountSats); + return sum; + }); + sum = sum?.plus(currentFee); + } + setTotal(sum); + }, [recipients]); + useEffect(() => { if (signedNonOrdinalBtcSend) { setCurrentFee(signedNonOrdinalBtcSend.fee); @@ -247,6 +264,15 @@ function ConfirmBtcTransactionComponent({ onConfirmClick(signedTx); }; + const getAmountString = (amount: BigNumber, currency: string) => ( + + ); + useEffect(() => { if (recipients && txError) { setOpenTransactionSettingModal(false); @@ -281,69 +307,66 @@ function ConfirmBtcTransactionComponent({ }, [errorSigningNonOrdial]); return ( - <> - - {!isGalleryOpen && ( + + {!isGalleryOpen && ( - )} - - {children} - - {t('CONFIRM_TRANSACTION.REVIEW_TRNSACTION')} - + )} + + {children} + + {t('CONFIRM_TRANSACTION.REVIEW_TRNSACTION')} + - {ordinalTxUtxo ? ( - + ) : ( + recipients?.map((recipient, index) => ( + - ) : ( - recipients?.map((recipient, index) => ( - - )) - )} + )) + )} - - - - - - - {error} - - + + + + + + + + {error} + - + ); } diff --git a/src/app/components/confirmStxTransactionComponent/index.tsx b/src/app/components/confirmStxTransactionComponent/index.tsx index fa7e24867..01c63b816 100644 --- a/src/app/components/confirmStxTransactionComponent/index.tsx +++ b/src/app/components/confirmStxTransactionComponent/index.tsx @@ -1,8 +1,6 @@ import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; -import { - ReactNode, useEffect, useState, -} from 'react'; +import { ReactNode, useEffect, useState } from 'react'; import BigNumber from 'bignumber.js'; import ActionButton from '@components/button'; import SettingIcon from '@assets/img/dashboard/faders_horizontal.svg'; @@ -11,7 +9,11 @@ import { microstacksToStx, stxToMicrostacks } from '@secretkeylabs/xverse-core/c import { StacksTransaction } from '@secretkeylabs/xverse-core/types'; import TransferFeeView from '@components/transferFeeView'; import { - setFee, setNonce, getNonce, signMultiStxTransactions, signTransaction, + setFee, + setNonce, + getNonce, + signMultiStxTransactions, + signTransaction, } from '@secretkeylabs/xverse-core'; import useWalletSelector from '@hooks/useWalletSelector'; import useNetworkSelector from '@hooks/useNetwork'; @@ -32,7 +34,7 @@ const Container = styled.div` const ButtonContainer = styled.div((props) => ({ display: 'flex', flexDirection: 'row', - marginBottom: props.theme.spacing(20), + marginBottom: props.theme.spacing(12), marginTop: props.theme.spacing(12), marginLeft: props.theme.spacing(8), marginRight: props.theme.spacing(8), @@ -60,10 +62,6 @@ const ButtonText = styled.div((props) => ({ textAlign: 'center', })); -const TransferFeeContainer = styled.div((props) => ({ - marginBottom: props.theme.spacing(12), -})); - const ButtonImage = styled.img((props) => ({ marginRight: props.theme.spacing(3), alignSelf: 'center', @@ -75,6 +73,23 @@ const SponsoredInfoText = styled.h1((props) => ({ color: props.theme.colors.white['400'], })); +const ReviewTransactionText = styled.h1((props) => ({ + ...props.theme.headline_s, + color: props.theme.colors.white[0], + textAlign: 'left', +})); + +const RequestedByText = styled.h1((props) => ({ + ...props.theme.body_medium_m, + color: props.theme.colors.white[400], + marginTop: props.theme.spacing(4), + textAlign: 'left', +})); + +const TitleContainer = styled.div((props) => ({ + marginBottom: props.theme.spacing(16), +})); + interface Props { initialStxTransactions: StacksTransaction[]; loading: boolean; @@ -82,6 +97,10 @@ interface Props { onConfirmClick: (transactions: StacksTransaction[]) => void; children: ReactNode; isSponsored?: boolean; + isAsset?: boolean; + title?: string; + subTitle?: string; + } function ConfirmStxTransationComponent({ @@ -89,15 +108,15 @@ function ConfirmStxTransationComponent({ loading, isSponsored, children, + isAsset, + title, + subTitle, onConfirmClick, onCancelClick, }: Props) { const { t } = useTranslation('translation', { keyPrefix: 'CONFIRM_TRANSACTION' }); const selectedNetwork = useNetworkSelector(); - const { - selectedAccount, - seedPhrase, - } = useWalletSelector(); + const { selectedAccount, seedPhrase } = useWalletSelector(); const [openTransactionSettingModal, setOpenTransactionSettingModal] = useState(false); const [buttonLoading, setButtonLoading] = useState(loading); @@ -160,21 +179,28 @@ function ConfirmStxTransationComponent({ return ( <> + + {!isAsset && {title ?? t('REVIEW_TRNSACTION')}} + {subTitle && {subTitle}} + {children} - + + {initialStxTransactions[0]?.payload?.amount && ( - - + )} {!isSponsored && ( - + )} {isSponsored && {t('SPONSORED_TX_INFO')}} ({ + display: 'flex', + flexDirection: 'column', + background: props.theme.colors.background.elevation1, + borderRadius: 12, + padding: '12px 16px', + justifyContent: 'center', + marginBottom: 12, +})); + +const TitleText = styled.h1((props) => ({ + ...props.theme.body_medium_m, + color: props.theme.colors.white[200], +})); + +const DescriptionText = styled.h1((props) => ({ + ...props.theme.body_medium_m, + marginTop: props.theme.spacing(2), + color: props.theme.colors.white[0], +})); + +const RowContainer = styled.div({ + display: 'flex', + flexDirection: 'row', + width: '100%', + alignItems: 'center', +}); + +interface Props { + memo: string; +} + +function TransferMemoView({ + memo, +}: Props) { + const { t } = useTranslation('translation', { keyPrefix: 'CONFIRM_TRANSACTION' }); + + return ( + + + {t('MEMO')} + + { memo} + + ); +} + +export default TransferMemoView; diff --git a/src/app/components/infoContainer/index.tsx b/src/app/components/infoContainer/index.tsx index 1ef1d73ca..653a4f9ed 100644 --- a/src/app/components/infoContainer/index.tsx +++ b/src/app/components/infoContainer/index.tsx @@ -2,12 +2,16 @@ import styled from 'styled-components'; import InfoIcon from '@assets/img/info.svg'; import WarningIcon from '@assets/img/Warning.svg'; -const Container = styled.div<{ type: 'Info' | 'Warning' | undefined }>((props) => ({ +interface ContainerProps { + type: 'Info' | 'Warning' | undefined; + showWarningBackground?: boolean; +} +const Container = styled.div((props) => ({ display: 'flex', flexDirection: 'row', borderRadius: 12, alignItems: 'flex-start', - backgroundColor: 'transparent', + backgroundColor: props.showWarningBackground ? 'rgba(211, 60, 60, 0.15)' : 'transparent', padding: props.theme.spacing(8), marginBottom: props.theme.spacing(6), border: `1px solid ${ @@ -26,6 +30,11 @@ const BoldText = styled.h1((props) => ({ color: props.theme.colors.white['0'], })); +const RedirectText = styled.h1((props) => ({ + ...props.theme.body_medium_m, + color: props.theme.colors.white['0'], +})); + const SubText = styled.h1((props) => ({ ...props.theme.body_xs, marginTop: props.theme.spacing(2), @@ -38,15 +47,34 @@ const Text = styled.h1((props) => ({ lineHeight: 1.4, })); +const RedirectButton = styled.button((props) => ({ + backgroundColor: 'transparent', + color: props.theme.colors.white['0'], + display: 'flex', + marginTop: 4, + justifyContent: 'flex-start', + alignItems: 'flex-start', +})); + interface Props { titleText?: string; bodyText: string; type?: 'Info' | 'Warning'; + onClick?: () => void; + redirectText?: string; + showWarningBackground?: boolean; } -function InfoContainer({ titleText, bodyText, type }: Props) { +function InfoContainer({ + titleText, + bodyText, + type, + redirectText, + onClick, + showWarningBackground, +}: Props) { return ( - + alert {titleText ? ( @@ -55,7 +83,14 @@ function InfoContainer({ titleText, bodyText, type }: Props) { {bodyText} ) : ( - {bodyText} + <> + {bodyText} + {redirectText && ( + + {`${redirectText} →`} + + )} + )} diff --git a/src/app/components/postCondition/ftPostConditionCard.tsx b/src/app/components/postCondition/ftPostConditionCard.tsx index 414df8b78..83b5fed9c 100644 --- a/src/app/components/postCondition/ftPostConditionCard.tsx +++ b/src/app/components/postCondition/ftPostConditionCard.tsx @@ -17,6 +17,7 @@ function FtPostConditionCard({ postCondition, ftMetaData }: Props) { ); } diff --git a/src/app/components/postCondition/nftPostConditionCard.tsx b/src/app/components/postCondition/nftPostConditionCard.tsx index 6a3b34144..fc5c0e286 100644 --- a/src/app/components/postCondition/nftPostConditionCard.tsx +++ b/src/app/components/postCondition/nftPostConditionCard.tsx @@ -1,4 +1,5 @@ import { PostCondition } from '@stacks/transactions'; +import AssetIcon from '@assets/img/transactions/Assets.svg'; import PostConditionsView from './postConditionView'; import { getAmountFromPostCondition } from './postConditionView/helper'; @@ -11,6 +12,7 @@ function NftPostConditionCard({ postCondition }: Props) { ); } diff --git a/src/app/components/postCondition/postConditionView/index.tsx b/src/app/components/postCondition/postConditionView/index.tsx index 8d58889da..137fabb33 100644 --- a/src/app/components/postCondition/postConditionView/index.tsx +++ b/src/app/components/postCondition/postConditionView/index.tsx @@ -7,48 +7,21 @@ import { NonFungibleConditionCode, PostCondition, } from '@stacks/transactions'; -import styled from 'styled-components'; import { useTranslation } from 'react-i18next'; -import Seperator from '@components/seperator'; -import { useContext } from 'react'; -import { ShowMoreContext } from '@components/transactionsRequests/ContractCallRequest'; -import RedirectAddressView from '@components/redirectAddressView'; + +import TransferAmountComponent from '@components/transferAmountComponent'; import { getNameFromPostCondition, getSymbolFromPostCondition, } from './helper'; -const MainContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - width: '100%', -}); - -const PostConditionContainer = styled.div((props) => ({ - display: 'flex', - flexDirection: 'column', - flex: 1, - marginTop: props.theme.spacing(4), -})); - -const Title = styled.h1((props) => ({ - ...props.theme.headline_category_s, - color: props.theme.colors.white['400'], - marginTop: 24, - textTransform: 'uppercase', -})); - -const TickerText = styled.h1((props) => ({ - ...props.theme.body_m, - color: props.theme.colors.white['0'], -})); - type Props = { postCondition: PostCondition; amount: string; + icon?: string; }; -function PostConditionsView({ postCondition, amount }: Props) { +function PostConditionsView({ postCondition, amount, icon }: Props) { const { stxAddress } = useSelector((state: StoreState) => ({ ...state.walletState, })); @@ -81,33 +54,21 @@ function PostConditionsView({ postCondition, amount }: Props) { const address = addressToString(postCondition?.principal?.address!); const isSending = address === stxAddress; const isContractPrincipal = !!contractName || address.includes('.'); - const { showMore } = useContext(ShowMoreContext); - return ( - - - {`${ - isContractPrincipal ? t('CONTRACT') : isSending ? t('YOU') : t('ANOTHER_ADDRESS') - } ${title}`} - - - {`${amount} ${ticker}`} - {name !== 'STX' && {name}} - {showMore && ( - <> - - - - )} - - + ); } export default PostConditionsView; diff --git a/src/app/components/postCondition/stxPostConditionCard.tsx b/src/app/components/postCondition/stxPostConditionCard.tsx index e04471b8e..b03d416fb 100644 --- a/src/app/components/postCondition/stxPostConditionCard.tsx +++ b/src/app/components/postCondition/stxPostConditionCard.tsx @@ -1,4 +1,5 @@ import { PostCondition } from '@stacks/transactions'; +import IconStacks from '@assets/img/dashboard/stack_icon.svg'; import PostConditionsView from './postConditionView'; import { getAmountFromPostCondition } from './postConditionView/helper'; @@ -11,6 +12,7 @@ function StxPostConditionCard({ postCondition }: Props) { ); } diff --git a/src/app/components/recipientComponent/index.tsx b/src/app/components/recipientComponent/index.tsx new file mode 100644 index 000000000..baf59d288 --- /dev/null +++ b/src/app/components/recipientComponent/index.tsx @@ -0,0 +1,213 @@ +import TransferDetailView from '@components/transferDetailView'; +import OutputIcon from '@assets/img/transactions/output.svg'; +import ArrowIcon from '@assets/img/transactions/ArrowDown.svg'; +import WalletIcon from '@assets/img/transactions/wallet.svg'; +import { currencySymbolMap } from '@secretkeylabs/xverse-core/types/currency'; +import BigNumber from 'bignumber.js'; +import { useTranslation } from 'react-i18next'; +import { NumericFormat } from 'react-number-format'; +import styled from 'styled-components'; +import { FungibleToken, getFiatEquivalent } from '@secretkeylabs/xverse-core'; +import TokenImage from '@components/tokenImage'; +import { CurrencyTypes } from '@utils/constants'; +import useWalletSelector from '@hooks/useWalletSelector'; +import { useEffect, useState } from 'react'; +import { getTicker } from '@utils/helper'; + +const Container = styled.div((props) => ({ + display: 'flex', + flexDirection: 'column', + background: props.theme.colors.background.elevation1, + borderRadius: 12, + padding: '16px 16px', + justifyContent: 'center', + marginBottom: 12, +})); + +const RecipientTitleText = styled.h1((props) => ({ + ...props.theme.body_medium_m, + color: props.theme.colors.white[200], + marginBottom: 16, +})); + +const RowContainer = styled.div({ + display: 'flex', + flexDirection: 'row', + width: '100%', + alignItems: 'flex-start', +}); + +const AddressContainer = styled.div({ + marginTop: 12, +}); + +const Icon = styled.img((props) => ({ + marginRight: props.theme.spacing(4), + width: 32, + height: 32, + borderRadius: 30, +})); + +const DownArrowIcon = styled.img((props) => ({ + width: 16, + height: 16, + marginTop: props.theme.spacing(4), + marginLeft: props.theme.spacing(4), + marginBottom: props.theme.spacing(4), +})); + +const TitleText = styled.h1((props) => ({ + ...props.theme.body_medium_m, + color: props.theme.colors.white[200], + textAlign: 'center', + marginTop: 5, +})); + +const ValueText = styled.h1((props) => ({ + ...props.theme.body_medium_m, + color: props.theme.colors.white[0], +})); + +const SubValueText = styled.h1((props) => ({ + ...props.theme.body_m, + fontSize: 12, + color: props.theme.colors.white[400], +})); + +const ColumnContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + flex: 1, + justifyContent: 'flex-end', + alignItems: 'flex-end', + paddingTop: 5, +}); + +const MultipleAddressContainer = styled.div({ + display: 'flex', + flexDirection: 'column', +}); + +const TokenContainer = styled.div({ + marginRight: 10, +}); + +interface Props { + address?: string; + value: string; + title: string; + currencyType: CurrencyTypes; + recipientIndex?: number; + totalRecipient?: number; + icon?: string; + fungibleToken?: FungibleToken; + heading?: string; + showSenderAddress?: boolean; + +} +function RecipientComponent({ + recipientIndex, address, value, totalRecipient, title, fungibleToken, icon, currencyType, heading, showSenderAddress, +} : Props) { + const { t } = useTranslation('translation', { keyPrefix: 'CONFIRM_TRANSACTION' }); + const [fiatAmount, setFiatAmount] = useState('0'); + const { + stxBtcRate, btcFiatRate, fiatCurrency, ordinalsAddress + } = useWalletSelector(); + + useEffect(() => { + let amountInCurrency; + if (currencyType === 'FT') { + amountInCurrency = new BigNumber(value).multipliedBy(fungibleToken?.tokenFiatRate!); + if (amountInCurrency.isLessThan(0.01)) { + amountInCurrency = '0.01'; + } + } else { amountInCurrency = getFiatEquivalent(Number(value), currencyType, stxBtcRate, btcFiatRate, fungibleToken); } + setFiatAmount(amountInCurrency); + }, [value]); + + function getFtTicker() { + if (fungibleToken?.ticker) { + return fungibleToken?.ticker.toUpperCase(); + } if (fungibleToken?.name) { + return getTicker(fungibleToken.name).toUpperCase(); + } return ''; + } + + const getFiatAmountString = (fiatAmount: BigNumber) => { + if (fiatAmount) { + if (fiatAmount.isLessThan(0.01)) { + return `<${currencySymbolMap[fiatCurrency]}0.01 ${fiatCurrency}`; + } + return ( + {text}} + /> + ); + } + return ''; + }; + + return ( + + {recipientIndex && totalRecipient && totalRecipient !== 1 && ( + + {`${t( + 'RECIPIENT', + )} ${recipientIndex}/${totalRecipient}`} + + + )} + {heading && {heading}} + + {icon ? + : ( + + + + )} + {title} + { currencyType === 'NFT' || currencyType === 'Ordinal' ? ( + + {value} + + ) : ( + + {amount}} + /> + {getFiatAmountString(new BigNumber(fiatAmount!))} + + )} + + {address && ( + + {showSenderAddress + ? ( + + + + + + ) + : } + + )} + + ); +} + +export default RecipientComponent; diff --git a/src/app/components/recipinetAddressView/index.tsx b/src/app/components/recipinetAddressView/index.tsx deleted file mode 100644 index c7f5b7d8b..000000000 --- a/src/app/components/recipinetAddressView/index.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { useTranslation } from 'react-i18next'; -import styled from 'styled-components'; -import ArrowSquareOut from '@assets/img/arrow_square_out.svg'; -import { getExplorerUrl } from '@utils/helper'; -import { useBnsName } from '@hooks/queries/useBnsName'; -import useNetworkSelector from '@hooks/useNetwork'; - -const InfoContainer = styled.div((props) => ({ - display: 'flex', - flexDirection: 'column', - marginTop: props.theme.spacing(12), -})); - -const RowContainer = styled.div({ - display: 'flex', - flexDirection: 'row', -}); - -const AddressContainer = styled.div({ - display: 'flex', - flex: 1, -}); - -const TitleText = styled.h1((props) => ({ - ...props.theme.headline_category_s, - color: props.theme.colors.white['400'], - textTransform: 'uppercase', -})); - -const ValueText = styled.h1((props) => ({ - ...props.theme.body_m, - marginTop: props.theme.spacing(2), - wordBreak: 'break-all', -})); - -const AssociatedAddressText = styled.h1((props) => ({ - ...props.theme.body_m, - marginTop: props.theme.spacing(2), - wordBreak: 'break-all', - color: props.theme.colors.white['400'], -})); - -const ButtonImage = styled.img((props) => ({ - marginRight: props.theme.spacing(3), - marginTop: props.theme.spacing(1), -})); - -const ActionButton = styled.button((props) => ({ - display: 'flex', - flexDirection: 'row', - backgroundColor: 'transparent', - marginLeft: props.theme.spacing(12), -})); - -interface Props { - recipient: string; -} -function RecipientAddressView({ recipient }: Props) { - const selectedNetwork = useNetworkSelector(); - const { t } = useTranslation('translation', { keyPrefix: 'CONFIRM_TRANSACTION' }); - const bnsName = useBnsName(recipient, selectedNetwork); - const handleOnPress = () => { - window.open(getExplorerUrl(recipient)); - }; - - return ( - - {t('RECIPIENT_ADDRESS')} - {bnsName} - - - {bnsName ? {recipient} : {recipient}} - - - - - - - ); -} - -export default RecipientAddressView; diff --git a/src/app/components/redirectAddressView/index.tsx b/src/app/components/redirectAddressView/index.tsx deleted file mode 100644 index edfa4d427..000000000 --- a/src/app/components/redirectAddressView/index.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import styled from 'styled-components'; -import GoToImage from '@assets/img/webInteractions/goto-explorer.svg'; -import { getExplorerUrl } from '@utils/helper'; - -const InfoContainer = styled.div((props) => ({ - display: 'flex', - flexDirection: 'column', - marginTop: props.theme.spacing(12), -})); - -const RowContainer = styled.div({ - display: 'flex', - flexDirection: 'row', -}); - -const AddressContainer = styled.div({ - display: 'flex', - flex: 1, -}); - -const TitleText = styled.h1((props) => ({ - ...props.theme.headline_category_s, - color: props.theme.colors.white['400'], - textTransform: 'uppercase', -})); - -const ValueText = styled.h1((props) => ({ - ...props.theme.body_m, - marginTop: props.theme.spacing(2), - wordBreak: 'break-all', -})); - -const ButtonImage = styled.img((props) => ({ - marginRight: props.theme.spacing(3), - marginTop: props.theme.spacing(1), -})); - -const ActionButton = styled.button((props) => ({ - display: 'flex', - flexDirection: 'row', - backgroundColor: 'transparent', - marginLeft: props.theme.spacing(12), -})); - -interface Props { - recipient: string; - title?: string; -} -function RedirectAddressView({ recipient, title }: Props) { - const handleOnPress = () => { - window.open(getExplorerUrl(recipient)); - }; - - return ( - - {title} - - - {recipient} - - - - - - - ); -} - -export default RedirectAddressView; diff --git a/src/app/components/sendForm/index.tsx b/src/app/components/sendForm/index.tsx index cd5aea25e..856b8ca7e 100644 --- a/src/app/components/sendForm/index.tsx +++ b/src/app/components/sendForm/index.tsx @@ -438,16 +438,7 @@ function SendForm({ }; const buyCryptoMessage = balance === 0 && (currencyType === 'STX' || currencyType === 'BTC') && ( - - alert - - {t('NO_FUNDS')} - - {t('BUY_CRYPTO')} - - - - + ); const checkIfEnableButton = () => { diff --git a/src/app/components/tokenImage/index.tsx b/src/app/components/tokenImage/index.tsx index 1e6724d0a..a382adff8 100644 --- a/src/app/components/tokenImage/index.tsx +++ b/src/app/components/tokenImage/index.tsx @@ -12,34 +12,43 @@ interface TokenImageProps { token?: string; loading?: boolean; fungibleToken?: FungibleToken; + isSmallSize?: boolean; } -const TickerImage = styled.img({ - height: 44, - width: 44, -}); +interface ImageProps { + isSmallSize?: boolean; +} +interface TextProps { + isSmallSize?: boolean; +} + +const TickerImage = styled.img((props) => ({ + height: props.isSmallSize ? 32 : 44, + width: props.isSmallSize ? 32 : 44, + borderRadius: 30, +})); const LoaderImageContainer = styled.div({ flex: 0.5, }); -const TickerIconContainer = styled.div((props) => ({ +const TickerIconContainer = styled.div((props) => ({ display: 'flex', alignItems: 'center', justifyContent: 'center', - height: 44, - width: 44, + height: props.isSmallSize ? 32 : 44, + width: props.isSmallSize ? 32 : 44, marginRight: props.theme.spacing(3), borderRadius: props.theme.radius(2), backgroundColor: props.color, })); -const TickerIconText = styled.h1((props) => ({ +const TickerIconText = styled.h1((props) => ({ ...props.theme.body_bold_m, color: props.theme.colors.white['0'], textAlign: 'center', wordBreak: 'break-all', - fontSize: 13, + fontSize: props.isSmallSize ? 10 : 13, })); export default function TokenImage(props: TokenImageProps) { @@ -47,6 +56,7 @@ export default function TokenImage(props: TokenImageProps) { token, loading, fungibleToken, + isSmallSize, } = props; const getCoinIcon = useCallback(() => { @@ -60,7 +70,7 @@ export default function TokenImage(props: TokenImageProps) { if (fungibleToken) { if (!loading) { if (fungibleToken?.image) { - return ; + return ; } let ticker = fungibleToken?.ticker; if (!ticker && fungibleToken?.name) { @@ -69,8 +79,8 @@ export default function TokenImage(props: TokenImageProps) { const background = stc(ticker); ticker = ticker && ticker.substring(0, 4); return ( - - {ticker} + + {ticker} ); } @@ -80,7 +90,8 @@ export default function TokenImage(props: TokenImageProps) { ); } + return ( - + ); } diff --git a/src/app/components/topRow/index.tsx b/src/app/components/topRow/index.tsx index 0a3f10726..24c0bd837 100644 --- a/src/app/components/topRow/index.tsx +++ b/src/app/components/topRow/index.tsx @@ -36,7 +36,6 @@ const AnimatedBackButton = styled(BackButton)` } `; - interface Props { title: string; onClick: () => void; @@ -44,12 +43,12 @@ interface Props { function TopRow({ title, onClick }: Props) { return ( - - - back button - - {title} - + + + back button + + {title} + ); } diff --git a/src/app/components/transactionDetailComponent/index.tsx b/src/app/components/transactionDetailComponent/index.tsx index 166c35a2e..8d70c5f15 100644 --- a/src/app/components/transactionDetailComponent/index.tsx +++ b/src/app/components/transactionDetailComponent/index.tsx @@ -48,11 +48,12 @@ interface Props { title: string; subTitle?: string; value?: string; + description?: string; subValue?: BigNumber; } function TransactionDetailComponent({ - title, subTitle, value, subValue, + title, subTitle, value, subValue, description, }: Props) { const { fiatCurrency, @@ -83,6 +84,7 @@ function TransactionDetailComponent({ {value && {value}} + {description && {description}} {subValue && {getFiatAmountString(subValue)}} diff --git a/src/app/components/transactionsRequests/ContractCallRequest.tsx b/src/app/components/transactionsRequests/ContractCallRequest.tsx index a3e79c200..330483acc 100644 --- a/src/app/components/transactionsRequests/ContractCallRequest.tsx +++ b/src/app/components/transactionsRequests/ContractCallRequest.tsx @@ -22,7 +22,6 @@ import { Coin, extractFromPayload, } from '@secretkeylabs/xverse-core'; -import RedirectAddressView from '@components/redirectAddressView'; import { useNavigate } from 'react-router-dom'; import { Args, ContractFunction } from '@secretkeylabs/xverse-core/types/api/stacks/transaction'; import FtPostConditionCard from '@components/postCondition/ftPostConditionCard'; @@ -31,6 +30,7 @@ import AccountHeaderComponent from '@components/accountHeader'; import useOnOriginTabClose from '@hooks/useOnTabClosed'; import InfoContainer from '@components/infoContainer'; import useNetworkSelector from '@hooks/useNetwork'; +import TransactionDetailComponent from '@components/transactionDetailComponent'; import finalizeTxSignature from './utils'; const PostConditionContainer = styled.div((props) => ({ @@ -118,31 +118,6 @@ const DappTitle = styled.h2((props) => ({ marginTop: 4, })); -const Title = styled.h1((props) => ({ - ...props.theme.headline_category_s, - color: props.theme.colors.white['400'], - textTransform: 'uppercase', - marginTop: props.theme.spacing(12), -})); - -const Value = styled.h1((props) => ({ - ...props.theme.body_m, - color: props.theme.colors.white['0'], - marginTop: props.theme.spacing(2), -})); - -const Detail = styled.h1((props) => ({ - ...props.theme.body_xs, - color: props.theme.colors.white['400'], - textTransform: 'uppercase', - marginTop: props.theme.spacing(2), -})); - -const FuncArgContainer = styled.div({ - display: 'flex', - flexDirection: 'column', -}); - const Container = styled.div((props) => ({ display: 'flex', flexDirection: 'column', @@ -195,7 +170,6 @@ export default function ContractCallRequest(props: ContractCallRequestProps) { const [hasTabClosed, setHasTabClosed] = useState(false); const { t } = useTranslation('translation'); const [isShowMore, setIsShowMore] = useState(false); - const Illustration = headerImageMapping[request.functionName ?? '']; useOnOriginTabClose( tabId, @@ -217,9 +191,6 @@ export default function ContractCallRequest(props: ContractCallRequestProps) { ); - const renderContractAddress = isShowMore && ( - - ); type ArgToView = { name: string; value: string; type: any }; const getFunctionArgs = (): Array => { const args: Array = []; @@ -257,17 +228,16 @@ export default function ContractCallRequest(props: ContractCallRequestProps) { return args; }; + const truncateFunctionArgsView = (value: string) => `${value.substring(0, 12)}...${value.substring( + value.length - 12, + value.length, + )}`; + const functionArgsView = () => { const args = getFunctionArgs(); - if (isShowMore) { - return args.map((arg, index) => ( - - {arg.name} - {arg.value} - {arg.type} - - )); - } + return args.map((arg, index) => ( + 20 ? truncateFunctionArgsView(arg.value) : arg.value} description={arg.type} /> + )); }; const showSponsoredTransactionTag = ( @@ -362,25 +332,16 @@ export default function ContractCallRequest(props: ContractCallRequestProps) { onConfirmClick={confirmCallback} onCancelClick={cancelCallback} loading={false} + title={request.functionName} + subTitle={`Requested by ${request.appDetails?.name}`} > <> - - - {request.functionName} - {`Requested by ${request.appDetails?.name}`} - {hasTabClosed && } - {postConditionAlert} {request.sponsored && showSponsoredTransactionTag} {renderPostConditionsCard()} - - {t('CONTRACT_CALL_REQUEST.FUNCTION')} - {request?.functionName} - + {functionArgsView()} - {renderContractAddress} - {showMoreButton} diff --git a/src/app/components/transactionsRequests/ContractDeployTransaction.tsx b/src/app/components/transactionsRequests/ContractDeployTransaction.tsx index 7d3a79818..b7678dde2 100644 --- a/src/app/components/transactionsRequests/ContractDeployTransaction.tsx +++ b/src/app/components/transactionsRequests/ContractDeployTransaction.tsx @@ -2,7 +2,6 @@ import ConfirmStxTransationComponent from '@components/confirmStxTransactionComp import { PostCondition, StacksTransaction } from '@stacks/transactions'; import styled from 'styled-components'; import DownloadImage from '@assets/img/webInteractions/ArrowLineDown.svg'; -import DeployContractImage from '@assets/img/webInteractions/deploy_contract.svg'; import { useTranslation } from 'react-i18next'; import { useState } from 'react'; import StxPostConditionCard from '@components/postCondition/stxPostConditionCard'; @@ -14,55 +13,24 @@ import AccountHeaderComponent from '@components/accountHeader'; import useOnOriginTabClose from '@hooks/useOnTabClosed'; import InfoContainer from '@components/infoContainer'; import useNetworkSelector from '@hooks/useNetwork'; +import TransactionDetailComponent from '@components/transactionDetailComponent'; import finalizeTxSignature from './utils'; -const Container = styled.div((props) => ({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - marginBottom: props.theme.spacing(12), -})); - -const TopImage = styled.img({ - width: 88, - height: 88, -}); - -const FunctionTitle = styled.h1((props) => ({ - ...props.theme.headline_s, - color: props.theme.colors.white['0'], - marginTop: 16, -})); - const Title = styled.h1((props) => ({ ...props.theme.headline_category_s, color: props.theme.colors.white['400'], textTransform: 'uppercase', })); -const Value = styled.h1((props) => ({ - ...props.theme.body_m, - color: props.theme.colors.white['0'], - marginTop: props.theme.spacing(2), -})); - -const ColumnContainer = styled.div((props) => ({ - display: 'flex', - marginTop: props.theme.spacing(6), - paddingTop: props.theme.spacing(12), - paddingBottom: props.theme.spacing(12), - borderTop: `0.5px solid ${props.theme.colors.background.elevation3}`, - borderBottom: `0.5px solid ${props.theme.colors.background.elevation3}`, - flexDirection: 'column', -})); - const DownloadContainer = styled.div((props) => ({ display: 'flex', - marginTop: props.theme.spacing(13.5), flexDirection: 'row', + background: props.theme.colors.background.elevation1, + borderRadius: 12, + padding: '12px 16px', justifyContent: 'center', alignItems: 'center', + marginBottom: 12, })); const PostConditionContainer = styled.div((props) => ({ @@ -235,32 +203,26 @@ export default function ContractDeployRequest(props: ContractDeployRequestProps) onCancelClick={cancelCallback} loading={loaderForBroadcastingTx} isSponsored={sponsored} + title={t('DEPLOY_CONTRACT_REQUEST.DEPLOY_CONTRACT')} > - - - {t('DEPLOY_CONTRACT_REQUEST.DEPLOY_CONTRACT')} - {hasTabClosed && } {postConditionAlert} {sponsored && showSponsoredTransactionTag} {unsignedTx?.postConditions?.values?.map((postCondition) => ( ))} - - {t('DEPLOY_CONTRACT_REQUEST.CONTRACT_NAME')} - {contractName} - - {t('DEPLOY_CONTRACT_REQUEST.FUNCTION')} - - - - - + + + {t('DEPLOY_CONTRACT_REQUEST.FUNCTION')} + + + + ); diff --git a/src/app/components/transferAmountComponent/index.tsx b/src/app/components/transferAmountComponent/index.tsx index bfaf08ace..e22fc6da4 100644 --- a/src/app/components/transferAmountComponent/index.tsx +++ b/src/app/components/transferAmountComponent/index.tsx @@ -1,16 +1,11 @@ import styled from 'styled-components'; import DropDownIcon from '@assets/img/transactions/dropDownIcon.svg'; -import AddressIcon from '@assets/img/transactions/address.svg'; import { useTranslation } from 'react-i18next'; -import { NumericFormat } from 'react-number-format'; -import { currencySymbolMap } from '@secretkeylabs/xverse-core/types/currency'; -import { useSelector } from 'react-redux'; -import BigNumber from 'bignumber.js'; import { animated, config, useSpring, } from '@react-spring/web'; -import { StoreState } from '@stores/index'; import TransferDetailView from '@components/transferDetailView'; +import { useState } from 'react'; const Container = styled.div((props) => ({ display: 'flex', @@ -61,6 +56,13 @@ interface ColumnProps { } const ColumnContainer = styled.div((props) => ({ + display: 'flex', + flexDirection: props.isExpanded ? 'column' : 'row', + justifyContent: 'flex-end', + alignItems: props.isExpanded ? 'flex-end' : 'center', +})); + +const ExpandedColumnContainer = styled.div((props) => ({ display: 'flex', flexDirection: props.isExpanded ? 'column' : 'row', flex: 1, @@ -75,6 +77,11 @@ const RowContainer = styled.div({ alignItems: 'center', }); +const TitleContainer = styled.div({ + display: 'flex', + flex: 1, +}); + const ExpandedContainer = styled(animated.div)({ display: 'flex', flexDirection: 'column', @@ -91,30 +98,27 @@ const Button = styled.button((props) => ({ interface Props { title: string; - address: string; description?: string; value: string; - subValue: string; - icon: string; - isExpanded?: boolean; - onArrowClick: () => void; + address?: string; + subTitle?: string; + subValue?: string; + icon?: string; } function TransferAmountComponent({ - title, address, value, subValue, description, icon, isExpanded = false, onArrowClick, + title, address, value, subValue, description, icon, subTitle, }: Props) { const { t } = useTranslation('translation', { keyPrefix: 'CONFIRM_TRANSACTION' }); - const { - fiatCurrency, - } = useSelector((state: StoreState) => state.walletState); + const [isExpanded, setIsExpanded] = useState(false); const slideInStyles = useSpring({ config: { ...config.gentle, duration: 400 }, from: { opacity: 0, height: 0 }, to: { opacity: isExpanded ? 1 : 0, - height: isExpanded ? 80 : 0, + height: isExpanded ? 90 : 0, }, }); @@ -123,37 +127,23 @@ function TransferAmountComponent({ config: { ...config.stiff }, }); - const getFiatAmountString = (fiatAmount: BigNumber) => { - if (fiatAmount) { - if (fiatAmount.isLessThan(0.01)) { - return `<${currencySymbolMap[fiatCurrency]}0.01 ${fiatCurrency}`; - } - return ( - {text}} - /> - ); - } - return ''; - }; - const renderAmount = value && ( <> {value} - {isExpanded && {getFiatAmountString(subValue)}} + {isExpanded && subValue && {subValue}} ); + const onArrowClick = () => { + setIsExpanded(!isExpanded); + }; + return ( - {icon && !isExpanded && } - {title} + + {title} + {!isExpanded && renderAmount} + )} + + {!isExpanded && text !== '' && {infoText}} + + {children} + + + ); +} diff --git a/src/app/screens/signatureRequest/index.tsx b/src/app/screens/signatureRequest/index.tsx index bf07e41ed..fb42595e2 100644 --- a/src/app/screens/signatureRequest/index.tsx +++ b/src/app/screens/signatureRequest/index.tsx @@ -3,26 +3,26 @@ import ConfirmScreen from '@components/confirmScreen'; import useSignatureRequest, { isStructuredMessage, isUtf8Message, + useSignBip322Message, useSignMessage, } from '@hooks/useSignatureRequest'; -import SignatureIcon from '@assets/img/webInteractions/signatureIcon.svg'; -import Plus from '@assets/img/transactions/Plus.svg'; -import Minus from '@assets/img/transactions/Minus.svg'; import AccountHeaderComponent from '@components/accountHeader'; import { useTranslation } from 'react-i18next'; import { SignaturePayload, StructuredDataSignaturePayload } from '@stacks/connect'; -import { useEffect, useState } from 'react'; -import Seperator from '@components/seperator'; +import { useCallback, useEffect, useState } from 'react'; import { bytesToHex } from '@stacks/transactions'; import useWalletSelector from '@hooks/useWalletSelector'; import useWalletReducer from '@hooks/useWalletReducer'; -import { getNetworkType } from '@utils/helper'; +import { getNetworkType, getTruncatedAddress } from '@utils/helper'; import { useNavigate } from 'react-router-dom'; import InfoContainer from '@components/infoContainer'; -import { hashMessage } from '@secretkeylabs/xverse-core'; +import { hashMessage } from '@secretkeylabs/xverse-core/wallet'; +import { bip0322Hash } from '@secretkeylabs/xverse-core/connect/bip322Signature'; +import { ExternalSatsMethods, MESSAGE_SOURCE } from '@common/types/message-types'; import SignatureRequestMessage from './signatureRequestMessage'; import SignatureRequestStructuredData from './signatureRequestStructuredData'; import { finalizeMessageSignature } from './utils'; +import CollapsableContainer from './collapsableContainer'; const MainContainer = styled.div((props) => ({ display: 'flex', @@ -33,64 +33,65 @@ const MainContainer = styled.div((props) => ({ height: '100%', })); -const RequestImage = styled.img((props) => ({ - marginTop: props.theme.spacing(20), - marginBottom: props.theme.spacing(12), - alignSelf: 'center', -})); - const RequestType = styled.h1((props) => ({ - ...props.theme.headline_m, + ...props.theme.headline_s, + marginTop: props.theme.spacing(11), color: props.theme.colors.white[0], - textAlign: 'center', + textAlign: 'left', + marginBottom: props.theme.spacing(4), })); const RequestSource = styled.h2((props) => ({ - ...props.theme.body_l, - color: props.theme.colors.white['400'], - marginTop: props.theme.spacing(2), + ...props.theme.body_medium_m, + color: props.theme.colors.white[400], + textAlign: 'left', marginBottom: props.theme.spacing(12), - textAlign: 'center', })); -const ShowHashButtonContainer = styled.div({ +const MessageHash = styled.p((props) => ({ + ...props.theme.body_medium_m, + textAlign: 'left', + lineHeight: 1.6, + wordWrap: 'break-word', + color: props.theme.colors.white[0], + marginBottom: props.theme.spacing(4), +})); + +const SigningAddressContainer = styled.div((props) => ({ display: 'flex', - flexDirection: 'row', - alignItems: 'center', - width: '100%', - div: { - flex: 1, - }, -}); - -const ShowHashButton = styled.button((props) => ({ - ...props.theme.body_xs, - background: 'none', + flexDirection: 'column', + background: props.theme.colors.background.elevation1, + borderRadius: 12, + padding: '12px 16px', + marginBottom: 12, + flex: 1, +})); + +const SigningAddressTitle = styled.p((props) => ({ + ...props.theme.body_medium_m, + lineHeight: 1.6, + wordWrap: 'break-word', + color: props.theme.colors.white[200], + marginBottom: props.theme.spacing(4), +})); + +const SigningAddress = styled.div(({ display: 'flex', - flexDirection: 'row', - justifyContent: 'center', + justifyContent: 'space-between', alignItems: 'center', - color: props.theme.colors.white[0], - marginBottom: props.theme.spacing(6), - marginTop: props.theme.spacing(12), - width: 111, - height: 34, - borderRadius: props.theme.radius(3), - border: `1px solid ${props.theme.colors.background.elevation3}`, - img: { - marginLeft: props.theme.spacing(2), - }, })); -const MessageHashTitle = styled.p((props) => ({ - ...props.theme.headline_category_s, - color: props.theme.colors.white[200], - marginBottom: props.theme.spacing(2), - opacity: 0.7, +const SigningAddressType = styled.p((props) => ({ + ...props.theme.body_medium_m, + textAlign: 'left', + lineHeight: 1.6, + wordWrap: 'break-word', + color: props.theme.colors.white[0], + marginBottom: props.theme.spacing(4), })); -const MessageHash = styled.p((props) => ({ - ...props.theme.body_m, +const SigningAddressValue = styled.p((props) => ({ + ...props.theme.body_medium_m, textAlign: 'left', lineHeight: 1.6, wordWrap: 'break-word', @@ -101,47 +102,66 @@ const MessageHash = styled.p((props) => ({ const ActionDisclaimer = styled.p((props) => ({ ...props.theme.body_m, color: props.theme.colors.white[400], + marginTop: props.theme.spacing(4), marginBottom: props.theme.spacing(8), })); function SignatureRequest(): JSX.Element { const { t } = useTranslation('translation'); const [isSigning, setIsSigning] = useState(false); - const [showHash, setShowHash] = useState(false); - const { selectedAccount, accountsList, network } = useWalletSelector(); + const { accountsList, network } = useWalletSelector(); + const [addressType, setAddressType] = useState(''); const { switchAccount } = useWalletReducer(); const { - messageType, request, payload, tabId, domain, + messageType, request, payload, tabId, domain, isSignMessageBip322, } = useSignatureRequest(); const navigate = useNavigate(); + + const checkAddressAvailability = () => { + const account = accountsList.filter((acc) => { + if (acc.btcAddress === payload.address) { + setAddressType(t('SIGNATURE_REQUEST.SIGNING_ADDRESS_SEGWIT')); + return true; + } + if (acc.ordinalsAddress === payload.address) { + setAddressType(t('SIGNATURE_REQUEST.SIGNING_ADDRESS_TAPROOT')); + return true; + } + if (acc.stxAddress === payload.stxAddress) { + setAddressType(t('SIGNATURE_REQUEST.SIGNING_ADDRESS_STX')); + return true; + } + return false; + }); + return account[0]; + }; + const switchAccountBasedOnRequest = () => { - if (getNetworkType(payload.network) !== network.type) { + if (!isSignMessageBip322 && getNetworkType(payload.network) !== network.type) { navigate('/tx-status', { state: { txid: '', currency: 'STX', - error: - 'There’s a mismatch between your active network and the network you’re logged with.', + errorTitle: t('SIGNATURE_REQUEST.SIGNATURE_ERROR_TITLE'), + error: t('CONFIRM_TRANSACTION.NETWORK_MISMATCH'), browserTx: true, }, }); return; } - if (payload.stxAddress !== selectedAccount?.stxAddress) { - const account = accountsList.find((acc) => acc.stxAddress === payload.stxAddress); - if (account) { - switchAccount(account); - } else { - navigate('/tx-status', { - state: { - txid: '', - currency: 'STX', - error: - 'There’s a mismatch between your active address and the address you’re logged with.', - browserTx: true, - }, - }); - } + const account = checkAddressAvailability(); + if (account) { + switchAccount(account); + } else { + navigate('/tx-status', { + state: { + txid: '', + currency: 'STX', + errorTitle: t('SIGNATURE_REQUEST.SIGNATURE_ERROR_TITLE'), + error: t('CONFIRM_TRANSACTION.ADDRESS_MISMATCH'), + browserTx: true, + }, + }); } }; @@ -151,24 +171,36 @@ function SignatureRequest(): JSX.Element { const handleMessageSigning = useSignMessage(messageType); + const handleBip322MessageSigning = useSignBip322Message(payload.message, payload.address); + const cancelCallback = () => { finalizeMessageSignature({ requestPayload: request, tabId: +tabId, data: 'cancel' }); window.close(); }; - const handleShowHash = async () => { - setShowHash((current) => !current); - }; - const confirmCallback = async () => { try { setIsSigning(true); - const signature = await handleMessageSigning({ - message: payload.message, - domain: domain || undefined, - }); - if (signature) { - finalizeMessageSignature({ requestPayload: request, tabId: +tabId, data: signature }); + if (!isSignMessageBip322) { + const signature = await handleMessageSigning({ + message: payload.message, + domain: domain || undefined, + }); + if (signature) { + finalizeMessageSignature({ requestPayload: request, tabId: +tabId, data: signature }); + } + } else { + const bip322signature = await handleBip322MessageSigning(); + const signingMessage = { + source: MESSAGE_SOURCE, + method: ExternalSatsMethods.signMessageResponse, + payload: { + signMessageRequest: request, + signMessageResponse: bip322signature, + }, + }; + chrome.tabs.sendMessage(+tabId, signingMessage); + window.close(); } } catch (err) { console.log(err); @@ -177,6 +209,13 @@ function SignatureRequest(): JSX.Element { } }; + const getMessageHash = useCallback(() => { + if (!isSignMessageBip322) { + return bytesToHex(hashMessage(payload.message)); + } + return bip0322Hash(payload.message); + }, [isSignMessageBip322]); + return ( - {t('SIGNATURE_REQUEST.TITLE')} - {`${t('SIGNATURE_REQUEST.DAPP_NAME_PREFIX')} ${payload.appDetails?.name}`} - {isUtf8Message(messageType) && ( - + {!isSignMessageBip322 ? ( + + {`${t('SIGNATURE_REQUEST.DAPP_NAME_PREFIX')} ${payload.appDetails?.name}`} + + ) : null} + {(isUtf8Message(messageType) || isSignMessageBip322) && ( + )} - {isStructuredMessage(messageType) && ( - + {!isSignMessageBip322 && isStructuredMessage(messageType) && ( + )} - - - - {showHash ? t('SIGNATURE_REQUEST.HIDE_HASH_BUTTON') : t('SIGNATURE_REQUEST.SHOW_HASH_BUTTON')} - Show - - - - {showHash ? ( - <> - {t('SIGNATURE_REQUEST.MESSAGE_HASH_HEADER')} - {bytesToHex(hashMessage(payload.message))} - - ) : null} + + {getMessageHash()} + + + {t('SIGNATURE_REQUEST.SIGNING_ADDRESS_TITLE')} + + {addressType} + + {getTruncatedAddress(payload.address || payload.stxAddress)} + + + {t('SIGNATURE_REQUEST.ACTION_DISCLAIMER')} diff --git a/src/app/screens/signatureRequest/signatureRequestMessage.tsx b/src/app/screens/signatureRequest/signatureRequestMessage.tsx index 12327e03c..bbc178918 100644 --- a/src/app/screens/signatureRequest/signatureRequestMessage.tsx +++ b/src/app/screens/signatureRequest/signatureRequestMessage.tsx @@ -1,32 +1,17 @@ import { SignaturePayload } from '@stacks/connect'; import styled from 'styled-components'; - import { useTranslation } from 'react-i18next'; +import CollapsableContainer from './collapsableContainer'; interface SignatureRequestMessageProps { request: SignaturePayload, } -const ContentContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - flex: 1, -}); - -const RequestMessageTitle = styled.p((props) => ({ - ...props.theme.headline_category_s, - color: props.theme.colors.white[200], - marginBottom: props.theme.spacing(2), - opacity: 0.7, -})); - const RequestMessage = styled.p((props) => ({ - ...props.theme.body_m, + ...props.theme.body_medium_m, textAlign: 'left', - lineHeight: 1.6, wordWrap: 'break-word', color: props.theme.colors.white[0], - marginBottom: props.theme.spacing(4), })); export default function SignatureRequestMessage(props: SignatureRequestMessageProps) { @@ -36,11 +21,10 @@ export default function SignatureRequestMessage(props: SignatureRequestMessagePr } = props; return ( - - {t('MESSAGE_HEADER')} + {request.message.split(/\r?\n/).map((line) => ( {line} ))} - + ); } diff --git a/src/app/screens/signatureRequest/signatureRequestStructuredData.tsx b/src/app/screens/signatureRequest/signatureRequestStructuredData.tsx index d72e3aaff..e3dce075b 100644 --- a/src/app/screens/signatureRequest/signatureRequestStructuredData.tsx +++ b/src/app/screens/signatureRequest/signatureRequestStructuredData.tsx @@ -3,6 +3,7 @@ import { deserializeCV } from '@stacks/transactions/dist/esm/clarity'; import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; import ClarityMessageView from './clarityMessageView'; +import CollapsableContainer from './collapsableContainer'; interface SignatureRequestStructuredDataProps { payload: StructuredDataSignaturePayload; @@ -25,12 +26,11 @@ export default function SignatureRequestStructuredData(props: SignatureRequestSt const { t } = useTranslation('translation', { keyPrefix: 'SIGNATURE_REQUEST' }); const { payload } = props; return ( - - {t('MESSAGE_HEADER')} + - + ); } diff --git a/src/app/screens/transactionStatus/index.tsx b/src/app/screens/transactionStatus/index.tsx index 5201b2871..78d94a019 100644 --- a/src/app/screens/transactionStatus/index.tsx +++ b/src/app/screens/transactionStatus/index.tsx @@ -9,12 +9,12 @@ import { getBtcTxStatusUrl, getStxTxStatusUrl } from '@utils/helper'; import useWalletSelector from '@hooks/useWalletSelector'; import CopyButton from '@components/copyButton'; -const TxStatusContainer = styled.div({ - background: 'rgba(25, 25, 48, 0.5)', +const TxStatusContainer = styled.div((props) => ({ + background: props.theme.colors.background.elevation0, display: 'flex', flexDirection: 'column', height: '100%', -}); +})); const Container = styled.div({ display: 'flex', @@ -164,7 +164,7 @@ function TransactionStatus() { if (browserTx) window.close(); else if (isOrdinal) navigate(-4); else if (isNft) navigate(-3); - else navigate(-2); + else navigate(-3); }; const renderLink = ( diff --git a/src/assets/img/transactions/ArrowDown.svg b/src/assets/img/transactions/ArrowDown.svg new file mode 100644 index 000000000..35a86bdeb --- /dev/null +++ b/src/assets/img/transactions/ArrowDown.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/img/transactions/wallet.svg b/src/assets/img/transactions/wallet.svg new file mode 100644 index 000000000..c97859d45 --- /dev/null +++ b/src/assets/img/transactions/wallet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/common/types/inpage-types.ts b/src/common/types/inpage-types.ts index cf91c1102..d8079136f 100644 --- a/src/common/types/inpage-types.ts +++ b/src/common/types/inpage-types.ts @@ -8,6 +8,7 @@ export enum DomEventName { transactionRequest = 'stacksTransactionRequest', getAddressRequest = 'SatsAddressRequest', signPsbtRequest = 'SatsPsbtRequest', + signMessageRequest = 'SatsSignMessage', } export interface AuthenticationRequestEventDetails { @@ -39,3 +40,9 @@ export interface SignPsbtRequestEventDetails { } export type SignPsbtRequestEvent = CustomEvent; + +export interface SignMessageRequestEventDetails { + signMessageRequest: string; +} + +export type SignMessageRequestEvent = CustomEvent; diff --git a/src/common/types/message-types.ts b/src/common/types/message-types.ts index 3626cdca5..73cf424ff 100644 --- a/src/common/types/message-types.ts +++ b/src/common/types/message-types.ts @@ -101,6 +101,8 @@ export enum ExternalSatsMethods { getAddressResponse = 'getAddressResponse', signPsbtRequest = 'signPsbtRequest', signPsbtResponse = 'signPsbtResponse', + signMessageRequest = 'signMessageRequest', + signMessageResponse = 'signMessageResponse', } type GetAddressRequestMessage = Message; @@ -108,7 +110,7 @@ type GetAddressRequestMessage = Message; @@ -123,6 +125,22 @@ ExternalSatsMethods.signPsbtResponse, } >; -export type SatsConnectMessageFromContentScript = GetAddressRequestMessage | SignPsbtRequestMessage; +type SignMessageRequestMessage = Message; -export type SatsConnectMessageToContentScript = GetAddressResponseMessage | SignPsbtResponseMessage; +export type SignMessageResponseMessage = Message< +ExternalSatsMethods.signMessageResponse, +{ + signMessageRequest: string; + signMessageResponse: string; +} +>; + +export type SatsConnectMessageFromContentScript = + | GetAddressRequestMessage + | SignPsbtRequestMessage + | SignMessageRequestMessage; + +export type SatsConnectMessageToContentScript = + | GetAddressResponseMessage + | SignPsbtResponseMessage + | SignMessageResponseMessage; diff --git a/src/common/utils/legacy-external-message-handler.ts b/src/common/utils/legacy-external-message-handler.ts index 593109439..4dbaf6012 100644 --- a/src/common/utils/legacy-external-message-handler.ts +++ b/src/common/utils/legacy-external-message-handler.ts @@ -207,6 +207,27 @@ export async function handleLegacyExternalMethodFormat( listenForOriginTabClose({ tabId }); break; } + case ExternalSatsMethods.signMessageRequest: { + const { urlParams, tabId } = makeSearchParamsWithDefaults(port, [ + ['signMessageRequest', payload], + ]); + + const { id } = await triggerRequstWindowOpen(RequestsRoutes.SignatureRequest, urlParams); + listenForPopupClose({ + id, + tabId, + response: { + source: MESSAGE_SOURCE, + payload: { + signMessageRequest: payload, + signMessageResponse: 'cancel', + }, + method: ExternalSatsMethods.signMessageResponse, + }, + }); + listenForOriginTabClose({ tabId }); + break; + } default: { break; } diff --git a/src/content-scripts/content-script.ts b/src/content-scripts/content-script.ts index 38a630e6f..6c3674422 100644 --- a/src/content-scripts/content-script.ts +++ b/src/content-scripts/content-script.ts @@ -16,6 +16,7 @@ import { TransactionRequestEvent, GetAddressRequestEvent, SignPsbtRequestEvent, + SignMessageRequestEvent, } from '@common/types/inpage-types'; // Legacy messaging to work with older versions of Connect @@ -146,6 +147,18 @@ document.addEventListener(DomEventName.signPsbtRequest, (( }); }) as EventListener); +// Listen for a CustomEvent (Message Signing request) coming from the web app +document.addEventListener(DomEventName.signMessageRequest, (( + event: SignMessageRequestEvent, +) => { + forwardDomEventToBackground({ + path: RequestsRoutes.SignatureRequest, + payload: event.detail.signMessageRequest, + urlParam: 'signMessageRequest', + method: ExternalSatsMethods.signMessageRequest, + }); +}) as EventListener); + // Inject inpage script (Stacks Provider) const inpage = document.createElement('script'); inpage.src = chrome.runtime.getURL('inpage.js'); diff --git a/src/inpage/sats.inpage.ts b/src/inpage/sats.inpage.ts index 29fe3516e..dd5eefd5f 100644 --- a/src/inpage/sats.inpage.ts +++ b/src/inpage/sats.inpage.ts @@ -1,4 +1,4 @@ -import { SignPsbtRequestEventDetails } from './../common/types/inpage-types'; +import { SignMessageRequestEventDetails, SignPsbtRequestEventDetails } from './../common/types/inpage-types'; import { BitcoinProvider, GetAddressResponse } from 'sats-connect'; import { DomEventName, @@ -9,6 +9,7 @@ import { GetAddressResponseMessage, MESSAGE_SOURCE, SatsConnectMessageToContentScript, + SignMessageResponseMessage, SignPsbtResponseMessage, } from '@common/types/message-types'; import { SignTransactionResponse } from 'sats-connect/src/transactions/signTransaction'; @@ -63,6 +64,27 @@ const SatsMethodsProvider: BitcoinProvider = { window.addEventListener('message', handleMessage); }); }, + signMessage: async (signMessageRequest: string): Promise => { + const event = new CustomEvent(DomEventName.signMessageRequest, { + detail: { signMessageRequest }, + }); + document.dispatchEvent(event); + return new Promise((resolve, reject) => { + const handleMessage = (eventMessage: MessageEvent) => { + if (!isValidEvent(eventMessage, ExternalSatsMethods.signMessageResponse)) return; + if (eventMessage.data.payload?.signMessageRequest !== signMessageRequest) return; + window.removeEventListener('message', handleMessage); + if (eventMessage.data.payload.signMessageResponse === 'cancel') { + reject(eventMessage.data.payload.signMessageResponse); + return; + } + if (typeof eventMessage.data.payload.signMessageResponse === 'string') { + resolve(eventMessage.data.payload.signMessageResponse); + } + }; + window.addEventListener('message', handleMessage); + }); + }, call(request: string): Promise> { throw new Error('`call` function is not implemented'); }, diff --git a/src/locales/en.json b/src/locales/en.json index 7e199d61f..1945d43ae 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -58,7 +58,7 @@ "MEMO_INFO": "Adding a memo can have an impact on the transaction fee", "NEXT": "Next", "NO_FUNDS": "You don’t have any funds to send.", - "BUY_CRYPTO": "Buy crypto →", + "BUY_CRYPTO": "Buy crypto", "MOVE_TO_ASSET_DETAIL": "Back to asset detail", "ERRORS": { "ADDRESS_REQUIRED": "Recipient address is required", @@ -111,9 +111,16 @@ "PSBT_CANT_PARSE_ERROR_TITLE": "Transaction Error", "PSBT_CANT_PARSE_ERROR_DESCRIPTION": "The requested transaction is invalid and cannot be processed please contact the developer of the requesting app for support", "PSBT_CANT_SIGN_ERROR_TITLE": "Failed to sign transaction", + "To": "To", "YOU_WILL_TRANSFER": "You will transfer", "YOU_WILL_RECEIVE": "You will receive", - "ORDINAL": "Ordinal" + "ORDINAL": "Ordinal", + "ORDINAL_DETECTED_WARNING": "Ordinal inscription detected in transaction. Continuing will cause your ordinal to be transferred away.", + "ORDINAL_DETECTED_ACTION": "Move to my ordinals address", + "BTC_TRANSFER_DANGER_ALERT_TITLE": "Danger", + "BTC_TRANSFER_DANGER_ALERT_DESC": "You are about to make a Bitcoin transfer which contains an ordinal inscription. Once transferred out of the wallet, you will not be able to recover them.", + "CONITNUE": "Continue", + "BACK": "Back" }, "TX_ERRORS": { "INSUFFICIENT_BALANCE": "Insufficient balance", @@ -285,7 +292,7 @@ "DESCRIPTION": "You have Bitcoin stored in your ordinal address. You can transfer them to your payment address so they can be used for payments and are shown in your balance." }, "RESTORE_ORDINAL_SCREEN": { - "TITLE": "Restore Oridnals", + "TITLE": "Restore Ordinals", "BTC": "Bitcoin", "TRANSFER": "Transfer", "BACK": "Back", @@ -459,8 +466,13 @@ "HIDE_HASH_BUTTON": "Hide Hash", "ACTION_DISCLAIMER": "No transactions will be broadcasted and no fees will be applied.", "SIGNING_WARNING": "By signing this message, you prove that you are the owner of an account without broadcasting any on chain transactions. This signature cannot be used to send transactions on your behalf. You should only sign messages you trust.", + "SIGNING_ADDRESS_TITLE": "Signing with", + "SIGNING_ADDRESS_STX": "Your Stacks address", + "SIGNING_ADDRESS_SEGWIT": "Your Bitcoin payment address", + "SIGNING_ADDRESS_TAPROOT": "Your Ordinals address", "SIGN_BUTTON": "Sign", - "CANCEL_BUTTON": "Cancel" + "CANCEL_BUTTON": "Cancel", + "SIGNATURE_ERROR_TITLE": "Signature Error" }, "ERROR_SCREEN": { "TITLE": "Xverse crashed unexpectedly",