diff --git a/dist-isolation/index.html b/dist-isolation/index.html index 0940d295b..60ff4c555 100644 --- a/dist-isolation/index.html +++ b/dist-isolation/index.html @@ -12,7 +12,7 @@ // console.debug("Isolation hook called with payload:", payload); // TODO: Prevent command execution // TODO: Perhaps whitelist commands - console.log("Isolation hook called with payload:", payload); + // console.log("Isolation hook called with payload:", payload); return payload; }; diff --git a/package-lock.json b/package-lock.json index 43afa0479..eb9a17765 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,19 @@ "name": "tari-universe", "version": "0.9.803", "dependencies": { + "@emotion/react": "latest", + "@emotion/styled": "latest", "@floating-ui/react": "^0.27.4", "@lottiefiles/dotlottie-react": "^0.13.0", + "@mui/material": "^6.4.4", "@sentry/react": "^8.48.0", + "@tari-project/tari-permissions": "^0.4.0", + "@tari-project/tarijs": "^0.4.0", + "@tari-project/typescript-bindings": "^1.4.0", + "@tari-project/wallet_jrpc_client": "^1.4.0", "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-clipboard-manager": "^2.2.0", + "@tauri-apps/plugin-dialog": "^2.2.0", "@tauri-apps/plugin-os": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0", @@ -67,8 +75,6 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -81,9 +87,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -139,7 +142,6 @@ "version": "7.26.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.26.5", @@ -184,9 +186,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", @@ -198,8 +197,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "license": "MIT", "dependencies": { @@ -226,9 +223,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -236,9 +230,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -246,8 +237,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, "license": "MIT", "engines": { @@ -272,7 +261,6 @@ "version": "7.26.7", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.26.7" @@ -302,8 +290,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "dev": true, "license": "MIT", "dependencies": { @@ -318,8 +304,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dev": true, "license": "MIT", "dependencies": { @@ -346,9 +330,6 @@ }, "node_modules/@babel/template": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.25.9", @@ -363,7 +344,6 @@ "version": "7.26.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", @@ -382,7 +362,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -392,7 +371,6 @@ "version": "7.26.7", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -402,25 +380,156 @@ "node": ">=6.9.0" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", - "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.1" + "@emotion/memoize": "^0.9.0" } }, "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", "license": "MIT" }, + "node_modules/@emotion/styled": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { @@ -882,8 +991,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -907,8 +1014,6 @@ }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -918,8 +1023,6 @@ }, "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -944,8 +1047,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { @@ -968,8 +1069,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -979,8 +1078,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -992,8 +1089,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1037,6 +1132,286 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, "node_modules/@floating-ui/core": { "version": "1.6.9", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", @@ -1092,8 +1467,6 @@ }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1102,8 +1475,6 @@ }, "node_modules/@humanfs/node": { "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1116,8 +1487,6 @@ }, "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1130,9 +1499,6 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1146,8 +1512,6 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -1157,8 +1521,6 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1170,8 +1532,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1192,8 +1552,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1206,8 +1564,6 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { @@ -1221,7 +1577,6 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -1236,7 +1591,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1246,7 +1600,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1256,20 +1609,33 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.3.0.tgz", + "integrity": "sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, "node_modules/@lottiefiles/dotlottie-react": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.13.0.tgz", @@ -1288,26 +1654,517 @@ "integrity": "sha512-iNz1rr8zRTSJ0xCZEPeoCX6YnaNhBdkF7gJWhSa8bwB4NTrYZm0vAuC0jF/aLLhU7q9nf6ykxffrz0Sf4JPSPg==", "license": "MIT" }, - "node_modules/@nabla/vite-plugin-eslint": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nabla/vite-plugin-eslint/-/vite-plugin-eslint-2.0.5.tgz", - "integrity": "sha512-m6Q8ZVM0ASZfYyfFbG661mDklhZQZEeBMQgtB26NhdadxPSctHzHsUbF87msdSb0V4Z8R1p/vRkB5SHNOpANAQ==", - "dev": true, - "license": "MIT", + "node_modules/@metamask/json-rpc-engine": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-10.0.3.tgz", + "integrity": "sha512-p01QhlLIiTFXivEJCRx0LXEvPUaUPCedI9A8qV9jcLGGNSj1UTWM9GeifoeTweOMdmpIk5Rxg10H9f0JPUC9Ig==", + "license": "ISC", "dependencies": { - "@types/eslint": "*", - "chalk": "^4", - "debug": "^4" + "@metamask/rpc-errors": "^7.0.2", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^11.1.0" }, - "peerDependencies": { - "eslint": "^8.45 || ^9", - "vite": "^4 || ^5 || ^6" + "engines": { + "node": "^18.18 || >=20" + } + }, + "node_modules/@metamask/json-rpc-middleware-stream": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-8.0.7.tgz", + "integrity": "sha512-s7ugj+b4QYkQ+3VjRDdsp8GfKOKrxvI6HzaZg4TJrfSV+SO/Ky4TGo4Aib1gtv3/8muCPYAPGtjFVYWVAVJ6jw==", + "license": "ISC", + "dependencies": { + "@metamask/json-rpc-engine": "^10.0.3", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^11.1.0", + "readable-stream": "^3.6.2" + }, + "engines": { + "node": "^18.18 || >=20" + } + }, + "node_modules/@metamask/object-multiplex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.1.0.tgz", + "integrity": "sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==", + "license": "ISC", + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.2" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } + }, + "node_modules/@metamask/providers": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-18.3.1.tgz", + "integrity": "sha512-4wHCA24KDwq/eVnAu+/+N7BEuMNN63kdN295u8Wkdc76puyig3lJdcGGne+TEjiILG34twr9rjZPOWTCwOUcDg==", + "license": "MIT", + "dependencies": { + "@metamask/json-rpc-engine": "^10.0.2", + "@metamask/json-rpc-middleware-stream": "^8.0.6", + "@metamask/object-multiplex": "^2.0.0", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/safe-event-emitter": "^3.1.1", + "@metamask/utils": "^11.0.1", + "detect-browser": "^5.2.0", + "extension-port-stream": "^4.1.0", + "fast-deep-equal": "^3.1.3", + "is-stream": "^2.0.0", + "readable-stream": "^3.6.2" + }, + "engines": { + "node": "^18.18 || >=20" + }, + "peerDependencies": { + "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" + } + }, + "node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-7.0.2.tgz", + "integrity": "sha512-YYYHsVYd46XwY2QZzpGeU4PSdRhHdxnzkB8piWGvJW2xbikZ3R+epAYEL4q/K8bh9JPTucsUdwRFnACor1aOYw==", + "license": "MIT", + "dependencies": { + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": "^18.20 || ^20.17 || >=22" + } + }, + "node_modules/@metamask/safe-event-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", + "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", + "license": "ISC", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/superstruct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.1.0.tgz", + "integrity": "sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/utils": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.2.0.tgz", + "integrity": "sha512-5Y4bd8Axvi2kJKjp6Jlbb9wyoTrSZxQjWvVGPevpErAc7SCUYUuW0QOOPVu7YmT+bzisTpnFnRE8LjtwYCKGAg==", + "license": "ISC", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.1.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": "^18.18 || ^20.14 || >=22" + } + }, + "node_modules/@metamask/utils/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@motionone/animation": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", + "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", + "license": "MIT", + "dependencies": { + "@motionone/easing": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/dom": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", + "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", + "license": "MIT", + "dependencies": { + "@motionone/animation": "^10.18.0", + "@motionone/generators": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/easing": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", + "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", + "license": "MIT", + "dependencies": { + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/generators": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", + "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/svelte": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/svelte/-/svelte-10.16.4.tgz", + "integrity": "sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==", + "license": "MIT", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/types": { + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", + "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", + "license": "MIT" + }, + "node_modules/@motionone/utils": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", + "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/vue": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/vue/-/vue-10.16.4.tgz", + "integrity": "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==", + "deprecated": "Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion", + "license": "MIT", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.4.tgz", + "integrity": "sha512-r+J0EditrekkTtO2CnCBCOGpNaDYwJqz8lH4rj6o/anDcskZFJodBlG8aCJkS8DL/CF/9EHS+Gz53EbmYEnQbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/material": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.4.tgz", + "integrity": "sha512-ISVPrIsPQsxnwvS40C4u03AuNSPigFeS2+n1qpuEZ94hDsdMi19dQM2JcC9CHEhXecSIQjP1RTyY0mPiSpSrFQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.4.4", + "@mui/system": "^6.4.3", + "@mui/types": "^7.2.21", + "@mui/utils": "^6.4.3", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.0.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^6.4.3", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, + "node_modules/@mui/private-theming": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.3.tgz", + "integrity": "sha512-7x9HaNwDCeoERc4BoEWLieuzKzXu5ZrhRnEM6AUcRXUScQLvF1NFkTlP59+IJfTbEMgcGg1wWHApyoqcksrBpQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/utils": "^6.4.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.3.tgz", + "integrity": "sha512-OC402VfK+ra2+f12Gef8maY7Y9n7B6CZcoQ9u7mIkh/7PKwW/xH81xwX+yW+Ak1zBT3HYcVjh2X82k5cKMFGoQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.3.tgz", + "integrity": "sha512-Q0iDwnH3+xoxQ0pqVbt8hFdzhq1g2XzzR4Y5pVcICTNtoCLJmpJS3vI4y/OIM1FHFmpfmiEC2IRIq7YcZ8nsmg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.4.3", + "@mui/styled-engine": "^6.4.3", + "@mui/types": "^7.2.21", + "@mui/utils": "^6.4.3", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.21", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.21.tgz", + "integrity": "sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.3.tgz", + "integrity": "sha512-jxHRHh3BqVXE9ABxDm+Tc3wlBooYz/4XPa0+4AI+iF38rV1/+btJmSUgG4shDtSWVs/I97aDn5jBCt6SF2Uq2A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/types": "^7.2.21", + "@types/prop-types": "^15.7.14", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, + "node_modules/@nabla/vite-plugin-eslint": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "chalk": "^4", + "debug": "^4" + }, + "peerDependencies": { + "eslint": "^8.45 || ^9", + "vite": "^4 || ^5 || ^6" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.1.tgz", + "integrity": "sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.0.tgz", + "integrity": "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1320,8 +2177,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1330,8 +2185,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1344,8 +2197,6 @@ }, "node_modules/@pkgr/core": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "license": "MIT", "engines": { @@ -1355,6 +2206,16 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.34.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.2.tgz", @@ -1621,10 +2482,100 @@ "win32" ] }, - "node_modules/@sentry-internal/browser-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.54.0.tgz", - "integrity": "sha512-DKWCqb4YQosKn6aD45fhKyzhkdG7N6goGFDeyTaJFREJDFVDXiNDsYZu30nJ6BxMM7uQIaARhPAC5BXfoED3pQ==", + "node_modules/@scure/base": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz", + "integrity": "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry-internal/browser-utils": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.54.0.tgz", + "integrity": "sha512-DKWCqb4YQosKn6aD45fhKyzhkdG7N6goGFDeyTaJFREJDFVDXiNDsYZu30nJ6BxMM7uQIaARhPAC5BXfoED3pQ==", "license": "MIT", "dependencies": { "@sentry/core": "8.54.0" @@ -1692,8 +2643,8 @@ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.54.0.tgz", "integrity": "sha512-03bWf+D1j28unOocY/5FDB6bUHtYlm6m6ollVejhg45ZmK9iPjdtxNWbrLsjT1WRym0Tjzowu+A3p+eebYEv0Q==", "license": "MIT", - "engines": { - "node": ">=14.18" + "dependencies": { + "@stablelib/bytes": "^1.0.1" } }, "node_modules/@sentry/react": { @@ -1726,16 +2677,139 @@ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", "license": "MIT" }, + "node_modules/@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==", + "license": "MIT" + }, "node_modules/@taplo/cli": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@taplo/cli/-/cli-0.7.0.tgz", - "integrity": "sha512-Ck3zFhQhIhi02Hl6T4ZmJsXdnJE+wXcJz5f8klxd4keRYgenMnip3JDPMGDRLbnC/2iGd8P0sBIQqI3KxfVjBg==", "dev": true, "license": "MIT", "bin": { "taplo": "dist/cli.js" } }, + "node_modules/@tari-project/metamask-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tari-project/metamask-provider/-/metamask-provider-0.4.0.tgz", + "integrity": "sha512-4dz2DUQ02S6nxErzzQbSUf3KX619Xp0KcubwLmTPDyhFwKSTE5EDbGn0PLXhIRaGCi77u0xqwSPP0mr58hSlBA==", + "license": "ISC", + "dependencies": { + "@metamask/providers": "^18.2.0", + "@tari-project/tari-provider": "^0.4.0", + "@tari-project/tarijs-types": "^0.4.0", + "@tari-project/typescript-bindings": "^1.4.0" + } + }, + "node_modules/@tari-project/tari-permissions": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tari-project/tari-permissions/-/tari-permissions-0.4.0.tgz", + "integrity": "sha512-qTuLIQ5ak6x19Bs2Pog1zJEoA0hvKIW8iKRxTh0Yf9lcdMlosHw7Drifaay9pmfEuQ7rOlaqcSEmboGnh+s6UQ==", + "license": "ISC" + }, + "node_modules/@tari-project/tari-provider": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tari-project/tari-provider/-/tari-provider-0.4.1.tgz", + "integrity": "sha512-oMQCEy4S1Mn8xA2oQvyEl4rJNetFzn55xaYbVMYo2yt5xXFT6i/O+pcGzVN1FyZrdtPV6SDnHtDshvxstql9TA==", + "license": "ISC", + "dependencies": { + "@tari-project/typescript-bindings": "^1.4.0" + } + }, + "node_modules/@tari-project/tari-universe-provider": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tari-project/tari-universe-provider/-/tari-universe-provider-0.4.1.tgz", + "integrity": "sha512-kGkk0EYGM7eiofKMaKubVYPp9WCzeR5KB6VS7OxxVQW+SmrjYlMruBMQnoWv4TuuF7VbYuRs1nu4qzDfSsN8HQ==", + "license": "ISC", + "dependencies": { + "@tari-project/tari-permissions": "^0.4.0", + "@tari-project/tari-provider": "^0.4.1", + "@tari-project/tarijs-types": "^0.4.0", + "@tari-project/typescript-bindings": "^1.4.0", + "@tari-project/wallet_jrpc_client": "^1.4.0" + } + }, + "node_modules/@tari-project/tarijs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tari-project/tarijs/-/tarijs-0.4.0.tgz", + "integrity": "sha512-6jkz99XrBGDEs8e5p1T7Zn1pmSH2KaQWp/489+tDbGrW2MGAuPkOSftgFYxx13GFVhiLCOC2CRbCX+moTfPJww==", + "license": "ISC", + "dependencies": { + "@metamask/providers": "^18.2.0", + "@tari-project/metamask-provider": "^0.4.0", + "@tari-project/tari-permissions": "^0.4.0", + "@tari-project/tari-provider": "^0.4.0", + "@tari-project/tari-universe-provider": "^0.4.0", + "@tari-project/tarijs-builders": "^0.4.0", + "@tari-project/tarijs-types": "^0.4.0", + "@tari-project/typescript-bindings": "^1.4.0", + "@tari-project/wallet-connect-provider": "^0.4.0", + "@tari-project/wallet-daemon-provider": "^0.4.0" + } + }, + "node_modules/@tari-project/tarijs-builders": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tari-project/tarijs-builders/-/tarijs-builders-0.4.0.tgz", + "integrity": "sha512-9YpE09ajBC4uFeLKE93sG1pWnPgQWfEMLVG/S8i2WdaFnzCMhdZ+DJ7nDsD0PVNbO5Ok6gaIsWBjepaXfhy6SQ==", + "license": "ISC", + "dependencies": { + "@tari-project/tari-provider": "^0.4.0", + "@tari-project/tari-universe-provider": "^0.4.0", + "@tari-project/tarijs-types": "^0.4.0", + "@tari-project/typescript-bindings": "^1.4.0" + } + }, + "node_modules/@tari-project/tarijs-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tari-project/tarijs-types/-/tarijs-types-0.4.0.tgz", + "integrity": "sha512-MJGtkvGN/cmowYE2x7DYciqxJVP9mMbdk23vrHrYWExtVhFToPd875wF3zbXpsVI4ZReE/xBgbxbR/RXBUtq2Q==", + "license": "ISC", + "dependencies": { + "@tari-project/typescript-bindings": "^1.4.0" + } + }, + "node_modules/@tari-project/typescript-bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@tari-project/typescript-bindings/-/typescript-bindings-1.5.0.tgz", + "integrity": "sha512-bwpUHqbK6Or+MnZ7t4ERfjGOK1TVP1VHRSnmA65j8EeD13UtX9rNkQoBYZdZdEsDSmTruv2ykwF1Fo//BLlCjw==", + "license": "ISC" + }, + "node_modules/@tari-project/wallet_jrpc_client": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@tari-project/wallet_jrpc_client/-/wallet_jrpc_client-1.4.1.tgz", + "integrity": "sha512-RUO9eEhrFMy3QZJduzwBWbMbUezrTrosEj++IW9cSpK7tt0RCNQA7Qv/NAvG6CRoXqEKsmSql/EMWGSv/KW5DQ==", + "license": "ISC", + "dependencies": { + "@tari-project/typescript-bindings": "^1.4.0" + } + }, + "node_modules/@tari-project/wallet-connect-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tari-project/wallet-connect-provider/-/wallet-connect-provider-0.4.0.tgz", + "integrity": "sha512-vd/k6LFR9XAbKZX94IT55VF3YLMRJyjcclF5vSsWkwJiwc+1R9/vChQZRvhy83k43SeAJSgX67W0UaHdbRXziA==", + "license": "ISC", + "dependencies": { + "@tari-project/tari-provider": "^0.4.0", + "@tari-project/tarijs-builders": "^0.4.0", + "@tari-project/typescript-bindings": "^1.4.0", + "@tari-project/wallet_jrpc_client": "^1.4.0", + "@walletconnect/modal": "^2.6.2", + "@walletconnect/universal-provider": "^2.13.3" + } + }, + "node_modules/@tari-project/wallet-daemon-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tari-project/wallet-daemon-provider/-/wallet-daemon-provider-0.4.0.tgz", + "integrity": "sha512-WHz9zA1DNZUAviO4jUEdfbic7rYlU/bEYooTkyQd4drV6+6Sb1O+Cdxn+R/Bb0nNrAaGfs+DtcU3QPatBJxZkQ==", + "license": "ISC", + "dependencies": { + "@tari-project/tari-permissions": "^0.4.0", + "@tari-project/tari-provider": "^0.4.0", + "@tari-project/wallet_jrpc_client": "^1.4.0" + } + }, "node_modules/@tauri-apps/api": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.2.0.tgz", @@ -1954,6 +3028,15 @@ "@tauri-apps/api": "^2.0.0" } }, + "node_modules/@tauri-apps/plugin-dialog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.2.0.tgz", + "integrity": "sha512-6bLkYK68zyK31418AK5fNccCdVuRnNpbxquCl8IqgFByOgWFivbiIlvb79wpSXi0O+8k8RCSsIpOquebusRVSg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, "node_modules/@tauri-apps/plugin-os": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-os/-/plugin-os-2.2.0.tgz", @@ -1992,8 +3075,6 @@ }, "node_modules/@types/babel__core": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", "dependencies": { @@ -2006,8 +3087,6 @@ }, "node_modules/@types/babel__generator": { "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "license": "MIT", "dependencies": { @@ -2016,8 +3095,6 @@ }, "node_modules/@types/babel__template": { "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "license": "MIT", "dependencies": { @@ -2027,8 +3104,6 @@ }, "node_modules/@types/babel__traverse": { "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "license": "MIT", "dependencies": { @@ -2046,8 +3121,6 @@ }, "node_modules/@types/eslint": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", "dependencies": { @@ -2057,8 +3130,6 @@ }, "node_modules/@types/eslint__js": { "version": "8.42.3", - "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", - "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", "dev": true, "license": "MIT", "dependencies": { @@ -2121,6 +3192,12 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, "node_modules/@types/prop-types": { "version": "15.7.14", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", @@ -2147,12 +3224,27 @@ "@types/react": "^18.0.0" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/@types/stylis": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", "license": "MIT" }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -2359,36 +3451,903 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "license": "ISC" + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@walletconnect/core": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.18.1.tgz", + "integrity": "sha512-fKpSeiyYsnmDAOxpIpr7Dzs/p5ORVS7UMoCMW11ZML2b0RZ3HUKLBWkX05BbPhfl1kHLBWYw1kwMgalmCOQFIg==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/jsonrpc-ws-connection": "1.0.16", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.1.0", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.18.1", + "@walletconnect/utils": "2.18.1", + "@walletconnect/window-getters": "1.0.1", + "events": "3.3.0", + "lodash.isequal": "4.5.0", + "uint8arrays": "3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/core/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/core/node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/environment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz", + "integrity": "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/environment/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/events": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz", + "integrity": "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==", + "license": "MIT", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/events/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/heartbeat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz", + "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==", + "license": "MIT", + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-http-connection": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz", + "integrity": "sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.1", + "cross-fetch": "^3.1.4", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-http-connection/node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz", + "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "license": "MIT", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, + "node_modules/@walletconnect/jsonrpc-utils": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz", + "integrity": "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==", + "license": "MIT", + "dependencies": { + "@walletconnect/environment": "^1.0.1", + "@walletconnect/jsonrpc-types": "^1.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/jsonrpc-ws-connection": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz", + "integrity": "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0", + "ws": "^7.5.1" + } + }, + "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@walletconnect/logger": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz", + "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.2", + "pino": "7.11.0" + } + }, + "node_modules/@walletconnect/modal": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal/-/modal-2.7.0.tgz", + "integrity": "sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/modal-core": "2.7.0", + "@walletconnect/modal-ui": "2.7.0" + } + }, + "node_modules/@walletconnect/modal-core": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-core/-/modal-core-2.7.0.tgz", + "integrity": "sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA==", + "license": "Apache-2.0", + "dependencies": { + "valtio": "1.11.2" + } + }, + "node_modules/@walletconnect/modal-ui": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-ui/-/modal-ui-2.7.0.tgz", + "integrity": "sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/modal-core": "2.7.0", + "lit": "2.8.0", + "motion": "10.16.2", + "qrcode": "1.5.3" + } + }, + "node_modules/@walletconnect/modal-ui/node_modules/motion": { + "version": "10.16.2", + "resolved": "https://registry.npmjs.org/motion/-/motion-10.16.2.tgz", + "integrity": "sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==", + "license": "MIT", + "dependencies": { + "@motionone/animation": "^10.15.1", + "@motionone/dom": "^10.16.2", + "@motionone/svelte": "^10.16.2", + "@motionone/types": "^10.15.1", + "@motionone/utils": "^10.15.1", + "@motionone/vue": "^10.16.2" + } + }, + "node_modules/@walletconnect/relay-api": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz", + "integrity": "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-types": "^1.0.2" + } + }, + "node_modules/@walletconnect/relay-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.1.0.tgz", + "integrity": "sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.8.0", + "@noble/hashes": "1.7.0", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/safe-json/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/sign-client": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.18.1.tgz", + "integrity": "sha512-LqsZ4YwR1jXNLhZp3aJiQ4bPO68pCwpp2drhu5KyvTqEYevf1/ckeQ1gQegQQ5e+TXUaPVH2B5lBPTL3SJVvPw==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/core": "2.18.1", + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.18.1", + "@walletconnect/utils": "2.18.1", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz", + "integrity": "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/time/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/types": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.18.1.tgz", + "integrity": "sha512-GJs//PzR9CAQ4vsTe6FiwbmyYD4Pr0OS4FHZQe6p2+Fo5wRzEs6otOx0BwNM67CEEHxdT4LqDOWzE0cSoZhpcw==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/types/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/types/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/types/node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/universal-provider": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.18.1.tgz", + "integrity": "sha512-kI/tUgrV/L+oPGGhyvV8jj4qhOIIVd98W32N9ElymqQlMihspRGJee5RYprRBxcjD3V/dCi+kn4VXPUQL1EEdA==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/sign-client": "2.18.1", + "@walletconnect/types": "2.18.1", + "@walletconnect/utils": "2.18.1", + "events": "3.3.0", + "lodash": "4.17.21" + } + }, + "node_modules/@walletconnect/universal-provider/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/universal-provider/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/universal-provider/node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/utils": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.18.1.tgz", + "integrity": "sha512-+07G/SzhFGOFYM9gyY39hKMqdx6qvMcz0EIWjmxgrToiwF//TNz4uurqa52GImjgXCrimFzB0jUD4WJo3xF4Kw==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/transactions": "5.7.0", + "@noble/ciphers": "1.2.1", + "@noble/curves": "1.8.1", + "@noble/hashes": "1.7.1", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.1.0", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.18.1", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "6.6.1", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@walletconnect/utils/node_modules/@noble/curves": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", + "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.1" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/utils/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/utils/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/utils/node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", + "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/window-getters/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", - "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", - "dev": true, + "node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", + "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", "license": "MIT", "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" } }, + "node_modules/@walletconnect/window-metadata/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, "node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -2400,8 +4359,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2410,8 +4367,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -2437,9 +4392,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2451,6 +4403,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2477,8 +4442,6 @@ }, "node_modules/array-includes": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2498,8 +4461,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -2508,8 +4469,6 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2567,8 +4526,6 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { @@ -2614,10 +4571,17 @@ "node": ">= 0.4" } }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2630,10 +4594,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-plugin-styled-components": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", - "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", "dev": true, "license": "MIT", "dependencies": { @@ -2664,10 +4661,26 @@ "dev": true, "license": "MIT" }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -2676,9 +4689,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2687,6 +4697,12 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, "node_modules/browserslist": { "version": "4.24.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", @@ -2774,7 +4790,15 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "license": "MIT", "engines": { "node": ">=6" @@ -2822,8 +4846,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -2877,11 +4899,85 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2894,7 +4990,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/comma-separated-tokens": { @@ -2909,8 +5004,6 @@ }, "node_modules/common-tags": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, "license": "MIT", "engines": { @@ -2931,6 +5024,49 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", @@ -2955,6 +5091,15 @@ "node": ">= 8" } }, + "node_modules/crossws": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.4.tgz", + "integrity": "sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, "node_modules/css-color-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", @@ -3052,6 +5197,15 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -3065,6 +5219,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3074,8 +5237,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -3092,8 +5253,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -3108,6 +5267,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -3117,6 +5282,18 @@ "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==", + "license": "MIT" + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", + "license": "MIT" + }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -3130,10 +5307,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" + }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -3152,8 +5333,6 @@ }, "node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3163,6 +5342,16 @@ "node": ">=0.10.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -3178,6 +5367,18 @@ "node": ">= 0.4" } }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.92", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.92.tgz", @@ -3185,12 +5386,46 @@ "dev": true, "license": "ISC" }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, "node_modules/emoji-regex": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "license": "MIT" }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/engine.io-client": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", @@ -3223,13 +5458,20 @@ }, "node_modules/engine.io-parser": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { "version": "1.23.9", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", @@ -3308,8 +5550,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { @@ -3375,8 +5615,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "license": "MIT", "dependencies": { @@ -3444,8 +5682,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -3456,7 +5692,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -3540,8 +5775,6 @@ }, "node_modules/eslint-plugin-i18next": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-i18next/-/eslint-plugin-i18next-6.1.1.tgz", - "integrity": "sha512-/Vy6BfX44njxpRnbJm7bbph0KaNJF2eillqN5W+u03hHuxmh9BjtjdPSrI9HPtyoEbG4j5nBn9gXm/dg99mz3Q==", "dev": true, "license": "ISC", "dependencies": { @@ -3631,8 +5864,6 @@ }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -3642,8 +5873,6 @@ }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -3655,8 +5884,6 @@ }, "node_modules/eslint-scope": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3698,8 +5925,6 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -3709,8 +5934,6 @@ }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -3722,8 +5945,6 @@ }, "node_modules/espree": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3740,8 +5961,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3753,8 +5972,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3766,8 +5983,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -3786,25 +6001,82 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/extension-port-stream": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-4.2.0.tgz", + "integrity": "sha512-i5IgiPVMVrHN+Zx8PRjvFsOw8L1A3sboVwPZghDjW9Yp1BMmBDE6mCcTNu4xMXPYduBOwI3CBK7wd72LcOyD6g==", + "license": "ISC", + "dependencies": { + "readable-stream": "^3.6.2 || ^4.4.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -3833,8 +6105,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -3858,6 +6128,21 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, "node_modules/fastq": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", @@ -3870,8 +6155,6 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3883,9 +6166,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -3894,10 +6174,23 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -3913,8 +6206,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -3949,9 +6240,9 @@ } }, "node_modules/framer-motion": { - "version": "12.4.1", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.1.tgz", - "integrity": "sha512-5Ijbea3topSZjadQ0hgc/TcWj2ldMZmNREM7RvAhvsThYOA1HHOA8TT1yKvMu1YXP3jWaFwoZ6Vo9Nw+DUZrzA==", + "version": "12.4.3", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.3.tgz", + "integrity": "sha512-rsMeO7w3dKyNG09o3cGwSH49iHU+VgDmfSSfsX+wfkO3zDA6WWkh4sUsMXd155YROjZP+7FTIhDrBYfgZeHjKQ==", "license": "MIT", "dependencies": { "motion-dom": "^12.0.0", @@ -3986,7 +6277,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -4001,7 +6291,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4030,8 +6319,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -4040,14 +6327,21 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", @@ -4107,8 +6401,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -4132,8 +6424,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4149,8 +6439,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -4194,10 +6482,26 @@ "dev": true, "license": "MIT" }, + "node_modules/h3": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.0.tgz", + "integrity": "sha512-OsjX4JW8J4XGgCgEcad20pepFQWnuKH+OwkCJjogF3C+9AZ1iYdtB4hX6vAb5DskBiu5ljEXqApINjR8CqoCMQ==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.0", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3" + } + }, "node_modules/has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "license": "MIT", "dependencies": { @@ -4222,8 +6526,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -4232,8 +6534,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -4274,8 +6574,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -4288,11 +6586,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4341,6 +6648,23 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hey-listen": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", + "license": "MIT" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -4418,10 +6742,14 @@ "cross-fetch": "4.0.0" } }, + "node_modules/idb-keyval": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==", + "license": "Apache-2.0" + }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -4432,7 +6760,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -4447,8 +6774,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -4457,8 +6782,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { @@ -4467,9 +6790,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { @@ -4481,7 +6801,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/inline-style-parser": { @@ -4505,6 +6824,15 @@ "node": ">= 0.4" } }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -4547,6 +6875,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, "node_modules/is-async-function": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", @@ -4583,6 +6917,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", @@ -4602,8 +6948,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -4617,7 +6961,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -4676,9 +7019,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4700,6 +7040,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", @@ -4721,9 +7070,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -4744,8 +7090,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -4757,9 +7101,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4784,8 +7125,6 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", "engines": { @@ -4825,8 +7164,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -4852,6 +7189,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -4905,8 +7254,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -4981,6 +7328,12 @@ "node": ">= 0.4" } }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4989,8 +7342,6 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -5004,7 +7355,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -5020,6 +7370,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5036,8 +7392,6 @@ }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -5049,8 +7403,6 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5065,18 +7417,20 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, + "node_modules/keyvaluestorage-interface": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", + "integrity": "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==", + "license": "MIT" + }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5087,6 +7441,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, "node_modules/linkify-react": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/linkify-react/-/linkify-react-4.2.0.tgz", @@ -5104,10 +7464,39 @@ "license": "MIT", "peer": true }, + "node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -5124,7 +7513,13 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", "license": "MIT" }, "node_modules/lodash.merge": { @@ -5150,8 +7545,6 @@ }, "node_modules/loglevel-colored-level-prefix": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", - "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", "dev": true, "license": "MIT", "dependencies": { @@ -5161,8 +7554,6 @@ }, "node_modules/loglevel-colored-level-prefix/node_modules/ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, "license": "MIT", "engines": { @@ -5171,8 +7562,6 @@ }, "node_modules/loglevel-colored-level-prefix/node_modules/chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "license": "MIT", "dependencies": { @@ -5188,8 +7577,6 @@ }, "node_modules/loglevel-colored-level-prefix/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -5198,8 +7585,6 @@ }, "node_modules/loglevel-colored-level-prefix/node_modules/supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, "license": "MIT", "engines": { @@ -5230,8 +7615,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -5403,14 +7786,18 @@ }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { "node": ">= 8" } }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" + }, "node_modules/micromark": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", @@ -5855,8 +8242,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -5867,10 +8252,20 @@ "node": ">=8.6" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -5884,12 +8279,12 @@ } }, "node_modules/motion": { - "version": "12.4.1", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.4.1.tgz", - "integrity": "sha512-TBnf5NyZVZFOHOc87fyC6qTSU+6LUe09LwxA1Sna35YL7qgOv1EZv96mu6o7uQ2Rl1GvTSQLeyfrQAEG+zlh+w==", + "version": "12.4.3", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.4.3.tgz", + "integrity": "sha512-KeoMpKFEVdofN0v/z1g3tm4cMtk1WAHQ5Pg7M1ElxeRLA8cBSrkmSCJ9q6hLo7spp/n906h2kmeDNvBkysaxcQ==", "license": "MIT", "dependencies": { - "framer-motion": "^12.4.1", + "framer-motion": "^12.4.3", "tslib": "^2.4.0" }, "peerDependencies": { @@ -5930,6 +8325,12 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, "node_modules/nanoid": { "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", @@ -5975,6 +8376,18 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz", + "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==", + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", @@ -5982,11 +8395,19 @@ "dev": true, "license": "MIT" }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6007,8 +8428,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -6038,8 +8457,6 @@ }, "node_modules/object.entries": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6053,8 +8470,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6089,11 +8504,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", + "license": "MIT" + }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "license": "MIT" + }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -6101,8 +8536,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -6137,8 +8570,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6153,8 +8584,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -6167,11 +8596,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -6205,11 +8642,26 @@ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6217,8 +8669,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -6227,8 +8677,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -6239,14 +8687,12 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6260,9 +8706,6 @@ }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -6271,10 +8714,64 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", + "license": "MIT" + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pony-cause": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", + "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", + "license": "0BSD", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "license": "MIT", "engines": { @@ -6317,8 +8814,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -6343,8 +8838,6 @@ }, "node_modules/prettier-eslint": { "version": "16.3.0", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.3.0.tgz", - "integrity": "sha512-Lh102TIFCr11PJKUMQ2kwNmxGhTsv/KzUg9QYF2Gkw259g/kPgndZDWavk7/ycbRvj2oz4BPZ1gCU8bhfZH/Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -6379,8 +8872,6 @@ }, "node_modules/prettier-eslint/node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6403,8 +8894,6 @@ }, "node_modules/prettier-eslint/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -6414,8 +8903,6 @@ }, "node_modules/prettier-eslint/node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -6427,8 +8914,6 @@ }, "node_modules/prettier-eslint/node_modules/@eslint/js": { "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -6437,8 +8922,6 @@ }, "node_modules/prettier-eslint/node_modules/@typescript-eslint/parser": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6466,8 +8949,6 @@ }, "node_modules/prettier-eslint/node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "license": "MIT", "dependencies": { @@ -6484,8 +8965,6 @@ }, "node_modules/prettier-eslint/node_modules/@typescript-eslint/types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "license": "MIT", "engines": { @@ -6498,8 +8977,6 @@ }, "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6527,8 +9004,6 @@ }, "node_modules/prettier-eslint/node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "license": "MIT", "dependencies": { @@ -6555,8 +9030,6 @@ }, "node_modules/prettier-eslint/node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6625,8 +9098,6 @@ }, "node_modules/prettier-eslint/node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6655,8 +9126,6 @@ }, "node_modules/prettier-eslint/node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -6666,8 +9135,6 @@ }, "node_modules/prettier-eslint/node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -6679,8 +9146,6 @@ }, "node_modules/prettier-eslint/node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6697,8 +9162,6 @@ }, "node_modules/prettier-eslint/node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", "dependencies": { @@ -6710,8 +9173,6 @@ }, "node_modules/prettier-eslint/node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { @@ -6725,8 +9186,6 @@ }, "node_modules/prettier-eslint/node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6741,8 +9200,6 @@ }, "node_modules/prettier-eslint/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -6796,8 +9253,6 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -6809,8 +9264,6 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6824,8 +9277,6 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { @@ -6842,11 +9293,16 @@ "dev": true, "license": "MIT" }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", + "license": "MIT" + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -6864,10 +9320,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proxy-compare": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.5.1.tgz", + "integrity": "sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -6881,10 +9341,44 @@ "dev": true, "license": "MIT" }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -6902,6 +9396,18 @@ ], "license": "MIT" }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -7020,8 +9526,6 @@ }, "node_modules/react-qr-code": { "version": "2.0.15", - "resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.15.tgz", - "integrity": "sha512-MkZcjEXqVKqXEIMVE0mbcGgDpkfSdd8zhuzXEl9QzYeNcw8Hq2oVIzDLWuZN2PQBwM5PWjc2S31K8Q1UbcFMfw==", "dev": true, "license": "MIT", "dependencies": { @@ -7032,14 +9536,63 @@ "react": "*" } }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "dev": true, + "node_modules/react-refresh": { + "version": "0.14.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 12.13.0" } }, "node_modules/reflect.getprototypeof": { @@ -7125,6 +9678,21 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, "node_modules/require-relative": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", @@ -7134,8 +9702,6 @@ }, "node_modules/requireindex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", "dev": true, "license": "MIT", "engines": { @@ -7164,7 +9730,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -7172,8 +9737,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "license": "MIT", "engines": { @@ -7183,9 +9746,6 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -7285,8 +9845,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -7327,6 +9885,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -7362,6 +9940,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -7381,10 +9968,14 @@ "semver": "bin/semver.js" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -7401,8 +9992,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7438,8 +10027,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -7451,8 +10038,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -7537,8 +10122,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -7579,8 +10162,6 @@ }, "node_modules/socket.io-parser": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -7607,6 +10188,24 @@ } } }, + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -7626,6 +10225,89 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", @@ -7656,8 +10338,6 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", "dependencies": { @@ -7708,8 +10388,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -7753,8 +10431,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -7801,6 +10477,25 @@ "react-dom": ">= 16.8.0" } }, + "node_modules/styled-components/node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/styled-components/node_modules/@emotion/memoize": { + "version": "0.8.1", + "license": "MIT" + }, + "node_modules/styled-components/node_modules/@emotion/unitless": { + "version": "0.8.1", + "license": "MIT" + }, + "node_modules/styled-components/node_modules/stylis": { + "version": "4.3.2", + "license": "MIT" + }, "node_modules/styled-components/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -7808,15 +10503,13 @@ "license": "0BSD" }, "node_modules/stylis": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", - "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -7830,7 +10523,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7869,6 +10561,15 @@ "dev": true, "license": "MIT" }, + "node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "license": "MIT", + "dependencies": { + "real-require": "^0.1.0" + } + }, "node_modules/throttle-debounce": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", @@ -7880,9 +10581,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -7958,8 +10656,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -7971,8 +10667,6 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -8097,6 +10791,21 @@ "typescript": ">=4.8.4 <5.8.0" } }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, + "node_modules/uint8arrays": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", + "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "license": "MIT", + "dependencies": { + "multiformats": "^9.4.2" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -8116,10 +10825,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" }, @@ -8243,8 +10956,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8260,6 +10971,12 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/uuid": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", @@ -8273,6 +10990,40 @@ "uuid": "dist/esm/bin/uuid" } }, + "node_modules/valtio": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/valtio/-/valtio-1.11.2.tgz", + "integrity": "sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==", + "license": "MIT", + "dependencies": { + "proxy-compare": "2.5.1", + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/valtio/node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", @@ -8432,8 +11183,6 @@ }, "node_modules/vue-eslint-parser": { "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, "license": "MIT", "dependencies": { @@ -8457,8 +11206,6 @@ }, "node_modules/vue-eslint-parser/node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8487,8 +11234,6 @@ }, "node_modules/vue-eslint-parser/node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8516,6 +11261,13 @@ "node": ">=10" } }, + "node_modules/webextension-polyfill": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.12.0.tgz", + "integrity": "sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==", + "license": "MPL-2.0", + "peer": true + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -8534,8 +11286,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -8598,8 +11348,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -8615,6 +11363,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, "node_modules/which-typed-array": { "version": "1.1.18", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", @@ -8638,25 +11392,55 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -8682,17 +11466,121 @@ "node": ">=0.4.0" } }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 27f192379..dd4f0d33f 100644 --- a/package.json +++ b/package.json @@ -14,11 +14,19 @@ "translate": "node ./scripts/translator.js" }, "dependencies": { + "@emotion/react": "latest", + "@emotion/styled": "latest", "@floating-ui/react": "^0.27.4", "@lottiefiles/dotlottie-react": "^0.13.0", + "@mui/material": "^6.4.4", "@sentry/react": "^8.48.0", + "@tari-project/tari-permissions": "^0.4.0", + "@tari-project/tarijs": "^0.4.0", + "@tari-project/typescript-bindings": "^1.4.0", + "@tari-project/wallet_jrpc_client": "^1.4.0", "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-clipboard-manager": "^2.2.0", + "@tauri-apps/plugin-dialog": "^2.2.0", "@tauri-apps/plugin-os": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0", diff --git a/public/locales/af/ootle.json b/public/locales/af/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/af/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/af/settings.json b/public/locales/af/settings.json index 14e373997..2b47c1fa6 100644 --- a/public/locales/af/settings.json +++ b/public/locales/af/settings.json @@ -123,6 +123,8 @@ "experimental": "Eksperimenteel", "general": "Algemeen", "mining": "Mynbou", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Poel Mynbou", "releaseNotes": "Vrystellingsnotas", "very_experimental": "Baie Eksperimenteel", diff --git a/public/locales/cn/ootle.json b/public/locales/cn/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/cn/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/cn/settings.json b/public/locales/cn/settings.json index 84444d0bd..57bd70183 100644 --- a/public/locales/cn/settings.json +++ b/public/locales/cn/settings.json @@ -123,6 +123,8 @@ "experimental": "实验性", "general": "常规", "mining": "挖矿", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "矿池挖矿", "releaseNotes": "发布说明", "very_experimental": "非常实验性", diff --git a/public/locales/de/ootle.json b/public/locales/de/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/de/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/de/settings.json b/public/locales/de/settings.json index 5ee2c1703..a278e299c 100644 --- a/public/locales/de/settings.json +++ b/public/locales/de/settings.json @@ -123,6 +123,8 @@ "experimental": "Experimentell", "general": "Allgemein", "mining": "Mining", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Pool-Mining", "releaseNotes": "Versionshinweise", "very_experimental": "Sehr experimentell", diff --git a/public/locales/en/ootle.json b/public/locales/en/ootle.json new file mode 100644 index 000000000..eab33559a --- /dev/null +++ b/public/locales/en/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "Add dev tapplet", + "add-dev-tapplet-description": "To add tapplet in developer mode please enter the endpoint of the tapplet.", + "balance-updates": "Balance updates", + "create-account": "New account", + "dev-tapplets": "Dev Tapplets", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "Fetch Tapplet List", + "get-balances": "Get balances", + "get-free-coins": " Get free coins", + "installed-tapplets": "Installed Tapplets", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "Method name: {{ methodName }}", + "no-balance-update": "No balance updates available.", + "refresh-list": "Refresh list", + "registered-tapplets": "Registered Tapplets", + "registered-tapplets-list-empty": "Registered tapplets list is empty", + "simulation-error-msg": "Simulation error message", + "simulation-status": "Simulation status", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "Failed to obtain tapplet endpoint", + "tari-wallet-daemon": "Tari wallet daemon", + "transaction-confirmation": "Transaction confirmation", + "tx-simulation-error-msg": "Simulated tx error message", + "tx-simulation-status": "Simulated transaction status" +} \ No newline at end of file diff --git a/public/locales/en/settings.json b/public/locales/en/settings.json index c857a8755..da5a05f2c 100644 --- a/public/locales/en/settings.json +++ b/public/locales/en/settings.json @@ -123,6 +123,8 @@ "experimental": "Experimental", "general": "General", "mining": "Mining", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Pool Mining", "releaseNotes": "Release Notes", "very_experimental": "Very Experimental", diff --git a/public/locales/fr/ootle.json b/public/locales/fr/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/fr/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/fr/settings.json b/public/locales/fr/settings.json index 2feaeef39..18dedf71c 100644 --- a/public/locales/fr/settings.json +++ b/public/locales/fr/settings.json @@ -123,6 +123,8 @@ "experimental": "Expérimental", "general": "Général", "mining": "Minage", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Minage en pool", "releaseNotes": "Notes de version", "very_experimental": "Très Expérimental", diff --git a/public/locales/hi/ootle.json b/public/locales/hi/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/hi/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/hi/settings.json b/public/locales/hi/settings.json index aaed71b7a..1bb3a4359 100644 --- a/public/locales/hi/settings.json +++ b/public/locales/hi/settings.json @@ -123,6 +123,8 @@ "experimental": "प्रायोगिक", "general": "सामान्य", "mining": "माइनिंग", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "पूल माइनिंग", "releaseNotes": "रिलीज़ नोट्स", "very_experimental": "बहुत प्रयोगात्मक", diff --git a/public/locales/id/ootle.json b/public/locales/id/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/id/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/id/settings.json b/public/locales/id/settings.json index d037b53cd..5e64a2a90 100644 --- a/public/locales/id/settings.json +++ b/public/locales/id/settings.json @@ -123,6 +123,8 @@ "experimental": "Eksperimental", "general": "Umum", "mining": "Penambangan", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Penambangan Pool", "releaseNotes": "Catatan Rilis", "very_experimental": "Sangat Eksperimental", diff --git a/public/locales/ja/ootle.json b/public/locales/ja/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/ja/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/ja/settings.json b/public/locales/ja/settings.json index b7a4d3648..47a903025 100644 --- a/public/locales/ja/settings.json +++ b/public/locales/ja/settings.json @@ -123,6 +123,8 @@ "experimental": "実験的", "general": "一般", "mining": "マイニング", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "プールマイニング", "releaseNotes": "リリースノート", "very_experimental": "非常に実験的", diff --git a/public/locales/ko/ootle.json b/public/locales/ko/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/ko/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/ko/settings.json b/public/locales/ko/settings.json index 3ee71253b..767583f19 100644 --- a/public/locales/ko/settings.json +++ b/public/locales/ko/settings.json @@ -123,6 +123,8 @@ "experimental": "실험적", "general": "일반", "mining": "채굴", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "풀 채굴", "releaseNotes": "릴리스 노트", "very_experimental": "매우 실험적", diff --git a/public/locales/pl/ootle.json b/public/locales/pl/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/pl/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/pl/settings.json b/public/locales/pl/settings.json index 8cf352a41..ddfef3e6b 100644 --- a/public/locales/pl/settings.json +++ b/public/locales/pl/settings.json @@ -125,6 +125,8 @@ "experimental": "Eksperymentalne", "general": "Ogólne", "mining": "Wydobycie", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Kopanie w puli", "releaseNotes": "Notatki o wydaniu", "very_experimental": "Bardzo Eksperymentalne", diff --git a/public/locales/ru/ootle.json b/public/locales/ru/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/ru/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/ru/settings.json b/public/locales/ru/settings.json index e1021c5e0..37eff8fb8 100644 --- a/public/locales/ru/settings.json +++ b/public/locales/ru/settings.json @@ -123,6 +123,8 @@ "experimental": "Экспериментальные", "general": "Общие", "mining": "Майнинг", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Майнинг в пуле", "releaseNotes": "Примечания к выпуску", "very_experimental": "Очень экспериментальные", diff --git a/public/locales/tr/ootle.json b/public/locales/tr/ootle.json new file mode 100644 index 000000000..bfbbd76b9 --- /dev/null +++ b/public/locales/tr/ootle.json @@ -0,0 +1,26 @@ +{ + "add-dev-tapplet": "", + "add-dev-tapplet-description": "", + "balance-updates": "", + "create-account": "", + "dev-tapplets": "", + "establishing-db-connection": "Establishing DB connection", + "fetch-tapplet-list": "", + "get-balances": "", + "get-free-coins": "", + "installed-tapplets": "", + "local-tari-indexer": "Local Tari Indexer", + "method-name": "", + "no-balance-update": "", + "refresh-list": "Refresh list", + "registered-tapplets": "", + "registered-tapplets-list-empty": "", + "simulation-error-msg": "", + "simulation-status": "", + "starting-ootle": "Starting Tari Ootle", + "tapplet-obtain-failure": "", + "tari-wallet-daemon": "", + "transaction-confirmation": "", + "tx-simulation-error-msg": "", + "tx-simulation-status": "" +} \ No newline at end of file diff --git a/public/locales/tr/settings.json b/public/locales/tr/settings.json index 97ae79b60..651b1a1b2 100644 --- a/public/locales/tr/settings.json +++ b/public/locales/tr/settings.json @@ -123,6 +123,8 @@ "experimental": "Deneysel", "general": "Genel", "mining": "Madencilik", + "ootle": "Tari Ootle", + "ootleWallet": "Tari Ootle Wallet", "p2p": "Havuz Madenciliği", "releaseNotes": "Sürüm Notları", "very_experimental": "Çok Deneysel", diff --git a/src-tauri/.env b/src-tauri/.env new file mode 100644 index 000000000..f0b03b84c --- /dev/null +++ b/src-tauri/.env @@ -0,0 +1 @@ +DATABASE_URL=/home/oski/Projects/tari/forked/universe/src-tauri/sqlite/database.db diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 5104f0daf..4899b832a 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -8,7 +8,7 @@ version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "gimli", + "gimli 0.31.1", ] [[package]] @@ -52,6 +52,29 @@ dependencies = [ "subtle", ] +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy 0.7.35", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -76,6 +99,12 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -91,6 +120,15 @@ dependencies = [ "libc", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" version = "0.6.18" @@ -132,11 +170,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] @@ -190,6 +229,12 @@ dependencies = [ "password-hash", ] +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + [[package]] name = "arrayref" version = "0.3.9" @@ -202,18 +247,128 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "ashpd" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3" +dependencies = [ + "enumflags2", + "futures-channel", + "futures-util", + "rand 0.8.5", + "raw-window-handle", + "serde", + "serde_repr", + "tokio", + "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "zbus", +] + +[[package]] +name = "asn1-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +dependencies = [ + "asn1-rs-derive 0.4.0", + "asn1-rs-impl 0.1.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive 0.5.1", + "asn1-rs-impl 0.2.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "async-broadcast" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener", + "event-listener 5.4.0", "event-listener-strategy", "futures-core", "pin-project-lite", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-channel" version = "2.3.1" @@ -268,6 +423,21 @@ dependencies = [ "futures-lite", ] +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", +] + [[package]] name = "async-io" version = "2.4.0" @@ -293,7 +463,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.4.0", "event-listener-strategy", "pin-project-lite", ] @@ -304,14 +474,14 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-io", "async-lock", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener", + "event-listener 5.4.0", "futures-lite", "rustix", "tracing", @@ -325,7 +495,16 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "async-semaphore" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "538c756e85eb6ffdefaec153804afb6da84b033e2e5ec3e9d459c34b4bf4d3f6" +dependencies = [ + "event-listener 2.5.3", ] [[package]] @@ -346,6 +525,33 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "async-std" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io", + "async-lock", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -365,7 +571,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -376,13 +582,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -395,12 +601,25 @@ dependencies = [ "chrono", "crc32fast", "futures-lite", - "pin-project 1.1.8", + "pin-project 1.1.9", "thiserror 1.0.69", "tokio", "tokio-util 0.7.13", ] +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes 1.10.0", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + [[package]] name = "atk" version = "0.18.2" @@ -430,6 +649,28 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "attohttpc" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +dependencies = [ + "http 0.2.12", + "log", + "url", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "auto-launch" version = "0.5.0" @@ -447,6 +688,39 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes 1.10.0", + "futures-util", + "headers", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "itoa 1.0.14", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "tokio", + "tower 0.4.13", + "tower-layer", + "tower-service", +] + [[package]] name = "axum" version = "0.7.9" @@ -454,12 +728,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", - "axum-core", - "bytes 1.9.0", + "axum-core 0.4.5", + "bytes 1.10.0", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", + "hyper 1.6.0", + "hyper-util", "itoa 1.0.14", "matchit", "memchr", @@ -468,10 +744,32 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", "tower 0.5.2", "tower-layer", "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes 1.10.0", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", ] [[package]] @@ -481,17 +779,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", - "bytes 1.9.0", + "bytes 1.10.0", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", + "tracing", +] + +[[package]] +name = "axum-jrpc" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "163372a0c1cb179c5b3a9ac5edbb01501b4d4ad247b971712d0559e832819e3a" +dependencies = [ + "anyhow", + "async-trait", + "axum 0.6.20", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "axum-jrpc" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4d43309d9b4aa9a30523ea666138c5eca3af65d226c766c02c3042da63a08a2" +dependencies = [ + "async-trait", + "axum 0.7.9", + "cfg-if", + "mime", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] @@ -509,6 +837,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + [[package]] name = "base16ct" version = "0.2.0" @@ -530,6 +864,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + [[package]] name = "base64" version = "0.21.7" @@ -584,9 +924,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" dependencies = [ "serde", ] @@ -634,21 +974,49 @@ dependencies = [ ] [[package]] -name = "block2" -version = "0.5.1" +name = "block-padding" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "objc2", + "generic-array", ] [[package]] -name = "blocking" +name = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e58aa60e59d8dbfcc36138f5f18be5f24394d33b38b24f7fd0b1caa33095f22f" +dependencies = [ + "block-sys", + "objc2", +] + +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite", @@ -657,9 +1025,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.3" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" +checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" dependencies = [ "borsh-derive", "cfg_aliases 0.2.1", @@ -667,15 +1035,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.3" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" +checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" dependencies = [ "once_cell", "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -691,9 +1059,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.1" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -722,9 +1090,9 @@ checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byte-slice-cast" @@ -732,6 +1100,34 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytecount" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" + [[package]] name = "bytemuck" version = "1.21.0" @@ -758,9 +1154,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -777,22 +1173,48 @@ dependencies = [ [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.12+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" dependencies = [ "cc", "libc", "pkg-config", ] +[[package]] +name = "cacache" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142316461ed3a3dfcba10417317472da5bfd0461e4d276bf7c07b330766d9490" +dependencies = [ + "async-std", + "digest", + "either", + "futures 0.3.31", + "hex", + "libc", + "memmap2 0.5.10", + "miette", + "reflink-copy", + "serde", + "serde_derive", + "serde_json", + "sha1", + "sha2", + "ssri", + "tempfile", + "thiserror 1.0.69", + "walkdir", +] + [[package]] name = "cairo-rs" version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "cairo-sys-rs", "glib", "libc", @@ -829,6 +1251,19 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", +] + [[package]] name = "cargo_metadata" version = "0.19.1" @@ -840,30 +1275,61 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.10", + "thiserror 2.0.11", +] + +[[package]] +name = "cargo_toml" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88da5a13c620b4ca0078845707ea9c3faf11edbc3ffd8497d11d686211cd1ac0" +dependencies = [ + "serde", + "toml 0.8.20", ] [[package]] name = "cargo_toml" -version = "0.17.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" +checksum = "5fbd1fe9db3ebf71b89060adaf7b0504c2d6a425cf061313099547e382c2e472" dependencies = [ "serde", - "toml 0.8.19", + "toml 0.8.20", +] + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", ] [[package]] name = "cc" -version = "1.2.7" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "jobserver", "libc", "shlex", ] +[[package]] +name = "ccm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae3c82e4355234767756212c570e29833699ab63e6ffd161887314cc5b43847" +dependencies = [ + "aead", + "cipher 0.4.4", + "ctr", + "subtle", +] + [[package]] name = "cesu8" version = "1.1.0" @@ -887,7 +1353,7 @@ version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ - "smallvec", + "smallvec 1.13.2", "target-lexicon", ] @@ -959,6 +1425,30 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "ciborium" +version = "0.2.1" +source = "git+https://github.com/enarx/ciborium.git?rev=114614d2a61102eb2321c68e53799d1e6f087aef#114614d2a61102eb2321c68e53799d1e6f087aef" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "git+https://github.com/enarx/ciborium.git?rev=114614d2a61102eb2321c68e53799d1e6f087aef#114614d2a61102eb2321c68e53799d1e6f087aef" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "git+https://github.com/enarx/ciborium.git?rev=114614d2a61102eb2321c68e53799d1e6f087aef#114614d2a61102eb2321c68e53799d1e6f087aef" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cidr" version = "0.1.1" @@ -995,52 +1485,95 @@ version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width 0.1.14", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", "bitflags 1.3.2", - "textwrap", - "unicode-width", + "clap_derive 3.2.25", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.16.1", ] [[package]] name = "clap" -version = "4.5.26" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" +checksum = "8acebd8ad879283633b343856142139f2da2317c96b05b4dd6181c61e2480184" dependencies = [ "clap_builder", - "clap_derive", + "clap_derive 4.5.28", ] [[package]] name = "clap_builder" -version = "4.5.26" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" +checksum = "f6ba32cbda51c7e1dfd49acc1457ba1a7dec5b64fe360e828acb13ca8dc9c2f9" dependencies = [ "anstream", "anstyle", - "clap_lex", - "strsim", + "clap_lex 0.7.4", + "strsim 0.11.1", ] [[package]] name = "clap_complete" -version = "4.5.42" +version = "4.5.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375f9d8255adeeedd51053574fd8d4ba875ea5fa558e86617b07f09f1680c8b6" +dependencies = [ + "clap 4.5.29", +] + +[[package]] +name = "clap_derive" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a7e468e750fa4b6be660e8b5651ad47372e8fb114030b594c2d75d48c5ffd0" +checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" dependencies = [ - "clap 4.5.26", + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", ] [[package]] @@ -1051,11 +1584,11 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clap_mangen" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbfe6ac42a2438d0968beba18e3c35cacf16b0c25310bc22b1f5f3cffff09f4" +checksum = "724842fa9b144f9b89b3f3d371a89f3455eea660361d13a554f68f8ae5d6c13a" dependencies = [ - "clap 4.5.26", + "clap 4.5.29", "roff", ] @@ -1074,7 +1607,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "block", "cocoa-foundation", "core-foundation 0.10.0", @@ -1090,7 +1623,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "block", "core-foundation 0.10.0", "core-graphics-types 0.2.0", @@ -1110,7 +1643,7 @@ version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "memchr", ] @@ -1129,10 +1662,30 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" dependencies = [ + "async-trait", + "convert_case 0.6.0", + "json5", "nom", "pathdiff", + "ron", + "rust-ini", "serde", - "toml 0.8.19", + "serde_json", + "toml 0.8.20", + "yaml-rust2", +] + +[[package]] +name = "console" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", ] [[package]] @@ -1141,6 +1694,46 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "constant_time_eq" version = "0.3.1" @@ -1153,6 +1746,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.18.1" @@ -1208,7 +1810,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "core-foundation 0.10.0", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -1232,7 +1834,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "core-foundation 0.10.0", "libc", ] @@ -1246,15 +1848,111 @@ dependencies = [ "memchr", ] +[[package]] +name = "corosensei" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80128832c58ea9cbd041d2a759ec449224487b2c1e400453d99d244eead87a8e" +dependencies = [ + "autocfg", + "cfg-if", + "libc", + "scopeguard", + "windows-sys 0.33.0", +] + [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] +[[package]] +name = "cranelift-bforest" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2ab4512dfd3a6f4be184403a195f76e81a8a9f9e6c898e19d2dc3ce20e0115" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b022ed2a5913a38839dfbafe6cf135342661293b08049843362df4301261dc" +dependencies = [ + "arrayvec", + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-egraph", + "cranelift-entity", + "cranelift-isle", + "gimli 0.26.2", + "log", + "regalloc2", + "smallvec 1.13.2", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639307b45434ad112a98f8300c0f0ab085cbefcd767efcdef9ef19d4c0756e74" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278e52e29c53fcf32431ef08406c295699a70306d05a0715c5b1bf50e33a9ab7" + +[[package]] +name = "cranelift-egraph" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624b54323b06e675293939311943ba82d323bb340468ce1889be5da7932c8d73" +dependencies = [ + "cranelift-entity", + "fxhash", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "log", + "smallvec 1.13.2", +] + +[[package]] +name = "cranelift-entity" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a59bcbca89c3f1b70b93ab3cbba5e5e0cbf3e63dadb23c7525cb142e21a9d4c" + +[[package]] +name = "cranelift-frontend" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d70abacb8cfef3dc8ff7e8836e9c1d70f7967dfdac824a4cd5e30223415aca6" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec 1.13.2", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "393bc73c451830ff8dbb3a07f61843d6cb41a084f9996319917c0b291ed785bb" + [[package]] name = "crash-context" version = "0.6.3" @@ -1346,6 +2044,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -1354,9 +2061,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -1394,7 +2101,7 @@ dependencies = [ "phf 0.8.0", "proc-macro2", "quote", - "smallvec", + "smallvec 1.13.2", "syn 1.0.109", ] @@ -1405,7 +2112,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1415,7 +2122,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1436,6 +2143,7 @@ dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", + "digest", "fiat-crypto", "group", "rand_core 0.6.4", @@ -1453,16 +2161,27 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] -name = "darling" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +name = "d3ne" +version = "0.8.0-pre.0" +source = "git+https://github.com/stringhandler/d3ne-rs.git?tag=v0.8.0-pre.3#05cd46e3d1cd2a23f37e9eba9a3b965bfc3303a8" dependencies = [ - "darling_core", + "anyhow", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", "darling_macro", ] @@ -1476,8 +2195,8 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", - "syn 2.0.96", + "strsim 0.11.1", + "syn 2.0.98", ] [[package]] @@ -1488,14 +2207,61 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" + +[[package]] +name = "data-encoding-macro" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9724adfcf41f45bf652b3995837669d73c4d49a1b5ac1ff82905ac7d9b5558" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" +dependencies = [ + "data-encoding", + "syn 2.0.98", +] [[package]] name = "dbus" @@ -1553,9 +2319,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] +[[package]] +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +dependencies = [ + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + [[package]] name = "deranged" version = "0.3.11" @@ -1585,20 +2380,20 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "derive_more" -version = "0.99.18" +version = "0.99.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1622,11 +2417,23 @@ dependencies = [ "x11", ] +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] + [[package]] name = "diesel" -version = "2.2.6" +version = "2.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf1bedf64cdb9643204a36dd15b19a6ce8e7aa7f7b105868e9f1fad5ffa7d12" +checksum = "04001f23ba8843dc315804fa324000376084dfb1c30794ff68dd279e6e5696d5" dependencies = [ "bigdecimal", "chrono", @@ -1650,7 +2457,7 @@ dependencies = [ "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1670,7 +2477,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1680,6 +2487,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -1702,6 +2510,15 @@ dependencies = [ "dirs-sys 0.4.1", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", +] + [[package]] name = "dirs-next" version = "1.0.2" @@ -1719,7 +2536,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.6", "winapi", ] @@ -1731,10 +2548,22 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.4.6", "windows-sys 0.48.0", ] +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.0", + "windows-sys 0.59.0", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1742,7 +2571,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.6", "winapi", ] @@ -1760,7 +2589,16 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.6", ] [[package]] @@ -1783,7 +2621,16 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", ] [[package]] @@ -1792,6 +2639,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + [[package]] name = "dpi" version = "0.1.1" @@ -1803,16 +2656,16 @@ dependencies = [ [[package]] name = "dsl_auto_type" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" +checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b" dependencies = [ "darling", "either", "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1838,9 +2691,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" [[package]] name = "ecdsa" @@ -1849,8 +2702,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", + "digest", "elliptic-curve", + "rfc6979", "signature", + "spki", ] [[package]] @@ -1863,6 +2719,21 @@ dependencies = [ "signature", ] +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2", + "subtle", + "zeroize", +] + [[package]] name = "either" version = "1.13.0" @@ -1881,6 +2752,9 @@ dependencies = [ "ff", "generic-array", "group", + "hkdf", + "pem-rfc7468", + "pkcs8", "rand_core 0.6.4", "sec1", "subtle", @@ -1896,7 +2770,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.8.19", + "toml 0.8.20", "vswhom", "winreg 0.52.0", ] @@ -1907,6 +2781,12 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "encoding_rs" version = "0.8.35" @@ -1937,14 +2817,34 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "enumflags2" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" dependencies = [ "enumflags2_derive", "serde", @@ -1952,20 +2852,54 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "enumset" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +dependencies = [ + "atty", + "humantime 1.3.0", + "log", + "regex", + "termcolor", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" @@ -1987,12 +2921,33 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + [[package]] name = "error-code" version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" +[[package]] +name = "ethnum" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "event-listener" version = "5.4.0" @@ -2010,10 +2965,16 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener", + "event-listener 5.4.0", "pin-project-lite", ] +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + [[package]] name = "fastrand" version = "2.3.0" @@ -2051,7 +3012,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset", + "memoffset 0.9.1", "rustc_version", ] @@ -2107,6 +3068,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flate2" version = "1.0.35" @@ -2123,6 +3090,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "foreign-types" version = "0.3.2" @@ -2150,7 +3123,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2221,6 +3194,16 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-bounded" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +dependencies = [ + "futures-timer", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -2246,6 +3229,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -2256,9 +3240,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand", "futures-core", @@ -2275,7 +3259,18 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls 0.23.23", + "rustls-pki-types", ] [[package]] @@ -2290,6 +3285,23 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +[[package]] +name = "futures-ticker" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9763058047f713632a52e916cc7f6a4b3fc6e9fc1ff8c5b1dc49e5a89041682e" +dependencies = [ + "futures 0.3.31", + "futures-timer", + "instant", +] + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + [[package]] name = "futures-util" version = "0.3.31" @@ -2478,6 +3490,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "ghash" version = "0.5.1" @@ -2488,6 +3512,17 @@ dependencies = [ "polyval", ] +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +dependencies = [ + "fallible-iterator", + "indexmap 1.9.3", + "stable_deref_trait", +] + [[package]] name = "gimli" version = "0.31.1" @@ -2509,7 +3544,7 @@ dependencies = [ "libc", "once_cell", "pin-project-lite", - "smallvec", + "smallvec 1.13.2", "thiserror 1.0.69", ] @@ -2526,13 +3561,26 @@ dependencies = [ "winapi", ] +[[package]] +name = "git2" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" +dependencies = [ + "bitflags 2.8.0", + "libc", + "libgit2-sys", + "log", + "url", +] + [[package]] name = "glib" version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "futures-channel", "futures-core", "futures-executor", @@ -2545,7 +3593,7 @@ dependencies = [ "libc", "memchr", "once_cell", - "smallvec", + "smallvec 1.13.2", "thiserror 1.0.69", ] @@ -2560,7 +3608,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2580,16 +3628,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] -name = "gobject-sys" -version = "0.18.0" +name = "gloo-timers" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + [[package]] name = "goblin" version = "0.8.2" @@ -2661,7 +3721,26 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes 1.10.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.7.1", + "slab", + "tokio", + "tokio-util 0.7.13", + "tracing", ] [[package]] @@ -2671,12 +3750,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", - "bytes 1.9.0", + "bytes 1.10.0", "fnv", "futures-core", "futures-sink", - "http", - "indexmap 2.7.0", + "http 1.2.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util 0.7.13", @@ -2694,12 +3773,39 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] [[package]] name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] [[package]] name = "hdrhistogram" @@ -2711,6 +3817,30 @@ dependencies = [ "num-traits", ] +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.7", + "bytes 1.10.0", + "headers-core", + "http 0.2.12", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http 0.2.12", +] + [[package]] name = "heck" version = "0.3.3" @@ -2732,6 +3862,21 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "hermit-abi" version = "0.4.0" @@ -2743,6 +3888,9 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] [[package]] name = "hex-literal" @@ -2750,6 +3898,12 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hex_fmt" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" + [[package]] name = "hickory-client" version = "0.25.0-alpha.2" @@ -2760,7 +3914,7 @@ dependencies = [ "data-encoding", "futures-channel", "futures-util", - "hickory-proto", + "hickory-proto 0.25.0-alpha.2", "once_cell", "radix_trie", "rand 0.8.5", @@ -2769,6 +3923,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "hickory-proto" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ad3d6d98c648ed628df039541a5577bee1a7c83e9e16fe3dbedeea4cdfeb971" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 1.0.3", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + [[package]] name = "hickory-proto" version = "0.25.0-alpha.2" @@ -2777,7 +3956,7 @@ checksum = "8270a1857fb962b9914aafd46a89a187a4e63d0eb4190c327e7c7b8256a2d055" dependencies = [ "async-recursion", "async-trait", - "bitflags 2.7.0", + "bitflags 2.8.0", "cfg-if", "data-encoding", "enum-as-inner", @@ -2789,9 +3968,9 @@ dependencies = [ "once_cell", "openssl", "rand 0.8.5", - "ring", - "rustls", - "rustls-pemfile", + "ring 0.17.9", + "rustls 0.23.23", + "rustls-pemfile 2.2.0", "thiserror 1.0.69", "time", "tinyvec", @@ -2801,6 +3980,27 @@ dependencies = [ "url", ] +[[package]] +name = "hickory-resolver" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf287bde7b776e85d7188e6e5db7cf410a2f9531fe82817eb87feed034c8d14" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto 0.24.3", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot 0.12.3", + "rand 0.8.5", + "resolv-conf", + "smallvec 1.13.2", + "thiserror 1.0.69", + "tokio", + "tracing", +] + [[package]] name = "hickory-resolver" version = "0.25.0-alpha.2" @@ -2809,19 +4009,28 @@ checksum = "46c110355b5703070d9e29c344d79818a7cde3de9c27fc35750defea6074b0ad" dependencies = [ "cfg-if", "futures-util", - "hickory-proto", + "hickory-proto 0.25.0-alpha.2", "ipconfig", "lru-cache", "once_cell", "parking_lot 0.12.3", "rand 0.8.5", "resolv-conf", - "smallvec", + "smallvec 1.13.2", "thiserror 1.0.69", "tokio", "tracing", ] +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + [[package]] name = "hmac" version = "0.12.1" @@ -2876,25 +4085,47 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes 1.10.0", + "fnv", + "itoa 1.0.14", +] + [[package]] name = "http" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "fnv", "itoa 1.0.14", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes 1.10.0", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "bytes 1.9.0", - "http", + "bytes 1.10.0", + "http 1.2.0", ] [[package]] @@ -2903,18 +4134,30 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -2922,29 +4165,72 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime 2.1.0", + "serde", +] + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes 1.10.0", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa 1.0.14", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "futures-channel", "futures-util", - "h2", - "http", - "http-body", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa 1.0.14", "pin-project-lite", - "smallvec", + "smallvec 1.13.2", "tokio", "want", ] @@ -2956,10 +4242,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http", - "hyper", + "http 1.2.0", + "hyper 1.6.0", "hyper-util", - "rustls", + "rustls 0.23.23", "rustls-pki-types", "tokio", "tokio-rustls", @@ -2973,22 +4259,35 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper", + "hyper 1.6.0", "hyper-util", "pin-project-lite", "tokio", "tower-service", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes 1.10.0", + "hyper 0.14.32", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "hyper-tls" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "http-body-util", - "hyper", + "hyper 1.6.0", "hyper-util", "native-tls", "tokio", @@ -3002,12 +4301,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "futures-channel", "futures-util", - "http", - "http-body", - "hyper", + "http 1.2.0", + "http-body 1.0.1", + "hyper 1.6.0", "pin-project-lite", "socket2", "tokio", @@ -3048,6 +4347,16 @@ dependencies = [ "png", ] +[[package]] +name = "icrate" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb69199826926eb864697bddd27f73d9fddcffc004f5733131e15b465e30642" +dependencies = [ + "block2 0.4.0", + "objc2", +] + [[package]] name = "icu_collections" version = "1.5.0" @@ -3104,7 +4413,7 @@ dependencies = [ "icu_normalizer_data", "icu_properties", "icu_provider", - "smallvec", + "smallvec 1.13.2", "utf16_iter", "utf8_iter", "write16", @@ -3163,7 +4472,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3189,7 +4498,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ "idna_adapter", - "smallvec", + "smallvec 1.13.2", "utf8_iter", ] @@ -3203,6 +4512,58 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "if-watch" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +dependencies = [ + "async-io", + "core-foundation 0.9.4", + "fnv", + "futures 0.3.31", + "if-addrs", + "ipnet", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", + "rtnetlink", + "system-configuration 0.6.1", + "tokio", + "windows 0.53.0", +] + +[[package]] +name = "igd-next" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +dependencies = [ + "async-trait", + "attohttpc", + "bytes 1.10.0", + "futures 0.3.31", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + [[package]] name = "image" version = "0.25.5" @@ -3242,7 +4603,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3264,6 +4625,25 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -3277,9 +4657,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -3301,6 +4681,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ + "block-padding", "generic-array", ] @@ -3323,8 +4704,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] -name = "ipconfig" -version = "0.3.2" +name = "interceptor" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5927883184e6a819b22d5e4f5f7bc7ca134fde9b2026fbddd8d95249746ba21e" +dependencies = [ + "async-trait", + "bytes 1.10.0", + "log", + "rand 0.8.5", + "rtcp", + "rtp 0.9.0", + "thiserror 1.0.69", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ @@ -3336,9 +4736,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is-docker" @@ -3385,9 +4785,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] @@ -3466,9 +4866,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -3486,6 +4886,17 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + [[package]] name = "jsonptr" version = "0.6.3" @@ -3498,14 +4909,28 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "9.3.0" +version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ "base64 0.21.7", + "pem 1.1.1", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +dependencies = [ + "base64 0.22.1", "js-sys", - "pem", - "ring", + "pem 3.0.4", + "ring 0.17.9", "serde", "serde_json", "simple_asn1", @@ -3526,7 +4951,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.7.0", + "bitflags 2.8.0", "serde", "unicode-segmentation", ] @@ -3559,12 +4984,27 @@ dependencies = [ "selectors", ] +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + [[package]] name = "libappindicator" version = "0.9.0" @@ -3604,6 +5044,18 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libgit2-sys" +version = "0.17.0+1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + [[package]] name = "liblmdb-sys" version = "0.2.2" @@ -3641,3933 +5093,6503 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +name = "libp2p" +version = "0.54.1" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "bitflags 2.7.0", - "libc", - "redox_syscall 0.5.8", + "bytes 1.10.0", + "either", + "futures 0.3.31", + "futures-timer", + "getrandom 0.2.15", + "libp2p-allow-block-list", + "libp2p-autonat", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dcutr", + "libp2p-dns", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-relay", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "libp2p-yamux", + "multiaddr 0.18.1", + "pin-project 1.1.9", + "rw-stream-sink", + "thiserror 1.0.69", ] [[package]] -name = "libsqlite3-sys" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" +name = "libp2p-allow-block-list" +version = "0.4.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "cc", - "pkg-config", - "vcpkg", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", ] [[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-keyutils" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e49ec5fd8a5a463f9b84e877c373d888935b71c6be78f3767fe2ae6bed18e" +name = "libp2p-autonat" +version = "0.13.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "bitflags 2.7.0", - "libc", + "async-trait", + "asynchronous-codec", + "bytes 1.10.0", + "either", + "futures 0.3.31", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-request-response", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.3.1 (git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558)", + "rand 0.8.5", + "rand_core 0.6.4", + "thiserror 1.0.69", + "tracing", + "void", + "web-time", ] [[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "litemap" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +name = "libp2p-connection-limits" +version = "0.4.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] [[package]] -name = "lmdb-zero" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13416eee745b087c22934f35f1f24da22da41ba2a5ce197143d168ce055cc58d" +name = "libp2p-core" +version = "0.42.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "bitflags 0.9.1", - "libc", - "liblmdb-sys", - "supercow", + "either", + "fnv", + "futures 0.3.31", + "futures-timer", + "libp2p-identity", + "multiaddr 0.18.1", + "multihash 0.19.3", + "multistream-select", + "once_cell", + "parking_lot 0.12.3", + "pin-project 1.1.9", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "smallvec 1.13.2", + "thiserror 1.0.69", + "tracing", + "unsigned-varint 0.8.0", + "void", + "web-time", ] [[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +name = "libp2p-dcutr" +version = "0.12.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "autocfg", - "scopeguard", + "asynchronous-codec", + "either", + "futures 0.3.31", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "lru", + "quick-protobuf", + "quick-protobuf-codec 0.3.1 (git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558)", + "thiserror 1.0.69", + "tracing", + "void", + "web-time", ] [[package]] -name = "lockfree-object-pool" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" +name = "libp2p-dns" +version = "0.42.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" +dependencies = [ + "async-trait", + "futures 0.3.31", + "hickory-resolver 0.24.3", + "libp2p-core", + "libp2p-identity", + "parking_lot 0.12.3", + "smallvec 1.13.2", + "tracing", +] [[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +name = "libp2p-gossipsub" +version = "0.47.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "serde", + "asynchronous-codec", + "base64 0.22.1", + "byteorder", + "bytes 1.10.0", + "either", + "fnv", + "futures 0.3.31", + "futures-ticker", + "getrandom 0.2.15", + "hex_fmt", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "prometheus-client", + "quick-protobuf", + "quick-protobuf-codec 0.3.1 (git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558)", + "rand 0.8.5", + "regex", + "sha2", + "smallvec 1.13.2", + "tracing", + "void", + "web-time", ] [[package]] -name = "log-mdc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" +name = "libp2p-identify" +version = "0.45.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" +dependencies = [ + "asynchronous-codec", + "either", + "futures 0.3.31", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "lru", + "quick-protobuf", + "quick-protobuf-codec 0.3.1 (git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558)", + "smallvec 1.13.2", + "thiserror 1.0.69", + "tracing", + "void", +] [[package]] -name = "log4rs" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0816135ae15bd0391cf284eab37e6e3ee0a6ee63d2ceeb659862bd8d0a984ca6" +name = "libp2p-identity" +version = "0.2.9" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "anyhow", - "arc-swap", - "chrono", - "derivative", - "fnv", - "humantime", - "libc", - "log", - "log-mdc", - "once_cell", - "parking_lot 0.12.3", + "bs58 0.5.1", + "ed25519-dalek", + "hkdf", + "multihash 0.19.3", + "quick-protobuf", "rand 0.8.5", "serde", - "serde-value", - "serde_json", - "serde_yaml", + "sha2", + "tari_crypto", "thiserror 1.0.69", - "thread-id", - "typemap-ors", - "winapi", + "tracing", + "zeroize", ] [[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +name = "libp2p-mdns" +version = "0.46.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "linked-hash-map", + "data-encoding", + "futures 0.3.31", + "hickory-proto 0.24.3", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec 1.13.2", + "socket2", + "tokio", + "tracing", + "void", ] [[package]] -name = "lzma-rs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" +name = "libp2p-messaging" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ - "byteorder", - "crc 3.2.1", + "async-trait", + "futures-bounded", + "libp2p", + "prost 0.12.6", + "smallvec 2.0.0-alpha.10", + "tracing", ] [[package]] -name = "lzma-sys" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +name = "libp2p-metrics" +version = "0.15.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "cc", - "libc", - "pkg-config", + "futures 0.3.31", + "libp2p-core", + "libp2p-dcutr", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-ping", + "libp2p-relay", + "libp2p-swarm", + "pin-project 1.1.9", + "prometheus-client", + "web-time", ] [[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "mach2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +name = "libp2p-noise" +version = "0.45.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "libc", + "asynchronous-codec", + "bytes 1.10.0", + "curve25519-dalek", + "futures 0.3.31", + "libp2p-core", + "libp2p-identity", + "multiaddr 0.18.1", + "multihash 0.19.3", + "once_cell", + "quick-protobuf", + "rand 0.8.5", + "sha2", + "snow", + "static_assertions", + "thiserror 1.0.69", + "tracing", + "x25519-dalek", + "zeroize", ] [[package]] -name = "macos-accessibility-client" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf7710fbff50c24124331760978fb9086d6de6288dcdb38b25a97f8b1bdebbb" +name = "libp2p-peersync" +version = "0.1.0" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ - "core-foundation 0.9.4", - "core-foundation-sys", + "async-semaphore", + "async-trait", + "asynchronous-codec", + "blake2", + "futures-bounded", + "libp2p", + "pb-rs", + "quick-protobuf", + "quick-protobuf-codec 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror 1.0.69", + "tracing", ] [[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +name = "libp2p-ping" +version = "0.45.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "libc", + "either", + "futures 0.3.31", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "tracing", + "void", + "web-time", ] [[package]] -name = "markup5ever" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +name = "libp2p-quic" +version = "0.11.1" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "log", - "phf 0.10.1", - "phf_codegen 0.10.0", - "string_cache", - "string_cache_codegen", - "tendril", + "bytes 1.10.0", + "futures 0.3.31", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "parking_lot 0.12.3", + "quinn", + "rand 0.8.5", + "ring 0.17.9", + "rustls 0.23.23", + "socket2", + "thiserror 1.0.69", + "tokio", + "tracing", ] [[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +name = "libp2p-relay" +version = "0.18.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" +dependencies = [ + "asynchronous-codec", + "bytes 1.10.0", + "either", + "futures 0.3.31", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.3.1 (git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558)", + "rand 0.8.5", + "static_assertions", + "thiserror 1.0.69", + "tracing", + "void", + "web-time", +] [[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +name = "libp2p-request-response" +version = "0.27.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" +dependencies = [ + "async-trait", + "futures 0.3.31", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec 1.13.2", + "tracing", + "void", + "web-time", +] [[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +name = "libp2p-substream" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "libp2p", + "smallvec 1.13.2", + "tracing", +] [[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +name = "libp2p-swarm" +version = "0.45.1" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" +dependencies = [ + "either", + "fnv", + "futures 0.3.31", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "lru", + "multistream-select", + "once_cell", + "rand 0.8.5", + "smallvec 1.13.2", + "tokio", + "tracing", + "void", + "web-time", +] [[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +name = "libp2p-swarm-derive" +version = "0.35.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "libc", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +name = "libp2p-tcp" +version = "0.42.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "autocfg", + "futures 0.3.31", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "libp2p-identity", + "socket2", + "tokio", + "tracing", ] [[package]] -name = "merlin" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +name = "libp2p-tls" +version = "0.5.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "byteorder", - "keccak", - "rand_core 0.6.4", - "zeroize", + "futures 0.3.31", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen 0.11.3", + "ring 0.17.9", + "rustls 0.23.23", + "rustls-webpki 0.101.7", + "thiserror 1.0.69", + "x509-parser 0.16.0", + "yasna", ] [[package]] -name = "migrations_internals" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" +name = "libp2p-upnp" +version = "0.3.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "serde", - "toml 0.8.19", + "futures 0.3.31", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", + "void", ] [[package]] -name = "migrations_macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" +name = "libp2p-yamux" +version = "0.46.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "migrations_internals", - "proc-macro2", - "quote", + "either", + "futures 0.3.31", + "libp2p-core", + "thiserror 1.0.69", + "tracing", + "yamux 0.12.1", + "yamux 0.13.4", ] [[package]] -name = "mime" -version = "0.3.17" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.8.0", + "libc", + "redox_syscall 0.5.8", +] [[package]] -name = "mime_guess" -version = "2.0.5" +name = "libsqlite3-sys" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" dependencies = [ - "mime", - "unicase", + "cc", + "pkg-config", + "vcpkg", ] [[package]] -name = "minidump-common" -version = "0.21.2" +name = "libz-sys" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4d14bcca0fd3ed165a03000480aaa364c6860c34e900cb2dafdf3b95340e77" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" dependencies = [ - "bitflags 2.7.0", - "debugid", - "num-derive", - "num-traits", - "range-map", - "scroll", - "smart-default", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] -name = "minidump-writer" -version = "0.8.9" +name = "linked-hash-map" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abcd9c8a1e6e1e9d56ce3627851f39a17ea83e17c96bc510f29d7e43d78a7d" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-keyutils" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "761e49ec5fd8a5a463f9b84e877c373d888935b71c6be78f3767fe2ae6bed18e" dependencies = [ - "bitflags 2.7.0", - "byteorder", - "cfg-if", - "crash-context", - "goblin", + "bitflags 2.8.0", "libc", - "log", - "mach2", - "memmap2", - "memoffset", - "minidump-common", - "nix 0.28.0", - "procfs-core", - "scroll", - "tempfile", - "thiserror 1.0.69", ] [[package]] -name = "minidumper" -version = "0.8.3" +name = "linux-raw-sys" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4ebc9d1f8847ec1d078f78b35ed598e0ebefa1f242d5f83cd8d7f03960a7d1" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lmdb-zero" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13416eee745b087c22934f35f1f24da22da41ba2a5ce197143d168ce055cc58d" dependencies = [ - "cfg-if", - "crash-context", + "bitflags 0.9.1", "libc", - "log", - "minidump-writer", - "parking_lot 0.12.3", - "polling", - "scroll", - "thiserror 1.0.69", - "uds", + "liblmdb-sys", + "supercow", ] [[package]] -name = "minidumper-child" -version = "0.2.2" +name = "lock_api" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4f23f835dbe67e44ddf884d3802ff549ca5948bf60e9fd70e9a13c96324d1" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "crash-handler", - "minidumper", - "thiserror 1.0.69", - "uuid", + "autocfg", + "scopeguard", ] [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "lockfree-object-pool" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] -name = "minisign-verify" -version = "0.2.3" +name = "log" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6367d84fb54d4242af283086402907277715b8fe46976963af5ebf173f8efba3" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +dependencies = [ + "serde", + "value-bag", +] [[package]] -name = "miniz_oxide" -version = "0.8.2" +name = "log-mdc" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" -dependencies = [ - "adler2", - "simd-adler32", -] +checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" [[package]] -name = "minotari_app_grpc" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "log4rs" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0816135ae15bd0391cf284eab37e6e3ee0a6ee63d2ceeb659862bd8d0a984ca6" dependencies = [ - "argon2", - "base64 0.13.1", - "borsh", + "anyhow", + "arc-swap", "chrono", + "derivative", + "fnv", + "humantime 2.1.0", + "libc", "log", - "prost 0.13.4", - "prost-types 0.13.4", + "log-mdc", + "once_cell", + "parking_lot 0.12.3", "rand 0.8.5", - "rcgen", - "subtle", - "tari_common_types", - "tari_comms", - "tari_core", - "tari_crypto", - "tari_features", - "tari_max_size", - "tari_script", - "tari_utilities", + "serde", + "serde-value", + "serde_json", + "serde_yaml", "thiserror 1.0.69", - "tokio", - "tonic", - "tonic-build", - "zeroize", + "thread-id", + "typemap-ors", + "winapi", ] [[package]] -name = "minotari_ledger_wallet_common" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "bs58 0.5.1", + "hashbrown 0.15.2", ] [[package]] -name = "minotari_node_grpc_client" -version = "0.1.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" dependencies = [ - "minotari_app_grpc", + "linked-hash-map", ] [[package]] -name = "minotari_wallet_grpc_client" -version = "0.1.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "lzma-rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" dependencies = [ - "minotari_app_grpc", - "tari_common_types", - "thiserror 1.0.69", - "tonic", + "byteorder", + "crc 3.2.1", ] [[package]] -name = "mio" -version = "1.0.3" +name = "lzma-sys" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" dependencies = [ + "cc", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "pkg-config", ] [[package]] -name = "monero" -version = "0.21.0" +name = "mac" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25218523ad4a171ddda05251669afb788cdc2f0df94082aab856a2b09541c3f" -dependencies = [ - "base58-monero", - "curve25519-dalek", - "fixed-hash", - "hex", - "hex-literal", - "sealed", - "serde", - "thiserror 1.0.69", - "tiny-keccak", -] +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] -name = "monero-address-creator" -version = "0.1.0" -source = "git+https://github.com/tari-project/monero-address-creator.git?rev=6129ca0#6129ca045cfa09fa2c8ddb57895fb1cda1a9fe79" +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" dependencies = [ - "base58-monero", - "crc 1.8.1", - "curve25519-dalek", - "rand 0.8.5", - "sha3", - "thiserror 1.0.69", + "libc", ] [[package]] -name = "muda" -version = "0.15.3" +name = "macos-accessibility-client" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" +checksum = "edf7710fbff50c24124331760978fb9086d6de6288dcdb38b25a97f8b1bdebbb" dependencies = [ - "crossbeam-channel", - "dpi", - "gtk", - "keyboard-types", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "once_cell", - "png", - "serde", - "thiserror 1.0.69", - "windows-sys 0.59.0", + "core-foundation 0.9.4", + "core-foundation-sys", ] [[package]] -name = "multiaddr" -version = "0.14.0" +name = "malloc_buf" +version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" dependencies = [ - "arrayref", - "bs58 0.4.0", - "byteorder", - "data-encoding", - "multihash", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", + "libc", ] [[package]] -name = "multihash" -version = "0.16.3" +name = "markup5ever" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" dependencies = [ - "core2", - "multihash-derive", - "unsigned-varint", + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", ] [[package]] -name = "multihash-derive" -version = "0.8.1" +name = "match_cfg" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure 0.12.6", -] +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] -name = "multimap" -version = "0.8.3" +name = "matches" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] -name = "multimap" -version = "0.10.0" +name = "matchit" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] -name = "native-tls" -version = "0.2.12" +name = "md-5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", + "cfg-if", + "digest", ] [[package]] -name = "ndk" -version = "0.9.0" +name = "memchr" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ - "bitflags 2.7.0", - "jni-sys", - "log", - "ndk-sys", - "num_enum", - "raw-window-handle", - "thiserror 1.0.69", + "libc", ] [[package]] -name = "ndk-context" -version = "0.1.1" +name = "memmap2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] [[package]] -name = "ndk-sys" -version = "0.6.0+11769913" +name = "memmap2" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ - "jni-sys", + "libc", ] [[package]] -name = "new_debug_unreachable" -version = "1.0.6" +name = "memoffset" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] [[package]] -name = "newtype-ops" -version = "0.1.4" +name = "memoffset" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d36047f46c69ef97b60e7b069a26ce9a15cd8a7852eddb6991ea94a83ba36a78" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] [[package]] -name = "nibble_vec" -version = "0.1.0" +name = "merlin" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ - "smallvec", + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", ] [[package]] -name = "nix" -version = "0.28.0" +name = "miette" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" dependencies = [ - "bitflags 2.7.0", - "cfg-if", - "cfg_aliases 0.1.1", - "libc", + "miette-derive", + "once_cell", + "thiserror 1.0.69", + "unicode-width 0.1.14", ] [[package]] -name = "nix" -version = "0.29.0" +name = "miette-derive" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ - "bitflags 2.7.0", - "cfg-if", - "cfg_aliases 0.2.1", - "libc", - "memoffset", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "nodrop" -version = "0.1.14" +name = "migrations_internals" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" +dependencies = [ + "serde", + "toml 0.8.20", +] [[package]] -name = "nohash-hasher" -version = "0.2.0" +name = "migrations_macros" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" +checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" +dependencies = [ + "migrations_internals", + "proc-macro2", + "quote", +] [[package]] -name = "nom" -version = "7.1.3" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "ntapi" -version = "0.4.1" +name = "mime_guess" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ - "winapi", + "mime", + "unicase", ] [[package]] -name = "num" -version = "0.4.3" +name = "mini-moka" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", + "crossbeam-channel", + "crossbeam-utils", + "dashmap 5.5.3", + "skeptic", + "smallvec 1.13.2", + "tagptr", + "triomphe", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "minidump-common" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "5c4d14bcca0fd3ed165a03000480aaa364c6860c34e900cb2dafdf3b95340e77" dependencies = [ - "num-integer", + "bitflags 2.8.0", + "debugid", + "num-derive", "num-traits", + "range-map", + "scroll", + "smart-default", ] [[package]] -name = "num-complex" -version = "0.4.6" +name = "minidump-writer" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +checksum = "e2abcd9c8a1e6e1e9d56ce3627851f39a17ea83e17c96bc510f29d7e43d78a7d" dependencies = [ - "num-traits", + "bitflags 2.8.0", + "byteorder", + "cfg-if", + "crash-context", + "goblin", + "libc", + "log", + "mach2", + "memmap2 0.9.5", + "memoffset 0.9.1", + "minidump-common", + "nix 0.28.0", + "procfs-core", + "scroll", + "tempfile", + "thiserror 1.0.69", ] [[package]] -name = "num-conv" -version = "0.1.0" +name = "minidumper" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "9b4ebc9d1f8847ec1d078f78b35ed598e0ebefa1f242d5f83cd8d7f03960a7d1" +dependencies = [ + "cfg-if", + "crash-context", + "libc", + "log", + "minidump-writer", + "parking_lot 0.12.3", + "polling", + "scroll", + "thiserror 1.0.69", + "uds", +] [[package]] -name = "num-derive" -version = "0.4.2" +name = "minidumper-child" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +checksum = "d7c4f23f835dbe67e44ddf884d3802ff549ca5948bf60e9fd70e9a13c96324d1" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "crash-handler", + "minidumper", + "thiserror 1.0.69", + "uuid", ] [[package]] -name = "num-format" -version = "0.4.4" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec", - "itoa 1.0.14", -] +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "num-integer" -version = "0.1.46" +name = "minisign-verify" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] +checksum = "6367d84fb54d4242af283086402907277715b8fe46976963af5ebf173f8efba3" [[package]] -name = "num-iter" -version = "0.1.45" +name = "miniz_oxide" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "adler2", + "simd-adler32", ] [[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +name = "minotari_app_grpc" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "num-bigint", - "num-integer", - "num-traits", + "argon2", + "base64 0.13.1", + "borsh", + "chrono", + "log", + "prost 0.13.5", + "prost-types 0.13.5", + "rand 0.8.5", + "rcgen 0.12.1", + "subtle", + "tari_common_types 1.7.0-pre.3", + "tari_comms 1.7.0-pre.3", + "tari_core 1.7.0-pre.3", + "tari_crypto", + "tari_features 1.7.0-pre.3", + "tari_max_size 1.7.0-pre.3", + "tari_script 1.7.0-pre.3", + "tari_sidechain", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tonic", + "tonic-build", + "zeroize", ] [[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +name = "minotari_app_grpc" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" dependencies = [ - "autocfg", + "argon2", + "base64 0.13.1", + "borsh", + "chrono", + "log", + "prost 0.13.5", + "prost-types 0.13.5", + "rand 0.8.5", + "rcgen 0.12.1", + "subtle", + "tari_common_types 1.11.0-pre.0", + "tari_comms 1.11.0-pre.0", + "tari_core 1.11.0-pre.0", + "tari_crypto", + "tari_features 1.11.0-pre.0", + "tari_max_size 1.11.0-pre.0", + "tari_script 1.11.0-pre.0", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tonic", + "tonic-build", + "zeroize", ] [[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +name = "minotari_app_utilities" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "num_enum_derive", + "clap 3.2.25", + "dialoguer", + "futures 0.3.31", + "json5", + "log", + "rand 0.8.5", + "serde", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_comms 1.7.0-pre.3", + "tari_features 1.7.0-pre.3", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tonic", ] [[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +name = "minotari_ledger_wallet_common" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.96", + "bs58 0.5.1", ] [[package]] -name = "nvml-wrapper" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9bff0aa1d48904a1385ea2a8b97576fbdcbc9a3cfccd0d31fe978e1c4038c5" +name = "minotari_ledger_wallet_common" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" dependencies = [ - "bitflags 2.7.0", - "libloading 0.8.6", - "nvml-wrapper-sys", - "static_assertions", - "thiserror 1.0.69", - "wrapcenum-derive", + "bs58 0.5.1", ] [[package]] -name = "nvml-wrapper-sys" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "698d45156f28781a4e79652b6ebe2eaa0589057d588d3aec1333f6466f13fcb5" +name = "minotari_node_grpc_client" +version = "0.1.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" dependencies = [ - "libloading 0.8.6", + "minotari_app_grpc 1.11.0-pre.0", ] [[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +name = "minotari_node_grpc_client" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "malloc_buf", + "minotari_app_grpc 1.7.0-pre.3", ] [[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" +name = "minotari_wallet_grpc_client" +version = "0.1.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" dependencies = [ - "cc", + "minotari_app_grpc 1.11.0-pre.0", + "tari_common_types 1.11.0-pre.0", + "thiserror 1.0.69", + "tonic", ] [[package]] -name = "objc2" -version = "0.5.2" +name = "mio" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "objc-sys", - "objc2-encode", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", ] [[package]] -name = "objc2-app-kit" -version = "0.2.2" +name = "monero" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +checksum = "f25218523ad4a171ddda05251669afb788cdc2f0df94082aab856a2b09541c3f" dependencies = [ - "bitflags 2.7.0", - "block2", - "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", + "base58-monero", + "curve25519-dalek", + "fixed-hash", + "hex", + "hex-literal", + "sealed", + "serde", + "thiserror 1.0.69", + "tiny-keccak", ] [[package]] -name = "objc2-cloud-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +name = "monero-address-creator" +version = "0.1.0" +source = "git+https://github.com/tari-project/monero-address-creator.git?rev=6129ca0#6129ca045cfa09fa2c8ddb57895fb1cda1a9fe79" dependencies = [ - "bitflags 2.7.0", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", + "base58-monero", + "crc 1.8.1", + "curve25519-dalek", + "rand 0.8.5", + "sha3", + "thiserror 1.0.69", ] [[package]] -name = "objc2-contacts" +name = "more-asserts" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", -] +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" [[package]] -name = "objc2-core-data" -version = "0.2.2" +name = "muda" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" dependencies = [ - "bitflags 2.7.0", - "block2", + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", "objc2", + "objc2-app-kit", "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 1.0.69", + "windows-sys 0.59.0", ] [[package]] -name = "objc2-core-image" -version = "0.2.2" +name = "multiaddr" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" dependencies = [ - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", + "arrayref", + "bs58 0.4.0", + "byteorder", + "data-encoding", + "multihash 0.16.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.7.2", + "url", ] [[package]] -name = "objc2-core-location" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +name = "multiaddr" +version = "0.18.1" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "block2", - "objc2", - "objc2-contacts", - "objc2-foundation", + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash 0.19.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.7.2", + "url", ] [[package]] -name = "objc2-encode" -version = "4.0.3" +name = "multibase" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] [[package]] -name = "objc2-foundation" -version = "0.2.2" +name = "multihash" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" dependencies = [ - "bitflags 2.7.0", - "block2", - "libc", - "objc2", + "core2", + "multihash-derive", + "unsigned-varint 0.7.2", ] [[package]] -name = "objc2-link-presentation" -version = "0.2.2" +name = "multihash" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" dependencies = [ - "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "core2", + "unsigned-varint 0.8.0", ] [[package]] -name = "objc2-metal" -version = "0.2.2" +name = "multihash-derive" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "bitflags 2.7.0", - "block2", - "objc2", - "objc2-foundation", + "proc-macro-crate 1.1.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure 0.12.6", ] [[package]] -name = "objc2-quartz-core" -version = "0.2.2" +name = "multimap" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags 2.7.0", - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", -] +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] -name = "objc2-symbols" -version = "0.2.2" +name = "multimap" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "objc2", - "objc2-foundation", + "bytes 1.10.0", + "futures 0.3.31", + "pin-project 1.1.9", + "smallvec 1.13.2", + "tracing", + "unsigned-varint 0.8.0", ] [[package]] -name = "objc2-ui-kit" -version = "0.2.2" +name = "native-tls" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ - "bitflags 2.7.0", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework 2.11.1", + "security-framework-sys", + "tempfile", ] [[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" +name = "ndk" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.8.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", ] [[package]] -name = "objc2-user-notifications" -version = "0.2.2" +name = "ndk-context" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.7.0", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", -] +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] -name = "objc2-web-kit" -version = "0.2.2" +name = "ndk-sys" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "bitflags 2.7.0", - "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "jni-sys", ] [[package]] -name = "object" -version = "0.36.7" +name = "netlink-packet-core" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" dependencies = [ - "memchr", + "anyhow", + "byteorder", + "netlink-packet-utils", ] [[package]] -name = "once_cell" -version = "1.20.2" +name = "netlink-packet-route" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" dependencies = [ - "critical-section", - "portable-atomic", + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", ] [[package]] -name = "opaque-debug" -version = "0.3.1" +name = "netlink-packet-utils" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] [[package]] -name = "open" -version = "5.3.2" +name = "netlink-proto" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" dependencies = [ - "dunce", - "is-wsl", - "libc", - "pathdiff", + "bytes 1.10.0", + "futures 0.3.31", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 2.0.11", ] [[package]] -name = "openssl" -version = "0.10.68" +name = "netlink-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ - "bitflags 2.7.0", - "cfg-if", - "foreign-types 0.3.2", + "bytes 1.10.0", + "futures 0.3.31", "libc", - "once_cell", - "openssl-macros", - "openssl-sys", + "log", + "tokio", ] [[package]] -name = "openssl-macros" -version = "0.1.1" +name = "new_debug_unreachable" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", -] +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] -name = "openssl-probe" -version = "0.1.5" +name = "newtype-ops" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d36047f46c69ef97b60e7b069a26ce9a15cd8a7852eddb6991ea94a83ba36a78" [[package]] -name = "openssl-src" -version = "300.4.1+3.4.0" +name = "nibble_vec" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" dependencies = [ - "cc", + "smallvec 1.13.2", ] [[package]] -name = "openssl-sys" -version = "0.9.104" +name = "nix" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ - "cc", + "bitflags 1.3.2", + "cfg-if", "libc", - "openssl-src", - "pkg-config", - "vcpkg", + "memoffset 0.7.1", + "pin-utils", ] [[package]] -name = "option-ext" -version = "0.2.0" +name = "nix" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.8.0", + "cfg-if", + "cfg_aliases 0.1.1", + "libc", +] [[package]] -name = "ordered-float" -version = "2.10.1" +name = "nix" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "num-traits", + "bitflags 2.8.0", + "cfg-if", + "cfg_aliases 0.2.1", + "libc", + "memoffset 0.9.1", ] [[package]] -name = "ordered-stream" +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] -name = "os_info" -version = "3.9.2" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e6520c8cc998c5741ee68ec1dc369fc47e5f0ea5320018ecf2a1ccd6328f48b" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "log", - "serde", - "windows-sys 0.52.0", + "memchr", + "minimal-lexical", ] [[package]] -name = "os_pipe" -version = "1.2.1" +name = "ntapi" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" dependencies = [ - "libc", - "windows-sys 0.59.0", + "winapi", ] [[package]] -name = "p256" -version = "0.13.2" +name = "num" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "ecdsa", - "elliptic-curve", + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", ] [[package]] -name = "p384" -version = "0.13.0" +name = "num-bigint" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", + "num-integer", + "num-traits", ] [[package]] -name = "pango" -version = "0.18.3" +name = "num-complex" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", + "num-traits", ] [[package]] -name = "pango-sys" -version = "0.18.0" +name = "num-conv" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "parity-scale-codec" -version = "3.6.12" +name = "num-format" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", + "itoa 1.0.14", ] [[package]] -name = "parity-scale-codec-derive" -version = "3.6.12" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 1.0.109", + "num-traits", ] [[package]] -name = "parking" -version = "2.2.1" +name = "num-iter" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] [[package]] -name = "parking_lot" -version = "0.11.2" +name = "num-rational" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", + "num-bigint", + "num-integer", + "num-traits", ] [[package]] -name = "parking_lot" -version = "0.12.3" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "lock_api", - "parking_lot_core 0.9.10", + "autocfg", ] [[package]] -name = "parking_lot_core" -version = "0.8.6" +name = "num_cpus" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "cfg-if", - "instant", + "hermit-abi 0.3.9", "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", ] [[package]] -name = "parking_lot_core" -version = "0.9.10" +name = "num_enum" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.8", - "smallvec", - "windows-targets 0.52.6", + "num_enum_derive", ] [[package]] -name = "password-hash" -version = "0.4.2" +name = "num_enum_derive" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "path-clean" -version = "0.1.0" +name = "nvml-wrapper" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" +checksum = "0c9bff0aa1d48904a1385ea2a8b97576fbdcbc9a3cfccd0d31fe978e1c4038c5" +dependencies = [ + "bitflags 2.8.0", + "libloading 0.8.6", + "nvml-wrapper-sys", + "static_assertions", + "thiserror 1.0.69", + "wrapcenum-derive", +] [[package]] -name = "pathdiff" -version = "0.2.3" +name = "nvml-wrapper-sys" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" +checksum = "698d45156f28781a4e79652b6ebe2eaa0589057d588d3aec1333f6466f13fcb5" +dependencies = [ + "libloading 0.8.6", +] [[package]] -name = "pbkdf2" -version = "0.12.2" +name = "objc" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ - "digest", - "hmac", + "malloc_buf", ] [[package]] -name = "pem" -version = "3.0.4" +name = "objc-sys" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" dependencies = [ - "base64 0.22.1", - "serde", + "cc", ] [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "objc2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] [[package]] -name = "petgraph" -version = "0.6.5" +name = "objc2-app-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "fixedbitset", - "indexmap 2.7.0", + "bitflags 2.8.0", + "block2 0.5.1", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", ] [[package]] -name = "phf" -version = "0.8.0" +name = "objc2-cloud-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", + "bitflags 2.8.0", + "block2 0.5.1", + "objc2", + "objc2-core-location", + "objc2-foundation", ] [[package]] -name = "phf" -version = "0.10.1" +name = "objc2-contacts" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "phf_shared 0.10.0", + "block2 0.5.1", + "objc2", + "objc2-foundation", ] [[package]] -name = "phf" -version = "0.11.3" +name = "objc2-core-data" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", + "bitflags 2.8.0", + "block2 0.5.1", + "objc2", + "objc2-foundation", ] [[package]] -name = "phf_codegen" -version = "0.8.0" +name = "objc2-core-image" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", + "block2 0.5.1", + "objc2", + "objc2-foundation", + "objc2-metal", ] [[package]] -name = "phf_codegen" -version = "0.10.0" +name = "objc2-core-location" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", + "block2 0.5.1", + "objc2", + "objc2-contacts", + "objc2-foundation", ] [[package]] -name = "phf_generator" -version = "0.8.0" +name = "objc2-encode" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", + "bitflags 2.8.0", + "block2 0.5.1", + "dispatch", + "libc", + "objc2", ] [[package]] -name = "phf_generator" -version = "0.10.0" +name = "objc2-link-presentation" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", + "block2 0.5.1", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] -name = "phf_generator" -version = "0.11.3" +name = "objc2-metal" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", + "bitflags 2.8.0", + "block2 0.5.1", + "objc2", + "objc2-foundation", ] [[package]] -name = "phf_macros" -version = "0.8.0" +name = "objc2-osa-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +checksum = "6788b04a18ea31e3dc3ab256b8546639e5bbae07c1a0dc4ea8615252bc6aee9a" dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", + "bitflags 2.8.0", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] -name = "phf_macros" -version = "0.11.3" +name = "objc2-quartz-core" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.96", + "bitflags 2.8.0", + "block2 0.5.1", + "objc2", + "objc2-foundation", + "objc2-metal", ] [[package]] -name = "phf_shared" -version = "0.8.0" +name = "objc2-symbols" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "siphasher 0.3.11", + "objc2", + "objc2-foundation", ] [[package]] -name = "phf_shared" -version = "0.10.0" +name = "objc2-ui-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "siphasher 0.3.11", + "bitflags 2.8.0", + "block2 0.5.1", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", ] [[package]] -name = "phf_shared" -version = "0.11.3" +name = "objc2-uniform-type-identifiers" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "siphasher 1.0.1", + "block2 0.5.1", + "objc2", + "objc2-foundation", ] [[package]] -name = "phraze" -version = "0.3.15" +name = "objc2-user-notifications" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfa808155f59afafc457bd1a3835cb35d827f4387238099faa673447a656bfb" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "clap 4.5.26", - "clap_complete", - "clap_mangen", - "include-lines", - "rand 0.8.5", - "unicode-normalization", + "bitflags 2.8.0", + "block2 0.5.1", + "objc2", + "objc2-core-location", + "objc2-foundation", ] [[package]] -name = "pin-project" -version = "0.4.30" +name = "objc2-web-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a" +checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65" dependencies = [ - "pin-project-internal 0.4.30", + "bitflags 2.8.0", + "block2 0.5.1", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] -name = "pin-project" -version = "1.1.8" +name = "object" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ - "pin-project-internal 1.1.8", + "memchr", ] [[package]] -name = "pin-project-internal" -version = "0.4.30" +name = "oid-registry" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "asn1-rs 0.5.2", ] [[package]] -name = "pin-project-internal" -version = "1.1.8" +name = "oid-registry" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "asn1-rs 0.6.2", ] [[package]] -name = "pin-project-lite" -version = "0.2.16" +name = "once_cell" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "opaque-debug" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] -name = "piper" -version = "0.2.4" +name = "open" +version = "5.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", + "dunce", + "is-wsl", + "libc", + "pathdiff", ] [[package]] -name = "pkcs8" -version = "0.10.2" +name = "openssl" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ - "der", - "spki", + "bitflags 2.8.0", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", ] [[package]] -name = "pkg-config" -version = "0.3.31" +name = "openssl-macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" - +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] -name = "plain" -version = "0.2.3" +name = "openssl-probe" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] -name = "plist" -version = "1.7.0" +name = "openssl-src" +version = "300.4.2+3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +checksum = "168ce4e058f975fe43e89d9ccf78ca668601887ae736090aacc23ae353c298e2" dependencies = [ - "base64 0.22.1", - "indexmap 2.7.0", - "quick-xml", - "serde", - "time", + "cc", ] [[package]] -name = "png" -version = "0.17.16" +name = "openssl-sys" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", ] [[package]] -name = "polling" -version = "3.7.4" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix", - "tracing", - "windows-sys 0.59.0", -] +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] -name = "poly1305" -version = "0.8.0" +name = "ordered-float" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", + "num-traits", ] [[package]] -name = "polyval" -version = "0.6.2" +name = "ordered-multimap" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", + "dlv-list", + "hashbrown 0.14.5", ] [[package]] -name = "portable-atomic" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" - -[[package]] -name = "powerfmt" +name = "ordered-stream" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" dependencies = [ - "zerocopy", + "futures-core", + "pin-project-lite", ] [[package]] -name = "precomputed-hash" -version = "0.1.1" +name = "os_info" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +checksum = "2a604e53c24761286860eba4e2c8b23a0161526476b1de520139d69cdb85a6b5" +dependencies = [ + "log", + "serde", + "windows-sys 0.52.0", +] [[package]] -name = "prettyplease" -version = "0.1.25" +name = "os_pipe" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" dependencies = [ - "proc-macro2", - "syn 1.0.109", + "libc", + "windows-sys 0.59.0", ] [[package]] -name = "prettyplease" -version = "0.2.27" +name = "os_str_bytes" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" -dependencies = [ - "proc-macro2", - "syn 2.0.96", -] +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] -name = "primeorder" -version = "0.13.6" +name = "osakit" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "35366a452fce3f8947eb2f33226a133aaf0cacedef2af67ade348d58be7f85d0" dependencies = [ - "elliptic-curve", + "icrate", + "objc2-foundation", + "objc2-osa-kit", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] -name = "primitive-types" -version = "0.12.2" +name = "p256" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "fixed-hash", - "impl-codec", - "impl-serde", - "uint", + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", ] [[package]] -name = "proc-macro-crate" -version = "1.1.3" +name = "p384" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ - "thiserror 1.0.69", - "toml 0.5.11", + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", ] [[package]] -name = "proc-macro-crate" -version = "2.0.0" +name = "pango" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "toml_edit 0.20.7", + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", ] [[package]] -name = "proc-macro-crate" -version = "3.2.0" +name = "pango-sys" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ - "toml_edit 0.22.22", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "parity-scale-codec" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "parity-scale-codec-derive" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "version_check", + "syn 2.0.98", ] [[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" +name = "parking" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] -name = "proc-macro2" -version = "1.0.92" +name = "parking_lot" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ - "unicode-ident", + "instant", + "lock_api", + "parking_lot_core 0.8.6", ] [[package]] -name = "procfs-core" -version = "0.16.0" +name = "parking_lot" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ - "bitflags 2.7.0", - "hex", + "lock_api", + "parking_lot_core 0.9.10", ] [[package]] -name = "prost" -version = "0.11.9" +name = "parking_lot_core" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ - "bytes 1.9.0", - "prost-derive 0.11.9", + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec 1.13.2", + "winapi", ] [[package]] -name = "prost" -version = "0.13.4" +name = "parking_lot_core" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ - "bytes 1.9.0", - "prost-derive 0.13.4", + "cfg-if", + "libc", + "redox_syscall 0.5.8", + "smallvec 1.13.2", + "windows-targets 0.52.6", ] [[package]] -name = "prost-build" -version = "0.11.9" +name = "password-hash" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ - "bytes 1.9.0", - "heck 0.4.1", - "itertools 0.10.5", - "lazy_static", - "log", - "multimap 0.8.3", - "petgraph", - "prettyplease 0.1.25", - "prost 0.11.9", - "prost-types 0.11.9", - "regex", - "syn 1.0.109", - "tempfile", - "which", + "base64ct", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "prost-build" -version = "0.13.4" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" -dependencies = [ - "heck 0.5.0", - "itertools 0.13.0", - "log", - "multimap 0.10.0", - "once_cell", - "petgraph", - "prettyplease 0.2.27", - "prost 0.13.4", - "prost-types 0.13.4", - "regex", - "syn 2.0.96", - "tempfile", +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "path-clean" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "pb-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "354a34df9c65b596152598001c0fe3393379ec2db03ae30b9985659422e2607e" +dependencies = [ + "clap 2.34.0", + "env_logger", + "log", + "nom", ] [[package]] -name = "prost-derive" -version = "0.11.9" +name = "pbkdf2" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "anyhow", - "itertools 0.10.5", - "proc-macro2", - "quote", - "syn 1.0.109", + "digest", + "hmac", ] [[package]] -name = "prost-derive" -version = "0.13.4" +name = "pem" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ - "anyhow", - "itertools 0.13.0", - "proc-macro2", - "quote", - "syn 2.0.96", + "base64 0.13.1", ] [[package]] -name = "prost-types" -version = "0.11.9" +name = "pem" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" dependencies = [ - "prost 0.11.9", + "base64 0.22.1", + "serde", ] [[package]] -name = "prost-types" -version = "0.13.4" +name = "pem-rfc7468" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ - "prost 0.13.4", + "base64ct", ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "quick-xml" -version = "0.32.0" +name = "pest" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", + "thiserror 2.0.11", + "ucd-trie", ] [[package]] -name = "quinn" -version = "0.11.6" +name = "pest_derive" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ - "bytes 1.9.0", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.10", - "tokio", - "tracing", + "pest", + "pest_generator", ] [[package]] -name = "quinn-proto" -version = "0.11.9" +name = "pest_generator" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ - "bytes 1.9.0", - "getrandom 0.2.15", - "rand 0.8.5", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.10", - "tinyvec", - "tracing", - "web-time", + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "quinn-udp" -version = "0.5.9" +name = "pest_meta" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ - "cfg_aliases 0.2.1", - "libc", "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", + "pest", + "sha2", ] [[package]] -name = "quote" -version = "1.0.38" +name = "petgraph" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "proc-macro2", + "fixedbitset 0.4.2", + "indexmap 2.7.1", ] [[package]] -name = "r2d2" -version = "0.8.10" +name = "petgraph" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ - "log", - "parking_lot 0.12.3", - "scheduled-thread-pool", + "fixedbitset 0.5.7", + "indexmap 2.7.1", ] [[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "radix_trie" -version = "0.2.1" +name = "phf" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "endian-type", - "nibble_vec", + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", ] [[package]] -name = "rand" -version = "0.7.3" +name = "phf" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", + "phf_shared 0.10.0", ] [[package]] -name = "rand" -version = "0.8.5" +name = "phf" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", + "phf_macros 0.11.3", + "phf_shared 0.11.3", ] [[package]] -name = "rand_chacha" -version = "0.2.2" +name = "phf_codegen" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "phf_generator 0.8.0", + "phf_shared 0.8.0", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "phf_codegen" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", + "phf_generator 0.10.0", + "phf_shared 0.10.0", ] [[package]] -name = "rand_core" -version = "0.5.1" +name = "phf_generator" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" dependencies = [ - "getrandom 0.1.16", + "phf_shared 0.8.0", + "rand 0.7.3", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "phf_generator" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" dependencies = [ - "getrandom 0.2.15", + "phf_shared 0.10.0", + "rand 0.8.5", ] [[package]] -name = "rand_hc" -version = "0.2.0" +name = "phf_generator" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "rand_core 0.5.1", + "phf_shared 0.11.3", + "rand 0.8.5", ] [[package]] -name = "rand_pcg" -version = "0.2.1" +name = "phf_macros" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" dependencies = [ - "rand_core 0.5.1", + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "randomx-rs" -version = "1.3.2" +name = "phf_macros" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c347596479c4796192e68aec20e62e31655b57753586f2b1ec320b779ef14c" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ - "bitflags 1.3.2", - "libc", - "thiserror 1.0.69", + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "range-map" -version = "0.2.0" +name = "phf_shared" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12a5a2d6c7039059af621472a4389be1215a816df61aa4d531cfe85264aee95f" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" dependencies = [ - "num-traits", + "siphasher 0.3.11", ] [[package]] -name = "raw-window-handle" -version = "0.6.2" +name = "phf_shared" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] [[package]] -name = "rayon" -version = "1.10.0" +name = "phf_shared" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "either", - "rayon-core", + "siphasher 1.0.1", ] [[package]] -name = "rayon-core" -version = "1.12.1" +name = "phraze" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "7c06cfe15e51d92f1cb74ef25401fe075520d4b38a2a3dc48fce7db5a98f2c22" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "clap 4.5.29", + "clap_complete", + "clap_mangen", + "include-lines", + "rand 0.9.0", + "unicode-normalization", ] [[package]] -name = "rcgen" -version = "0.12.1" +name = "pin-project" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48406db8ac1f3cbc7dcdb56ec355343817958a356ff430259bb07baf7607e1e1" +checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a" dependencies = [ - "pem", - "ring", - "time", - "yasna", + "pin-project-internal 0.4.30", ] [[package]] -name = "readkey" -version = "0.2.1" +name = "pin-project" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7677f98ca49bc9bb26e04c8abf80ba579e2cb98e8a384a0ff8128ad70670d249" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +dependencies = [ + "pin-project-internal 1.1.9", +] [[package]] -name = "readmouse" -version = "0.2.1" +name = "pin-project-internal" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be105c72a1e6a5a1198acee3d5b506a15676b74a02ecd78060042a447f408d94" +checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] -name = "redox_syscall" -version = "0.2.16" +name = "pin-project-internal" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ - "bitflags 1.3.2", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "redox_syscall" -version = "0.5.8" +name = "pin-project-lite" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" -dependencies = [ - "bitflags 2.7.0", -] +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] -name = "redox_users" -version = "0.4.6" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.15", - "libredox", - "thiserror 1.0.69", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "regex" -version = "1.11.1" +name = "piper" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "atomic-waker", + "fastrand", + "futures-io", ] [[package]] -name = "regex-automata" -version = "0.4.9" +name = "pkcs8" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "der", + "spki", ] [[package]] -name = "regex-syntax" -version = "0.8.5" +name = "pkg-config" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] -name = "reqwest" -version = "0.12.12" +name = "plain" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" -dependencies = [ - "base64 0.22.1", - "bytes 1.9.0", - "encoding_rs", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-tls", - "hyper-util", - "ipnet", - "js-sys", - "log", - "mime", - "mime_guess", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pemfile", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "system-configuration", - "tokio", - "tokio-native-tls", - "tokio-rustls", - "tokio-util 0.7.13", - "tower 0.5.2", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots", - "windows-registry", -] +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] -name = "reqwest-middleware" -version = "0.4.0" +name = "plist" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "anyhow", - "async-trait", - "http", - "reqwest", + "base64 0.22.1", + "indexmap 2.7.1", + "quick-xml 0.32.0", "serde", - "thiserror 1.0.69", - "tower-service", + "time", ] [[package]] -name = "reqwest-retry" -version = "0.7.0" +name = "png" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ - "anyhow", - "async-trait", - "futures 0.3.31", - "getrandom 0.2.15", - "http", - "hyper", - "parking_lot 0.11.2", - "reqwest", - "reqwest-middleware", - "retry-policies", - "thiserror 1.0.69", - "tokio", - "tracing", - "wasm-timer", + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", ] [[package]] -name = "resolv-conf" -version = "0.7.0" +name = "polling" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ - "hostname 0.3.1", - "quick-error", + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", ] [[package]] -name = "retry-policies" -version = "0.4.0" +name = "poly1305" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "rand 0.8.5", + "cpufeatures", + "opaque-debug", + "universal-hash", ] [[package]] -name = "ring" -version = "0.17.8" +name = "polyval" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ - "cc", "cfg-if", - "getrandom 0.2.15", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "ring-compat" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccce7bae150b815f0811db41b8312fcb74bffa4cab9cee5429ee00f356dd5bd4" -dependencies = [ - "aead", - "digest", - "ecdsa", - "ed25519", - "generic-array", - "p256", - "p384", - "pkcs8", - "rand_core 0.6.4", - "ring", - "signature", + "cpufeatures", + "opaque-debug", + "universal-hash", ] [[package]] -name = "roff" -version = "0.2.2" +name = "portable-atomic" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] -name = "rustc-demangle" -version = "0.1.24" +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "rustc-hash" -version = "2.1.0" +name = "ppv-lite86" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy 0.7.35", +] [[package]] -name = "rustc-hex" -version = "2.1.0" +name = "precomputed-hash" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] -name = "rustc_version" -version = "0.4.1" +name = "prettyplease" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ - "semver", + "proc-macro2", + "syn 1.0.109", ] [[package]] -name = "rustix" -version = "0.38.43" +name = "prettyplease" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ - "bitflags 2.7.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", + "proc-macro2", + "syn 2.0.98", ] [[package]] -name = "rustls" -version = "0.23.21" +name = "primeorder" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", + "elliptic-curve", ] [[package]] -name = "rustls-pemfile" -version = "2.2.0" +name = "primitive-types" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ - "rustls-pki-types", + "fixed-hash", + "impl-codec", + "impl-serde", + "uint", ] [[package]] -name = "rustls-pki-types" -version = "1.10.1" +name = "proc-macro-crate" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "web-time", + "thiserror 1.0.69", + "toml 0.5.11", ] [[package]] -name = "rustls-webpki" -version = "0.102.8" +name = "proc-macro-crate" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "toml_edit 0.20.7", ] [[package]] -name = "rustversion" -version = "1.0.19" +name = "proc-macro-crate" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.24", +] [[package]] -name = "ryu" -version = "1.0.18" +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] [[package]] -name = "same-file" -version = "1.0.6" +name = "proc-macro-error-attr" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "winapi-util", + "proc-macro2", + "quote", + "version_check", ] [[package]] -name = "sanitize-filename" -version = "0.5.0" +name = "proc-macro-hack" +version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" -dependencies = [ - "lazy_static", - "regex", -] +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] -name = "schannel" -version = "0.1.27" +name = "proc-macro2" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ - "windows-sys 0.59.0", + "unicode-ident", ] [[package]] -name = "scheduled-thread-pool" -version = "0.2.7" +name = "procfs-core" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" +checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" dependencies = [ - "parking_lot 0.12.3", + "bitflags 2.8.0", + "hex", ] [[package]] -name = "schemars" -version = "0.8.21" +name = "prometheus-client" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", - "url", - "uuid", + "dtoa", + "itoa 1.0.14", + "parking_lot 0.12.3", + "prometheus-client-derive-encode", ] [[package]] -name = "schemars_derive" -version = "0.8.21" +name = "prometheus-client-derive-encode" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "serde_derive_internals", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "prost" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes 1.10.0", + "prost-derive 0.9.0", +] [[package]] -name = "scroll" -version = "0.12.0" +name = "prost" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ - "scroll_derive", + "bytes 1.10.0", + "prost-derive 0.11.9", ] [[package]] -name = "scroll_derive" -version = "0.12.0" +name = "prost" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "bytes 1.10.0", + "prost-derive 0.12.6", ] [[package]] -name = "sealed" -version = "0.5.0" +name = "prost" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a8caec23b7800fb97971a1c6ae365b6239aaeddfb934d6265f8505e795699d" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.96", + "bytes 1.10.0", + "prost-derive 0.13.5", ] [[package]] -name = "sec1" -version = "0.7.3" +name = "prost-build" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ - "base16ct", - "der", - "generic-array", - "subtle", - "zeroize", + "bytes 1.10.0", + "heck 0.4.1", + "itertools 0.10.5", + "lazy_static", + "log", + "multimap 0.8.3", + "petgraph 0.6.5", + "prettyplease 0.1.25", + "prost 0.11.9", + "prost-types 0.11.9", + "regex", + "syn 1.0.109", + "tempfile", + "which", ] [[package]] -name = "security-framework" -version = "2.11.1" +name = "prost-build" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ - "bitflags 2.7.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", + "bytes 1.10.0", + "heck 0.5.0", + "itertools 0.12.1", + "log", + "multimap 0.10.0", + "once_cell", + "petgraph 0.6.5", + "prettyplease 0.2.29", + "prost 0.12.6", + "prost-types 0.12.6", + "regex", + "syn 2.0.98", + "tempfile", ] [[package]] -name = "security-framework" -version = "3.2.0" +name = "prost-build" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "bitflags 2.7.0", - "core-foundation 0.10.0", - "core-foundation-sys", - "libc", - "security-framework-sys", + "heck 0.5.0", + "itertools 0.14.0", + "log", + "multimap 0.10.0", + "once_cell", + "petgraph 0.7.1", + "prettyplease 0.2.29", + "prost 0.13.5", + "prost-types 0.13.5", + "regex", + "syn 2.0.98", + "tempfile", ] [[package]] -name = "security-framework-sys" -version = "2.14.0" +name = "prost-derive" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ - "core-foundation-sys", - "libc", + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "selectors" -version = "0.22.0" +name = "prost-derive" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ - "bitflags 1.3.2", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen 0.8.0", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "semver" -version = "1.0.24" +name = "prost-derive" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ - "serde", + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "sentry" -version = "0.35.0" +name = "prost-derive" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016958f51b96861dead7c1e02290f138411d05e94fad175c8636a835dee6e51e" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ - "httpdate", - "native-tls", - "reqwest", - "sentry-backtrace", - "sentry-contexts", - "sentry-core", - "sentry-debug-images", - "sentry-panic", - "sentry-tracing", - "tokio", - "ureq", + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "sentry-backtrace" -version = "0.35.0" +name = "prost-types" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57712c24e99252ef175b4b06c485294f10ad6bc5b5e1567ff3803ee7a0b7d3f" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" dependencies = [ - "backtrace", - "once_cell", - "regex", - "sentry-core", + "bytes 1.10.0", + "prost 0.9.0", ] [[package]] -name = "sentry-contexts" -version = "0.35.0" +name = "prost-types" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba8754ec3b9279e00aa6d64916f211d44202370a1699afde1db2c16cbada089" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ - "hostname 0.4.0", - "libc", - "os_info", - "rustc_version", - "sentry-core", - "uname", + "prost 0.11.9", ] [[package]] -name = "sentry-core" -version = "0.35.0" +name = "prost-types" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f8b6dcd4fbae1e3e22b447f32670360b27e31b62ab040f7fb04e0f80c04d92" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "once_cell", - "rand 0.8.5", - "sentry-types", - "serde", - "serde_json", + "prost 0.12.6", ] [[package]] -name = "sentry-debug-images" -version = "0.35.0" +name = "prost-types" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8982a69133d3f5e4efdbfa0776937fca43c3a2e275a8fe184f50b1b0aa92e07c" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" dependencies = [ - "findshlibs", - "once_cell", - "sentry-core", + "prost 0.13.5", ] [[package]] -name = "sentry-panic" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de296dae6f01e931b65071ee5fe28d66a27909857f744018f107ed15fd1f6b25" +name = "proto_builder" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ - "sentry-backtrace", - "sentry-core", + "prost-build 0.12.6", + "sha2", ] [[package]] -name = "sentry-rust-minidump" -version = "0.9.0" +name = "ptr_meta" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3b211916a3aed3398125b02b98a5cd4fc530c5626dd28a3c86865fe6cd93935" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" dependencies = [ - "minidumper-child", - "sentry", - "thiserror 2.0.10", + "ptr_meta_derive", ] [[package]] -name = "sentry-tracing" -version = "0.35.0" +name = "ptr_meta_derive" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "263f73c757ed7915d3e1e34625eae18cad498a95b4261603d4ce3f87b159a6f0" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ - "sentry-backtrace", - "sentry-core", - "tracing-core", - "tracing-subscriber", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "sentry-types" -version = "0.35.0" +name = "pulldown-cmark" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a71ed3a389948a6a6d92b98e997a2723ca22f09660c5a7b7388ecd509a70a527" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "debugid", - "hex", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror 1.0.69", - "time", - "url", - "uuid", + "bitflags 2.8.0", + "memchr", + "unicase", ] [[package]] -name = "serde" -version = "1.0.217" +name = "quick-error" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" -dependencies = [ - "serde_derive", -] +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] -name = "serde-untagged" -version = "0.1.6" +name = "quick-protobuf" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" dependencies = [ - "erased-serde", - "serde", - "typeid", + "byteorder", ] [[package]] -name = "serde-value" -version = "0.7.0" +name = "quick-protobuf-codec" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" dependencies = [ - "ordered-float", - "serde", + "asynchronous-codec", + "bytes 1.10.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", ] [[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +name = "quick-protobuf-codec" +version = "0.3.1" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" dependencies = [ - "half", - "serde", + "asynchronous-codec", + "bytes 1.10.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", ] [[package]] -name = "serde_derive" -version = "1.0.217" +name = "quick-xml" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "memchr", ] [[package]] -name = "serde_derive_internals" -version = "0.29.1" +name = "quick-xml" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "memchr", ] [[package]] -name = "serde_json" -version = "1.0.135" +name = "quinn" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ - "itoa 1.0.14", - "memchr", - "ryu", - "serde", + "bytes 1.10.0", + "futures-io", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.23", + "socket2", + "thiserror 2.0.11", + "tokio", + "tracing", ] [[package]] -name = "serde_repr" -version = "0.1.19" +name = "quinn-proto" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "bytes 1.10.0", + "getrandom 0.2.15", + "rand 0.8.5", + "ring 0.17.9", + "rustc-hash", + "rustls 0.23.23", + "rustls-pki-types", + "slab", + "thiserror 2.0.11", + "tinyvec", + "tracing", + "web-time", ] [[package]] -name = "serde_spanned" -version = "0.6.8" +name = "quinn-udp" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" dependencies = [ - "serde", + "cfg_aliases 0.2.1", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "quote" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ - "form_urlencoded", - "itoa 1.0.14", - "ryu", - "serde", + "proc-macro2", ] [[package]] -name = "serde_with" -version = "3.12.0" +name = "r2d2" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.7.0", - "serde", - "serde_derive", - "serde_json", - "serde_with_macros", - "time", + "log", + "parking_lot 0.12.3", + "scheduled-thread-pool", ] [[package]] -name = "serde_with_macros" -version = "3.12.0" +name = "radium" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.96", -] +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "radix_trie" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" dependencies = [ - "indexmap 2.7.0", - "itoa 1.0.14", - "ryu", - "serde", - "unsafe-libyaml", + "endian-type", + "nibble_vec", ] [[package]] -name = "serialize-to-javascript" -version = "0.1.1" +name = "rand" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", ] [[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", ] [[package]] -name = "servo_arc" -version = "0.1.1" +name = "rand" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ - "nodrop", - "stable_deref_trait", + "rand_chacha 0.9.0", + "rand_core 0.9.0", + "zerocopy 0.8.18", ] [[package]] -name = "sha1" -version = "0.10.6" +name = "rand_chacha" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "cfg-if", - "cpufeatures", - "digest", + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] -name = "sha2" -version = "0.10.8" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "cfg-if", - "cpufeatures", - "digest", + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] -name = "sha3" -version = "0.10.8" +name = "rand_chacha" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ - "digest", - "keccak", + "ppv-lite86", + "rand_core 0.9.0", ] [[package]] -name = "shared_child" -version = "1.0.1" +name = "rand_core" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "libc", - "windows-sys 0.59.0", + "getrandom 0.1.16", ] [[package]] -name = "shlex" -version = "1.3.0" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] [[package]] -name = "signal-hook-registry" -version = "1.4.2" +name = "rand_core" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" dependencies = [ - "libc", + "getrandom 0.3.1", + "zerocopy 0.8.18", ] [[package]] -name = "signature" -version = "2.2.0" +name = "rand_hc" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.5.1", ] [[package]] -name = "simd-adler32" -version = "0.3.7" +name = "rand_pcg" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] [[package]] -name = "simple_asn1" -version = "0.6.2" +name = "randomx-rs" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "09c347596479c4796192e68aec20e62e31655b57753586f2b1ec320b779ef14c" dependencies = [ - "num-bigint", - "num-traits", + "bitflags 1.3.2", + "libc", "thiserror 1.0.69", - "time", ] [[package]] -name = "siphasher" -version = "0.3.11" +name = "range-map" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "12a5a2d6c7039059af621472a4389be1215a816df61aa4d531cfe85264aee95f" +dependencies = [ + "num-traits", +] [[package]] -name = "siphasher" -version = "1.0.1" +name = "raw-window-handle" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] -name = "slab" -version = "0.4.9" +name = "rayon" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "autocfg", + "either", + "rayon-core", ] [[package]] -name = "smallvec" -version = "1.13.2" +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] [[package]] -name = "smart-default" -version = "0.7.1" +name = "rcgen" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "pem 3.0.4", + "ring 0.16.20", + "time", + "x509-parser 0.15.1", + "yasna", ] [[package]] -name = "snafu" -version = "0.7.5" +name = "rcgen" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +checksum = "48406db8ac1f3cbc7dcdb56ec355343817958a356ff430259bb07baf7607e1e1" dependencies = [ - "doc-comment", - "snafu-derive", + "pem 3.0.4", + "ring 0.17.9", + "time", + "yasna", ] [[package]] -name = "snafu-derive" -version = "0.7.5" +name = "readkey" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "7677f98ca49bc9bb26e04c8abf80ba579e2cb98e8a384a0ff8128ad70670d249" [[package]] -name = "snow" -version = "0.9.6" +name = "readmouse" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +checksum = "be105c72a1e6a5a1198acee3d5b506a15676b74a02ecd78060042a447f408d94" + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "aes-gcm", - "blake2", - "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", - "rustc_version", - "sha2", - "subtle", + "bitflags 1.3.2", ] [[package]] -name = "socket2" +name = "redox_syscall" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "libc", - "windows-sys 0.52.0", + "bitflags 2.8.0", ] [[package]] -name = "softbuffer" +name = "redox_users" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "bytemuck", - "cfg_aliases 0.2.1", - "core-graphics 0.24.0", - "foreign-types 0.5.0", - "js-sys", - "log", - "objc2", - "objc2-foundation", - "objc2-quartz-core", - "raw-window-handle", - "redox_syscall 0.5.8", - "wasm-bindgen", - "web-sys", - "windows-sys 0.59.0", + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", ] [[package]] -name = "soup3" +name = "redox_users" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ - "futures-channel", - "gio", - "glib", - "libc", - "soup3-sys", + "getrandom 0.2.15", + "libredox", + "thiserror 2.0.11", ] [[package]] -name = "soup3-sys" -version = "0.5.0" +name = "reflink-copy" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +checksum = "fbd3533fd4222b8337470456ea84d80436b4c91c53db51c372461d5f7e6eb0b4" dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", + "cfg-if", "libc", - "system-deps", + "rustix", + "windows 0.59.0", ] [[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spki" -version = "0.7.3" +name = "regalloc2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" dependencies = [ - "base64ct", - "der", + "fxhash", + "log", + "slice-group-by", + "smallvec 1.13.2", ] [[package]] -name = "stable_deref_trait" -version = "1.2.0" +name = "regex" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] [[package]] -name = "stack-buf" -version = "0.1.6" +name = "regex-automata" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7386b49cb287f6fafbfd3bd604914bccb99fb8d53483f40e1ecfda5d45f3370" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] [[package]] -name = "static_assertions" -version = "1.1.0" +name = "regex-syntax" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] -name = "string_cache" -version = "0.8.7" +name = "region" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +checksum = "e6b6ebd13bc009aef9cd476c1310d49ac354d36e240cf1bd753290f3dc7199a7" dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot 0.12.3", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", + "bitflags 1.3.2", + "libc", + "mach2", + "windows-sys 0.52.0", ] [[package]] -name = "string_cache_codegen" -version = "0.5.2" +name = "rend" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", + "bytecheck", ] [[package]] -name = "strip-ansi-escapes" -version = "0.2.0" +name = "reqwest" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ff8ef943b384c414f54aefa961dd2bd853add74ec75e7ac74cf91dba62bcfa" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "vte", + "base64 0.21.7", + "bytes 1.10.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.50.0", ] [[package]] -name = "strsim" -version = "0.11.1" +name = "reqwest" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64 0.22.1", + "bytes 1.10.0", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.23", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util 0.7.13", + "tower 0.5.2", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "windows-registry", +] [[package]] -name = "structopt" -version = "0.3.26" +name = "reqwest-middleware" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" dependencies = [ - "clap 2.34.0", - "lazy_static", - "structopt-derive", + "anyhow", + "async-trait", + "http 1.2.0", + "reqwest 0.12.12", + "serde", + "thiserror 1.0.69", + "tower-service", ] [[package]] -name = "structopt-derive" -version = "0.4.18" +name = "reqwest-retry" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178" dependencies = [ - "heck 0.3.3", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", + "anyhow", + "async-trait", + "futures 0.3.31", + "getrandom 0.2.15", + "http 1.2.0", + "hyper 1.6.0", + "parking_lot 0.11.2", + "reqwest 0.12.12", + "reqwest-middleware", + "retry-policies", + "thiserror 1.0.69", + "tokio", + "tracing", + "wasm-timer", ] [[package]] -name = "strum" -version = "0.22.0" +name = "resolv-conf" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ - "strum_macros", + "hostname 0.3.1", + "quick-error", ] [[package]] -name = "strum_macros" -version = "0.22.0" +name = "retry-policies" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" +checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn 1.0.109", + "rand 0.8.5", ] [[package]] -name = "subtle" -version = "2.6.1" +name = "rfc6979" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] [[package]] -name = "supercow" -version = "0.1.0" +name = "rfd" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171758edb47aa306a78dfa4ab9aeb5167405bd4e3dc2b64e88f6a84bbe98bd63" +checksum = "6a24763657bff09769a8ccf12c8b8a50416fb035fe199263b4c5071e4e3f006f" +dependencies = [ + "ashpd", + "block2 0.5.1", + "core-foundation 0.10.0", + "core-foundation-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.59.0", +] [[package]] -name = "swift-rs" -version = "1.0.7" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ - "base64 0.21.7", - "serde", - "serde_json", + "cc", + "libc", + "once_cell", + "spin", + "untrusted 0.7.1", + "web-sys", + "winapi", ] [[package]] -name = "syn" -version = "1.0.109" +name = "ring" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "untrusted 0.9.0", + "windows-sys 0.52.0", ] [[package]] -name = "syn" -version = "2.0.96" +name = "ring-compat" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "ccce7bae150b815f0811db41b8312fcb74bffa4cab9cee5429ee00f356dd5bd4" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "aead", + "digest", + "ecdsa", + "ed25519", + "generic-array", + "p256", + "p384", + "pkcs8", + "rand_core 0.6.4", + "ring 0.17.9", + "signature", ] [[package]] -name = "sync_wrapper" -version = "1.0.2" +name = "rkyv" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" dependencies = [ - "futures-core", + "bitvec", + "bytecheck", + "bytes 1.10.0", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "rkyv_derive" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "unicode-xid", ] [[package]] -name = "synstructure" -version = "0.13.1" +name = "roff" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", -] +checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" [[package]] -name = "sys-locale" -version = "0.3.2" +name = "ron" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ - "libc", + "base64 0.21.7", + "bitflags 2.8.0", + "serde", + "serde_derive", ] [[package]] -name = "sysinfo" -version = "0.31.4" +name = "rtcp" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355dbe4f8799b304b05e1b0f05fc59b2a18d36645cf169607da45bde2f69a1be" +checksum = "33648a781874466a62d89e265fee9f17e32bc7d05a256e6cca41bf97eadcd8aa" dependencies = [ - "core-foundation-sys", - "libc", - "memchr", - "ntapi", - "rayon", - "windows 0.57.0", + "bytes 1.10.0", + "thiserror 1.0.69", + "webrtc-util", ] [[package]] -name = "system-configuration" -version = "0.6.1" +name = "rtnetlink" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" dependencies = [ - "bitflags 2.7.0", - "core-foundation 0.9.4", - "system-configuration-sys", + "futures 0.3.31", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix 0.26.4", + "thiserror 1.0.69", + "tokio", ] [[package]] -name = "system-configuration-sys" -version = "0.6.0" +name = "rtp" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +checksum = "e60482acbe8afb31edf6b1413103b7bca7a65004c423b3c3993749a083994fbe" dependencies = [ - "core-foundation-sys", - "libc", + "bytes 1.10.0", + "rand 0.8.5", + "serde", + "thiserror 1.0.69", + "webrtc-util", ] [[package]] -name = "system-deps" -version = "6.2.2" +name = "rtp" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +checksum = "47fca9bd66ae0b1f3f649b8f5003d6176433d7293b78b0fce7e1031816bdd99d" dependencies = [ - "cfg-expr", - "heck 0.5.0", - "pkg-config", - "toml 0.8.19", - "version-compare", + "bytes 1.10.0", + "rand 0.8.5", + "serde", + "thiserror 1.0.69", + "webrtc-util", ] [[package]] -name = "tao" -version = "0.31.1" +name = "rust-ini" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3731d04d4ac210cd5f344087733943b9bfb1a32654387dad4d1c70de21aee2c9" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" dependencies = [ - "bitflags 2.7.0", - "cocoa", - "core-foundation 0.10.0", - "core-graphics 0.24.0", - "crossbeam-channel", - "dispatch", - "dlopen2", - "dpi", - "gdkwayland-sys", - "gdkx11-sys", - "gtk", - "jni", - "lazy_static", + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.8.0", + "errno", "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.9", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +dependencies = [ "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", "once_cell", - "parking_lot 0.12.3", - "raw-window-handle", - "scopeguard", - "tao-macros", - "unicode-segmentation", - "url", - "windows 0.58.0", - "windows-core 0.58.0", - "windows-version", - "x11-dl", + "ring 0.17.9", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", ] [[package]] -name = "tao-macros" -version = "0.1.3" +name = "rustls-pemfile" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", + "base64 0.21.7", ] [[package]] -name = "tap" -version = "1.0.1" +name = "rustls-pemfile" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] [[package]] -name = "tar" -version = "0.4.43" +name = "rustls-pki-types" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" dependencies = [ - "filetime", - "libc", - "xattr", + "web-time", ] [[package]] -name = "target-lexicon" -version = "0.12.16" +name = "rustls-webpki" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.9", + "untrusted 0.9.0", +] [[package]] -name = "tari-tiny-keccak" -version = "2.0.2" +name = "rustls-webpki" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa5d0f04bac67c31c1e0c2ffbc7f0e3aee2707405804ec5e022b4d550be259c" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "borsh", - "crunchy", + "ring 0.17.9", + "rustls-pki-types", + "untrusted 0.9.0", ] [[package]] -name = "tari-universe" -version = "0.9.803" +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "git+https://github.com/tari-project/rust-libp2p.git?rev=3d918ccbf5ae1cbec0815a2156079b0fba4ba558#3d918ccbf5ae1cbec0815a2156079b0fba4ba558" +dependencies = [ + "futures 0.3.31", + "pin-project 1.1.9", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sanitize-filename" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scheduled-thread-pool" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" +dependencies = [ + "parking_lot 0.12.3", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ - "anyhow", - "async-trait", - "async_zip", - "auto-launch", - "base64 0.22.1", - "blake2", - "chrono", - "der", - "device_query", - "dirs 5.0.1", - "dunce", "dyn-clone", - "embed-resource", - "fix-path-env", - "flate2", - "futures-lite", - "futures-util", - "hex", - "jsonwebtoken", - "keyring", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.98", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.9", + "untrusted 0.9.0", +] + +[[package]] +name = "sdp" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13254db766b17451aced321e7397ebf0a446ef0c8d2942b6e67a95815421093f" +dependencies = [ + "rand 0.8.5", + "substring", + "thiserror 1.0.69", + "url", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sealed" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a8caec23b7800fb97971a1c6ae365b6239aaeddfb934d6265f8505e795699d" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.10.0", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec 1.13.2", + "thin-slice", +] + +[[package]] +name = "self_cell" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" + +[[package]] +name = "semver" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +dependencies = [ + "serde", +] + +[[package]] +name = "sentry" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016958f51b96861dead7c1e02290f138411d05e94fad175c8636a835dee6e51e" +dependencies = [ + "httpdate", + "native-tls", + "reqwest 0.12.12", + "sentry-backtrace", + "sentry-contexts", + "sentry-core", + "sentry-debug-images", + "sentry-panic", + "sentry-tracing", + "tokio", + "ureq", +] + +[[package]] +name = "sentry-backtrace" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57712c24e99252ef175b4b06c485294f10ad6bc5b5e1567ff3803ee7a0b7d3f" +dependencies = [ + "backtrace", + "once_cell", + "regex", + "sentry-core", +] + +[[package]] +name = "sentry-contexts" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba8754ec3b9279e00aa6d64916f211d44202370a1699afde1db2c16cbada089" +dependencies = [ + "hostname 0.4.0", + "libc", + "os_info", + "rustc_version", + "sentry-core", + "uname", +] + +[[package]] +name = "sentry-core" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8b6dcd4fbae1e3e22b447f32670360b27e31b62ab040f7fb04e0f80c04d92" +dependencies = [ + "once_cell", + "rand 0.8.5", + "sentry-types", + "serde", + "serde_json", +] + +[[package]] +name = "sentry-debug-images" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8982a69133d3f5e4efdbfa0776937fca43c3a2e275a8fe184f50b1b0aa92e07c" +dependencies = [ + "findshlibs", + "once_cell", + "sentry-core", +] + +[[package]] +name = "sentry-panic" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de296dae6f01e931b65071ee5fe28d66a27909857f744018f107ed15fd1f6b25" +dependencies = [ + "sentry-backtrace", + "sentry-core", +] + +[[package]] +name = "sentry-rust-minidump" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3b211916a3aed3398125b02b98a5cd4fc530c5626dd28a3c86865fe6cd93935" +dependencies = [ + "minidumper-child", + "sentry", + "thiserror 2.0.11", +] + +[[package]] +name = "sentry-tracing" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "263f73c757ed7915d3e1e34625eae18cad498a95b4261603d4ce3f87b159a6f0" +dependencies = [ + "sentry-backtrace", + "sentry-core", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sentry-types" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a71ed3a389948a6a6d92b98e997a2723ca22f09660c5a7b7388ecd509a70a527" +dependencies = [ + "debugid", + "hex", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror 1.0.69", + "time", + "url", + "uuid", +] + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_json" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +dependencies = [ + "itoa 1.0.14", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa 1.0.14", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.14", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.7.1", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.7.1", + "itoa 1.0.14", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha-1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "shared-buffer" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6c99835bad52957e7aa241d3975ed17c1e5f8c92026377d117a606f36b84b16" +dependencies = [ + "bytes 1.10.0", + "memmap2 0.6.2", +] + +[[package]] +name = "shared_child" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.11", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount", + "cargo_metadata 0.14.2", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smallvec" +version = "2.0.0-alpha.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d44cfb396c3caf6fbfd0ab422af02631b69ddd96d2eff0b0f0724f9024051b" + +[[package]] +name = "smart-default" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "ring 0.17.9", + "rustc_version", + "sha2", + "subtle", +] + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "softbuffer" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +dependencies = [ + "bytemuck", + "cfg_aliases 0.2.1", + "core-graphics 0.24.0", + "foreign-types 0.5.0", + "js-sys", + "log", + "objc2", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall 0.5.8", + "wasm-bindgen", + "web-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "ssri" +version = "9.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7a2b3c2bc9693bcb40870c4e9b5bf0d79f9cb46273321bf855ec513e919082" +dependencies = [ + "base64 0.21.7", + "digest", + "hex", + "miette", + "serde", + "sha-1", + "sha2", + "thiserror 1.0.69", + "xxhash-rust", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "stack-buf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7386b49cb287f6fafbfd3bd604914bccb99fb8d53483f40e1ecfda5d45f3370" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "std-semaphore" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ae9eec00137a8eed469fb4148acd9fc6ac8c3f9b110f52cd34698c8b5bfa0e" + +[[package]] +name = "string_cache" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" +dependencies = [ + "new_debug_unreachable", + "parking_lot 0.12.3", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "244292f3441c89febe5b5bdfbb6863aeaf4f64da810ea3050fd927b27b8d92ce" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "strip-ansi-escapes" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" +dependencies = [ + "vte", +] + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap 2.34.0", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck 0.3.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "strum" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" +dependencies = [ + "strum_macros 0.22.0", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" +dependencies = [ + "heck 0.3.3", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", +] + +[[package]] +name = "stun" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3f371788132e9d623e6eab4ba28aac083763a4133f045e6ebaee5ceb869803d" +dependencies = [ + "base64 0.21.7", + "crc 3.2.1", + "lazy_static", + "md-5", + "rand 0.8.5", + "ring 0.17.9", + "subtle", + "thiserror 1.0.69", + "tokio", + "url", + "webrtc-util", +] + +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "supercow" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "171758edb47aa306a78dfa4ab9aeb5167405bd4e3dc2b64e88f6a84bbe98bd63" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + +[[package]] +name = "sysinfo" +version = "0.31.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "355dbe4f8799b304b05e1b0f05fc59b2a18d36645cf169607da45bde2f69a1be" +dependencies = [ + "core-foundation-sys", + "libc", + "memchr", + "ntapi", + "rayon", + "windows 0.57.0", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.9.4", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.20", + "version-compare", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tao" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3731d04d4ac210cd5f344087733943b9bfb1a32654387dad4d1c70de21aee2c9" +dependencies = [ + "bitflags 2.8.0", + "cocoa", + "core-foundation 0.10.0", + "core-graphics 0.24.0", + "crossbeam-channel", + "dispatch", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot 0.12.3", + "raw-window-handle", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.58.0", + "windows-core 0.58.0", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tari-tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa5d0f04bac67c31c1e0c2ffbc7f0e3aee2707405804ec5e022b4d550be259c" +dependencies = [ + "borsh", + "crunchy", +] + +[[package]] +name = "tari-universe" +version = "0.9.803" +dependencies = [ + "anyhow", + "async-trait", + "async_zip", + "auto-launch", + "axum 0.7.9", + "axum-jrpc 0.7.1", + "base64 0.22.1", + "blake2", + "chrono", + "der", + "device_query", + "diesel", + "diesel_migrations", + "dirs 5.0.1", + "dunce", + "dyn-clone", + "embed-resource", + "fix-path-env", + "flate2", + "futures-lite", + "futures-util", + "hex", + "jsonwebtoken 9.3.1", + "keyring", + "libsqlite3-sys", + "log", + "log4rs", + "minotari_node_grpc_client 0.1.0", + "minotari_wallet_grpc_client", + "monero-address-creator", + "nix 0.29.0", + "nvml-wrapper", + "open", + "openssl", + "phraze", + "rand 0.8.5", + "regex", + "reqwest 0.12.12", + "reqwest-middleware", + "reqwest-retry", + "ring 0.17.9", + "ring-compat", + "sanitize-filename", + "semver", + "serde", + "serde_cbor", + "serde_json", + "serde_yaml", + "sha2", + "sys-locale", + "sysinfo", + "tar", + "tari_common 1.11.0-pre.0", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.11.0-pre.0", + "tari_core 1.11.0-pre.0", + "tari_crypto", + "tari_dan_app_utilities", + "tari_dan_wallet_daemon", + "tari_key_manager 1.11.0-pre.0", + "tari_shutdown 1.11.0-pre.0", + "tari_shutdown 1.7.0-pre.3", + "tari_utilities", + "tari_wallet_daemon_client", + "tauri", + "tauri-build", + "tauri-plugin-cli", + "tauri-plugin-clipboard-manager", + "tauri-plugin-dialog", + "tauri-plugin-os", + "tauri-plugin-process", + "tauri-plugin-sentry", + "tauri-plugin-shell", + "tauri-plugin-single-instance", + "tauri-plugin-updater", + "thiserror 2.0.11", + "tokio", + "tokio-util 0.7.13", + "tonic", + "tower-http 0.5.2", + "urlencoding", + "winreg 0.52.0", + "xz2", + "zip", +] + +[[package]] +name = "tari_base_node_client" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "async-trait", + "log", + "minotari_app_grpc 1.7.0-pre.3", + "minotari_node_grpc_client 1.7.0-pre.3", + "serde", + "tari_common_types 1.7.0-pre.3", + "tari_core 1.7.0-pre.3", + "tari_dan_common_types", + "tari_utilities", + "thiserror 1.0.69", + "tonic", + "url", +] + +[[package]] +name = "tari_bor" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "ciborium", + "ciborium-io", + "serde", +] + +[[package]] +name = "tari_bulletproofs_plus" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eac57729e3b003c18e822c64c8c4977770102b2eaea920a7c40bca5caf12c54" +dependencies = [ + "blake2", + "byteorder", + "curve25519-dalek", + "digest", + "ff", + "itertools 0.12.1", + "merlin", + "once_cell", + "rand_core 0.6.4", + "serde", + "sha3", + "thiserror-no-std", + "zeroize", +] + +[[package]] +name = "tari_common" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "anyhow", + "cargo_toml 0.20.5", + "config", + "dirs-next", + "git2", + "log", + "log4rs", + "multiaddr 0.14.0", + "path-clean", + "prost-build 0.11.9", + "serde", + "serde_json", + "serde_yaml", + "sha2", + "structopt", + "tari_features 1.7.0-pre.3", + "tempfile", + "thiserror 1.0.69", + "toml 0.5.11", +] + +[[package]] +name = "tari_common" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "anyhow", + "config", + "dirs-next", + "log", + "log4rs", + "multiaddr 0.14.0", + "path-clean", + "prost-build 0.11.9", + "serde", + "serde_json", + "serde_yaml", + "sha2", + "structopt", + "tari_features 1.11.0-pre.0", + "tempfile", + "thiserror 1.0.69", + "toml 0.5.11", +] + +[[package]] +name = "tari_common_sqlite" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "diesel", + "diesel_migrations", + "log", + "serde", + "tari_utilities", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tari_common_sqlite" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "diesel", + "diesel_migrations", + "log", + "serde", + "tari_utilities", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tari_common_types" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "base64 0.21.7", + "bitflags 2.8.0", + "blake2", + "borsh", + "bs58 0.5.1", + "chacha20poly1305", + "digest", + "minotari_ledger_wallet_common 1.7.0-pre.3", + "newtype-ops", + "once_cell", + "primitive-types", + "rand 0.8.5", + "serde", + "strum 0.22.0", + "strum_macros 0.22.0", + "tari_common 1.7.0-pre.3", + "tari_crypto", + "tari_utilities", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_common_types" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "base64 0.21.7", + "bitflags 2.8.0", + "blake2", + "borsh", + "bs58 0.5.1", + "chacha20poly1305", + "digest", + "minotari_ledger_wallet_common 1.11.0-pre.0", + "newtype-ops", + "once_cell", + "primitive-types", + "rand 0.8.5", + "serde", + "strum 0.22.0", + "strum_macros 0.22.0", + "tari_common 1.11.0-pre.0", + "tari_crypto", + "tari_utilities", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_comms" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "anyhow", + "async-trait", + "bitflags 2.8.0", + "blake2", + "bytes 1.10.0", + "chrono", + "cidr", + "data-encoding", + "derivative", + "digest", + "futures 0.3.31", + "lmdb-zero", + "log", + "log-mdc", + "multiaddr 0.14.0", + "nom", + "once_cell", + "pin-project 1.1.9", + "prost 0.13.5", + "rand 0.8.5", + "serde", + "serde_derive", + "sha3", + "snow", + "tari_common 1.7.0-pre.3", + "tari_crypto", + "tari_shutdown 1.7.0-pre.3", + "tari_storage 1.7.0-pre.3", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "tower 0.4.13", + "tracing", + "yamux 0.13.4", + "zeroize", +] + +[[package]] +name = "tari_comms" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "anyhow", + "async-trait", + "bitflags 2.8.0", + "blake2", + "bytes 1.10.0", + "chrono", + "cidr", + "data-encoding", + "derivative", + "digest", + "futures 0.3.31", + "lmdb-zero", + "log", + "log-mdc", + "multiaddr 0.14.0", + "nom", + "once_cell", + "pin-project 1.1.9", + "prost 0.13.5", + "rand 0.8.5", + "serde", + "serde_derive", + "sha3", + "snow", + "tari_common 1.11.0-pre.0", + "tari_crypto", + "tari_shutdown 1.11.0-pre.0", + "tari_storage 1.11.0-pre.0", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "tower 0.4.13", + "tracing", + "yamux 0.13.4", + "zeroize", +] + +[[package]] +name = "tari_comms_dht" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "anyhow", + "bitflags 2.8.0", + "blake2", + "chacha20 0.7.3", + "chacha20poly1305", + "chrono", + "diesel", + "diesel_migrations", + "digest", + "futures 0.3.31", + "log", + "log-mdc", + "pin-project 0.4.30", + "prost 0.13.5", + "rand 0.8.5", + "serde", + "tari_common 1.7.0-pre.3", + "tari_common_sqlite 1.7.0-pre.3", + "tari_comms 1.7.0-pre.3", + "tari_comms_rpc_macros 1.7.0-pre.3", + "tari_crypto", + "tari_shutdown 1.7.0-pre.3", + "tari_storage 1.7.0-pre.3", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tower 0.4.13", + "zeroize", +] + +[[package]] +name = "tari_comms_dht" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "anyhow", + "bitflags 2.8.0", + "blake2", + "chacha20 0.7.3", + "chacha20poly1305", + "chrono", + "diesel", + "diesel_migrations", + "digest", + "futures 0.3.31", + "log", + "log-mdc", + "pin-project 0.4.30", + "prost 0.13.5", + "rand 0.8.5", + "serde", + "tari_common 1.11.0-pre.0", + "tari_common_sqlite 1.11.0-pre.0", + "tari_comms 1.11.0-pre.0", + "tari_comms_rpc_macros 1.11.0-pre.0", + "tari_crypto", + "tari_shutdown 1.11.0-pre.0", + "tari_storage 1.11.0-pre.0", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tower 0.4.13", + "zeroize", +] + +[[package]] +name = "tari_comms_rpc_macros" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tari_comms_rpc_macros" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tari_consensus" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "indexmap 2.7.1", + "log", + "serde", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_dan_common_types", + "tari_dan_storage", + "tari_engine_types", + "tari_epoch_manager", + "tari_shutdown 1.7.0-pre.3", + "tari_sidechain", + "tari_state_tree", + "tari_transaction", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tari_core" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "async-trait", + "bincode", + "bitflags 2.8.0", + "blake2", + "borsh", + "bytes 0.5.6", + "chacha20poly1305", + "chrono", + "decimal-rs", + "derivative", + "digest", + "dirs-next", + "fs2", + "futures 0.3.31", + "hex", + "integer-encoding", + "lmdb-zero", + "log", + "log-mdc", + "monero", + "newtype-ops", + "num-derive", + "num-format", + "num-traits", + "once_cell", + "primitive-types", + "prost 0.13.5", + "rand 0.8.5", + "randomx-rs", + "serde", + "serde_json", + "serde_repr", + "sha2", + "sha3", + "strum 0.22.0", + "strum_macros 0.22.0", + "tari-tiny-keccak", + "tari_common 1.7.0-pre.3", + "tari_common_sqlite 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_comms 1.7.0-pre.3", + "tari_comms_dht 1.7.0-pre.3", + "tari_comms_rpc_macros 1.7.0-pre.3", + "tari_crypto", + "tari_features 1.7.0-pre.3", + "tari_hashing 1.7.0-pre.3", + "tari_key_manager 1.7.0-pre.3", + "tari_max_size 1.7.0-pre.3", + "tari_mmr 1.7.0-pre.3", + "tari_p2p 1.7.0-pre.3", + "tari_script 1.7.0-pre.3", + "tari_service_framework 1.7.0-pre.3", + "tari_shutdown 1.7.0-pre.3", + "tari_sidechain", + "tari_storage 1.7.0-pre.3", + "tari_test_utils 1.7.0-pre.3", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "tari_core" +version = "1.11.0-pre.0" +source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bitflags 2.8.0", + "blake2", + "borsh", + "bytes 0.5.6", + "chacha20poly1305", + "chrono", + "decimal-rs", + "derivative", + "digest", + "dirs-next", + "fs2", + "futures 0.3.31", + "hex", + "hickory-client", + "hickory-proto 0.25.0-alpha.2", + "integer-encoding", + "lmdb-zero", + "log", + "log-mdc", + "monero", + "newtype-ops", + "num-derive", + "num-format", + "num-traits", + "once_cell", + "primitive-types", + "prost 0.13.5", + "rand 0.8.5", + "randomx-rs", + "serde", + "serde_json", + "serde_repr", + "sha2", + "sha3", + "strum 0.22.0", + "strum_macros 0.22.0", + "tari-tiny-keccak", + "tari_common 1.11.0-pre.0", + "tari_common_sqlite 1.11.0-pre.0", + "tari_common_types 1.11.0-pre.0", + "tari_comms 1.11.0-pre.0", + "tari_comms_dht 1.11.0-pre.0", + "tari_comms_rpc_macros 1.11.0-pre.0", + "tari_crypto", + "tari_features 1.11.0-pre.0", + "tari_hashing 1.11.0-pre.0", + "tari_key_manager 1.11.0-pre.0", + "tari_max_size 1.11.0-pre.0", + "tari_mmr 1.11.0-pre.0", + "tari_p2p 1.11.0-pre.0", + "tari_script 1.11.0-pre.0", + "tari_service_framework 1.11.0-pre.0", + "tari_shutdown 1.11.0-pre.0", + "tari_storage 1.11.0-pre.0", + "tari_test_utils 1.11.0-pre.0", + "tari_utilities", + "thiserror 1.0.69", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "tari_crypto" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2c126518e7d09ec8a95de51921c17430b85b3a729375310326bb95cfaa1d12b" +dependencies = [ + "blake2", + "borsh", + "curve25519-dalek", + "digest", + "log", + "merlin", + "once_cell", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", + "sha3", + "snafu", + "subtle", + "tari_bulletproofs_plus", + "tari_utilities", + "zeroize", +] + +[[package]] +name = "tari_dan_app_utilities" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "async-trait", + "cacache", + "config", + "json5", + "libp2p-identity", + "log", + "multiaddr 0.18.1", + "rand 0.8.5", + "serde", + "serde_json", + "tari_base_node_client", + "tari_bor", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_dan_common_types", + "tari_dan_engine", + "tari_dan_storage", + "tari_engine_types", + "tari_epoch_manager", + "tari_epoch_oracles", + "tari_indexer_lib", + "tari_networking", + "tari_template_lib", + "tari_template_manager", + "tari_transaction", + "thiserror 1.0.69", + "tokio", + "toml 0.8.20", + "url", +] + +[[package]] +name = "tari_dan_common_types" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "borsh", + "ethnum", + "indexmap 2.7.1", + "libp2p-identity", + "newtype-ops", + "prost 0.12.6", + "prost-types 0.9.0", + "rand 0.8.5", + "serde", + "tari_bor", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_engine_types", + "tari_hashing 1.7.0-pre.3", + "tari_mmr 1.7.0-pre.3", + "tari_template_lib", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_dan_engine" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "blake2", + "cargo_toml 0.20.5", + "d3ne", + "indexmap 2.7.1", + "log", + "rand 0.8.5", + "semver", + "serde", + "serde_json", + "tari_bor", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_dan_common_types", + "tari_engine_types", + "tari_template_abi", + "tari_template_builtin", + "tari_template_lib", + "tari_transaction", + "tari_utilities", + "tempfile", + "thiserror 1.0.69", + "wasmer", + "wasmer-middlewares", +] + +[[package]] +name = "tari_dan_p2p" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "prost 0.12.6", + "proto_builder", + "serde", + "tari_bor", + "tari_common_types 1.7.0-pre.3", + "tari_consensus", + "tari_crypto", + "tari_dan_common_types", + "tari_dan_storage", + "tari_engine_types", + "tari_jellyfish", + "tari_networking", + "tari_template_lib", + "tari_transaction", +] + +[[package]] +name = "tari_dan_storage" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "borsh", + "chrono", + "indexmap 2.7.1", + "log", + "rand 0.8.5", + "serde", + "strum 0.26.3", + "strum_macros 0.26.4", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_dan_common_types", + "tari_engine_types", + "tari_hashing 1.7.0-pre.3", + "tari_sidechain", + "tari_state_tree", + "tari_template_lib", + "tari_transaction", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "tari_dan_storage_sqlite" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "chrono", + "diesel", + "diesel_migrations", + "log", + "serde", + "serde_json", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_storage", + "tari_engine_types", + "tari_template_lib", + "tari_utilities", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_dan_wallet_crypto" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "blake2", + "chacha20poly1305", + "digest", + "rand 0.8.5", + "tari_crypto", + "tari_engine_types", + "tari_hashing 1.7.0-pre.3", + "tari_template_lib", + "tari_utilities", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "tari_dan_wallet_daemon" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "axum 0.6.20", + "axum-jrpc 0.3.2", + "base64 0.20.0", + "clap 3.2.25", + "config", + "either", + "futures 0.3.31", + "humantime-serde", + "include_dir", + "libsqlite3-sys", + "log", + "log4rs", + "mime_guess", + "minotari_app_utilities", + "rand 0.8.5", + "reqwest 0.11.27", + "serde", + "serde_json", + "tari_bor", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_dan_app_utilities", + "tari_dan_common_types", + "tari_dan_wallet_crypto", + "tari_dan_wallet_sdk", + "tari_dan_wallet_storage_sqlite", + "tari_engine_types", + "tari_indexer_client", + "tari_key_manager 1.7.0-pre.3", + "tari_shutdown 1.7.0-pre.3", + "tari_template_abi", + "tari_template_builtin", + "tari_template_lib", + "tari_transaction", + "tari_wallet_daemon_client", + "thiserror 1.0.69", + "tokio", + "tower-http 0.4.4", + "url", + "webrtc", +] + +[[package]] +name = "tari_dan_wallet_sdk" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "async-trait", + "blake2", + "chrono", + "digest", + "jsonwebtoken 8.3.0", + "log", + "serde", + "tari_bor", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_dan_common_types", + "tari_dan_storage", + "tari_dan_wallet_crypto", + "tari_engine_types", + "tari_key_manager 1.7.0-pre.3", + "tari_template_abi", + "tari_template_builtin", + "tari_template_lib", + "tari_transaction", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_dan_wallet_storage_sqlite" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "bigdecimal", + "chrono", + "diesel", + "diesel_migrations", "libsqlite3-sys", "log", - "log4rs", - "minotari_node_grpc_client", - "minotari_wallet_grpc_client", - "monero-address-creator", - "nix 0.29.0", - "nvml-wrapper", - "open", - "openssl", - "phraze", - "rand 0.8.5", - "regex", - "reqwest", - "reqwest-middleware", - "reqwest-retry", - "ring", - "ring-compat", - "sanitize-filename", - "semver", "serde", - "serde_cbor", "serde_json", - "serde_yaml", - "sha2", - "sys-locale", - "sysinfo", - "tar", - "tari_common", - "tari_common_types", - "tari_core", - "tari_crypto", - "tari_key_manager", - "tari_shutdown", + "tari_bor", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_storage", + "tari_dan_wallet_sdk", + "tari_engine_types", + "tari_template_lib", + "tari_transaction", "tari_utilities", - "tauri", - "tauri-build", - "tauri-plugin-cli", - "tauri-plugin-clipboard-manager", - "tauri-plugin-os", - "tauri-plugin-process", - "tauri-plugin-sentry", - "tauri-plugin-shell", - "tauri-plugin-single-instance", - "tauri-plugin-updater", - "thiserror 2.0.10", - "tokio", - "tokio-util 0.7.13", - "tonic", - "urlencoding", - "winreg 0.52.0", - "xz2", - "zip", ] [[package]] -name = "tari_bulletproofs_plus" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eac57729e3b003c18e822c64c8c4977770102b2eaea920a7c40bca5caf12c54" +name = "tari_engine_types" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ + "base64 0.21.7", "blake2", - "byteorder", - "curve25519-dalek", + "borsh", "digest", - "ff", - "itertools 0.12.1", - "merlin", - "once_cell", - "rand_core 0.6.4", + "hex", + "indexmap 2.7.1", + "lazy_static", + "rand 0.8.5", "serde", - "sha3", - "thiserror-no-std", - "zeroize", + "serde_json", + "tari_bor", + "tari_common 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_hashing 1.7.0-pre.3", + "tari_template_abi", + "tari_template_lib", + "thiserror 1.0.69", ] [[package]] -name = "tari_common" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "tari_epoch_manager" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ "anyhow", - "config", - "dirs-next", "log", - "log4rs", - "multiaddr", - "path-clean", - "prost-build 0.11.9", "serde", - "serde_json", - "serde_yaml", - "sha2", - "structopt", - "tari_features", - "tempfile", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_storage", + "tari_dan_storage_sqlite", + "tari_engine_types", + "tari_shutdown 1.7.0-pre.3", + "tari_sidechain", "thiserror 1.0.69", - "toml 0.5.11", + "tokio", + "url", ] [[package]] -name = "tari_common_sqlite" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "tari_epoch_oracles" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ - "diesel", - "diesel_migrations", + "anyhow", "log", "serde", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_storage", + "tari_dan_storage_sqlite", + "tari_engine_types", + "tari_epoch_manager", + "tari_template_lib", "tari_utilities", "thiserror 1.0.69", "tokio", ] [[package]] -name = "tari_common_types" +name = "tari_features" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" + +[[package]] +name = "tari_features" version = "1.11.0-pre.0" source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" + +[[package]] +name = "tari_hashing" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "base64 0.21.7", - "bitflags 2.7.0", "blake2", "borsh", - "bs58 0.5.1", - "chacha20poly1305", "digest", - "minotari_ledger_wallet_common", - "newtype-ops", - "once_cell", - "primitive-types", - "rand 0.8.5", - "serde", - "strum", - "strum_macros", - "tari_common", "tari_crypto", - "tari_utilities", - "thiserror 1.0.69", ] [[package]] -name = "tari_comms" +name = "tari_hashing" version = "1.11.0-pre.0" source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +dependencies = [ + "borsh", + "digest", + "tari_crypto", +] + +[[package]] +name = "tari_indexer_client" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ "anyhow", + "multiaddr 0.18.1", + "reqwest 0.11.27", + "serde", + "serde_json", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_storage", + "tari_engine_types", + "tari_template_abi", + "tari_transaction", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_indexer_lib" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ "async-trait", - "bitflags 2.7.0", - "blake2", - "bytes 1.9.0", - "chrono", - "cidr", - "data-encoding", - "derivative", - "digest", "futures 0.3.31", - "lmdb-zero", "log", - "log-mdc", - "multiaddr", - "nom", - "once_cell", - "pin-project 1.1.8", - "prost 0.13.4", "rand 0.8.5", "serde", - "serde_derive", - "sha3", - "snow", - "tari_common", - "tari_crypto", - "tari_shutdown", - "tari_storage", - "tari_utilities", + "tari_dan_common_types", + "tari_dan_storage", + "tari_engine_types", + "tari_epoch_manager", + "tari_template_lib", + "tari_transaction", + "tari_validator_node_rpc", "thiserror 1.0.69", "tokio", - "tokio-stream", - "tokio-util 0.6.10", - "tower 0.4.13", - "tracing", - "yamux", - "zeroize", ] [[package]] -name = "tari_comms_dht" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "tari_jellyfish" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "anyhow", - "bitflags 2.7.0", + "borsh", + "digest", + "indexmap 2.7.1", + "serde", + "tari_crypto", + "tari_hashing 1.7.0-pre.3", + "thiserror 2.0.11", +] + +[[package]] +name = "tari_key_manager" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "argon2", + "async-trait", "blake2", "chacha20 0.7.3", "chacha20poly1305", "chrono", + "crc32fast", + "derivative", "diesel", "diesel_migrations", "digest", "futures 0.3.31", "log", - "log-mdc", - "pin-project 0.4.30", - "prost 0.13.4", "rand 0.8.5", "serde", - "tari_common", - "tari_common_sqlite", - "tari_comms", - "tari_comms_rpc_macros", + "strum 0.22.0", + "strum_macros 0.22.0", + "subtle", + "tari_common_sqlite 1.7.0-pre.3", + "tari_common_types 1.7.0-pre.3", "tari_crypto", - "tari_shutdown", - "tari_storage", + "tari_service_framework 1.7.0-pre.3", "tari_utilities", "thiserror 1.0.69", "tokio", - "tower 0.4.13", "zeroize", ] [[package]] -name = "tari_comms_rpc_macros" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tari_core" +name = "tari_key_manager" version = "1.11.0-pre.0" source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" dependencies = [ - "anyhow", + "argon2", "async-trait", - "bincode", - "bitflags 2.7.0", "blake2", - "borsh", - "bytes 0.5.6", + "chacha20 0.7.3", "chacha20poly1305", "chrono", - "decimal-rs", + "crc32fast", "derivative", + "diesel", + "diesel_migrations", "digest", - "dirs-next", - "fs2", "futures 0.3.31", - "hex", - "hickory-client", - "hickory-proto", - "integer-encoding", - "lmdb-zero", "log", - "log-mdc", - "monero", - "newtype-ops", - "num-derive", - "num-format", - "num-traits", - "once_cell", - "primitive-types", - "prost 0.13.4", "rand 0.8.5", - "randomx-rs", "serde", - "serde_json", - "serde_repr", - "sha2", - "sha3", - "strum", - "strum_macros", - "tari-tiny-keccak", - "tari_common", - "tari_common_sqlite", - "tari_common_types", - "tari_comms", - "tari_comms_dht", - "tari_comms_rpc_macros", + "strum 0.22.0", + "strum_macros 0.22.0", + "subtle", + "tari_common_sqlite 1.11.0-pre.0", + "tari_common_types 1.11.0-pre.0", "tari_crypto", - "tari_features", - "tari_hashing", - "tari_key_manager", - "tari_max_size", - "tari_mmr", - "tari_p2p", - "tari_script", - "tari_service_framework", - "tari_shutdown", - "tari_storage", - "tari_test_utils", + "tari_service_framework 1.11.0-pre.0", "tari_utilities", "thiserror 1.0.69", "tokio", - "tracing", "zeroize", ] [[package]] -name = "tari_crypto" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c126518e7d09ec8a95de51921c17430b85b3a729375310326bb95cfaa1d12b" +name = "tari_max_size" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "blake2", "borsh", - "curve25519-dalek", - "digest", - "log", - "merlin", - "once_cell", - "rand_chacha 0.3.1", - "rand_core 0.6.4", "serde", - "sha3", - "snafu", - "subtle", - "tari_bulletproofs_plus", "tari_utilities", - "zeroize", + "thiserror 1.0.69", ] [[package]] -name = "tari_features" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" - -[[package]] -name = "tari_hashing" +name = "tari_max_size" version = "1.11.0-pre.0" source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" dependencies = [ "borsh", - "digest", - "tari_crypto", + "serde", + "tari_utilities", + "thiserror 1.0.69", ] [[package]] -name = "tari_key_manager" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "tari_mmr" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" dependencies = [ - "argon2", - "async-trait", - "blake2", - "chacha20 0.7.3", - "chacha20poly1305", - "chrono", - "crc32fast", - "derivative", - "diesel", - "diesel_migrations", + "borsh", "digest", - "futures 0.3.31", "log", - "rand 0.8.5", "serde", - "strum", - "strum_macros", - "subtle", - "tari_common_sqlite", - "tari_common_types", "tari_crypto", - "tari_service_framework", "tari_utilities", "thiserror 1.0.69", - "tokio", - "zeroize", ] [[package]] -name = "tari_max_size" +name = "tari_mmr" version = "1.11.0-pre.0" source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" dependencies = [ "borsh", + "digest", + "log", "serde", + "tari_crypto", "tari_utilities", "thiserror 1.0.69", ] [[package]] -name = "tari_mmr" -version = "1.11.0-pre.0" -source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff43680ac9eacada86621aee873149d86175ad" +name = "tari_networking" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" dependencies = [ - "borsh", - "digest", + "anyhow", + "async-trait", + "libp2p", + "log", + "rand 0.8.5", + "tari_rpc_framework", + "tari_shutdown 1.7.0-pre.3", + "tari_swarm", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tari_p2p" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "anyhow", + "fs2", + "futures 0.3.31", + "hickory-client", + "hickory-resolver 0.25.0-alpha.2", + "lmdb-zero", "log", + "prost 0.13.5", + "rand 0.8.5", + "rustls 0.23.23", "serde", + "tari_common 1.7.0-pre.3", + "tari_comms 1.7.0-pre.3", + "tari_comms_dht 1.7.0-pre.3", "tari_crypto", + "tari_service_framework 1.7.0-pre.3", + "tari_shutdown 1.7.0-pre.3", + "tari_storage 1.7.0-pre.3", "tari_utilities", "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tower 0.4.13", + "webpki-roots", ] [[package]] @@ -7579,21 +11601,21 @@ dependencies = [ "fs2", "futures 0.3.31", "hickory-client", - "hickory-proto", - "hickory-resolver", + "hickory-proto 0.25.0-alpha.2", + "hickory-resolver 0.25.0-alpha.2", "lmdb-zero", "log", - "prost 0.13.4", + "prost 0.13.5", "rand 0.8.5", - "rustls", + "rustls 0.23.23", "serde", - "tari_common", - "tari_comms", - "tari_comms_dht", + "tari_common 1.11.0-pre.0", + "tari_comms 1.11.0-pre.0", + "tari_comms_dht 1.11.0-pre.0", "tari_crypto", - "tari_service_framework", - "tari_shutdown", - "tari_storage", + "tari_service_framework 1.11.0-pre.0", + "tari_shutdown 1.11.0-pre.0", + "tari_storage 1.11.0-pre.0", "tari_utilities", "thiserror 1.0.69", "tokio", @@ -7602,6 +11624,58 @@ dependencies = [ "webpki-roots", ] +[[package]] +name = "tari_rpc_framework" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "async-trait", + "bitflags 2.8.0", + "bytes 1.10.0", + "futures 0.3.31", + "libp2p", + "libp2p-substream", + "log", + "pin-project 1.1.9", + "prost 0.12.6", + "prost-build 0.12.6", + "proto_builder", + "tari_shutdown 1.7.0-pre.3", + "thiserror 1.0.69", + "tokio", + "tokio-util 0.7.13", + "tower 0.4.13", + "tracing", +] + +[[package]] +name = "tari_rpc_macros" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tari_script" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "blake2", + "borsh", + "digest", + "integer-encoding", + "serde", + "sha2", + "sha3", + "tari_crypto", + "tari_max_size 1.7.0-pre.3", + "tari_utilities", + "thiserror 1.0.69", +] + [[package]] name = "tari_script" version = "1.11.0-pre.0" @@ -7615,11 +11689,26 @@ dependencies = [ "sha2", "sha3", "tari_crypto", - "tari_max_size", + "tari_max_size 1.11.0-pre.0", "tari_utilities", "thiserror 1.0.69", ] +[[package]] +name = "tari_service_framework" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "anyhow", + "async-trait", + "futures 0.3.31", + "log", + "tari_shutdown 1.7.0-pre.3", + "thiserror 1.0.69", + "tokio", + "tower-service", +] + [[package]] name = "tari_service_framework" version = "1.11.0-pre.0" @@ -7629,12 +11718,20 @@ dependencies = [ "async-trait", "futures 0.3.31", "log", - "tari_shutdown", + "tari_shutdown 1.11.0-pre.0", "thiserror 1.0.69", "tokio", "tower-service", ] +[[package]] +name = "tari_shutdown" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "futures 0.3.31", +] + [[package]] name = "tari_shutdown" version = "1.11.0-pre.0" @@ -7643,6 +11740,49 @@ dependencies = [ "futures 0.3.31", ] +[[package]] +name = "tari_sidechain" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "borsh", + "log", + "serde", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_hashing 1.7.0-pre.3", + "tari_jellyfish", + "tari_utilities", + "thiserror 2.0.11", +] + +[[package]] +name = "tari_state_tree" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "log", + "serde", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_engine_types", + "tari_jellyfish", + "tari_template_lib", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_storage" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "bincode", + "lmdb-zero", + "log", + "serde", + "thiserror 1.0.69", +] + [[package]] name = "tari_storage" version = "1.11.0-pre.0" @@ -7655,6 +11795,109 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "tari_swarm" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "libp2p", + "libp2p-messaging", + "libp2p-peersync", + "libp2p-substream", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_template_abi" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "serde", + "tari_bor", +] + +[[package]] +name = "tari_template_builtin" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "tari_engine_types", +] + +[[package]] +name = "tari_template_lib" +version = "0.9.0" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "borsh", + "newtype-ops", + "serde", + "serde_with", + "tari_bor", + "tari_template_abi", + "tari_template_macros", +] + +[[package]] +name = "tari_template_macros" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "tari_bor", + "tari_template_abi", +] + +[[package]] +name = "tari_template_manager" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "bytes 1.10.0", + "chrono", + "dashmap 5.5.3", + "futures 0.3.31", + "log", + "mini-moka", + "reqwest 0.11.27", + "serde", + "serde_json", + "std-semaphore", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_engine", + "tari_dan_p2p", + "tari_dan_storage", + "tari_dan_storage_sqlite", + "tari_engine_types", + "tari_epoch_manager", + "tari_rpc_framework", + "tari_shutdown 1.7.0-pre.3", + "tari_template_builtin", + "tari_template_lib", + "tari_validator_node_client", + "tari_validator_node_rpc", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tari_test_utils" +version = "1.7.0-pre.3" +source = "git+https://github.com/tari-project/tari.git?branch=feature-dan2#2c16abe22556cafa458b88a0f7546c740ab73fed" +dependencies = [ + "futures 0.3.31", + "rand 0.8.5", + "tari_comms 1.7.0-pre.3", + "tari_shutdown 1.7.0-pre.3", + "tempfile", + "tokio", +] + [[package]] name = "tari_test_utils" version = "1.11.0-pre.0" @@ -7662,12 +11905,29 @@ source = "git+https://github.com/tari-project/tari.git?tag=v1.11.0-pre.0#36ff436 dependencies = [ "futures 0.3.31", "rand 0.8.5", - "tari_comms", - "tari_shutdown", + "tari_comms 1.11.0-pre.0", + "tari_shutdown 1.11.0-pre.0", "tempfile", "tokio", ] +[[package]] +name = "tari_transaction" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "borsh", + "indexmap 2.7.1", + "log", + "rand 0.8.5", + "serde", + "tari_common_types 1.7.0-pre.3", + "tari_crypto", + "tari_dan_common_types", + "tari_engine_types", + "tari_template_lib", +] + [[package]] name = "tari_utilities" version = "0.8.0" @@ -7687,15 +11947,75 @@ dependencies = [ "zeroize", ] +[[package]] +name = "tari_validator_node_client" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "multiaddr 0.18.1", + "reqwest 0.11.27", + "serde", + "serde_json", + "tari_base_node_client", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_storage", + "tari_engine_types", + "tari_transaction", + "thiserror 1.0.69", +] + +[[package]] +name = "tari_validator_node_rpc" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "anyhow", + "async-trait", + "prost 0.12.6", + "proto_builder", + "serde", + "tari_bor", + "tari_dan_common_types", + "tari_dan_p2p", + "tari_dan_storage", + "tari_engine_types", + "tari_networking", + "tari_rpc_framework", + "tari_rpc_macros", + "tari_transaction", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "tari_wallet_daemon_client" +version = "0.8.2" +source = "git+https://github.com/tari-project/tari-dan.git?branch=development#9a0747d6d56e70179f78d2e0fd65be08433dcfea" +dependencies = [ + "chrono", + "reqwest 0.11.27", + "serde", + "serde_json", + "tari_common_types 1.7.0-pre.3", + "tari_dan_common_types", + "tari_dan_wallet_sdk", + "tari_engine_types", + "tari_template_abi", + "tari_template_lib", + "tari_transaction", + "thiserror 1.0.69", +] + [[package]] name = "tauri" -version = "2.2.0" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e2e3349fbb2be7af9fad1b43d61ac83ba55ab48d47fbe1b2732f0c8211610a9" +checksum = "58a998b6be84104ca05c7e9a21f2180ddec020c8b84ea59a8fc8530a2a19588d" dependencies = [ "anyhow", - "bytes 1.9.0", - "dirs 5.0.1", + "bytes 1.10.0", + "dirs 6.0.0", "dunce", "embed_plist", "futures-util", @@ -7703,7 +12023,7 @@ dependencies = [ "glob", "gtk", "heck 0.5.0", - "http", + "http 1.2.0", "image", "jni", "libc", @@ -7716,7 +12036,7 @@ dependencies = [ "percent-encoding", "plist", "raw-window-handle", - "reqwest", + "reqwest 0.12.12", "serde", "serde_json", "serde_repr", @@ -7727,7 +12047,7 @@ dependencies = [ "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "thiserror 2.0.10", + "thiserror 2.0.11", "tokio", "tray-icon", "url", @@ -7741,12 +12061,12 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b274ec7239ada504deb615f1c8abd7ba99631e879709e6f10e5d17217058d976" +checksum = "8e950124f6779c6cf98e3260c7a6c8488a74aa6350dd54c6950fdaa349bca2df" dependencies = [ "anyhow", - "cargo_toml", + "cargo_toml 0.21.0", "dirs 5.0.1", "glob", "heck 0.5.0", @@ -7758,7 +12078,7 @@ dependencies = [ "tauri-codegen", "tauri-utils", "tauri-winres", - "toml 0.8.19", + "toml 0.8.20", "walkdir", ] @@ -7780,9 +12100,9 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.96", + "syn 2.0.98", "tauri-utils", - "thiserror 2.0.10", + "thiserror 2.0.11", "time", "url", "uuid", @@ -7798,7 +12118,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "tauri-codegen", "tauri-utils", ] @@ -7816,7 +12136,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "toml 0.8.19", + "toml 0.8.20", "walkdir", ] @@ -7826,20 +12146,20 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5458ae16eac81bdbe8d9da2a9f3e01e8cdedbc381cc1727c01127542c8a61c5" dependencies = [ - "clap 4.5.26", + "clap 4.5.29", "log", "serde", "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.10", + "thiserror 2.0.11", ] [[package]] name = "tauri-plugin-clipboard-manager" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be2c6f5d82396c1a86d5b16052cc97976a82e92244bf074dd6e2f6272d8619d" +checksum = "54de1e3a2ea008687954d5d72952800e87b09f6fbea6d0960d99e58050537642" dependencies = [ "arboard", "log", @@ -7847,7 +12167,48 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.10", + "thiserror 2.0.11", +] + +[[package]] +name = "tauri-plugin-dialog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b59fd750551b1066744ab956a1cd6b1ea3e1b3763b0b9153ac27a044d596426" +dependencies = [ + "log", + "raw-window-handle", + "rfd", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror 2.0.11", + "url", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1edf18000f02903a7c2e5997fb89aca455ecbc0acc15c6535afbb883be223" +dependencies = [ + "anyhow", + "dunce", + "glob", + "percent-encoding", + "schemars", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.11", + "toml 0.8.20", + "url", + "uuid", ] [[package]] @@ -7865,7 +12226,7 @@ dependencies = [ "sys-locale", "tauri", "tauri-plugin", - "thiserror 2.0.10", + "thiserror 2.0.11", ] [[package]] @@ -7891,7 +12252,7 @@ dependencies = [ "serde", "tauri", "tauri-plugin", - "thiserror 2.0.10", + "thiserror 2.0.11", ] [[package]] @@ -7911,20 +12272,20 @@ dependencies = [ "shared_child", "tauri", "tauri-plugin", - "thiserror 2.0.10", + "thiserror 2.0.11", "tokio", ] [[package]] name = "tauri-plugin-single-instance" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f36019ee9832dc99e4450bb55a21cfad8633b19c2c18bd17c7741939b070ede" +checksum = "47c387d4d96690131dc46d1d2827df5c222b896a2bfeb15a16267229a55c50b5" dependencies = [ "serde", "serde_json", "tauri", - "thiserror 2.0.10", + "thiserror 2.0.11", "tracing", "windows-sys 0.59.0", "zbus", @@ -7932,19 +12293,20 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2d39224390c41ba544f02b4f1721f42256320b3fb8c371e9425cbddeb4a68c" +checksum = "ebf3da08c36fb03c98c76e5563d4e74d9a590df0f40978cbe07f39cb52833f7c" dependencies = [ "base64 0.22.1", - "dirs 5.0.1", + "dirs 6.0.0", "flate2", "futures-util", - "http", + "http 1.2.0", "infer", "minisign-verify", + "osakit", "percent-encoding", - "reqwest", + "reqwest 0.12.12", "semver", "serde", "serde_json", @@ -7952,7 +12314,7 @@ dependencies = [ "tauri", "tauri-plugin", "tempfile", - "thiserror 2.0.10", + "thiserror 2.0.11", "time", "tokio", "url", @@ -7968,13 +12330,13 @@ checksum = "2274ef891ccc0a8d318deffa9d70053f947664d12d58b9c0d1ae5e89237e01f7" dependencies = [ "dpi", "gtk", - "http", + "http 1.2.0", "jni", "raw-window-handle", "serde", "serde_json", "tauri-utils", - "thiserror 2.0.10", + "thiserror 2.0.11", "url", "windows 0.58.0", ] @@ -7986,7 +12348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3707b40711d3b9f6519150869e358ffbde7c57567fb9b5a8b51150606939b2a0" dependencies = [ "gtk", - "http", + "http 1.2.0", "jni", "log", "objc2", @@ -8013,13 +12375,13 @@ checksum = "96fb10e7cc97456b2d5b9c03e335b5de5da982039a303a20d10006885e4523a0" dependencies = [ "aes-gcm", "brotli", - "cargo_metadata", + "cargo_metadata 0.19.1", "ctor", "dunce", "getrandom 0.2.15", "glob", "html5ever", - "http", + "http 1.2.0", "infer", "json-patch", "kuchikiki", @@ -8037,8 +12399,8 @@ dependencies = [ "serde_with", "serialize-to-javascript", "swift-rs", - "thiserror 2.0.10", - "toml 0.8.19", + "thiserror 2.0.11", + "toml 0.8.20", "url", "urlpattern", "uuid", @@ -8057,13 +12419,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.15.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", - "getrandom 0.2.15", + "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -8080,15 +12442,30 @@ dependencies = [ "utf-8", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", ] +[[package]] +name = "textwrap" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" + [[package]] name = "thin-slice" version = "0.1.1" @@ -8106,11 +12483,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" dependencies = [ - "thiserror-impl 2.0.10", + "thiserror-impl 2.0.11", ] [[package]] @@ -8121,18 +12498,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "thiserror-impl" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8248,7 +12625,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", - "bytes 1.9.0", + "bytes 1.10.0", "libc", "mio", "parking_lot 0.12.3", @@ -8256,6 +12633,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "windows-sys 0.52.0", ] @@ -8267,7 +12645,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8286,7 +12664,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls", + "rustls 0.23.23", "tokio", ] @@ -8308,7 +12686,7 @@ version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "futures-core", "futures-io", "futures-sink", @@ -8323,7 +12701,7 @@ version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ - "bytes 1.9.0", + "bytes 1.10.0", "futures-core", "futures-io", "futures-sink", @@ -8354,14 +12732,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.22", + "toml_edit 0.22.24", ] [[package]] @@ -8379,7 +12757,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -8392,22 +12770,22 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.22", + "winnow 0.7.2", ] [[package]] @@ -8418,20 +12796,20 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum", + "axum 0.7.9", "base64 0.22.1", - "bytes 1.9.0", - "h2", - "http", - "http-body", + "bytes 1.10.0", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", - "hyper", + "hyper 1.6.0", "hyper-timeout", "hyper-util", "percent-encoding", - "pin-project 1.1.8", - "prost 0.13.4", - "rustls-pemfile", + "pin-project 1.1.9", + "prost 0.13.5", + "rustls-pemfile 2.2.0", "socket2", "tokio", "tokio-rustls", @@ -8448,12 +12826,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" dependencies = [ - "prettyplease 0.2.27", + "prettyplease 0.2.29", "proc-macro2", - "prost-build 0.13.4", - "prost-types 0.13.4", + "prost-build 0.13.5", + "prost-types 0.13.5", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8466,7 +12844,7 @@ dependencies = [ "futures-util", "hdrhistogram", "indexmap 1.9.3", - "pin-project 1.1.8", + "pin-project 1.1.9", "pin-project-lite", "rand 0.8.5", "slab", @@ -8486,10 +12864,55 @@ dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +dependencies = [ + "bitflags 2.8.0", + "bytes 1.10.0", + "futures-core", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "http-range-header 0.3.1", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags 2.8.0", + "bytes 1.10.0", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "http-range-header 0.4.2", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", "tokio", + "tokio-util 0.7.13", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -8524,7 +12947,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8567,12 +12990,38 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "triomphe" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" + [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "turn" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb2ac4f331064513ad510b7a36edc0df555bd61672986607f7c9ff46f98f415" +dependencies = [ + "async-trait", + "base64 0.21.7", + "futures 0.3.31", + "log", + "md-5", + "rand 0.8.5", + "ring 0.17.9", + "stun", + "thiserror 1.0.69", + "tokio", + "tokio-util 0.7.13", + "webrtc-util", +] + [[package]] name = "typeid" version = "1.0.2" @@ -8594,6 +13043,12 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + [[package]] name = "uds" version = "0.4.2" @@ -8609,7 +13064,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ - "memoffset", + "memoffset 0.9.1", "tempfile", "winapi", ] @@ -8690,9 +13145,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-normalization" @@ -8715,6 +13170,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -8752,6 +13213,18 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" @@ -8827,19 +13300,25 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.3.1", "serde", ] [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "value-bag" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" [[package]] name = "vcpkg" @@ -8847,6 +13326,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version-compare" version = "0.2.0" @@ -8860,176 +13345,442 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "vswhom" -version = "0.1.0" +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "vte" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" +dependencies = [ + "memchr", +] + +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.98", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures 0.3.31", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmer" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +checksum = "2d920d06243e9f456c336c428a34560357dedf59d9febaae14f1995ac120cff6" dependencies = [ - "libc", - "vswhom-sys", + "bytes 1.10.0", + "cfg-if", + "derivative", + "indexmap 1.9.3", + "js-sys", + "more-asserts", + "rustc-demangle", + "serde", + "serde-wasm-bindgen", + "shared-buffer", + "target-lexicon", + "thiserror 1.0.69", + "tracing", + "wasm-bindgen", + "wasmer-compiler", + "wasmer-compiler-cranelift", + "wasmer-derive", + "wasmer-types", + "wasmer-vm", + "wat", + "windows-sys 0.59.0", ] [[package]] -name = "vswhom-sys" -version = "0.1.2" +name = "wasmer-compiler" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +checksum = "0e01832173aa52345e480965f18c638a8a5a9e5e4d85a48675bdf1964147dc7f" dependencies = [ - "cc", + "backtrace", + "bytes 1.10.0", + "cfg-if", + "enum-iterator", + "enumset", + "lazy_static", + "leb128", "libc", + "memmap2 0.6.2", + "more-asserts", + "region", + "rkyv", + "self_cell", + "shared-buffer", + "smallvec 1.13.2", + "thiserror 1.0.69", + "wasmer-types", + "wasmer-vm", + "wasmparser", + "windows-sys 0.59.0", + "xxhash-rust", ] [[package]] -name = "vte" -version = "0.11.1" +name = "wasmer-compiler-cranelift" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" +checksum = "1c1618f53b492cf6649beeb372930e376e0f52d9842c0c5eb5aa2b548251dab6" dependencies = [ - "utf8parse", - "vte_generate_state_changes", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "gimli 0.26.2", + "more-asserts", + "rayon", + "smallvec 1.13.2", + "target-lexicon", + "tracing", + "wasmer-compiler", + "wasmer-types", ] [[package]] -name = "vte_generate_state_changes" -version = "0.1.2" +name = "wasmer-derive" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" +checksum = "9c5875633aea92153b6a561cb07363785ca9e07792ca6cd7c1cc371761001d8f" dependencies = [ + "proc-macro-error", "proc-macro2", "quote", + "syn 1.0.109", ] [[package]] -name = "walkdir" -version = "2.5.0" +name = "wasmer-middlewares" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +checksum = "b88a9e1deb02d6547ac672ffcea9fd0c63d725047883282a8b2a297a4819bd81" dependencies = [ - "same-file", - "winapi-util", + "wasmer", + "wasmer-types", + "wasmer-vm", ] [[package]] -name = "want" -version = "0.3.1" +name = "wasmer-types" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "8fb32f0d231b591e4c8a65e81d4647fa3180496d71a123d4948dba8551bba9c2" dependencies = [ - "try-lock", + "bytecheck", + "enum-iterator", + "enumset", + "getrandom 0.2.15", + "hex", + "indexmap 1.9.3", + "more-asserts", + "rkyv", + "sha2", + "target-lexicon", + "thiserror 1.0.69", + "xxhash-rust", ] [[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +name = "wasmer-vm" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "e38e9301f5bb9f18da9cda4002d74d2cb6ac1f36dcf919fd77f91fca321fb1e5" +dependencies = [ + "backtrace", + "cc", + "cfg-if", + "corosensei", + "crossbeam-queue", + "dashmap 6.1.0", + "derivative", + "enum-iterator", + "fnv", + "indexmap 1.9.3", + "lazy_static", + "libc", + "mach2", + "memoffset 0.9.1", + "more-asserts", + "region", + "scopeguard", + "thiserror 1.0.69", + "wasmer-types", + "windows-sys 0.59.0", +] [[package]] -name = "wasm-bindgen" -version = "0.2.99" +name = "wasmparser" +version = "0.121.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", + "bitflags 2.8.0", + "indexmap 2.7.1", + "semver", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.99" +name = "wast" +version = "64.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.96", - "wasm-bindgen-shared", + "leb128", + "memchr", + "unicode-width 0.1.14", + "wasm-encoder", ] [[package]] -name = "wasm-bindgen-futures" -version = "0.4.49" +name = "wat" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6" dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", + "wast", ] [[package]] -name = "wasm-bindgen-macro" -version = "0.2.99" +name = "wayland-backend" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" dependencies = [ - "quote", - "wasm-bindgen-macro-support", + "cc", + "downcast-rs", + "rustix", + "scoped-tls", + "smallvec 1.13.2", + "wayland-sys", ] [[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.99" +name = "wayland-client" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", - "wasm-bindgen-backend", - "wasm-bindgen-shared", + "bitflags 2.8.0", + "rustix", + "wayland-backend", + "wayland-scanner", ] [[package]] -name = "wasm-bindgen-shared" -version = "0.2.99" +name = "wayland-protocols" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" +dependencies = [ + "bitflags 2.8.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] [[package]] -name = "wasm-streams" -version = "0.4.2" +name = "wayland-scanner" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "proc-macro2", + "quick-xml 0.37.2", + "quote", ] [[package]] -name = "wasm-timer" -version = "0.2.5" +name = "wayland-sys" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" dependencies = [ - "futures 0.3.31", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "dlib", + "log", + "pkg-config", ] [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -9070,32 +13821,235 @@ dependencies = [ ] [[package]] -name = "webkit2gtk-sys" -version = "2.0.1" +name = "webkit2gtk-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki-roots" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webrtc" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91e7cf018f7185552bf6a5dd839f4ed9827aea33b746763c9a215f84a0d0b34" +dependencies = [ + "arc-swap", + "async-trait", + "bytes 1.10.0", + "cfg-if", + "hex", + "interceptor", + "lazy_static", + "log", + "rand 0.8.5", + "rcgen 0.11.3", + "regex", + "ring 0.16.20", + "rtcp", + "rtp 0.9.0", + "rustls 0.21.12", + "sdp", + "serde", + "serde_json", + "sha2", + "smol_str", + "stun", + "thiserror 1.0.69", + "time", + "tokio", + "turn", + "url", + "waitgroup", + "webrtc-data", + "webrtc-dtls", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "webrtc-data" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8c08e648e10572b9edbe741074e0f4d3cb221aa7cdf9a814ee71606de312f33" +dependencies = [ + "bytes 1.10.0", + "log", + "thiserror 1.0.69", + "tokio", + "webrtc-sctp", + "webrtc-util", +] + +[[package]] +name = "webrtc-dtls" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b140b953f986e97828aa33ec6318186b05d862bee689efbc57af04a243e832" +dependencies = [ + "aes", + "aes-gcm", + "async-trait", + "bincode", + "byteorder", + "cbc", + "ccm", + "der-parser 8.2.0", + "hkdf", + "hmac", + "log", + "p256", + "p384", + "rand 0.8.5", + "rand_core 0.6.4", + "rcgen 0.11.3", + "ring 0.16.20", + "rustls 0.21.12", + "sec1", + "serde", + "sha1", + "sha2", + "subtle", + "thiserror 1.0.69", + "tokio", + "webrtc-util", + "x25519-dalek", + "x509-parser 0.15.1", +] + +[[package]] +name = "webrtc-ice" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1bbd6b3dea22cc6e961e22b012e843d8869e2ac8e76b96e54d4a25e311857ad" +dependencies = [ + "arc-swap", + "async-trait", + "crc 3.2.1", + "log", + "rand 0.8.5", + "serde", + "serde_json", + "stun", + "thiserror 1.0.69", + "tokio", + "turn", + "url", + "uuid", + "waitgroup", + "webrtc-mdns", + "webrtc-util", +] + +[[package]] +name = "webrtc-mdns" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce981f93104a8debb3563bb0cedfe4aa2f351fdf6b53f346ab50009424125c08" +dependencies = [ + "log", + "socket2", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-media" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280017b6b9625ef7329146332518b339c3cceff231cc6f6a9e0e6acab25ca4af" +dependencies = [ + "byteorder", + "bytes 1.10.0", + "rand 0.8.5", + "rtp 0.10.0", + "thiserror 1.0.69", +] + +[[package]] +name = "webrtc-sctp" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +checksum = "df75ec042002fe995194712cbeb2029107a60a7eab646f1b789eb1be94d0e367" dependencies = [ - "bitflags 1.3.2", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", + "arc-swap", + "async-trait", + "bytes 1.10.0", + "crc 3.2.1", + "log", + "rand 0.8.5", + "thiserror 1.0.69", + "tokio", + "webrtc-util", ] [[package]] -name = "webpki-roots" -version = "0.26.7" +name = "webrtc-srtp" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "c1db1f36c1c81e4b1e531c0b9678ba0c93809e196ce62122d87259bb71c03b9f" dependencies = [ - "rustls-pki-types", + "aead", + "aes", + "aes-gcm", + "byteorder", + "bytes 1.10.0", + "ctr", + "hmac", + "log", + "rtcp", + "rtp 0.9.0", + "sha1", + "subtle", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-util" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e85154ef743d9a2a116d104faaaa82740a281b8b4bed5ee691a2df6c133d873" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "bytes 1.10.0", + "ipnet", + "lazy_static", + "libc", + "log", + "nix 0.26.4", + "rand 0.8.5", + "thiserror 1.0.69", + "tokio", + "winapi", ] [[package]] @@ -9120,7 +14074,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9191,9 +14145,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window-vibrancy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" +checksum = "831ad7678290beae36be6f9fad9234139c7f00f3b536347de7745621716be82d" dependencies = [ "objc2", "objc2-app-kit", @@ -9222,6 +14176,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +dependencies = [ + "windows-core 0.53.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.57.0" @@ -9242,6 +14206,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" +dependencies = [ + "windows-core 0.59.0", + "windows-targets 0.53.0", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -9251,6 +14225,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +dependencies = [ + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.57.0" @@ -9272,10 +14256,23 @@ dependencies = [ "windows-implement 0.58.0", "windows-interface 0.58.0", "windows-result 0.2.0", - "windows-strings", + "windows-strings 0.1.0", "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +dependencies = [ + "windows-implement 0.59.0", + "windows-interface 0.59.0", + "windows-result 0.3.0", + "windows-strings 0.3.0", + "windows-targets 0.53.0", +] + [[package]] name = "windows-implement" version = "0.57.0" @@ -9284,7 +14281,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9295,7 +14292,18 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "windows-implement" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -9306,7 +14314,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9317,7 +14325,18 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "windows-interface" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -9327,7 +14346,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result 0.2.0", - "windows-strings", + "windows-strings 0.1.0", "windows-targets 0.52.6", ] @@ -9349,6 +14368,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d08106ce80268c4067c0571ca55a9b4e9516518eaa1a1fe9b37ca403ae1d1a34" +dependencies = [ + "windows-targets 0.53.0", +] + [[package]] name = "windows-strings" version = "0.1.0" @@ -9359,6 +14387,28 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-strings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b888f919960b42ea4e11c2f408fadb55f78a9f236d5eef084103c8ce52893491" +dependencies = [ + "windows-targets 0.53.0", +] + +[[package]] +name = "windows-sys" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75" +dependencies = [ + "windows_aarch64_msvc 0.33.0", + "windows_i686_gnu 0.33.0", + "windows_i686_msvc 0.33.0", + "windows_x86_64_gnu 0.33.0", + "windows_x86_64_msvc 0.33.0", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -9490,6 +14540,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +[[package]] +name = "windows_aarch64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -9514,6 +14570,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +[[package]] +name = "windows_i686_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -9550,6 +14612,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +[[package]] +name = "windows_i686_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -9574,6 +14642,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +[[package]] +name = "windows_x86_64_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -9622,6 +14696,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +[[package]] +name = "windows_x86_64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -9657,9 +14737,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.22" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" dependencies = [ "memchr", ] @@ -9693,6 +14773,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + [[package]] name = "wrapcenum-derive" version = "0.4.1" @@ -9702,7 +14791,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9719,12 +14808,12 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "wry" -version = "0.48.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e644bf458e27b11b0ecafc9e5633d1304fdae82baca1d42185669752fe6ca4f" +checksum = "a2e33c08b174442ff80d5c791020696f9f8b4e4a87b8cfc7494aad6167ec44e1" dependencies = [ "base64 0.22.1", - "block2", + "block2 0.5.1", "cookie", "crossbeam-channel", "dpi", @@ -9732,7 +14821,7 @@ dependencies = [ "gdkx11", "gtk", "html5ever", - "http", + "http 1.2.0", "javascriptcore-rs", "jni", "kuchikiki", @@ -9749,7 +14838,7 @@ dependencies = [ "sha2", "soup3", "tao-macros", - "thiserror 2.0.10", + "thiserror 2.0.11", "url", "webkit2gtk", "webkit2gtk-sys", @@ -9807,6 +14896,53 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" +dependencies = [ + "asn1-rs 0.5.2", + "data-encoding", + "der-parser 8.2.0", + "lazy_static", + "nom", + "oid-registry 0.6.1", + "ring 0.16.20", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs 0.6.2", + "data-encoding", + "der-parser 9.0.0", + "lazy_static", + "nom", + "oid-registry 0.7.1", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + [[package]] name = "xattr" version = "1.4.0" @@ -9828,6 +14964,27 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "xml-rs" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" + [[package]] name = "xz2" version = "0.1.7" @@ -9837,6 +14994,32 @@ dependencies = [ "lzma-sys", ] +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + +[[package]] +name = "yamux" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" +dependencies = [ + "futures 0.3.31", + "log", + "nohash-hasher", + "parking_lot 0.12.3", + "pin-project 1.1.9", + "rand 0.8.5", + "static_assertions", +] + [[package]] name = "yamux" version = "0.13.4" @@ -9847,7 +15030,7 @@ dependencies = [ "log", "nohash-hasher", "parking_lot 0.12.3", - "pin-project 1.1.8", + "pin-project 1.1.9", "rand 0.8.5", "static_assertions", "web-time", @@ -9882,15 +15065,15 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure 0.13.1", ] [[package]] name = "zbus" -version = "4.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236" dependencies = [ "async-broadcast", "async-executor", @@ -9903,21 +15086,20 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener", + "event-listener 5.4.0", "futures-core", - "futures-sink", - "futures-util", + "futures-lite", "hex", "nix 0.29.0", "ordered-stream", - "rand 0.8.5", "serde", "serde_repr", - "sha1", "static_assertions", + "tokio", "tracing", "uds_windows", - "windows-sys 0.52.0", + "windows-sys 0.59.0", + "winnow 0.7.2", "xdg-home", "zbus_macros", "zbus_names", @@ -9926,25 +15108,28 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "4.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", + "zbus_names", + "zvariant", "zvariant_utils", ] [[package]] name = "zbus_names" -version = "3.0.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", + "winnow 0.7.2", "zvariant", ] @@ -9955,7 +15140,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79386d31a42a4996e3336b0919ddb90f81112af416270cff95b5f5af22b839c2" +dependencies = [ + "zerocopy-derive 0.8.18", ] [[package]] @@ -9966,7 +15160,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76331675d372f91bf8d17e13afbd5fe639200b73d01f0fc748bb059f9cca2db7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -9986,7 +15191,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -10007,7 +15212,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -10029,7 +15234,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -10048,13 +15253,13 @@ dependencies = [ "displaydoc", "flate2", "hmac", - "indexmap 2.7.0", + "indexmap 2.7.1", "lzma-rs", "memchr", "pbkdf2", "rand 0.8.5", "sha1", - "thiserror 2.0.10", + "thiserror 2.0.11", "time", "zeroize", "zopfli", @@ -10105,37 +15310,43 @@ dependencies = [ [[package]] name = "zvariant" -version = "4.2.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +checksum = "b2df9ee044893fcffbdc25de30546edef3e32341466811ca18421e3cd6c5a3ac" dependencies = [ "endi", "enumflags2", "serde", "static_assertions", + "url", + "winnow 0.7.2", "zvariant_derive", + "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "4.2.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "2.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "serde", + "static_assertions", + "syn 2.0.98", + "winnow 0.7.2", ] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 30435739f..6afd5dda1 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -17,10 +17,17 @@ anyhow = "1" async-trait = "0.1.81" async_zip = { version = "0.0.17", features = ["full"] } auto-launch = "0.5.0" +axum = "0.7.9" +axum-jrpc = "0.7.1" base64 = "0.22.1" blake2 = "0.10" +tari_dan_wallet_daemon = { git = "https://github.com/tari-project/tari-dan.git", branch = "development" } +tari_dan_app_utilities = { git = "https://github.com/tari-project/tari-dan.git", branch = "development" } +tari_wallet_daemon_client = { git = "https://github.com/tari-project/tari-dan.git", branch = "development" } chrono = "0.4.38" device_query = "2.1.0" +diesel = { version = "2.1.6", features = ["sqlite", "returning_clauses_for_sqlite_3_35"] } +diesel_migrations = { version = "2.1.0", features = ["sqlite"] } dunce = "1.0.5" dyn-clone = "1.0.17" fix-path-env = { git = "https://github.com/tauri-apps/fix-path-env-rs" } @@ -59,6 +66,7 @@ sys-locale = "0.3.1" sysinfo = "0.31.2" tar = "0.4.26" tari_common = { git = "https://github.com/tari-project/tari.git", tag = "v1.11.0-pre.0" } +tari_common_dan2 = { git = "https://github.com/tari-project/tari.git", branch = "feature-dan2", package = "tari_common"} tari_common_types = { git = "https://github.com/tari-project/tari.git", tag = "v1.11.0-pre.0" } tari_core = { git = "https://github.com/tari-project/tari.git", tag = "v1.11.0-pre.0", features = [ "transactions", @@ -67,6 +75,8 @@ tauri-plugin-single-instance = '2' tari_crypto = "0.21.0" tari_key_manager = { git = "https://github.com/tari-project/tari.git", tag = "v1.11.0-pre.0" } tari_shutdown = { git = "https://github.com/tari-project/tari.git", tag = "v1.11.0-pre.0" } +tari_shutdown_dan2 = { git = "https://github.com/tari-project/tari.git", branch = "feature-dan2", package = "tari_shutdown"} + tari_utilities = "0.8.0" tauri = { version = "2", features = [ "isolation", @@ -81,9 +91,11 @@ tauri-plugin-os = "2" tauri-plugin-sentry = "0.3" tauri-plugin-shell = "2" tauri-plugin-updater = "2" +tauri-plugin-dialog= "2" thiserror = "2.0.10" tokio = { version = "1", features = ["full"] } tokio-util = { version = "0.7.11", features = ["compat"] } +tower-http = { version = "0.5.2", features = ["fs", "trace"] } xz2 = { version = "0.1.7", features = ["static"] } # static bind lzma zip = "2.2.0" dirs = "5.0.1" diff --git a/src-tauri/binaries_versions_esmeralda.json b/src-tauri/binaries_versions_esmeralda.json index 757bb9d0d..76df3468e 100644 --- a/src-tauri/binaries_versions_esmeralda.json +++ b/src-tauri/binaries_versions_esmeralda.json @@ -6,6 +6,8 @@ "wallet": "=1.11.3-pre.0", "sha-p2pool": "=0.22.1", "xtrgpuminer": "=0.2.12", - "tor": "=13.5.7" + "tor": "=13.5.7", + "tari_indexer": "=0.7.0", + "tari_validator_node": "=0.7.0" } -} \ No newline at end of file +} diff --git a/src-tauri/binaries_versions_igor.json b/src-tauri/binaries_versions_igor.json new file mode 100644 index 000000000..106cb452e --- /dev/null +++ b/src-tauri/binaries_versions_igor.json @@ -0,0 +1,13 @@ +{ + "binaries": { + "xmrig": "=6.22.0", + "mmproxy": "=1.9.2-pre.0", + "minotari_node": "=1.9.2-pre.0", + "wallet": "=1.9.2-pre.0", + "sha-p2pool": "=0.20.0", + "xtrgpuminer": "=0.2.10", + "tor": "=13.5.7", + "tari_indexer": "=0.7.0", + "tari_validator_node": "=0.7.0" + } +} diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index e0357d6fe..0d8737a64 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -17,6 +17,8 @@ "sentry:default", "process:allow-restart", "process:default", - "clipboard-manager:allow-write-text" + "clipboard-manager:allow-write-text", + "dialog:allow-open", + "dialog:allow-confirm" ] } diff --git a/src-tauri/capabilities/desktop.json b/src-tauri/capabilities/desktop.json index d7ce6a382..8aecfeed4 100644 --- a/src-tauri/capabilities/desktop.json +++ b/src-tauri/capabilities/desktop.json @@ -12,4 +12,4 @@ "permissions": [ "updater:default" ] -} \ No newline at end of file +} diff --git a/src-tauri/capabilities/migrated.json b/src-tauri/capabilities/migrated.json index 157c8fae0..77bb3b9ec 100644 --- a/src-tauri/capabilities/migrated.json +++ b/src-tauri/capabilities/migrated.json @@ -11,4 +11,4 @@ "updater:default", "os:default" ] -} \ No newline at end of file +} diff --git a/src-tauri/contractnet_config.template.toml b/src-tauri/contractnet_config.template.toml new file mode 100644 index 000000000..4a0ec272a --- /dev/null +++ b/src-tauri/contractnet_config.template.toml @@ -0,0 +1,1163 @@ + +######################################################################################################################## +# # +# Common Configuration Options (CommonConfig, AutoUpdateConfig, MetricsConfig) # +# # +######################################################################################################################## + +[common] +#override_from="stagenet" +#base_path="/.tari" + +[stagenet.auto_update] +# Customize the hosts that are used to check for updates. These hosts must contain update information in DNS TXT records. +update_uris = ["updates.stagenet.taripulse.com"] + +[auto_update] +# Name server for auto update (default = "1.1.1.1:53/cloudflare.net") +#name_server = "1.1.1.1:53/cloudflare.net" + +# Customize the hosts that are used to check for updates. These hosts must contain update information in DNS TXT +# records. (default = []) +#update_uris = [] + +#use_dnssec = false + +#download_base_url = "" + +# Customize the location of the update SHA hashes and maintainer-signed signature. +#hashes_url = "https://
/hashes.txt" +#hashes_sig_url = "https://
/hashes.txt.sig" + +# This interval in seconds to check for software updates. Setting this to 0 disables checking. +check_interval = 300 + +[metrics] +# server_bind_address = "127.0.0.1:5577" +# push_endpoint = http://localhost:9091/metrics/job/base-node + + +######################################################################################################################## +# # +# Peer Seeds Configuration Options (PeerSeedsConfig) # +# # +######################################################################################################################## + +[p2p.seeds] +# DNS name servers to use for DNS seeds, in order of preference. +# (default: dns_seed_name_servers = [ +# "system", +# "1.1.1.1:853/cloudflare-dns.com", +# "8.8.8.8:853/dns.google", +# "9.9.9.9:853/dns.quad9.net" +#] +#dns_seed_name_servers = [ +# "system", +# "1.1.1.1:853/cloudflare-dns.com", +# "8.8.8.8:853/dns.google", +# "9.9.9.9:853/dns.quad9.net" +#] + +# All DNS seed records must pass DNSSEC validation (default: dns_seeds_use_dnssec = false) +#dns_seeds_use_dnssec = false + +[nextnet.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +# (Default: peer_seeds = []) +dns_seeds = ["seeds.nextnet.tari.com"] +# Custom specified peer seed nodes (Default: peer_seeds = []) +#peer_seeds = ["a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/ip4/54.77.66.39/tcp/18189"] + +[stagenet.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +# (Default: peer_seeds = []) +dns_seeds = ["seeds.stagenet.tari.com"] +# Custom specified peer seed nodes (Default: peer_seeds = []) +#peer_seeds = ["a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/ip4/54.77.66.39/tcp/18189"] + +[esmeralda.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +# (Default: peer_seeds = []) +dns_seeds = ["seeds.esmeralda.tari.com"] +# Custom specified peer seed nodes (Default: peer_seeds = []) +#peer_seeds = ["a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/ip4/54.77.66.39/tcp/18189"] + +[igor.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +# (Default: peer_seeds = []) +dns_seeds = [] +# Custom specified peer seed nodes (Default: peer_seeds = []) +peer_seeds = ["921f9248b3e4a2b72c8b702a4ed8cc779a6301fe241eaf470065e51531cb5162::/ip4/18.217.22.26/tcp/12000"] + +[mainnet.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +# (Default: peer_seeds = []) +dns_seeds = ["seeds.mainnet.tari.com"] +# Custom specified peer seed nodes (Default: peer_seeds = []) +peer_seeds = ["a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/ip4/54.77.66.39/tcp/18189"] + + +######################################################################################################################## +# # +# Base Node Configuration Options (BaseNodeConfig) # +# # +######################################################################################################################## + +# If you are not running a Minotari Base node, you can simply leave everything in this section commented out. Base nodes +# help maintain the security of the Minotari token and are the surest way to preserve your privacy and be 100% sure that +# no-one is cheating you out of your money. + +[igor.base_node] +# A path to the file that stores your node identity and secret key (default = "config/base_node_id.json") +identity_file = "config/base_node_id_igor.json" + +[esmeralda.base_node] +# A path to the file that stores your node identity and secret key (default = "config/base_node_id.json") +identity_file = "config/base_node_id_esmeralda.json" + +[stagenet.base_node] +# A path to the file that stores your node identity and secret key (default = "config/base_node_id.json") +identity_file = "config/base_node_id_stagenet.json" + +[nextnet.base_node] +# A path to the file that stores your node identity and secret key (default = "config/base_node_id.json") +identity_file = "config/base_node_id_nextnet.json" + +[base_node] +#mining_enabled = false +#second_layer_grpc_enabled = false +# Set to false to disable the base node GRPC server (default = true) +grpc_enabled = false + +# The socket to expose for the gRPC base node server (default = "/ip4/127.0.0.1/tcp/18142") +#grpc_address = "/ip4/127.0.0.1/tcp/18142" + +# gRPC authentication method (default = "none") +#grpc_authentication = { username = "admin", password = "xxxx" } + +# Use gRPC over TLS (default = false) +#grpc_tls_enabled = false + +# Uncomment all gRPC server methods that should be allowed (only active when `grpc_enabled = true`) +grpc_server_allow_methods = [ + "get_version", + #"check_for_updates", + #"get_sync_info", + #"get_sync_progress", + #"get_tip_info", + "identify", + #"get_network_status", + #"list_headers", + #"get_header_by_hash", + #"get_blocks", + #"get_block_timing", + #"get_constants", + #"get_block_size", + #"get_block_fees", + #"get_tokens_in_circulation", + #"get_network_difficulty", + #"get_new_block_template", + #"get_new_block_with_coinbases", + #"get_new_block_template_with_coinbases", + #"get_new_block", + #"get_new_block_blob", + #"submit_block", + #"submit_block_blob", + #"submit_transaction", + #"search_kernels", + #"search_utxos", + #"fetch_matching_utxos", + #"get_peers", + #"get_mempool_transactions", + #"transaction_state", + #"list_connected_peers", + #"get_mempool_stats", + #"get_active_validator_nodes", + #"get_validator_node_changes", + #"get_shard_key", + #"get_template_registrations", + #"get_side_chain_utxos", +] + +# A path to the file that stores your node identity and secret key (default = "config/base_node_id.json") +#identity_file = "config/base_node_id.json" + +# Spin up and use a built-in Tor instance, only works on macos/linux and must comment out 'tor.control_address' below. +# This requires that the base node was built with the optional "libtor" feature flag. (default = true) +#use_libtor = false + +# A path to the file that stores the tor hidden service private key, if using the tor transport. +# (default = "config/tor_id.json") +#tor_identity_file = "config/base_node_tor_id.json" + +# The type of database backend to use. Currently supported options are "memory" and "lmdb". LMDB is recommnded for +# almost all use cases. (default = "lmdb") +#db_type = "lmdb" + +# The relative path to store persistent data (default = "data/base_node") +#data_dir = "data/base_node" + +# The relative path to store the lmbd data (default = "db") +#lmdb_path = "db" + +# The maximum amount of VMs that RandomX will be use (default = 5) +#max_randomx_vms = 5 + +# Bypass range proof verification to speed up validation (default = false) +#bypass_range_proof_verification = false + +# This allowlist provides a method to force syncing from any known nodes you may choose, for example if you have a +# couple of nodes that you always want to have in sync. If set this node will only sync to the nodes in this set. +# force_sync_peers = ["public_key1::address1", "public_key2::address2",... ] + +# The maximum amount of seconds wait for remote base node responses for messaging-based requests. +#messaging_request_timeout = 60 + +# The time interval between status line updates in the CLI (default = 5 s) +#status_line_interval = 5 + +# The buffer size constants for the publish/subscribe connector channel, connecting comms messages to the domain layer: +# (min value = 30, default value = 1500). +#buffer_size = 1500 + +# Liveness meta data auto ping interval between peers (default = 30 s) +#metadata_auto_ping_interval = 30 + +# Obscure GRPC error responses (default = false) +#report_grpc_error = false + +[base_node.lmdb] +#init_size_bytes = 16_777_216 # 16 *1024 * 1024 +#grow_size_bytes = 16_777_216 # 16 *1024 * 1024 +#resize_threshold_bytes = 4_194_304 # 4 *1024 * 1024 + +[base_node.storage] +# The maximum number of orphans that can be stored in the Orphan block pool. +#orphan_storage_capacity = 720 +# The pruning horizon that is set for a default configuration of the blockchain db. +#pruning_horizon = 0 +# The chain height interval used to determine when a pruned node should perform pruning. +#pruning_interval = 50 +# Set to true to record all reorgs. Recorded reorgs can be viewed using the list-reorgs command. Default = false +track_reorgs = true +# Clean out +#cleanup_orphans_at_startup = false + +[base_node.mempool] +# The maximum number of transactions that can be stored in the Unconfirmed Transaction pool +#unconfirmed_pool.storage_capacity = 40_000 +# The maximum number of transactions that can be skipped when compiling a set of highest priority transactions, +# skipping over large transactions are performed in an attempt to fit more transactions into the remaining space. +#unconfirmed_pool.weight_tx_skip_count = 20 +# The minimum fee accepted by the mempool +#unconfirmed_pool.min_fee = 0, + +# The height horizon to clear transactions from the reorg pool. +#reorg_pool.expiry_height = 5 + +# Number of peers from which to initiate a sync. Once this many peers have successfully synced, this node will +# not initiate any more mempool syncs. Default: 2 +#service.initial_sync_num_peers = 2 +# The maximum number of transactions to sync in a single sync session Default: 10_000 +#service.initial_sync_max_transactions = 10_000 +# The maximum number of blocks added via sync or re-org to triggering a sync +#service.block_sync_trigger = 5 + +[base_node.state_machine] +# The initial max sync latency (seconds). If a peer fails to stream a header/block within this deadline another sync +# peer will be selected. If there are no further peers the sync will be restarted with an increased by +# `max_latency_increase`. [default = 240] +blockchain_sync_config.initial_max_sync_latency = 240 +# If all sync peers exceed latency increase allowed latency by this value (seconds) [default = 10] +blockchain_sync_config.max_latency_increase = 10 +# Longer ban period (seconds) for potentially malicious infractions (protocol violations etc.) [default = 2 hours] +#blockchain_sync_config.ban_period = 7_200 # 2 * 60 * 60 +# Short ban period (seconds) for infractions that are likely not malicious (slow to respond spotty connections etc) +# [default = 4 minutes] +#blockchain_sync_config.short_ban_period = 240 +# An allowlist of sync peers from which to sync. No other peers will be selected for sync. If empty sync peers +# are chosen based on their advertised chain metadata. [default = []] +#blockchain_sync_config.forced_sync_peers = [] +# Number of threads to use for validation [default = 6] +#blockchain_sync_config.validation_concurrency = 6 +# The RPC deadline to set on sync clients. If this deadline is reached, a new sync peer will be selected for sync. +# [default = 240] +blockchain_sync_config.rpc_deadline = 240 + +# The maximum amount of VMs that RandomX will be use (default = 0) +#max_randomx_vms = 0 +# The amount of blocks this node can be behind a peer before considered to be lagging (to test the block +# propagation by delaying lagging, but also to give it time to receive the block via propagation, which is more network +# efficient) +# Note that time_before_considered_lagging will override this setting if the node sees a stronger chain for longer than +# that configured time. +# (default = 1) +#blocks_behind_before_considered_lagging = 1 +# The amount of time this node can know about a stronger chain before considered to be lagging. +# This is to give a node time to receive the block via propagation, which is usually less network +# intensive. Be careful of setting this higher than the block time, which would potentially cause it +# to always be behind the network (default = 10) (in seconds) +#time_before_considered_lagging = 10 +#This is the amount of metadata events that a node will wait for before decide to start syncing for a peer, choosing the best peer out of the list +#initial_sync_peer_count = 5, + +[base_node.p2p] +# The node's publicly-accessible hostname. This is the host name that is advertised on the network so that +# peers can find you. +# _NOTE_: If using the `tor` transport type, public_addresses will be ignored and an onion address will be +# automatically configured +#public_addresses = ["/ip4/172.2.3.4/tcp/18189",] + +# Optionally bind an additional TCP socket for inbound Tari P2P protocol commms. +# Use cases include: +# - allowing wallets to locally connect to their base node, rather than through tor, when used in conjunction with +# `tor_proxy_bypass_addresses` +# - multiple P2P addresses, one public over DNS and one private over TOR +# - a "bridge" between TOR and TCP-only nodes +# auxiliary_tcp_listener_address = "/ip4/127.0.0.1/tcp/9998" + +# Path to the LMDB data files +#datastore_path = "peer_db" + +# Name to use for the peer database +#peer_database_name = "peers" + +# The maximum number of concurrent Inbound tasks allowed before back-pressure is applied to peers +#max_concurrent_inbound_tasks = 4 + +# The maximum number of concurrent outbound tasks allowed before back-pressure is applied to outbound messaging queue +#max_concurrent_outbound_tasks = 4 + +# Set to true to allow peers to provide test addresses (loopback, memory etc.). If set to false, memory +# addresses, loopback, local-link (i.e addresses used in local tests) will not be accepted from peers. This +# should always be false for non-test nodes. +#allow_test_addresses = false + +# CIDR for addresses allowed to enter into liveness check mode on the listener. +#listener_liveness_allowlist_cidrs = [] +# Enables periodic socket-level liveness checks. Default: Disabled +listener_self_liveness_check_interval = 15 + +# The maximum simultaneous comms RPC sessions allowed (default value = 100). Setting this to -1 will allow unlimited +# sessions. +#rpc_max_simultaneous_sessions = 100 +# The maximum comms RPC sessions allowed per peer (default value = 10). +#rpc_max_sessions_per_peer = 10 + +[base_node.p2p.transport] +# -------------- Transport configuration -------------- +# Use TCP to connect to the Tari network. This transport can only communicate with TCP/IP addresses, so peers with +# e.g. tor onion addresses will not be contactable. (default = "tor") +#type = "tor" + +# The address and port to listen for peer connections over TCP. (use: type = "tcp") +#tcp.listener_address = "/ip4/0.0.0.0/tcp/18189" +# Configures a tor proxy used to connect to onion addresses. All other traffic uses direct TCP connections. +# This setting is optional however, if it is not specified, this node will not be able to connect to nodes that +# only advertise an onion address. (default = ) +#tcp.tor_socks_address = +# Optional tor SOCKS proxy authentication (default = "none") +#tcp.tor_socks_auth = "none" + +# Configures the node to run over a tor hidden service using the Tor proxy. This transport recognises ip/tcp, +# onion v2, onion v3 and dns addresses. (use: type = "tor") +# Address of the tor control server +#tor.control_address = "/ip4/127.0.0.1/tcp/9051" +# SOCKS proxy auth (default = "none") +#tor.socks_auth = "none" +# Use this socks address instead of getting it from the tor proxy. (default = ) +#tor.socks_address_override = +# Authentication to use for the tor control server (default = "auto") +#tor.control_auth = "auto" # or "password=xxxxxx" +# The onion port to use. +#tor.onion_port = 18141 +# When these peer addresses are encountered when dialing another peer, the tor proxy is bypassed and the connection is +# made directly over TCP. /ip4, /ip6, /dns, /dns4 and /dns6 are supported. (e.g. ["/dns4/my-foo-base-node/tcp/9998"]) +#tor.proxy_bypass_addresses = [] +# When using the tor transport and set to true, outbound TCP connections bypass the tor proxy. Defaults to 'true' for +# better network performance for TCP nodes; set it to 'false' for better privacy. +#tor.proxy_bypass_for_outbound_tcp = true +# If set, instructs tor to forward traffic the provided address. (e.g. "/dns4/my-base-node/tcp/32123") (default = OS-assigned port) +#tor.forward_address = +# If set, the listener will bind to this address instead of the forward_address. You need to make sure that this listener is connectable from the forward_address. +#tor.listener_address_override = + +# Use a SOCKS5 proxy transport. This transport recognises any addresses supported by the proxy. +# (use: type = "socks5") +# The address of the SOCKS5 proxy. Traffic will be forwarded to tcp.listener_address. +# (Default = "/ip4/127.0.0.1/tcp/8080") +#socks.proxy_address = "/ip4/127.0.0.1/tcp/9050" +# SOCKS proxy auth (Default = "none", or assign "username_password=username:xxxxxxx") +#socks.auth = "none" + +# Use a Memory proxy transport. (use: type = "memory") +#memory.listener_address = "/memory/0" + +[base_node.p2p.dht] +# The `DbConnectionUrl` for the Dht database. Default: In-memory database +database_url = "data/base_node/dht.db" +# The size of the buffer (channel) which holds pending outbound message requests. Default: 20 +#outbound_buffer_size = 20 +# The maximum number of peer nodes that a message has to be closer to, to be considered a neighbour. Default: 8 +#num_neighbouring_nodes = 8 +# Number of random peers to include. Default: 4 +#num_random_nodes = 4 +# Connections above the configured number of neighbouring and random nodes will be removed (default: false) +#minimize_connections = false +# Send to this many peers when using the broadcast strategy. Default: 8 +#broadcast_factor = 8 +# Send to this many peers when using the propagate strategy. Default: 4 +#propagation_factor = 4 + +# The amount of time added to the current time will be used to check if the message has expired or not. Default: 3 hours +#saf.msg_validity = 10_800 # 3 * 60 * 60 // 3 hours +# The maximum number of messages that can be stored using the Store-and-forward middleware. Default: 100,000 +#saf.msg_storage_capacity = 100_000 +# A request to retrieve stored messages will be ignored if the requesting node is not within one of this nodes _n_ +# closest nodes. Default 10 +#saf.num_closest_nodes = 10 +# The maximum number of messages to return from a store and forward retrieval request. Default: 100 +#saf.max_returned_messages = 50 +# The time-to-live duration used for storage of low priority messages by the Store-and-forward middleware. +# Default: 6 hours +#saf.low_priority_msg_storage_ttl = 21_600 # 6 * 60 * 60 // 6 hours +# The time-to-live duration used for storage of high priority messages by the Store-and-forward middleware. +# Default: 3 days +#saf.high_priority_msg_storage_ttl = 259_200 # 3 * 24 * 60 * 60 // 3 days +# The limit on the message size to store in SAF storage in bytes. Default 500 KiB +#saf.max_message_size = 524_288 # 512 * 1024 +# When true, store and forward messages are requested from peers on connect (Default: true) +#saf.auto_request = true +# The maximum allowed time between asking for a message and accepting a response +#saf.max_inflight_request_age = 120 +# The maximum number of peer nodes that a message must be closer than to get stored by SAF. Default: 8 +#saf.num_neighbouring_nodes = 8 + +# The max capacity of the message hash cache. Default: 2,500 +#dedup_cache_capacity = 2_500 +# The periodic trim interval for items in the message hash cache. Default: 300s (5 mins) +#dedup_cache_trim_interval = 300 # 5 * 60 +# The number of occurrences of a message is allowed to pass through the DHT pipeline before being deduped/discarded +# Default: 1 +#dedup_allowed_message_occurrences = 1 +# The duration to wait for a peer discovery to complete before giving up. Default: 2 minutes +#discovery_request_timeout = 120 # 2 * 60 +# Set to true to automatically broadcast a join message when ready, otherwise false. Default: false +#auto_join = true +# The minimum time between sending a Join message to the network. Joins are only sent when the node establishes +# enough connections to the network as determined by comms ConnectivityManager. If a join was sent and then state +# change happens again after this period, another join will be sent. Default: 10 minutes +#join_cooldown_interval = 120 # 10 * 60 + +# The interval to update the neighbouring and random pools, if necessary. Default: 2 minutes +#connectivity.update_interval = 120 # 2 * 60 +# The interval to change the random pool peers. Default = 2 hours +#connectivity.random_pool_refresh_interval = 7_200 # 2 * 60 * 60 +# Length of cooldown when high connection failure rates are encountered. Default: 45s +#connectivity.high_failure_rate_cooldown = 45 +# The minimum desired ratio of TCPv4 to Tor connections. TCPv4 addresses have some significant cost to create, +# making sybil attacks costly. This setting does not guarantee this ratio is maintained. +# Currently, it only emits a warning if the ratio is below this setting. Default: 0.1 (10%) +#connectivity.minimum_desired_tcpv4_node_ratio = 0.1 + +# True to enable network discovery, false to disable it. Default: true +#network_discovery.enabled = true +# A threshold for the minimum number of peers this node should ideally be aware of. If below this threshold a +# more "aggressive" strategy is employed. Default: 50 +#network_discovery.min_desired_peers = 50 +# The period to wait once the number of rounds given by `idle_after_num_rounds` has completed. Default: 30 mins +#network_discovery.idle_period = 1_800 # 30 * 60 +# The minimum number of network discovery rounds to perform before idling (going to sleep). If there are less +# than `min_desired_peers` then the actual number of rounds performed will exceed this value. Default: 10 +#network_discovery.idle_after_num_rounds = 10 +# Time to idle after a failed round. Default: 5 secs +#network_discovery.on_failure_idle_period = 5 +# The maximum number of sync peer to select for each round. The selection strategy varies depending on the current state. +# Default: 5 +#network_discovery.max_sync_peers = 5 +# The maximum number of peers we allow per round of sync. (Default: 500) +#network_discovery.max_peers_to_sync_per_round = 500 +# Initial refresh sync peers delay period, when a configured connection needs preference. (Default: Disabled) +#network_discovery.initial_peer_sync_delay = 0 + +# Length of time to ban a peer if the peer misbehaves at the DHT-level. Default: 6 hrs +#ban_duration = 21_600 # 6 * 60 * 60 +# Length of time to ban a peer for a "short" duration. Default: 60 mins +#ban_duration_short = 3_600 # 60 * 60 +# The maximum number of messages over `flood_ban_timespan` to allow before banning the peer (for `ban_duration_short`) +# Default: 100_000 messages +#flood_ban_max_msg_count = 100_000 +# The timespan over which to calculate the max message rate. +# `flood_ban_max_count / flood_ban_timespan (as seconds) = avg. messages per second over the timespan` +# Default: 100 seconds +#flood_ban_timespan = 100 +# Once a peer has been marked as offline, wait at least this length of time before reconsidering them. +# In a situation where a node is not well-connected and many nodes are locally marked as offline, we can retry +# peers that were previously tried. Default: 2 hours +#offline_peer_cooldown = 7_200 # 2 * 60 * 60 +# Addresses that should never be dialed (default value = []). This can be a specific address or an IPv4/TCP range. +# Example: When used in conjunction with `allow_test_addresses = true` (but it could be any other range) +# `excluded_dial_addresses = ["/ip4/127.*.0:49.*/tcp/*", "/ip4/127.*.101:255.*/tcp/*"]` +# or +# `excluded_dial_addresses = ["/ip4/127.0:0.1/tcp/122", "/ip4/127.0:0.1/tcp/1000:2000"]` +excluded_dial_addresses = [] + + +######################################################################################################################## +# # +# Wallet Configuration Options (WalletConfig) # +# # +######################################################################################################################## + +[wallet] +# The buffer size constants for the publish/subscribe connector channel, connecting comms messages to the domain layer: +# (min value = 300, default value = 50000). +#buffer_size = 50000 + +# The relative path to store persistent data (default = "data/wallet") +#data_dir = "data/wallet" + +# The relative folder to store your local key data and transaction history. (default = "db/console_wallet.db") +# DO NOT EVER DELETE THIS FILE unless you (a) have backed up your seed phrase and (b) know what you are doing! +#db_file = "db/console_wallet.db" + +# The main wallet db sqlite database backend connection pool size for concurrent reads (default = 16) +#db_connection_pool_size = 16 + +# Console wallet password. Should you wish to start your console wallet without typing in your password, the following +# options are available: +# 1. Start the console wallet with the --password=secret argument, or +# 2. Set the environment variable MINOTARI_WALLET_PASSWORD=secret before starting the console wallet, or +# 3. Set the "password" key in this [wallet] section of the config +# (default = ) +#password = "secret" + +# The auto ping interval to use for contacts liveness data (default = 30 s) +#contacts_auto_ping_interval = 30 + +# How long a contact may be not seen before being determined to be offline (default = 30 s) +#contacts_online_ping_window = 30 + +# When running the console wallet in command mode, use these values to determine what "stage" and timeout to wait +# for sent transactions. +# The stages are: +# - "DirectSendOrSaf" - The transaction was initiated and was accepted via Direct Send or Store And Forward. +# - "Negotiated" - The recipient replied and the transaction was negotiated. +# - "Broadcast" - The transaction was broadcast to the base node mempool. +# - "MinedUnconfirmed" - The transaction was successfully detected as mined but unconfirmed on the blockchain. +# - "Mined" - The transaction was successfully detected as mined and confirmed on the blockchain. +# The default values are: "Broadcast", 300 +#command_send_wait_timeout = 300 +#command_send_wait_stage = "Broadcast" + +# Wallets currently will choose the best outputs as inputs when spending, however since a lurking base node can +# generate a transaction graph of inputs to outputs with relative ease, a wallet may reveal its transaction +# history by including a (non-stealth address) one-sided payment. +# If set to `true`, then outputs received via simple one-sided transactions, won't be automatically selected as +# further transactions, but can still be selected individually as specific outputs. +#autoignore_onesided_utxos = false + +# Set to true to enable grpc. (default = false) +#grpc_enabled = false +# The socket to expose for the gRPC base node server (default = "/ip4/127.0.0.1/tcp/18143") +#grpc_address = "/ip4/127.0.0.1/tcp/18143" +# gRPC authentication method (default = "none") +#grpc_authentication = { username = "admin", password = "xxxx" } + +# A custom base node peer that will be used to obtain metadata from, example +# "0eefb45a4de9484eca74846a4f47d2c8d38e76be1fec63b0112bd00d297c0928::/ip4/13.40.98.39/tcp/18189" +# (default = ) +#custom_base_node = "none" + +# A list of base node peers that the wallet should use for service requests and tracking chain state in the form +# ["public_key::net_address", ...] (default = []) +#base_node_service_peers = [] + +# The amount of times wallet recovery will be retried before being abandoned (default = 3) +#recovery_retry_limit = 3 + +# The default uT fee per gram to use for transaction fees (default = 5) +#fee_per_gram = 5 + +# Number of required transaction confirmations used for UI purposes (default = 3) +#num_required_confirmations = 3 + +# Spin up and use a built-in Tor instance, only works on macos/linux and must comment out 'tor.control_address' below. +# This requires that the base node was built with the optional "libtor" feature flag. (default = true) +#use_libtor = false + +# A path to the file that stores your node identity and secret key (default = "none") +#identity_file = "none" + +# Notification script file for a notifier service. Allows you to execute a script or program when these transaction +# events are received by the console wallet (default = "none"): +# - transaction received +# - transaction sent +# - transaction cancelled +# - transaction mined but unconfirmed +# - transaction mined and confirmed +# An example script is available here: applications/minotari_console_wallet/src/notifier/notify_example.sh +#notify_file = "/path/to/script" + +# The cool down period between balance enquiry checks in seconds; requests faster than this will be ignored. +# For specialized wallets processing many batch transactions this setting could be increased to 60 s to retain +# responsiveness of the wallet with slightly delayed balance updates (default = 5): +#balance_enquiry_cooldown_period = 5 + +[wallet.transactions] +# This is the timeout period that will be used for base node broadcast monitoring tasks (default = 30) +broadcast_monitoring_timeout = 180 +# This is the timeout period that will be used for chain monitoring tasks (default = 60) +chain_monitoring_timeout = 60 +# This is the timeout period that will be used for sending transactions directly (default = 20) +direct_send_timeout = 180 +# This is the timeout period that will be used for sending transactions via broadcast mode (default = 60) +broadcast_send_timeout = 180 +# This is the timeout period that will be used for low power moded polling tasks (default = 300) +#low_power_polling_timeout = 300 +# This is the timeout period that will be used to resend transactions that did not make any progress (default = 600) +#transaction_resend_period = 600 +# This is the timeout period that will be used to ignore repeated transactions (default = 300) +#resend_response_cooldown = 300 +# This is the timeout period that will be used to expire pending transactions (default = 259200) +#pending_transaction_cancellation_timeout = 259200 # 3 days +# This is the number of block confirmations required for a transaction to be considered completely mined and +# confirmed. (default = 3) +#num_confirmations_required = 3 +# The number of batches the unconfirmed transactions will be divided into before being queried from the base node +# (default = 20) +#max_tx_query_batch_size = 20 +# This option specifies the transaction routing mechanism as being directly between wallets, making +# use of store and forward or using any combination of these. +# (options: "DirectOnly", "StoreAndForwardOnly", DirectAndStoreAndForward". default: "DirectAndStoreAndForward"). +#transaction_routing_mechanism = "DirectAndStoreAndForward" +# This is the size of the event channel used to communicate transaction status events to the wallet's UI. A busy console +# wallet doing thousands of bulk payments or used for stress testing needs a fairly big size (>10000) (default = 1000). +transaction_event_channel_size = 25000 +# This is the timeout period that will be used to re-submit transactions not found in the mempool (default = 600) +#transaction_mempool_resubmission_window = 600 + +[wallet.outputs] +# If a large amount of tiny valued uT UTXOs are used as inputs to a transaction, the fee may be larger than the +# transaction amount. Set this value to `false` to allow spending of "dust" UTXOs for small valued transactions +# (default = true). +prevent_fee_gt_amount = false +# Ignores dust below this value, value in micro MinoTari, defaults to 100 +# dust_ignore_value: 100, +# This is the size of the event channel used to communicate output manager events to the wallet. A busy console +# wallet doing thousands of bulk payments or used for stress testing needs a fairly big size (>3000) (default = 250). +event_channel_size = 3500 +# The number of confirmations (difference between tip height and mined height) required for the output to be marked as +# mined confirmed (default = 3) +#num_confirmations_required = 3 +# The number of batches the unconfirmed outputs will be divided into before being queried from the base node +# (default = 100) +#tx_validator_batch_size = 100 +# Number of seconds that have to pass for the wallet to run revalidation of invalid UTXOs on startup. +# If you set it to zero, the revalidation will be on every wallet rerun. Default is 3 days. +#num_of_seconds_to_revalidate_invalid_utxos = 259200 + + +[wallet.base_node] +# Configuration for the wallet's base node service +# The refresh interval +#base_node_monitor_max_refresh_interval = 30 +# The RPC client pool size (default = 5) +#base_node_rpc_pool_size = 5 +# This is the size of the event channel used to communicate base node events to the wallet. (default = 250). +#event_channel_size = 250 + +[wallet.p2p] +# The node's publicly-accessible hostname. This is the host name that is advertised on the network so that +# peers can find you. +# _NOTE_: If using the `tor` transport type, public_address will be ignored and an onion address will be +# automatically configured +#public_addresses = ["/ip4/172.2.3.4/tcp/18188",] + +# Optionally bind an additional TCP socket for inbound Tari P2P protocol commms. +# Use cases include: +# - allowing wallets to locally connect to their base node, rather than through tor, when used in conjunction with +# `tor_proxy_bypass_addresses` +# - multiple P2P addresses, one public over DNS and one private over TOR +# - a "bridge" between TOR and TCP-only nodes +#auxiliary_tcp_listener_address = "/ip4/127.0.0.1/tcp/9998" + +# Path to the LMDB data files +#datastore_path = "peer_db" + +# Name to use for the peer database +#peer_database_name = "peers" + +# The maximum number of concurrent Inbound tasks allowed before back-pressure is applied to peers +#max_concurrent_inbound_tasks = 4 + +# The maximum number of concurrent outbound tasks allowed before back-pressure is applied to outbound messaging queue +#max_concurrent_outbound_tasks = 4 + +# Set to true to allow peers to provide test addresses (loopback, memory etc.). If set to false, memory +# addresses, loopback, local-link (i.e addresses used in local tests) will not be accepted from peers. This +# should always be false for non-test nodes. +#allow_test_addresses = false + +# CIDR for addresses allowed to enter into liveness check mode on the listener. +#listener_liveness_allowlist_cidrs = [] +# Enables periodic socket-level liveness checks. Default: Disabled +# listener_self_liveness_check_interval = 15 + +# User agent string for this node +#user_agent = "" + +# The maximum simultaneous comms RPC sessions allowed (default value = 100). Setting this to -1 will allow unlimited +# sessions. +#rpc_max_simultaneous_sessions = 100 +# The maximum comms RPC sessions allowed per peer (default value = 10). +#rpc_max_sessions_per_peer = 10 + +[wallet.p2p.transport] +# -------------- Transport configuration -------------- +# Use TCP to connect to the Tari network. This transport can only communicate with TCP/IP addresses, so peers with +# e.g. tor onion addresses will not be contactable. (default = "tor") +#type = "tor" + +# The address and port to listen for peer connections over TCP. (use: type = "tcp") +#tcp.listener_address = "/ip4/0.0.0.0/tcp/18189" +# Configures a tor proxy used to connect to onion addresses. All other traffic uses direct TCP connections. +# This setting is optional however, if it is not specified, this node will not be able to connect to nodes that +# only advertise an onion address. (default = ) +#tcp.tor_socks_address = +# Optional tor SOCKS proxy authentication (default = "none") +#tcp.tor_socks_auth = "none" + +# Configures the node to run over a tor hidden service using the Tor proxy. This transport recognises ip/tcp, +# onion v2, onion v3 and dns addresses. (use: type = "tor") +# Address of the tor control server +#tor.control_address = "/ip4/127.0.0.1/tcp/9051" +# SOCKS proxy auth (default = "none") +#tor.socks_auth = "none" +# Use this socks address instead of getting it from the tor proxy. (default = ) +#tor.socks_address_override = +# Authentication to use for the tor control server (default = "auto") +#tor.control_auth = "auto" # or "password=xxxxxx" +# The onion port to use. +#tor.onion_port = 18141 +# When these peer addresses are encountered when dialing another peer, the tor proxy is bypassed and the connection is +# made directly over TCP. /ip4, /ip6, /dns, /dns4 and /dns6 are supported. (e.g. ["/dns4/my-foo-base-node/tcp/9998"]) +#tor.proxy_bypass_addresses = [] +# When using the tor transport and set to true, outbound TCP connections bypass the tor proxy. Defaults to 'true' for +# better network performance for TCP nodes; set it to 'false' for better privacy. +#tor.proxy_bypass_for_outbound_tcp = true +# If set, instructs tor to forward traffic the provided address. (e.g. "/ip4/127.0.0.1/tcp/0") (default = ) +#tor.forward_address = + +# Use a SOCKS5 proxy transport. This transport recognises any addresses supported by the proxy. +# (use: type = "socks5") +# The address of the SOCKS5 proxy. Traffic will be forwarded to tcp.listener_address. +# (Default = "/ip4/127.0.0.1/tcp/8080") +#socks.proxy_address = "/ip4/127.0.0.1/tcp/9050" +# SOCKS proxy auth (Default = "none", or assign "username_password=username:xxxxxxx") +#socks.auth = "none" + +# Use a Memory proxy transport. (use: type = "memory") +#memory.listener_address = "/memory/0" + +[wallet.p2p.dht] +# The `DbConnectionUrl` for the Dht database. Default: In-memory database +database_url = "data/wallet/dht.db" +# The size of the buffer (channel) which holds pending outbound message requests. Default: 20 +#outbound_buffer_size = 20 +# The maximum number of peer nodes that a message has to be closer to, to be considered a neighbour. Default: 8 +num_neighbouring_nodes = 5 +# Number of random peers to include. Default: 4 +num_random_nodes = 1 +# Connections above the configured number of neighbouring and random nodes will be removed (default: false) +minimize_connections = true +# Send to this many peers when using the broadcast strategy. Default: 8 +#broadcast_factor = 8 +# Send to this many peers when using the propagate strategy. Default: 4 +#propagation_factor = 4 + +# The amount of time added to the current time will be used to check if the message has expired or not. Default: 3 hours +#saf.msg_validity = 10_800 # 3 * 60 * 60 // 3 hours +# The maximum number of messages that can be stored using the Store-and-forward middleware. Default: 100,000 +#saf.msg_storage_capacity = 100_000 +# A request to retrieve stored messages will be ignored if the requesting node is not within one of this nodes _n_ +# closest nodes. Default 10 +#saf.num_closest_nodes = 10 +# The maximum number of messages to return from a store and forward retrieval request. Default: 100 +#saf.max_returned_messages = 50 +# The time-to-live duration used for storage of low priority messages by the Store-and-forward middleware. +# Default: 6 hours +#saf.low_priority_msg_storage_ttl = 21_600 # 6 * 60 * 60 // 6 hours +# The time-to-live duration used for storage of high priority messages by the Store-and-forward middleware. +# Default: 3 days +#saf.high_priority_msg_storage_ttl = 259_200 # 3 * 24 * 60 * 60 // 3 days +# The limit on the message size to store in SAF storage in bytes. Default 500 KiB +#saf.max_message_size = 524_288 # 512 * 1024 +# When true, store and forward messages are requested from peers on connect (Default: true) +#saf.auto_request = true +# The maximum allowed time between asking for a message and accepting a response +#saf.max_inflight_request_age = 120 +# The maximum number of peer nodes that a message must be closer than to get stored by SAF. Default: 8 +#saf.num_neighbouring_nodes = 8 + +# The max capacity of the message hash cache. Default: 2,500 +#dedup_cache_capacity = 2_500 +# The periodic trim interval for items in the message hash cache. Default: 300s (5 mins) +#dedup_cache_trim_interval = 300 # 5 * 60 +# The number of occurrences of a message is allowed to pass through the DHT pipeline before being deduped/discarded +# Default: 1 +#dedup_allowed_message_occurrences = 1 +# The duration to wait for a peer discovery to complete before giving up. Default: 2 minutes +#discovery_request_timeout = 120 # 2 * 60 +# Set to true to automatically broadcast a join message when ready, otherwise false. Default: false +#auto_join = true +# The minimum time between sending a Join message to the network. Joins are only sent when the node establishes +# enough connections to the network as determined by comms ConnectivityManager. If a join was sent and then state +# change happens again after this period, another join will be sent. Default: 10 minutes +#join_cooldown_interval = 120 # 10 * 60 + +# The interval to update the neighbouring and random pools, if necessary. Default: 2 minutes +connectivity.update_interval = 300 # 2 * 60 +# The interval to change the random pool peers. Default = 2 hours +#connectivity.random_pool_refresh_interval = 7_200 # 2 * 60 * 60 +# Length of cooldown when high connection failure rates are encountered. Default: 45s +#connectivity.high_failure_rate_cooldown = 45 +# The minimum desired ratio of TCPv4 to Tor connections. TCPv4 addresses have some significant cost to create, +# making sybil attacks costly. This setting does not guarantee this ratio is maintained. +# Currently, it only emits a warning if the ratio is below this setting. Default: 0.1 (10%) +connectivity.minimum_desired_tcpv4_node_ratio = 0.0 + +# True to enable network discovery, false to disable it. Default: true +#network_discovery.enabled = true +# A threshold for the minimum number of peers this node should ideally be aware of. If below this threshold a +# more "aggressive" strategy is employed. Default: 50 +network_discovery.min_desired_peers = 16 +# The period to wait once the number of rounds given by `idle_after_num_rounds` has completed. Default: 30 mins +#network_discovery.idle_period = 1_800 # 30 * 60 +# The minimum number of network discovery rounds to perform before idling (going to sleep). If there are less +# than `min_desired_peers` then the actual number of rounds performed will exceed this value. Default: 10 +#network_discovery.idle_after_num_rounds = 10 +# Time to idle after a failed round. Default: 5 secs +#network_discovery.on_failure_idle_period = 5 +# The maximum number of sync peer to select for each round. The selection strategy varies depending on the current state. +# Default: 5 +#network_discovery.max_sync_peers = 5 +# The maximum number of peers we allow per round of sync. (Default: 500) +#network_discovery.max_peers_to_sync_per_round = 500 +# Initial refresh sync peers delay period, when a configured connection needs preference. (Default: Disabled) +network_discovery.initial_peer_sync_delay = 25 + +# Length of time to ban a peer if the peer misbehaves at the DHT-level. Default: 6 hrs +#ban_duration = 21_600 # 6 * 60 * 60 +# Length of time to ban a peer for a "short" duration. Default: 60 mins +#ban_duration_short = 3_600 # 60 * 60 +# The maximum number of messages over `flood_ban_timespan` to allow before banning the peer (for `ban_duration_short`) +# Default: 100_000 messages +#flood_ban_max_msg_count = 100_000 +# The timespan over which to calculate the max message rate. +# `flood_ban_max_count / flood_ban_timespan (as seconds) = avg. messages per second over the timespan` +# Default: 100 seconds +#flood_ban_timespan = 100 +# Once a peer has been marked as offline, wait at least this length of time before reconsidering them. +# In a situation where a node is not well-connected and many nodes are locally marked as offline, we can retry +# peers that were previously tried. Default: 2 hours +#offline_peer_cooldown = 7_200 # 2 * 60 * 60 +# Addresses that should never be dialed (default value = []). This can be a specific address or an IPv4/TCP range. +# Example: When used in conjunction with `allow_test_addresses = true` (but it could be any other range) +# `excluded_dial_addresses = ["/ip4/127.*.0:49.*/tcp/*", "/ip4/127.*.101:255.*/tcp/*"]` +# or +# `excluded_dial_addresses = ["/ip4/127.0:0.1/tcp/122", "/ip4/127.0:0.1/tcp/1000:2000"]` +excluded_dial_addresses = [] + + +######################################################################################################################## +# # +# Miner Configuration Options (MinerConfig) # +# # +######################################################################################################################## + +[miner] + +# GRPC address of base node (default = "/ip4/127.0.0.1/tcp/18142") +#base_node_grpc_address = "/ip4/127.0.0.1/tcp/18142" +# GRPC authentication for the base node (default = "none") +#base_node_grpc_authentication = { username = "miner", password = "xxxx" } +# GRPC TLS communication is turned on by defining the domain name for the service (default = "none") +#base_node_grpc_tls_domain_name = "localhost" + +# Number of mining threads (default: number of logical CPU cores) +#num_mining_threads = 8 + +# Start mining only when base node is bootstrapped and current block height is on the tip of network (default = true) +#mine_on_tip_only = true + +# Will check tip with node every N seconds and restart mining if height already taken and option `mine_on_tip_only` is +# set to true (default = 30 s) +#validate_tip_timeout_sec = 30 + +# Stratum Mode configuration - mining pool address (e.g. "miningcore.tari.com:3052") +#mining_pool_address = "miningcore.tari.com:3052" + +# Stratum Mode configuration - mining wallet address/public key +# (e.g. "20B19870ABEE8ABC6ACC77AE4E6CA169057645B27C35334B74446B4D3EE52150") +#stratum_mining_wallet_address = "YOUR_WALLET_TARI_ADDRESS" + +# Stratum Mode configuration - mining worker name (e.g. "worker1") (default = "") +#stratum_mining_worker_name = "worker1" + +# The extra data to store in the coinbase, usually some data about the mining pool. +# Note that this data is publicly readable, but it is suggested you populate it so that +# pool dominance can be seen before any one party has more than 51%. +#coinbase_extra = "minotari_miner" + +# Base node reconnect timeout after any GRPC or miner error (default: 10 s) +#wait_timeout_on_error = 10 + +# The Tari wallet address (valid address in hex) where the mining funds will be sent to - must be assigned +# e.g. "78e724f466d202abdee0f23c261289074e4a2fc9eb61e83e0179eead76ce2d3f17" +#wallet_payment_address = "YOUR_WALLET_TARI_ADDRESS" +# Range proof type - revealed_value or bullet_proof_plus: (default = "revealed_value") +#range_proof_type = "revealed_value" + + +######################################################################################################################## +# # +# Merge Mining Configuration Options (MergeMiningProxyConfig) # +# # +######################################################################################################################## + +[merge_mining_proxy] + + +# Use dynamic monerod URL obtained form the official Monero website (https://monero.fail/) (default: true) +#use_dynamic_fail_data = true + +# The monero fail URL to get the monerod URLs from - must be pointing to the official Monero website. +# Valid alternatives are: +# - mainnet: 'https://monero.fail/?chain=monero&network=mainnet&all=true' (default) +# - stagenet: `https://monero.fail/?chain=monero&network=stagenet&all=true` +# - testnet: `https://monero.fail/?chain=monero&network=testnet&all=true` +#monero_fail_url = "https://monero.fail/?chain=monero&network=mainnet&all=true" + +# URL to monerod (you can add your own server here or use public nodes from https://monero.fail/), only if +# 'use_dynamic_fail_data = false' or if the server at 'monero_fail_url' is not available +# (default: The 'monerod_url = [ # mainnet ...' list below) + +#monerod_url = [# stagenet +# "http://stagenet.xmr-tw.org:38081", +# "http://node.monerodevs.org:38089", +# "http://node3.monerodevs.org:38089", +# "http://xmr-lux.boldsuck.org:38081", +# "http://singapore.node.xmr.pm:38081", +#] + +#monerod_url = [ # mainnet +# "http://node.c3pool.org:18081", +# "http://xmr-full.p2pool.uk:18089", +# "http://monero.stackwallet.com:18081", +# "http://xmr.support:18081", +# "https://xmr-01.tari.com", +# "http://node1.xmr-tw.org:18081", +# "http://monero-g2.hexhex.online:18081", +# "http://137.220.120.19:18089", +# "http://185.218.124.120:18489", +# "http://185.218.124.120:18789", +# "https://xmr-de-2.boldsuck.org:18081", +# "http://46.32.46.171:18081", +# "http://185.218.124.120:18089", +# "http://185.218.124.120:18589", +# "http://xmr-de-1.boldsuck.org:18081", +# "http://185.218.124.120:18889", +# "http://pinodexmr.hopto.org:18081", +# "http://node.tincloud.eu:18081", +# "http://183.6.24.33:18081", +# "http://147.45.196.232:18089", +# "http://h-helix.com:18089", +# "http://185.218.124.120:18689", +# "http://185.218.124.120:18289", +# "https://node.tincloud.eu", +# "https://xmr-de.boldsuck.org:18081", +# "https://monero.booze.org", +# "https://xmr.mailia.be:18088", +# "https://xmr.lolfox.au", +# "https://xmr1.doggett.tech:18089", +# "https://node.icefiles.nz:18081", +# "http://45.8.132.220:18089", +# "http://82.147.85.13:18089", +#] + +# Username for curl. (default = "") +#monerod_username = "" + +# Password for curl. (default = "") +#monerod_password = "" + +# If authentication is being used for curl. (default = false) +#monerod_use_auth = false + +# The Minotari base node's GRPC address. (default = "/ip4/127.0.0.1/tcp/18142") +#base_node_grpc_address = "/ip4/127.0.0.1/tcp/18142" + +# GRPC authentication for the base node (default = "none") +#base_node_grpc_authentication = { username = "miner", password = "xxxx" } + +# Address of the minotari_merge_mining_proxy application. (default = "/ip4/127.0.0.1/tcp/18081") +#listener_address = "/ip4/127.0.0.1/tcp/18081" + +# In sole merged mining, the block solution is usually submitted to the Monero blockchain +# (monerod) as well as to the Minotari blockchain, then this setting should be "true". With pool +# merged mining, there is no sense in submitting the solution to the Monero blockchain as the +# pool does that, then this setting should be "false". (default = true) +#submit_to_origin = true + +# The merge mining proxy can either wait for the base node to achieve initial sync at startup before it enables mining, +# or not. If merge mining starts before the base node has achieved initial sync, those Minotari mined blocks will not be +# accepted. (default = true) +#wait_for_initial_sync_at_startup = true + +# When mining for minotari, you might want to check the achieved difficulty of the mined minotari block before submitting +# This setting this can be disabled to allow you to always submit minotari blocks even if the difficulty does not meet the +# required. (default = true) +#check_tari_difficulty_before_submit = true + +# The maximum amount of VMs that RandomX will be use (default = 5) +#max_randomx_vms = 5 + +# The extra data to store in the coinbase, usually some data about the mining pool. +# Note that this data is publicly readable, but it is suggested you populate it so that +# pool dominance can be seen before any one party has more than 51%. (default = "tari_merge_mining_proxy") +#coinbase_extra = "tari_merge_mining_proxy" + +# The Tari wallet address (valid address in hex) where the mining funds will be sent to - must be assigned +# e.g. "78e724f466d202abdee0f23c261289074e4a2fc9eb61e83e0179eead76ce2d3f17" +#wallet_payment_address = "YOUR_WALLET_TARI_ADDRESS" +# Range proof type - revealed_value or bullet_proof_plus: (default = "revealed_value") +#range_proof_type = "revealed_value" + + +######################################################################################################################## +# # +# Validator Node Configuration Options (ValidatorNodeConfig) # +# # +######################################################################################################################## + +[validator_node] + +# A path to the file that stores your node identity and secret key (default = "validator_node_id.json") +#identity_file = "validator_node_id.json" + +# A path to the file that stores the tor hidden service private key, if using the tor transport +# (default = "validator_node_tor_id.json") +#tor_identity_file = "validator_node_tor_id.json" + +# The node's publicly-accessible hostname. This is the host name that is advertised on the network so that +# peers can find you. +# _NOTE_: If using the `tor` transport type, public_address will be ignored and an onion address will be +# automatically configured (default = ) +#public_address = + +# The Minotari base node's GRPC address. (default = "127.0.0.1/" the value is based on network) +#base_node_grpc_address = "127.0.0.1/tcp/18142" + +# The Minotari console wallet's GRPC address. (default = "127.0.0.1/" the value is based on network) +#wallet_grpc_address = "127.0.0.1/tcp/18143" + +# How often do we want to scan the base layer for changes. (default = 10) +#base_layer_scanning_interval = 10 + +# The relative path to store persistent data (default = "data/validator_node") +#data_dir = "data/validator_node" + +# JSON-RPC listener address (default = "127.0.0.1:18200") +#json_rpc_address = "127.0.0.1:18200" + +# HTTP UI listener address (default = "127.0.0.1:5000") +#http_ui_address = "127.0.0.1:5000" + +# Set to true to enable auto registration for each epoch (default = true) +#auto_register = true + +[validator_node.p2p] +#transport = "tor" + + +######################################################################################################################## +# # +# Collectibles Configuration Options (CollectiblesConfig) # +# # +######################################################################################################################## + +[collectibles] + +# GRPC address of validator node (default = "/ip4/127.0.0.1/tcp/18144") +#validator_node_grpc_address = "/ip4/127.0.0.1/tcp/18144" + +# GRPC address of base node (default = "/ip4/127.0.0.1/tcp/18142") +#base_node_grpc_address = "/ip4/127.0.0.1/tcp/18142" + +# GRPC address of wallet (default = "/ip4/127.0.0.1/tcp/18143") +#wallet_grpc_address = "/ip4/127.0.0.1/tcp/18143" + + +######################################################################################################################## +# # +# Indexer Configuration Options (IndexerConfig) # +# # +######################################################################################################################## + +[indexer] + +# A path to the file that stores your node identity and secret key (default = "indexer_id.json") +#identity_file = "indexer_id.json" + +# A path to the file that stores the tor hidden service private key, if using the tor transport +# (default = "indexer_tor_id.json") +#tor_identity_file = "indexer_tor_id.json" + +# The node's publicly-accessible hostname. This is the host name that is advertised on the network so that +# peers can find you. +# _NOTE_: If using the `tor` transport type, public_address will be ignored and an onion address will be +# automatically configured (default = ) +#public_address = + +# The Minotari base node's GRPC address. (default = "127.0.0.1/" the value is based on network) +#base_node_grpc_address = "127.0.0.1/tcp/18142" + +# How often do we want to scan the base layer for changes. (default = 10) +#base_layer_scanning_interval = 10 + +# The relative path to store persistent data (default = "data/indexer") +#data_dir = "data/indexer" + +# JSON-RPC listener address (default = "127.0.0.1:18300") +#json_rpc_address = "127.0.0.1:18300" + +# HTTP UI listener address (default = "127.0.0.1:15000") +#http_ui_address = "127.0.0.1:15000" + +# Substate addresses to keep watching +#address_watchlist=[] + +# How often do we want to scan the dan layer for change. (default = 10) +#dan_layer_scanning_internal=10 + +[indexer.p2p] +#transport = "tor" + + +######################################################################################################################## +# # +# DAN Wallet Daemon Configuration Options () # +# # +######################################################################################################################## + +[dan_wallet_daemon] +# JSON-RPC listener address (default = "127.0.0.1:9000") +# listen_addr = "127.0.0.1:9000" + +# Signaling server address (default = "127.0.0.1:9100") +# signaling_server_addr = "127.0.0.1:9100" + +# Validator node endpoint url (default = "http://127.0.0.1:18200/json_rpc") +# validator_node_endpoint = "http://127.0.0.1:18200/json_rpc" + diff --git a/src-tauri/diesel.toml b/src-tauri/diesel.toml new file mode 100644 index 000000000..85fd3636e --- /dev/null +++ b/src-tauri/diesel.toml @@ -0,0 +1,9 @@ +# For documentation on how to configure this file, +# see https://diesel.rs/guides/configuring-diesel-cli + +[print_schema] +file = "src/database/schema.rs" +custom_type_derives = ["diesel::query_builder::QueryId"] + +[migrations_directory] +dir = "migrations" diff --git a/src-tauri/migrations/2024-12-09-094452_create_tapplets/down.sql b/src-tauri/migrations/2024-12-09-094452_create_tapplets/down.sql new file mode 100644 index 000000000..b62e81947 --- /dev/null +++ b/src-tauri/migrations/2024-12-09-094452_create_tapplets/down.sql @@ -0,0 +1,7 @@ +-- This file should undo anything in `up.sql` +DROP TABLE tapplet; +DROP TABLE tapplet_version; +DROP TABLE tapplet_audit; +DROP TABLE installed_tapplet; +DROP TABLE dev_tapplet; +DROP TABLE tapplet_asset; diff --git a/src-tauri/migrations/2024-12-09-094452_create_tapplets/up.sql b/src-tauri/migrations/2024-12-09-094452_create_tapplets/up.sql new file mode 100644 index 000000000..343961e06 --- /dev/null +++ b/src-tauri/migrations/2024-12-09-094452_create_tapplets/up.sql @@ -0,0 +1,61 @@ +-- Your SQL goes here +-- This file should undo anything in `up.sql` +CREATE TABLE tapplet ( + id INTEGER PRIMARY KEY, + registry_id TEXT NOT NULL, + package_name TEXT NOT NULL, + display_name TEXT NOT NULL, + logo_url TEXT NOT NULL, + background_url TEXT NOT NULL, + author_name TEXT NOT NULL, + author_website TEXT NOT NULL, + about_summary TEXT NOT NULL, + about_description TEXT NOT NULL, + category TEXT NOT NULL, + UNIQUE(registry_id), + UNIQUE(package_name) +); + +CREATE TABLE tapplet_version ( + id INTEGER PRIMARY KEY, + tapplet_id INTEGER, + version TEXT NOT NULL, + integrity TEXT NOT NULL, + registry_url TEXT NOT NULL, + UNIQUE(version, tapplet_id), + FOREIGN KEY (tapplet_id) REFERENCES tapplet(id) +); + +CREATE TABLE tapplet_audit ( + id INTEGER PRIMARY KEY, + tapplet_id INTEGER, + auditor TEXT NOT NULL, + report_url TEXT NOT NULL, + UNIQUE(tapplet_id, auditor), + FOREIGN KEY (tapplet_id) REFERENCES tapplet(id) +); + +CREATE TABLE installed_tapplet ( + id INTEGER PRIMARY KEY, + tapplet_id INTEGER, + tapplet_version_id INTEGER, + UNIQUE(tapplet_id, tapplet_version_id), + FOREIGN KEY (tapplet_id) REFERENCES tapplet(id), + FOREIGN KEY (tapplet_version_id) REFERENCES tapplet_version(id) +); + +CREATE TABLE dev_tapplet ( + id INTEGER PRIMARY KEY, + package_name TEXT NOT NULL, + endpoint TEXT NOT NULL, + display_name TEXT NOT NULL, + UNIQUE(endpoint) +); + +CREATE TABLE tapplet_asset ( + id INTEGER PRIMARY KEY, + tapplet_id INTEGER, + icon_url TEXT NOT NULL, + background_url TEXT NOT NULL, + FOREIGN KEY (tapplet_id) REFERENCES tapplet(id) +); diff --git a/src-tauri/rust-toolchain b/src-tauri/rust-toolchain index e3a84f22f..928aef2ab 100644 --- a/src-tauri/rust-toolchain +++ b/src-tauri/rust-toolchain @@ -1 +1,3 @@ -1.81.0 \ No newline at end of file +[toolchain] +channel = "1.81.0" +targets = [ "wasm32-unknown-unknown" ] \ No newline at end of file diff --git a/src-tauri/sqlite/database.db b/src-tauri/sqlite/database.db new file mode 100644 index 000000000..861a4a99a Binary files /dev/null and b/src-tauri/sqlite/database.db differ diff --git a/src-tauri/src/app_config.rs b/src-tauri/src/app_config.rs index 0e374c3d3..70999b883 100644 --- a/src-tauri/src/app_config.rs +++ b/src-tauri/src/app_config.rs @@ -117,6 +117,11 @@ pub struct AppConfigFromFile { last_changelog_version: String, #[serde(default)] airdrop_tokens: Option, + #[serde(default = "default_true")] + ootle_enabled: bool, + // enable local node & Indexer: check binaries and run base node + #[serde(default = "default_false")] + ootle_node_enabled: bool, } impl Default for AppConfigFromFile { @@ -161,6 +166,8 @@ impl Default for AppConfigFromFile { pre_release: false, last_changelog_version: default_changelog_version(), airdrop_tokens: None, + ootle_enabled: true, + ootle_node_enabled: false, } } } @@ -281,6 +288,8 @@ pub(crate) struct AppConfig { pre_release: bool, last_changelog_version: String, airdrop_tokens: Option, + ootle_enabled: bool, + ootle_node_enabled: bool, } impl AppConfig { @@ -327,6 +336,8 @@ impl AppConfig { pre_release: false, last_changelog_version: default_changelog_version(), airdrop_tokens: None, + ootle_enabled: true, + ootle_node_enabled: false, } } @@ -406,6 +417,7 @@ impl AppConfig { self.pre_release = config.pre_release; self.last_changelog_version = config.last_changelog_version; self.airdrop_tokens = config.airdrop_tokens; + self.ootle_enabled = config.ootle_enabled; KEYRING_ACCESSED.store( config.keyring_accessed, @@ -784,6 +796,29 @@ impl AppConfig { Ok(()) } + pub fn ootle_enabled(&self) -> bool { + self.ootle_enabled + } + + pub async fn set_ootle_enabled(&mut self, ootle_enabled: bool) -> Result<(), anyhow::Error> { + self.ootle_enabled = ootle_enabled; + self.update_config_file().await?; + Ok(()) + } + + pub fn ootle_node_enabled(&self) -> bool { + self.ootle_node_enabled + } + + pub async fn set_ootle_node_enabled( + &mut self, + ootle_node_enabled: bool, + ) -> Result<(), anyhow::Error> { + self.ootle_node_enabled = ootle_node_enabled; + self.update_config_file().await?; + Ok(()) + } + // Allow needless update because in future there may be fields that are // missing #[allow(clippy::needless_update)] @@ -833,6 +868,8 @@ impl AppConfig { pre_release: self.pre_release, last_changelog_version: self.last_changelog_version.clone(), airdrop_tokens: self.airdrop_tokens.clone(), + ootle_enabled: self.ootle_enabled, + ootle_node_enabled: self.ootle_node_enabled, }; let config = serde_json::to_string(config)?; debug!(target: LOG_TARGET, "Updating config file: {:?} {:?}", file, self.clone()); diff --git a/src-tauri/src/binaries/binaries_list.rs b/src-tauri/src/binaries/binaries_list.rs index a3b6b972f..22c0fea8e 100644 --- a/src-tauri/src/binaries/binaries_list.rs +++ b/src-tauri/src/binaries/binaries_list.rs @@ -33,6 +33,8 @@ pub enum Binaries { ShaP2pool, GpuMiner, Tor, + TariValidatorNode, + TariIndexer, } impl Binaries { @@ -45,6 +47,8 @@ impl Binaries { Binaries::ShaP2pool => "sha-p2pool", Binaries::GpuMiner => "xtrgpuminer", Binaries::Tor => "tor", + Binaries::TariValidatorNode => "tari_validator_node", + Binaries::TariIndexer => "tari_indexer", } } @@ -57,6 +61,8 @@ impl Binaries { "sha-p2pool" => Binaries::ShaP2pool, "xtrgpuminer" => Binaries::GpuMiner, "tor" => Binaries::Tor, + "tari_validator_node" => Binaries::TariValidatorNode, + "tari_indexer" => Binaries::TariIndexer, _ => panic!("Unknown binary name: {}", name), } } @@ -91,6 +97,14 @@ impl Binaries { let file_name = "tor"; PathBuf::from(file_name) } + Binaries::TariValidatorNode => { + let file_name = "tari_validator_node"; + PathBuf::from(file_name) + } + Binaries::TariIndexer => { + let file_name = "tari_indexer"; + PathBuf::from(file_name) + } } } @@ -104,6 +118,8 @@ impl Binaries { Binaries::ShaP2pool, Binaries::GpuMiner, Binaries::Tor, + Binaries::TariValidatorNode, + Binaries::TariIndexer, ] .iter() .copied() diff --git a/src-tauri/src/binaries/binaries_manager.rs b/src-tauri/src/binaries/binaries_manager.rs index 19cbb09f6..7fbe9e27e 100644 --- a/src-tauri/src/binaries/binaries_manager.rs +++ b/src-tauri/src/binaries/binaries_manager.rs @@ -67,6 +67,7 @@ impl BinaryManager { let versions_requirements_data = match Network::get_current_or_user_setting_or_default() { Network::NextNet => include_str!("../../binaries_versions_nextnet.json"), Network::Esmeralda => include_str!("../../binaries_versions_esmeralda.json"), + Network::Igor => include_str!("../../binaries_versions_igor.json"), _ => panic!("Unsupported network"), }; let version_requirements = BinaryManager::read_version_requirements( diff --git a/src-tauri/src/binaries/binaries_resolver.rs b/src-tauri/src/binaries/binaries_resolver.rs index 609784c2a..a358012d6 100644 --- a/src-tauri/src/binaries/binaries_resolver.rs +++ b/src-tauri/src/binaries/binaries_resolver.rs @@ -93,6 +93,7 @@ impl BinaryResolver { match Network::get_current_or_user_setting_or_default() { Network::NextNet => ("rc", gpu_miner_nextnet_regex), Network::Esmeralda => ("pre", gpu_miner_testnet_regex), + Network::Igor => ("pre", gpu_miner_testnet_regex), _ => panic!("Unsupported network"), }; @@ -194,6 +195,36 @@ impl BinaryResolver { ), ); + binary_manager.insert( + Binaries::TariValidatorNode, + BinaryManager::new( + Binaries::TariValidatorNode.name().to_string(), + Some("tari_validator_node".to_string()), + Box::new(GithubReleasesAdapter { + repo: "tari-dan".to_string(), + owner: "tari-project".to_string(), + specific_name: None, + }), + None, + true, + ), + ); + + binary_manager.insert( + Binaries::TariIndexer, + BinaryManager::new( + Binaries::TariIndexer.name().to_string(), + Some("tari_indexer".to_string()), + Box::new(GithubReleasesAdapter { + repo: "tari-dan".to_string(), + owner: "tari-project".to_string(), + specific_name: None, + }), + None, + true, + ), + ); + Self { managers: binary_manager, } @@ -211,7 +242,7 @@ impl BinaryResolver { let version = manager .get_used_version() - .ok_or_else(|| anyhow!("No version selected for binary {}", binary.name()))?; + .ok_or_else(|| anyhow!("No latest version found for binary {}", binary.name()))?; let base_dir = manager.get_base_dir().map_err(|error| { anyhow!( @@ -301,7 +332,12 @@ impl BinaryResolver { match highest_version { Some(version) => manager.set_used_version(version), - None => return Err(anyhow!("No version selected for binary {}", binary.name())), + None => { + return Err(anyhow!( + "Init binary: no version selected for {}", + binary.name() + )) + } } Ok(()) @@ -351,7 +387,12 @@ impl BinaryResolver { match highest_version { Some(version) => manager.set_used_version(version), - None => return Err(anyhow!("No version selected for binary {}", binary.name())), + None => { + return Err(anyhow!( + "Update binary: no version selected for {}", + binary.name() + )) + } } Ok(()) diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 303a056a2..742a7ff4f 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -26,17 +26,46 @@ use crate::app_in_memory_config::{ }; use crate::auto_launcher::AutoLauncher; use crate::binaries::{Binaries, BinaryResolver}; +use crate::consts::{TAPPLET_ARCHIVE, TAPPLET_DIST_DIR}; use crate::credential_manager::{CredentialError, CredentialManager}; +use crate::database::models::{ + CreateDevTapplet, CreateInstalledTapplet, CreateTapplet, CreateTappletAsset, + CreateTappletVersion, DevTapplet, InstalledTapplet, Tapplet, UpdateInstalledTapplet, +}; +use crate::database::store::{SqliteStore, Store}; +use crate::download_utils::{download_file_with_retries, extract}; use crate::external_dependencies::{ ExternalDependencies, ExternalDependency, RequiredExternalDependency, }; use crate::gpu_miner_adapter::{GpuMinerStatus, GpuNodeSource}; use crate::hardware::hardware_status_monitor::PublicDeviceProperties; +use crate::indexer_manager::IndexerConfig; +use crate::interface::{ + ActiveTapplet, DevTappletResponse, InstalledTappletWithName, TappletPermissions, +}; use crate::internal_wallet::{InternalWallet, PaperWalletConfig}; + +use crate::ootle::OotleWallet; +use crate::ootle::{ + error, + error::{ + Error::{self, RequestError, TappletServerError}, + RequestError::*, + TappletServerError::*, + }, + rpc::make_request, + tapplet_installer::{ + check_files_and_validate_checksum, delete_tapplet, download_asset, + fetch_tapp_registry_manifest, get_tapp_download_path, get_tapp_permissions, + }, + tapplet_server::start, + AssetServer, DatabaseConnection, ShutdownTokens, Tokens, +}; use crate::p2pool::models::{Connections, P2poolStats}; use crate::progress_tracker::ProgressTracker; use crate::tor_adapter::TorConfig; use crate::utils::shutdown_utils::stop_all_processes; +use crate::validator_node_manager::ValidatorNodeConfig; use crate::wallet_adapter::TransactionInfo; use crate::wallet_manager::WalletManagerError; use crate::{airdrop, UniverseAppState, APPLICATION_FOLDER_ID}; @@ -49,7 +78,8 @@ use regex::Regex; use serde::{Deserialize, Serialize}; use serde_json::Value; use std::fmt::Debug; -use std::fs::{read_dir, remove_dir_all, remove_file, File}; +use std::fs::{self, read_dir, remove_dir_all, remove_file, File}; +use std::path::PathBuf; use std::sync::atomic::Ordering; use std::thread::{available_parallelism, sleep}; use std::time::{Duration, Instant, SystemTime}; @@ -502,6 +532,7 @@ pub async fn get_p2pool_connections( state .is_getting_p2pool_connections .store(false, Ordering::SeqCst); + info!(target: LOG_TARGET, "✅ get_p2pool_connections: {:?}", &p2pool_connections); Ok(p2pool_connections) } @@ -1172,6 +1203,7 @@ pub async fn set_p2pool_enabled( let origin_config = state.mm_proxy_manager.config().await; let p2pool_grpc_port = state.p2pool_manager.grpc_port().await; + info!(target: LOG_TARGET, "👨‍🔧 --------------- P2P ORIGIN CONFIG {:?}", &origin_config); match origin_config { None => { warn!(target: LOG_TARGET, "Tried to set p2pool_enabled but mmproxy has not been initialized yet"); @@ -1188,6 +1220,7 @@ pub async fn set_p2pool_enabled( .await .map_err(|error| error.to_string())?; origin_config.set_to_use_base_node(base_node_grpc_port); + info!(target: LOG_TARGET, "👨‍🔧 --- P2P DISABLED | GRPC BASE NODE {:?}", &base_node_grpc_port); } state .mm_proxy_manager @@ -1706,3 +1739,594 @@ pub async fn proceed_with_update( } Ok(()) } + +#[tauri::command] +pub async fn launch_tapplet( + installed_tapplet_id: i32, + shutdown_tokens: tauri::State<'_, ShutdownTokens>, + db_connection: tauri::State<'_, DatabaseConnection>, + app_handle: tauri::AppHandle, +) -> Result { + let mut locked_tokens = shutdown_tokens.0.lock().await; + let mut store = SqliteStore::new(db_connection.0.clone()); + + let (_installed_tapp, registered_tapp, tapp_version) = store + .get_installed_tapplet_full_by_id(installed_tapplet_id) + .map_err(|e| e.to_string())?; + // get download path + let version = tapp_version.clone().version; + let tapplet_path = get_tapp_download_path( + registered_tapp.registry_id, + version.clone(), + app_handle.clone(), + ) + .map_err(|e| e.to_string())?; + let file_path = tapplet_path.join(TAPPLET_ARCHIVE); + + // Extract the tapplet archieve each time before launching + // This way make sure that local files have not been replaced and are not malicious + let _ = extract(&file_path, &tapplet_path.clone()) + .await + .inspect_err(|e| error!(target: LOG_TARGET, "❌ Error extracting file: {:?}", e)) + .map_err(|e| e.to_string())?; + + //TODO should compare integrity field with the one stored in db or from github manifest? + match check_files_and_validate_checksum(tapp_version, tapplet_path.clone()) { + Ok(is_valid) => { + info!(target: LOG_TARGET,"✅ Checksum validation successfully with test result: {:?}", is_valid); + } + Err(e) => { + error!(target: LOG_TARGET,"❌ Error validating checksum: {:?}", e); + return Err(e.to_string()); + } + } + + let permissions: TappletPermissions = match get_tapp_permissions(tapplet_path.clone()) { + Ok(p) => p, + Err(e) => { + error!(target: LOG_TARGET,"Error getting permissions: {:?}", e); + return Err(e.to_string()); + } + }; + + let dist_path = tapplet_path.join(TAPPLET_DIST_DIR); + let handle_start = tauri::async_runtime::spawn(async move { start(dist_path).await }); + + let (addr, cancel_token) = match handle_start.await { + Ok(result) => result.map_err(|e| e.to_string())?, + Err(e) => { + error!(target: LOG_TARGET, "❌ Error handling tapplet start: {:?}", e); + return Err(e.to_string()); + } + }; + + //TODO SERVER RUNNING ERROR IF LAUNCHED INSTALLED TAPPLET 2 TIMES + match locked_tokens.insert(installed_tapplet_id.clone(), cancel_token) { + Some(_) => { + return Err(TappletServerError(AlreadyRunning)).map_err(|e| e.to_string())?; + } + None => {} + } + + Ok(ActiveTapplet { + tapplet_id: installed_tapplet_id, + display_name: registered_tapp.display_name, + source: format!("http://{}", addr), + version, + permissions, + }) +} + +/** + * REGISTERED TAPPLETS - FETCH DATA FROM MANIFEST JSON + */ +#[tauri::command] +pub async fn fetch_registered_tapplets( + app_handle: tauri::AppHandle, + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result<(), String> { + let tapplets = match fetch_tapp_registry_manifest().await { + Ok(tapp) => tapp, + Err(e) => { + return Err(e.to_string()); + } + }; + + let mut store = SqliteStore::new(db_connection.0.clone()); + + for tapplet_manifest in tapplets.registered_tapplets.values() { + let inserted_tapplet = store + .create(&CreateTapplet::from(tapplet_manifest)) + .map_err(|e| e.to_string())?; + + // TODO uncomment if audit data in manifest + // for audit_data in tapplet_manifest.metadata.audits.iter() { + // store.create( + // &(CreateTappletAudit { + // tapplet_id: inserted_tapplet.id, + // auditor: &audit_data.auditor, + // report_url: &audit_data.report_url, + // }) + // )?; + // } + + for (version, version_data) in tapplet_manifest.versions.iter() { + let _ = store + .create( + &(CreateTappletVersion { + tapplet_id: inserted_tapplet.id, + version: &version, + integrity: &version_data.integrity, + registry_url: &version_data.registry_url, + }), + ) + .map_err(|e| e.to_string()); + } + match store.get_tapplet_assets_by_tapplet_id(inserted_tapplet.id.unwrap()) { + Ok(Some(_)) => {} + Ok(None) => { + match download_asset(app_handle.clone(), inserted_tapplet.registry_id).await { + Ok(tapplet_assets) => { + let _ = store + .create( + &(CreateTappletAsset { + tapplet_id: inserted_tapplet.id, + icon_url: &tapplet_assets.icon_url, + background_url: &tapplet_assets.background_url, + }), + ) + .map_err(|e| e.to_string()); + } + Err(e) => { + error!(target: LOG_TARGET, "Could not download tapplet assets: {}", e); + } + } + } + Err(e) => { + return Err(e.to_string()); + } + } + } + Ok(()) +} + +/** + * TAPPLETS REGISTRY - STORES ALL REGISTERED TAPPLETS IN THE TARI UNIVERSE + */ + +#[tauri::command] +pub fn insert_tapp_registry_db( + tapplet: CreateTapplet, + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result { + let mut tapplet_store = SqliteStore::new(db_connection.0.clone()); + tapplet_store.create(&tapplet).map_err(|e| e.to_string()) +} + +#[tauri::command] +pub fn read_tapp_registry_db( + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result, String> { + let mut tapplet_store = SqliteStore::new(db_connection.0.clone()); + tapplet_store.get_all().map_err(|e| e.to_string()) +} + +#[tauri::command] +pub fn get_assets_server_addr(state: tauri::State<'_, AssetServer>) -> Result { + Ok(format!("http://{}", state.addr)) +} + +#[tauri::command] +pub fn get_ootle_wallet_jrpc_port(state: tauri::State<'_, OotleWallet>) -> Result { + Ok(state.jrpc_port) +} + +#[tauri::command] +pub async fn download_and_extract_tapp( + tapplet_id: i32, + db_connection: tauri::State<'_, DatabaseConnection>, + app: tauri::AppHandle, +) -> Result { + let mut tapplet_store = SqliteStore::new(db_connection.0.clone()); + // let (tapp, tapp_version) = tapplet_store.get_registered_tapplet_with_version(tapplet_id); + let (tapp, tapp_version) = match tapplet_store.get_registered_tapplet_with_version(tapplet_id) { + Ok(tapp) => tapp, + Err(e) => { + return Err(e.to_string()); + } + }; + + // get download path + let tapplet_path = get_tapp_download_path( + tapp.registry_id.clone(), + tapp_version.version.clone(), + app.clone(), + ) + .unwrap_or_default(); + // download tarball + let url = tapp_version.registry_url.clone(); + let file_path = tapplet_path.join(TAPPLET_ARCHIVE); + let destination_dir = file_path.clone(); + let progress_tracker = ProgressTracker::new(app.clone(), None); + let handle_download = tauri::async_runtime::spawn(async move { + download_file_with_retries(&url, &destination_dir, progress_tracker).await + }); + let _ = handle_download + .await + .inspect_err(|e| error!(target: LOG_TARGET, "❌ Error downloading file: {:?}", e)) + .map_err(|_| { + Error::RequestError(FailedToDownload { + url: tapp_version.registry_url.clone(), + }) + }); + + let _ = extract(&file_path, &tapplet_path.clone()) + .await + .inspect_err(|e| error!(target: LOG_TARGET, "❌ Error extracting file: {:?}", e)); + //TODO should compare integrity field with the one stored in db or from github manifest? + match check_files_and_validate_checksum(tapp_version, tapplet_path.clone()) { + Ok(is_valid) => { + info!(target: LOG_TARGET,"✅ Checksum validation successfully with test result: {:?}", is_valid); + } + Err(e) => { + error!(target: LOG_TARGET,"🚨 Error validating checksum: {:?}", e); + return Err(e.to_string()); + } + } + Ok(tapp) +} + +/** + * INSTALLED TAPPLETS - STORES ALL THE USER'S INSTALLED TAPPLETS + */ + +#[tauri::command] +pub fn insert_installed_tapp_db( + tapplet_id: i32, + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result { + let mut tapplet_store = SqliteStore::new(db_connection.0.clone()); + let (tapp, version_data) = tapplet_store.get_registered_tapplet_with_version(tapplet_id)?; + + let installed_tapplet = CreateInstalledTapplet { + tapplet_id: tapp.id, + tapplet_version_id: version_data.id, + }; + tapplet_store.create(&installed_tapplet) +} + +#[tauri::command] +pub fn read_installed_tapp_db( + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result, Error> { + let mut tapplet_store = SqliteStore::new(db_connection.0.clone()); + tapplet_store.get_installed_tapplets_with_display_name() +} + +#[tauri::command] +pub fn update_installed_tapp_db( + tapplet: UpdateInstalledTapplet, + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result { + let mut tapplet_store = SqliteStore::new(db_connection.0.clone()); + let tapplets: Vec = tapplet_store.get_all()?; + let first: InstalledTapplet = tapplets.into_iter().next().unwrap(); + tapplet_store.update(first, &tapplet) +} + +#[tauri::command] +pub fn delete_installed_tapplet( + tapplet_id: i32, + db_connection: tauri::State<'_, DatabaseConnection>, + app_handle: tauri::AppHandle, +) -> Result { + let mut store = SqliteStore::new(db_connection.0.clone()); + let (_installed_tapp, registered_tapp, tapp_version) = + store.get_installed_tapplet_full_by_id(tapplet_id)?; + let tapplet_path = get_tapp_download_path( + registered_tapp.registry_id, + tapp_version.version, + app_handle, + ) + .unwrap(); + delete_tapplet(tapplet_path)?; + + let installed_tapplet: InstalledTapplet = store.get_by_id(tapplet_id)?; + store.delete(installed_tapplet) +} + +#[tauri::command] +pub async fn update_installed_tapplet( + tapplet_id: i32, + installed_tapplet_id: i32, + db_connection: tauri::State<'_, DatabaseConnection>, + app_handle: tauri::AppHandle, +) -> Result, Error> { + let _ = delete_installed_tapplet( + installed_tapplet_id, + db_connection.clone(), + app_handle.clone(), + ) + .inspect_err(|e| error!("❌ Delete installed tapplet from db error: {:?}", e)); + + let _ = download_and_extract_tapp(tapplet_id, db_connection.clone(), app_handle.clone()) + .await + .inspect_err(|e| error!("❌ Download and extract tapplet process error: {:?}", e)); + + let _ = insert_installed_tapp_db(tapplet_id, db_connection.clone()) + .inspect_err(|e| error!("❌ Insert installed tapplet to db error: {:?}", e)); + + let mut store = SqliteStore::new(db_connection.0.clone()); + let installed_tapplets = store.get_installed_tapplets_with_display_name().unwrap(); + + return Ok(installed_tapplets); +} + +#[tauri::command] +pub async fn add_dev_tapplet( + endpoint: String, + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result { + // let manifest_endpoint = format!("{}/tapplet.manifest.json", endpoint); + let config_endpoint = format!("{}/tapplet.config.json", endpoint); + info!("🌟 Add dev tapplet to db endpoint: {:?}", &config_endpoint); + let tapp_manifest = reqwest::get(&config_endpoint) + .await + .inspect_err(|e| { + error!( + "❌ Fetching tapplet manifest endpoint {:?} error: {:?}", + config_endpoint, e + ) + }) + .map_err(|_| { + RequestError(FetchManifestError { + endpoint: endpoint.clone(), + }) + })? + .json::() + .await + .map_err(|_| { + RequestError(ManifestResponseError { + endpoint: endpoint.clone(), + }) + })?; + info!("🌟 Add dev tapplet manifest: {:?}", &tapp_manifest); + let mut store = SqliteStore::new(db_connection.0.clone()); + let new_dev_tapplet = CreateDevTapplet { + endpoint: &endpoint, + package_name: &tapp_manifest.package_name, + display_name: &tapp_manifest.display_name, + }; + match store.create(&new_dev_tapplet) { + Ok(dev_tapplet) => { + info!(target: LOG_TARGET,"✅ Dev tapplet added to db successfully: {:?}", new_dev_tapplet); + Ok(dev_tapplet) + } + Err(e) => { + warn!(target: LOG_TARGET, "❌ Error while adding dev tapplet (endpoint {:?}) to db: {:?}", endpoint, e); + return Err(e); + } + } +} + +#[tauri::command] +pub fn read_dev_tapplets( + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result, Error> { + let mut store = SqliteStore::new(db_connection.0.clone()); + store.get_all() +} + +#[tauri::command] +pub fn delete_dev_tapplet( + dev_tapplet_id: i32, + db_connection: tauri::State<'_, DatabaseConnection>, +) -> Result { + let mut store = SqliteStore::new(db_connection.0.clone()); + let dev_tapplet: DevTapplet = store.get_by_id(dev_tapplet_id)?; + // store.delete(dev_tapplet) + match store.delete(dev_tapplet) { + Ok(dev_tapplet) => { + info!(target: LOG_TARGET,"✅ Dev tapplet with id {:?} deleted from db successfully", dev_tapplet_id); + Ok(dev_tapplet) + } + Err(e) => { + warn!(target: LOG_TARGET, "❌ Error while deleting dev tapplet id {:?} from db: {:?}", dev_tapplet_id, e); + return Err(e); + } + } +} + +#[tauri::command] +pub async fn call_wallet( + method: String, + params: String, + tokens: tauri::State<'_, Tokens>, + ootle_wallet: tauri::State<'_, OotleWallet>, +) -> Result { + let permission_token = tokens + .permission + .lock() + .inspect_err(|e| error!(target: LOG_TARGET, "❌ Error at call_wallet: {:?}", e)) + .map_err(|_| error::Error::FailedToObtainPermissionTokenLock)? + .clone(); + let req_params: serde_json::Value = serde_json::from_str(¶ms) + .inspect_err(|e| error!(target: LOG_TARGET, "❌ Error at call_wallet: {:?}", e)) + .map_err(|e| error::Error::JsonParsingError(e)) + .unwrap(); + + match make_request( + Some(permission_token), + method, + req_params, + Some(ootle_wallet.jrpc_port), + ) + .await + { + Ok(res) => Ok(res), + Err(e) => { + error!(target: LOG_TARGET,"❌ Error at call_wallet: {:?}", e); + return Err(Error::RequestFailed { + message: e.to_string(), + }); + } + } +} + +#[tauri::command] +pub async fn set_ootle_enabled<'r>( + enabled: bool, + state: tauri::State<'_, UniverseAppState>, +) -> Result<(), String> { + let timer = Instant::now(); + state + .config + .write() + .await + .set_ootle_enabled(enabled) + .await + .inspect_err(|e| error!(target: LOG_TARGET, "error at set_ootle_enabled {:?}", e)) + .map_err(|e| e.to_string())?; + + if timer.elapsed() > MAX_ACCEPTABLE_COMMAND_TIME { + warn!(target: LOG_TARGET, "set_ootle_enabled took too long: {:?}", timer.elapsed()); + } + + Ok(()) +} + +#[tauri::command] +pub async fn set_ootle_node_enabled<'r>( + enabled: bool, + state: tauri::State<'_, UniverseAppState>, + app: tauri::AppHandle, +) -> Result<(), String> { + info!(target: LOG_TARGET,"🚨🚨🚨 ENABLE OOTLE LOCAL NODE {:?}", enabled); + let _lock = state.stop_start_mutex.lock().await; + let timer = Instant::now(); + state + .config + .write() + .await + .set_ootle_node_enabled(enabled) + .await + .inspect_err(|e| error!("error at set_ootle_node_enabled {:?}", e)) + .map_err(|e| e.to_string())?; + + let config_dir = app + .path() + .app_config_dir() + .expect("Could not get config dir"); + let data_dir = app + .path() + .app_local_data_dir() + .expect("Could not get data dir"); + let log_dir = app.path().app_log_dir().expect("Could not get log dir"); + + if enabled { + info!(target: LOG_TARGET, "🚀 Run ootle with data dir {:?} and config dir {:?}", &data_dir, &config_dir); + + let base_node_grpc_port = state + .node_manager + .get_grpc_port() + .await + .map_err(|error| error.to_string())?; + + let validator_node_config = ValidatorNodeConfig::builder() + .with_base_node(base_node_grpc_port) + .with_base_path(&data_dir) + .build() + .map_err(|error| error.to_string())?; + info!(target: LOG_TARGET,"🚨 try VN binary",); + state + .validator_node_manager + .ensure_started( + state.shutdown.to_signal(), + validator_node_config, + data_dir.clone(), + config_dir.clone(), + log_dir.clone(), + ) + .await + .map_err(|error| error.to_string())?; + + info!(target: LOG_TARGET, "🚀 Ootle enabled & Tari Validator Node started"); + + let indexer_config = IndexerConfig::builder() + .with_base_node(base_node_grpc_port) + .with_base_path(data_dir.clone()) + .build() + .map_err(|error| error.to_string())?; + state + .indexer_manager + .ensure_started( + state.shutdown.to_signal(), + indexer_config, + data_dir.clone(), + config_dir.clone(), + log_dir.clone(), + ) + .await + .map_err(|error| error.to_string())?; + + info!(target: LOG_TARGET, "🚀 Ootle enabled & Tari Indexer started"); + } else { + info!(target: LOG_TARGET,"🚨🚨🚨 ENABLE OOTLE STOP",); + + state + .validator_node_manager + .stop() + .await + .inspect_err(|e| error!("error at stopping validator node {:?}", e)) + .ok(); + + state + .indexer_manager + .stop() + .await + .inspect_err(|e| error!("error at stopping indexer {:?}", e)) + .ok(); + } + + if timer.elapsed() > MAX_ACCEPTABLE_COMMAND_TIME { + warn!(target: LOG_TARGET, "stop_mining took too long: {:?}", timer.elapsed()); + } + Ok(()) +} + +// TODO custom fct because tauri plugin 'upload' fails at some point while sending wasm files +#[tauri::command] +pub async fn upload_wasm_file(file: String, app: tauri::AppHandle) -> Result<(), String> { + let _progress_tracker = ProgressTracker::new(app.clone(), None); //TODO add if needed? + let file_path = PathBuf::from(file); + let jrpc_url = "http://localhost:18000"; //TODO get from config + let url = format!("{}/upload_template", jrpc_url); + let wasm_name = file_path + .file_stem() + .and_then(|stem| stem.to_str()) // Convert OsStr to Option<&str> + .map(|s| s.to_string()) // Convert &str to String + .unwrap_or_else(|| String::from("default_name")); // Provide a default value + + warn!(target: LOG_TARGET, "UPLOAD {:?},{:?}", &wasm_name, &url); + let file_fs = fs::read(file_path).expect("Failed to read file"); + let file = reqwest::multipart::Part::bytes(file_fs.clone()).file_name(wasm_name); + let form = reqwest::multipart::Form::new().part("file", file); + + let client = reqwest::Client::new(); + let response = client + .post(url) + .multipart(form) + .send() + .await + .expect("Failed to send request"); + + if !response.status().is_success() { + return Err(format!( + "Failed to send request. Response status: {:?}", + response.status().as_str() + )); + } + //TODO cleanup + warn!(target: LOG_TARGET, "UPLOAD SUCCESS STATUS {:?}", response); + Ok(()) +} diff --git a/src-tauri/src/consts.rs b/src-tauri/src/consts.rs index 09d145a5b..784c2c9b6 100644 --- a/src-tauri/src/consts.rs +++ b/src-tauri/src/consts.rs @@ -25,3 +25,14 @@ pub const PROCESS_CREATION_NO_WINDOW: u32 = 0x08000000; pub const DEFAULT_MONERO_ADDRESS: &str = "44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A"; + +// Tari Ootle & Tapplets +pub const TAPPLETS_INSTALLED_DIR: &'static str = "tapplets_installed"; +pub const TAPPLETS_ASSETS_DIR: &'static str = "assets"; +pub const TAPPLET_ARCHIVE: &'static str = "tapplet.tar.gz"; +pub const TAPPLET_DIST_DIR: &'static str = "package/dist"; +pub const DB_FILE_NAME: &'static str = "tari_universe.sqlite3"; +pub const WALLET_DAEMON_CONFIG_FILE: &'static str = "wallet_daemon.config.toml"; +//TODO change to tari repo: "https://github.com/tari-project/tapp-registry" +pub const REGISTRY_URL: &'static str = + "https://raw.githubusercontent.com/karczuRF/tapp-registry/main"; diff --git a/src-tauri/src/database/mod.rs b/src-tauri/src/database/mod.rs new file mode 100644 index 000000000..cb02f6e4c --- /dev/null +++ b/src-tauri/src/database/mod.rs @@ -0,0 +1,24 @@ +pub mod models; +pub mod schema; +pub mod store; + +use diesel::prelude::*; +use diesel::sqlite::Sqlite; +use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; +use log::info; + +pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("./migrations"); +pub const LOG_TARGET: &str = "tari::universe::binary_manager"; + +pub fn establish_connection(db_url: &str) -> SqliteConnection { + info!(target: LOG_TARGET,"Establishing db connection url: {:?}", db_url); + let mut db_connection = SqliteConnection::establish(db_url) + .unwrap_or_else(|_| panic!("Error connecting to {}", db_url)); + run_migrations(&mut db_connection).unwrap(); // TODO handle migrations error while running setup https://github.com/orgs/tari-project/projects/18/views/1?pane=issue&itemId=63753279 + db_connection +} +fn run_migrations(connection: &mut impl MigrationHarness) -> Result<(), ()> { + connection.run_pending_migrations(MIGRATIONS).unwrap(); + + Ok(()) +} diff --git a/src-tauri/src/database/models.rs b/src-tauri/src/database/models.rs new file mode 100644 index 000000000..22edac41e --- /dev/null +++ b/src-tauri/src/database/models.rs @@ -0,0 +1,265 @@ +use crate::database::schema::*; +use crate::interface::TappletRegistryManifest; +use diesel::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Queryable, Selectable, Debug, Serialize)] +#[diesel(table_name = installed_tapplet)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct InstalledTapplet { + pub id: Option, + pub tapplet_id: Option, + pub tapplet_version_id: Option, +} + +#[derive(Insertable, Debug, Deserialize)] +#[diesel(table_name = installed_tapplet)] +pub struct CreateInstalledTapplet { + pub tapplet_id: Option, + pub tapplet_version_id: Option, +} + +impl From<&CreateInstalledTapplet> for UpdateInstalledTapplet { + fn from(create_installed_tapplet: &CreateInstalledTapplet) -> Self { + UpdateInstalledTapplet { + tapplet_id: create_installed_tapplet.tapplet_id, + tapplet_version_id: create_installed_tapplet.tapplet_version_id, + } + } +} + +#[derive(Debug, AsChangeset, Deserialize)] +#[diesel(table_name = installed_tapplet)] +pub struct UpdateInstalledTapplet { + pub tapplet_id: Option, + pub tapplet_version_id: Option, +} + +#[derive(Queryable, Selectable, Debug, Serialize)] +#[diesel(table_name = tapplet)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct Tapplet { + pub id: Option, + pub registry_id: String, + pub package_name: String, + pub display_name: String, + pub logo_url: String, + pub background_url: String, + pub author_name: String, + pub author_website: String, + pub about_summary: String, + pub about_description: String, + pub category: String, +} + +#[derive(Insertable, Debug, Deserialize)] +#[diesel(table_name = tapplet)] +pub struct CreateTapplet<'a> { + pub registry_id: &'a str, + pub package_name: &'a str, + pub display_name: &'a str, + pub logo_url: &'a str, + pub background_url: &'a str, + pub author_name: &'a str, + pub author_website: &'a str, + pub about_summary: &'a str, + pub about_description: &'a str, + pub category: &'a str, +} + +impl<'a> From<&'a TappletRegistryManifest> for CreateTapplet<'a> { + fn from(tapplet_manifest: &'a TappletRegistryManifest) -> Self { + CreateTapplet { + registry_id: &tapplet_manifest.id, + package_name: &tapplet_manifest.id, + display_name: &tapplet_manifest.metadata.display_name, + logo_url: &tapplet_manifest.metadata.logo_url, + background_url: &tapplet_manifest.metadata.background_url, + author_name: &tapplet_manifest.metadata.author.name, + author_website: &tapplet_manifest.metadata.author.website, + about_summary: &tapplet_manifest.metadata.about.summary, + about_description: &tapplet_manifest.metadata.about.description, + category: &tapplet_manifest.metadata.category, + } + } +} + +impl<'a> From<&CreateTapplet<'a>> for UpdateTapplet { + fn from(create_tapplet: &CreateTapplet) -> Self { + UpdateTapplet { + registry_id: create_tapplet.registry_id.to_string(), + package_name: create_tapplet.package_name.to_string(), + display_name: create_tapplet.display_name.to_string(), + logo_url: create_tapplet.logo_url.to_string(), + background_url: create_tapplet.background_url.to_string(), + author_name: create_tapplet.author_name.to_string(), + author_website: create_tapplet.author_website.to_string(), + about_summary: create_tapplet.about_summary.to_string(), + about_description: create_tapplet.about_description.to_string(), + category: create_tapplet.category.to_string(), + } + } +} + +#[derive(Debug, AsChangeset)] +#[diesel(table_name = tapplet)] +pub struct UpdateTapplet { + pub registry_id: String, + pub package_name: String, + pub display_name: String, + pub logo_url: String, + pub background_url: String, + pub author_name: String, + pub author_website: String, + pub about_summary: String, + pub about_description: String, + pub category: String, +} + +#[derive(Queryable, Selectable, Debug, Serialize, Clone)] +#[diesel(table_name = tapplet_version)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct TappletVersion { + pub id: Option, + pub tapplet_id: Option, + pub version: String, + pub integrity: String, + pub registry_url: String, +} + +#[derive(Insertable, Debug)] +#[diesel(table_name = tapplet_version)] +pub struct CreateTappletVersion<'a> { + pub tapplet_id: Option, + pub version: &'a str, + pub integrity: &'a str, + pub registry_url: &'a str, +} + +impl<'a> From<&CreateTappletVersion<'a>> for UpdateTappletVersion { + fn from(create_tapplet_version: &CreateTappletVersion) -> Self { + UpdateTappletVersion { + tapplet_id: create_tapplet_version.tapplet_id, + version: create_tapplet_version.version.to_string(), + integrity: create_tapplet_version.integrity.to_string(), + registry_url: create_tapplet_version.registry_url.to_string(), + } + } +} + +#[derive(Debug, AsChangeset)] +#[diesel(table_name = tapplet_version)] +pub struct UpdateTappletVersion { + pub tapplet_id: Option, + pub version: String, + pub integrity: String, + pub registry_url: String, +} + +#[derive(Queryable, Selectable, Debug, Serialize)] +#[diesel(table_name = dev_tapplet)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct DevTapplet { + pub id: Option, + pub package_name: String, + pub endpoint: String, + pub display_name: String, +} + +#[derive(Insertable, Debug)] +#[diesel(table_name = dev_tapplet)] +pub struct CreateDevTapplet<'a> { + pub endpoint: &'a str, + pub package_name: &'a str, + pub display_name: &'a str, +} + +impl<'a> From<&CreateDevTapplet<'a>> for UpdateDevTapplet { + fn from(create_dev_tapplet: &CreateDevTapplet) -> Self { + UpdateDevTapplet { + endpoint: create_dev_tapplet.endpoint.to_string(), + package_name: create_dev_tapplet.package_name.to_string(), + display_name: create_dev_tapplet.display_name.to_string(), + } + } +} + +#[derive(Debug, AsChangeset)] +#[diesel(table_name = dev_tapplet)] +pub struct UpdateDevTapplet { + pub endpoint: String, + pub package_name: String, + pub display_name: String, +} + +#[derive(Queryable, Selectable, Debug, Serialize)] +#[diesel(table_name = tapplet_audit)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct TappletAudit { + pub id: Option, + pub tapplet_id: Option, + pub auditor: String, + pub report_url: String, +} + +#[derive(Insertable, Debug)] +#[diesel(table_name = tapplet_audit)] +pub struct CreateTappletAudit<'a> { + pub tapplet_id: Option, + pub auditor: &'a str, + pub report_url: &'a str, +} + +impl<'a> From<&CreateTappletAudit<'a>> for UpdateTappletAudit { + fn from(create_tapplet_audit: &CreateTappletAudit) -> Self { + UpdateTappletAudit { + tapplet_id: create_tapplet_audit.tapplet_id, + auditor: create_tapplet_audit.auditor.to_string(), + report_url: create_tapplet_audit.report_url.to_string(), + } + } +} + +#[derive(Debug, AsChangeset)] +#[diesel(table_name = tapplet_audit)] +pub struct UpdateTappletAudit { + pub tapplet_id: Option, + pub auditor: String, + pub report_url: String, +} + +#[derive(Queryable, Selectable, Debug, Serialize)] +#[diesel(table_name = tapplet_asset)] +#[diesel(check_for_backend(diesel::sqlite::Sqlite))] +pub struct TappletAsset { + pub id: Option, + pub tapplet_id: Option, + pub icon_url: String, + pub background_url: String, +} + +#[derive(Insertable, Debug)] +#[diesel(table_name = tapplet_asset)] +pub struct CreateTappletAsset<'a> { + pub tapplet_id: Option, + pub icon_url: &'a str, + pub background_url: &'a str, +} + +impl<'a> From<&CreateTappletAsset<'a>> for UpdateTappletAsset { + fn from(create_tapplet_asset: &CreateTappletAsset) -> Self { + UpdateTappletAsset { + tapplet_id: create_tapplet_asset.tapplet_id, + icon_url: create_tapplet_asset.icon_url.to_string(), + background_url: create_tapplet_asset.background_url.to_string(), + } + } +} + +#[derive(Debug, AsChangeset)] +#[diesel(table_name = tapplet_asset)] +pub struct UpdateTappletAsset { + pub tapplet_id: Option, + pub icon_url: String, + pub background_url: String, +} diff --git a/src-tauri/src/database/schema.rs b/src-tauri/src/database/schema.rs new file mode 100644 index 000000000..68618beeb --- /dev/null +++ b/src-tauri/src/database/schema.rs @@ -0,0 +1,77 @@ +// @generated automatically by Diesel CLI. + +diesel::table! { + dev_tapplet (id) { + id -> Nullable, + package_name -> Text, + endpoint -> Text, + display_name -> Text, + } +} + +diesel::table! { + installed_tapplet (id) { + id -> Nullable, + tapplet_id -> Nullable, + tapplet_version_id -> Nullable, + } +} + +diesel::table! { + tapplet (id) { + id -> Nullable, + registry_id -> Text, + package_name -> Text, + display_name -> Text, + logo_url -> Text, + background_url -> Text, + author_name -> Text, + author_website -> Text, + about_summary -> Text, + about_description -> Text, + category -> Text, + } +} + +diesel::table! { + tapplet_asset (id) { + id -> Nullable, + tapplet_id -> Nullable, + icon_url -> Text, + background_url -> Text, + } +} + +diesel::table! { + tapplet_audit (id) { + id -> Nullable, + tapplet_id -> Nullable, + auditor -> Text, + report_url -> Text, + } +} + +diesel::table! { + tapplet_version (id) { + id -> Nullable, + tapplet_id -> Nullable, + version -> Text, + integrity -> Text, + registry_url -> Text, + } +} + +diesel::joinable!(installed_tapplet -> tapplet (tapplet_id)); +diesel::joinable!(installed_tapplet -> tapplet_version (tapplet_version_id)); +diesel::joinable!(tapplet_asset -> tapplet (tapplet_id)); +diesel::joinable!(tapplet_audit -> tapplet (tapplet_id)); +diesel::joinable!(tapplet_version -> tapplet (tapplet_id)); + +diesel::allow_tables_to_appear_in_same_query!( + dev_tapplet, + installed_tapplet, + tapplet, + tapplet_asset, + tapplet_audit, + tapplet_version, +); diff --git a/src-tauri/src/database/store.rs b/src-tauri/src/database/store.rs new file mode 100644 index 000000000..8a1ee78d2 --- /dev/null +++ b/src-tauri/src/database/store.rs @@ -0,0 +1,587 @@ +use diesel::prelude::*; +use diesel::SqliteConnection; +use std::ops::DerefMut; +use std::sync::Arc; +use std::sync::Mutex; +use std::sync::MutexGuard; + +use crate::database::models::TappletAudit; +use crate::database::models::TappletVersion; +use crate::database::models::{ + CreateInstalledTapplet, CreateTapplet, InstalledTapplet, Tapplet, UpdateTapplet, +}; +use crate::interface::InstalledTappletWithName; +use crate::interface::TappletSemver; +use crate::ootle::error::{ + DatabaseError::*, + Error::{self, DatabaseError}, +}; + +use super::models::CreateDevTapplet; +use super::models::CreateTappletAsset; +use super::models::CreateTappletAudit; +use super::models::CreateTappletVersion; +use super::models::DevTapplet; +use super::models::TappletAsset; +use super::models::UpdateDevTapplet; +use super::models::UpdateInstalledTapplet; +use super::models::UpdateTappletAsset; +use super::models::UpdateTappletAudit; +use super::models::UpdateTappletVersion; + +pub struct SqliteStore { + connection: Arc>, +} + +impl SqliteStore { + pub fn new(connection: Arc>) -> Self { + Self { connection } + } + + pub fn get_connection(&self) -> MutexGuard { + self.connection.lock().unwrap() + } +} + +pub trait Store { + fn get_all(&mut self) -> Result, Error>; + fn get_by_id(&mut self, id: i32) -> Result; + fn create(&mut self, item: &U) -> Result; + fn delete(&mut self, entity: T) -> Result; + fn update(&mut self, old: T, new: &G) -> Result; +} + +impl SqliteStore { + pub fn get_installed_tapplets_with_display_name( + &mut self, + ) -> Result, Error> { + use crate::database::schema::installed_tapplet::dsl::*; + use crate::database::schema::tapplet::dsl::*; + use crate::database::schema::tapplet_version::dsl::*; + + let tapplets: Vec<(InstalledTapplet, Tapplet, TappletVersion)> = installed_tapplet + .inner_join(tapplet) + .inner_join(tapplet_version) + .select(( + installed_tapplet::all_columns(), + tapplet::all_columns(), + tapplet_version::all_columns(), + )) + .load::<(InstalledTapplet, Tapplet, TappletVersion)>(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "installed tapplet".to_string(), + }) + })?; + + let result = tapplets + .into_iter() + .map(|(installed_tapp, tapp, tapp_version)| { + let test1 = self + .get_registered_tapplet_with_version(tapp.id.unwrap()) + .unwrap(); + + return InstalledTappletWithName { + installed_tapplet: installed_tapp, + display_name: tapp.display_name, + installed_version: tapp_version.version, + latest_version: test1.1.version, + }; + }) + .collect(); + + Ok(result) + } + + pub fn get_installed_tapplet_full_by_id( + &mut self, + installed_tapplet_id: i32, + ) -> Result<(InstalledTapplet, Tapplet, TappletVersion), Error> { + use crate::database::schema::installed_tapplet::dsl::id; + use crate::database::schema::installed_tapplet::dsl::*; + use crate::database::schema::tapplet::dsl::*; + use crate::database::schema::tapplet_version::dsl::*; + + installed_tapplet + .filter(id.eq(installed_tapplet_id)) + .inner_join(tapplet) + .inner_join(tapplet_version) + .select(( + installed_tapplet::all_columns(), + tapplet::all_columns(), + tapplet_version::all_columns(), + )) + .first::<(InstalledTapplet, Tapplet, TappletVersion)>(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "installed tapplet".to_string(), + }) + }) + } + + pub fn get_registered_tapplet_with_version( + &mut self, + registered_tapplet_id: i32, + ) -> Result<(Tapplet, TappletVersion), Error> { + use crate::database::schema::tapplet::dsl::id; + use crate::database::schema::tapplet::dsl::*; + use crate::database::schema::tapplet_version::dsl::*; + + let boxed_tapplet = tapplet + .filter(id.eq(registered_tapplet_id)) + .first::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "tapplet".to_string(), + }) + })?; + + let versions: Vec = tapplet_version + .filter(tapplet_id.eq(registered_tapplet_id)) + .load::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "tapplet version".to_string(), + }) + })?; + + let versions = versions + .into_iter() + .map(|tapp_version| TappletSemver::try_from(tapp_version)) + .collect::, Error>>()?; + + let latest_version = versions + .into_iter() + .max_by_key(|ver| ver.semver.clone()) + .ok_or(Error::VersionNotFound)?; + + return Ok((boxed_tapplet, latest_version.tapplet_version)); + } + + pub fn get_tapplet_assets_by_tapplet_id( + &mut self, + tapp_id: i32, + ) -> Result, Error> { + use crate::database::schema::tapplet_asset::dsl::*; + + tapplet_asset + .filter(tapplet_id.eq(tapp_id)) + .first::(self.get_connection().deref_mut()) + .optional() + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "tapplet asset".to_string(), + }) + }) + } +} + +impl<'a> Store, UpdateTapplet> for SqliteStore { + fn get_all(&mut self) -> Result, Error> { + use crate::database::schema::tapplet::dsl::*; + + tapplet + .load::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet".to_string(), + }) + }) + } + + fn get_by_id(&mut self, tapplet_id: i32) -> Result { + use crate::database::schema::tapplet::dsl::*; + + tapplet + .filter(id.eq(tapplet_id)) + .first::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet".to_string(), + }) + }) + } + + fn create(&mut self, item: &CreateTapplet) -> Result { + use crate::database::schema::tapplet; + + diesel::insert_into(tapplet::table) + .values(item) + .on_conflict(tapplet::package_name) + .do_update() + .set(UpdateTapplet::from(item)) + .get_result(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToCreate { + entity_name: "Tapplet".to_string(), + }) + }) + } + + fn delete(&mut self, entity: Tapplet) -> Result { + use crate::database::schema::tapplet::dsl::*; + + diesel::delete(tapplet.filter(id.eq(entity.id))) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToDelete { + entity_name: "Tapplet".to_string(), + }) + }) + } + + fn update(&mut self, old: Tapplet, new: &UpdateTapplet) -> Result { + use crate::database::schema::tapplet::dsl::*; + + diesel::update(tapplet.filter(id.eq(old.id))) + .set(new) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToUpdate { + entity_name: "Tapplet".to_string(), + }) + }) + } +} + +impl Store for SqliteStore { + fn get_all(&mut self) -> Result, Error> { + use crate::database::schema::installed_tapplet::dsl::*; + + installed_tapplet + .load::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Installed Tapplet".to_string(), + }) + }) + } + + fn get_by_id(&mut self, installed_tapplet_id: i32) -> Result { + use crate::database::schema::installed_tapplet::dsl::*; + + installed_tapplet + .filter(id.eq(installed_tapplet_id)) + .first::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "installed Tapplet".to_string(), + }) + }) + } + + fn create(&mut self, item: &CreateInstalledTapplet) -> Result { + use crate::database::schema::installed_tapplet; + + diesel::insert_into(installed_tapplet::table) + .values(item) + .on_conflict(( + installed_tapplet::tapplet_id, + installed_tapplet::tapplet_version_id, + )) + .do_update() + .set(UpdateInstalledTapplet::from(item)) + .get_result(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToCreate { + entity_name: "Installed Tapplet".to_string(), + }) + }) + } + + fn update( + &mut self, + old: InstalledTapplet, + new: &UpdateInstalledTapplet, + ) -> Result { + use crate::database::schema::installed_tapplet::dsl::*; + + diesel::update(installed_tapplet.filter(id.eq(old.id))) + .set(new) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToUpdate { + entity_name: "installed Tapplet".to_string(), + }) + }) + } + + fn delete(&mut self, entity: InstalledTapplet) -> Result { + use crate::database::schema::installed_tapplet::dsl::*; + + diesel::delete(installed_tapplet.filter(id.eq(entity.id))) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToDelete { + entity_name: "installed Tapplet".to_string(), + }) + }) + } +} + +impl<'a> Store, UpdateTappletVersion> for SqliteStore { + fn get_all(&mut self) -> Result, Error> { + use crate::database::schema::tapplet_version::dsl::*; + + tapplet_version + .load::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet version".to_string(), + }) + }) + } + + fn get_by_id(&mut self, tapplet_version_id: i32) -> Result { + use crate::database::schema::tapplet_version::dsl::*; + + tapplet_version + .filter(id.eq(tapplet_version_id)) + .first::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet version".to_string(), + }) + }) + } + + fn create(&mut self, item: &CreateTappletVersion) -> Result { + use crate::database::schema::tapplet_version; + + diesel::insert_into(tapplet_version::table) + .values(item) + .on_conflict((tapplet_version::version, tapplet_version::tapplet_id)) + .do_update() + .set(UpdateTappletVersion::from(item)) + .get_result(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToCreate { + entity_name: "Tapplet version".to_string(), + }) + }) + } + + fn update(&mut self, old: TappletVersion, new: &UpdateTappletVersion) -> Result { + use crate::database::schema::tapplet_version::dsl::*; + + diesel::update(tapplet_version.filter(id.eq(old.id))) + .set(new) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToUpdate { + entity_name: "Tapplet version".to_string(), + }) + }) + } + + fn delete(&mut self, entity: TappletVersion) -> Result { + use crate::database::schema::tapplet_version::dsl::*; + + diesel::delete(tapplet_version.filter(id.eq(entity.id))) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToDelete { + entity_name: "Tapplet version".to_string(), + }) + }) + } +} + +impl<'a> Store, UpdateTappletAudit> for SqliteStore { + fn get_all(&mut self) -> Result, Error> { + use crate::database::schema::tapplet_audit::dsl::*; + + tapplet_audit + .load::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet audit".to_string(), + }) + }) + } + + fn get_by_id(&mut self, tapplet_audit_id: i32) -> Result { + use crate::database::schema::tapplet_audit::dsl::*; + + tapplet_audit + .filter(id.eq(tapplet_audit_id)) + .first::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet audit".to_string(), + }) + }) + } + + fn create(&mut self, item: &CreateTappletAudit) -> Result { + use crate::database::schema::tapplet_audit; + + diesel::insert_into(tapplet_audit::table) + .values(item) + .on_conflict((tapplet_audit::auditor, tapplet_audit::tapplet_id)) + .do_update() + .set(UpdateTappletAudit::from(item)) + .get_result(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToCreate { + entity_name: "Tapplet audit".to_string(), + }) + }) + } + + fn update(&mut self, old: TappletAudit, new: &UpdateTappletAudit) -> Result { + use crate::database::schema::tapplet_audit::dsl::*; + + diesel::update(tapplet_audit.filter(id.eq(old.id))) + .set(new) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToUpdate { + entity_name: "Tapplet audit".to_string(), + }) + }) + } + + fn delete(&mut self, entity: TappletAudit) -> Result { + use crate::database::schema::tapplet_audit::dsl::*; + + diesel::delete(tapplet_audit.filter(id.eq(entity.id))) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToDelete { + entity_name: "Tapplet audit".to_string(), + }) + }) + } +} + +impl<'a> Store, UpdateDevTapplet> for SqliteStore { + fn get_all(&mut self) -> Result, Error> { + use crate::database::schema::dev_tapplet::dsl::*; + + dev_tapplet + .load::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Dev Tapplet".to_string(), + }) + }) + } + + fn get_by_id(&mut self, dev_tapplet_id: i32) -> Result { + use crate::database::schema::dev_tapplet::dsl::*; + + dev_tapplet + .filter(id.eq(dev_tapplet_id)) + .first::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Dev Tapplet".to_string(), + }) + }) + } + + fn create(&mut self, item: &CreateDevTapplet) -> Result { + use crate::database::schema::dev_tapplet; + + diesel::insert_into(dev_tapplet::table) + .values(item) + .get_result(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(AlreadyExists { + entity_name: "Dev Tapplet".to_string(), + field_name: "endpoint".to_string(), + }) + }) + } + + fn update(&mut self, old: DevTapplet, new: &UpdateDevTapplet) -> Result { + use crate::database::schema::dev_tapplet::dsl::*; + + diesel::update(dev_tapplet.filter(id.eq(old.id))) + .set(new) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToUpdate { + entity_name: "Dev Tapplet".to_string(), + }) + }) + } + + fn delete(&mut self, entity: DevTapplet) -> Result { + use crate::database::schema::dev_tapplet::dsl::*; + + diesel::delete(dev_tapplet.filter(id.eq(entity.id))) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToDelete { + entity_name: "Dev Tapplet".to_string(), + }) + }) + } +} + +impl<'a> Store, UpdateTappletAsset> for SqliteStore { + fn get_all(&mut self) -> Result, Error> { + use crate::database::schema::tapplet_asset::dsl::*; + + tapplet_asset + .load::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet asset".to_string(), + }) + }) + } + + fn get_by_id(&mut self, tapplet_asset_id: i32) -> Result { + use crate::database::schema::tapplet_asset::dsl::*; + + tapplet_asset + .filter(id.eq(tapplet_asset_id)) + .first::(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToRetrieveData { + entity_name: "Tapplet asset".to_string(), + }) + }) + } + + fn create(&mut self, item: &CreateTappletAsset) -> Result { + use crate::database::schema::tapplet_asset; + + diesel::insert_into(tapplet_asset::table) + .values(item) + .get_result(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToCreate { + entity_name: "Tapplet asset".to_string(), + }) + }) + } + + fn update(&mut self, old: TappletAsset, new: &UpdateTappletAsset) -> Result { + use crate::database::schema::tapplet_asset::dsl::*; + + diesel::update(tapplet_asset.filter(id.eq(old.id))) + .set(new) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToUpdate { + entity_name: "Tapplet asset".to_string(), + }) + }) + } + + fn delete(&mut self, entity: TappletAsset) -> Result { + use crate::database::schema::tapplet_asset::dsl::*; + + diesel::delete(tapplet_asset.filter(id.eq(entity.id))) + .execute(self.get_connection().deref_mut()) + .map_err(|_| { + DatabaseError(FailedToDelete { + entity_name: "Tapplet asset".to_string(), + }) + }) + } +} diff --git a/src-tauri/src/gpu_miner_adapter.rs b/src-tauri/src/gpu_miner_adapter.rs index 9670fe673..502ed6c3b 100644 --- a/src-tauri/src/gpu_miner_adapter.rs +++ b/src-tauri/src/gpu_miner_adapter.rs @@ -215,6 +215,9 @@ impl ProcessAdapter for GpuMinerAdapter { Network::NextNet => { envs.insert("TARI_NETWORK".to_string(), "nextnet".to_string()); } + Network::Igor => { + envs.insert("TARI_NETWORK".to_string(), "igor".to_string()); + } _ => { return Err(anyhow!("Unsupported network")); } diff --git a/src-tauri/src/indexer_adapter.rs b/src-tauri/src/indexer_adapter.rs new file mode 100644 index 000000000..c2b3ce607 --- /dev/null +++ b/src-tauri/src/indexer_adapter.rs @@ -0,0 +1,169 @@ +use anyhow::anyhow; +use anyhow::Error; +use async_trait::async_trait; +use log::{debug, info, warn}; +use std::collections::HashMap; +use std::path::PathBuf; +use tari_common::configuration::Network; +use tari_shutdown::Shutdown; + +use crate::process_adapter::HealthStatus; +use crate::process_adapter::ProcessStartupSpec; +use crate::process_adapter::{ProcessAdapter, ProcessInstance, StatusMonitor}; + +use crate::indexer_manager::IndexerConfig; +use crate::utils::file_utils::convert_to_string; +use crate::utils::logging_utils::setup_logging; +// #[cfg(target_os = "windows")] +// use crate::utils::setup_utils::setup_utils::add_firewall_rule; + +const LOG_TARGET: &str = "tari::universe::indexer_adapter"; + +pub struct IndexerAdapter { + pub(crate) config: Option, +} + +impl IndexerAdapter { + pub fn new() -> Self { + Self { config: None } + } + + #[allow(dead_code)] + pub fn config(&self) -> Option<&IndexerConfig> { + self.config.as_ref() + } +} + +impl ProcessAdapter for IndexerAdapter { + type StatusMonitor = IndexerStatusMonitor; + + fn spawn_inner( + &self, + data_dir: PathBuf, + _config_dir: PathBuf, + log_dir: PathBuf, + binary_version_path: PathBuf, + ) -> Result<(ProcessInstance, Self::StatusMonitor), Error> { + let inner_shutdown = Shutdown::new(); + + info!(target: LOG_TARGET, "Starting validator node"); + + let working_dir = data_dir.join("indexer"); + std::fs::create_dir_all(&working_dir).unwrap_or_else(|error| { + warn!(target: LOG_TARGET, "Could not create indexer working directory - {}", error); + }); + let working_dir_string = convert_to_string(working_dir)?; + + if self.config.is_none() { + return Err(anyhow!("IndexerAdapter config is not set")); + } + let config = self + .config + .as_ref() + .ok_or_else(|| anyhow!("IndexerAdapter config is not set"))?; + + let config_dir = &log_dir + .join("indexer") + .join("configs") + .join("log4rs_config_indexer.yml"); + setup_logging( + &config_dir.clone(), + &log_dir, + include_str!("../log4rs/universe_sample.yml"), + )?; + let network = Network::get_current_or_user_setting_or_default(); + + let args: Vec = vec![ + // "start".to_string(), + "-b".to_string(), + working_dir_string, + "--network".to_string(), + network.to_string(), + format!("-pindexer.base_node_grpc_url={}", config.base_node_grpc_url), + // format!("-pindexer.json_rpc_address={}", config.json_rpc_address), + // format!("-pindexer.http_ui_address={}", config.web_ui_address), + format!( + "-pindexer.ui_connect_address={}", + config.json_rpc_public_address + ), + // format!( + // "-pindexer.base_layer_scanning_interval={}", + // config.base_layer_scanning_interval + // ), + ]; + let pid_file_name = self.pid_file_name().to_string(); + + let mut envs = HashMap::new(); + match Network::get_current_or_user_setting_or_default() { + Network::Esmeralda => { + envs.insert("TARI_NETWORK".to_string(), "esmeralda".to_string()); + } + Network::NextNet => { + envs.insert("TARI_NETWORK".to_string(), "nextnet".to_string()); + } + Network::Igor => { + envs.insert("TARI_NETWORK".to_string(), "igor".to_string()); + } + _ => { + return Err(anyhow!("Unsupported network")); + } + }; + + #[cfg(target_os = "windows")] + add_firewall_rule("sha_indexer.exe".to_string(), binary_version_path.clone())?; + + debug!(target: LOG_TARGET, "🚀 Tari Indexer args {:?}", &args); + + Ok(( + ProcessInstance { + shutdown: inner_shutdown, + handle: None, + startup_spec: ProcessStartupSpec { + file_path: binary_version_path, + envs: Some(envs), + args, + data_dir, + pid_file_name, + name: self.name().to_string(), + }, + }, + IndexerStatusMonitor::new(config.grpc_port), + )) + } + + fn name(&self) -> &str { + "indexer" + } + + fn pid_file_name(&self) -> &str { + "indexer_pid" + } +} + +#[derive(Clone)] +pub struct IndexerStatusMonitor { + grpc_port: u16, +} + +impl IndexerStatusMonitor { + pub fn new(port: u16) -> Self { + Self { grpc_port: port } + } +} + +#[async_trait] +impl StatusMonitor for IndexerStatusMonitor { + async fn check_health(&self) -> HealthStatus { + if self.status().await.is_ok() { + HealthStatus::Healthy + } else { + HealthStatus::Unhealthy + } + } +} + +impl IndexerStatusMonitor { + pub async fn status(&self) -> Result { + Ok(self.grpc_port) //TODO + } +} diff --git a/src-tauri/src/indexer_manager.rs b/src-tauri/src/indexer_manager.rs new file mode 100644 index 000000000..86630572b --- /dev/null +++ b/src-tauri/src/indexer_manager.rs @@ -0,0 +1,234 @@ +use std::path::PathBuf; +use std::sync::Arc; +use std::time::Duration; + +use futures_util::future::FusedFuture; +use log::warn; +use tari_shutdown::ShutdownSignal; +use tokio::sync::RwLock; +use tokio::time::sleep; + +use crate::indexer_adapter::IndexerAdapter; +use crate::process_watcher::ProcessWatcher; +use crate::ProcessStatsCollectorBuilder; + +const LOG_TARGET: &str = "tari::universe::validator_node_manager"; + +/** + * FULL CONFIG FROM TARI-DAN REPO +#[derive(Debug, Serialize, Deserialize, Clone)] +#[serde(deny_unknown_fields)] +#[allow(clippy::struct_excessive_bools)] +pub struct IndexerConfig { + override_from: Option, + /// A path to the file that stores your node identity and secret key + pub identity_file: PathBuf, + /// A path to the file that stores the tor hidden service private key, if using the tor transport + pub tor_identity_file: PathBuf, + /// The Tari base node's GRPC URL (e.g. http://localhost:18142) + pub base_node_grpc_url: Option, + /// How often do we want to scan the base layer for changes + #[serde(with = "serializers::seconds")] + pub base_layer_scanning_interval: Duration, + /// The relative path to store persistent data + pub data_dir: PathBuf, + /// The p2p configuration settings + pub p2p: P2pConfig, + /// JSON-RPC address of the indexer application + pub json_rpc_address: Option, + /// GraphQL port of the indexer application + pub graphql_address: Option, + /// The address of the HTTP UI + pub http_ui_address: Option, + /// The jrpc address where the UI should connect (it can be the same as the json_rpc_address, but doesn't have to + /// be), if this will be None, then the listen_addr will be used. + pub ui_connect_address: Option, + /// How often do we want to scan the second layer for new versions + #[serde(with = "serializers::seconds")] + pub dan_layer_scanning_internal: Duration, + /// Template config + pub templates: TemplateConfig, + /// The sidechain to listen on. + pub sidechain_id: Option, + /// The templates sidechain id + pub templates_sidechain_id: Option, + /// The burnt utxos sidechain id + pub burnt_utxo_sidechain_id: Option, + /// The event filtering configuration + pub event_filters: Vec, +} + */ + +#[derive(Clone)] +pub struct IndexerConfig { + pub base_path: String, + pub json_rpc_address: String, + pub json_rpc_public_address: String, + pub grpc_port: u16, + pub base_node_grpc_url: String, + pub web_ui_address: String, + pub base_layer_scanning_interval: u16, +} + +pub struct IndexerConfigBuilder { + config: IndexerConfig, +} + +impl IndexerConfigBuilder { + pub fn new() -> Self { + Self { + config: IndexerConfig::default(), + } + } + + pub fn with_base_node(&mut self, grpc_port: u16) -> &mut Self { + self.config.base_node_grpc_url = format!("http://127.0.0.1:{}", grpc_port); + self + } + + pub fn with_base_path(&mut self, base_path: PathBuf) -> &mut Self { + self.config.base_path = base_path.to_string_lossy().to_string(); + self + } + + pub fn build(&self) -> Result { + // TODO set proper values not hardcoded now + // for localhost use + let jrpc_port = 18007; + let web_ui_port = 18008; + let grpc_port = 18002; + + // for contractnet use + // let jrpc_port = 12026; + // let web_ui_port = 12027; + // let grpc_port = 12021; + Ok(IndexerConfig { + base_path: self.config.base_path.clone(), + json_rpc_address: format!("http://127.0.0.1:{}", jrpc_port), + json_rpc_public_address: format!("http://127.0.0.1:{}", jrpc_port), + base_node_grpc_url: self.config.base_node_grpc_url.clone(), + web_ui_address: format!("http://127.0.0.1:{}", web_ui_port), + base_layer_scanning_interval: 1, + grpc_port, + }) + } +} + +impl IndexerConfig { + pub fn builder() -> IndexerConfigBuilder { + IndexerConfigBuilder::new() + } +} + +impl Default for IndexerConfig { + fn default() -> Self { + // contractnet + // base_path: String::from(""), + // json_rpc_address: String::from("http://127.0.0.1:12027/"), + // json_rpc_public_address: String::from("http://127.0.0.1:12027"), + // base_node_grpc_url: String::from("http://127.0.0.1:12021"), + // web_ui_address: String::from("http://127.0.0.1:12027"), + // base_layer_scanning_interval: 10, + // grpc_port: 12026, + Self { + base_path: String::from(""), + json_rpc_address: String::from("http://127.0.0.1:18007/"), + json_rpc_public_address: String::from("http://127.0.0.1:18007"), + base_node_grpc_url: String::from("http://127.0.0.1:18002"), + web_ui_address: String::from("http://127.0.0.1:18008"), + base_layer_scanning_interval: 10, + grpc_port: 18006, + } + } +} + +impl Clone for IndexerManager { + fn clone(&self) -> Self { + Self { + watcher: self.watcher.clone(), + } + } +} + +pub struct IndexerManager { + watcher: Arc>>, +} + +impl IndexerManager { + pub fn new(stats_collector: &mut ProcessStatsCollectorBuilder) -> Self { + let adapter = IndexerAdapter::new(); + let process_watcher = ProcessWatcher::new(adapter, stats_collector.take_indexer()); + + Self { + watcher: Arc::new(RwLock::new(process_watcher)), + } + } + + pub async fn is_running(&self) -> bool { + let process_watcher = self.watcher.read().await; + process_watcher.is_running() + } + + pub async fn is_pid_file_exists(&self, base_path: PathBuf) -> bool { + let lock = self.watcher.read().await; + lock.is_pid_file_exists(base_path) + } + + pub async fn ensure_started( + &self, + app_shutdown: ShutdownSignal, + config: IndexerConfig, + base_path: PathBuf, + config_path: PathBuf, + log_path: PathBuf, + ) -> Result<(), anyhow::Error> { + let mut process_watcher = self.watcher.write().await; + + process_watcher.adapter.config = Some(config); + process_watcher.health_timeout = Duration::from_secs(28); + process_watcher.poll_time = Duration::from_secs(30); + process_watcher + .start( + app_shutdown.clone(), + base_path, + config_path, + log_path, + crate::binaries::Binaries::TariIndexer, + ) + .await?; + process_watcher.wait_ready().await?; + if let Some(status_monitor) = &process_watcher.status_monitor { + loop { + if app_shutdown.is_terminated() || app_shutdown.is_triggered() { + break; + } + sleep(Duration::from_secs(5)).await; + if let Ok(_stats) = status_monitor.status().await { + break; + } else { + warn!(target: LOG_TARGET, "Indexer stats not available yet"); + } + } // wait until we have stats from Indexer, so its started + } + Ok(()) + } + + pub async fn stop(&self) -> Result { + let mut process_watcher = self.watcher.write().await; + let exit_code = process_watcher.stop().await?; + if exit_code != 0 { + warn!(target: LOG_TARGET, "Indexer process exited with code {}", exit_code); + } + Ok(exit_code) + } + + pub async fn grpc_port(&self) -> u16 { + let process_watcher = self.watcher.read().await; + process_watcher + .adapter + .config + .as_ref() + .map(|c| c.grpc_port) + .unwrap_or_default() + } +} diff --git a/src-tauri/src/interface/dev_tapplet.rs b/src-tauri/src/interface/dev_tapplet.rs new file mode 100644 index 000000000..023e2b97b --- /dev/null +++ b/src-tauri/src/interface/dev_tapplet.rs @@ -0,0 +1,8 @@ +#[derive(Debug, serde::Deserialize)] +pub struct DevTappletResponse { + #[serde(rename = "packageName")] + pub package_name: String, + #[serde(rename = "displayName")] + pub display_name: String, + pub version: String, //TODO save ver in db +} diff --git a/src-tauri/src/interface/mod.rs b/src-tauri/src/interface/mod.rs new file mode 100644 index 000000000..e6de76dee --- /dev/null +++ b/src-tauri/src/interface/mod.rs @@ -0,0 +1,7 @@ +mod dev_tapplet; +mod registry; +mod tapplet; + +pub use dev_tapplet::*; +pub use registry::*; +pub use tapplet::*; diff --git a/src-tauri/src/interface/registry.rs b/src-tauri/src/interface/registry.rs new file mode 100644 index 000000000..ee932e803 --- /dev/null +++ b/src-tauri/src/interface/registry.rs @@ -0,0 +1,97 @@ +use std::collections::HashMap; + +#[derive(Debug, serde::Deserialize)] +pub struct RegisteredTapplets { + #[serde(rename = "manifestVersion")] + pub manifest_version: String, + #[serde(rename = "registeredTapplets")] + pub registered_tapplets: HashMap, +} + +#[derive(Debug, serde::Deserialize)] +pub struct TappletRegistryManifest { + pub id: String, + pub metadata: Metadata, + pub versions: HashMap, +} + +#[derive(Debug, serde::Deserialize, Clone)] +pub struct Metadata { + #[serde(rename = "displayName")] + pub display_name: String, + #[serde(rename = "logoUrl")] + pub logo_url: String, + #[serde(rename = "backgroundUrl")] + pub background_url: String, + pub author: Author, + pub about: About, + // pub audits: Vec, + pub category: String, +} + +#[derive(Debug, serde::Deserialize, Clone)] +pub struct Version { + pub integrity: String, + #[serde(rename = "registryUrl")] + pub registry_url: String, +} + +#[derive(Debug, serde::Deserialize, Clone)] +pub struct Author { + pub name: String, + pub website: String, +} + +#[derive(Debug, serde::Deserialize, Clone)] +pub struct About { + pub summary: String, + pub description: String, +} + +#[derive(Debug, serde::Deserialize, Clone)] +pub struct Audit { + pub auditor: String, + #[serde(rename = "reportUrl")] + pub report_url: String, +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct TappletPermissions { + #[serde(rename = "requiredPermissions")] + pub required_permissions: Vec, + #[serde(rename = "optionalPermissions")] + pub optional_permissions: Vec, +} + +#[derive(Debug, serde::Deserialize)] +pub struct TappletConfig { + #[serde(rename = "packageName")] + pub package_name: String, + pub version: String, + #[serde(rename = "supportedChain")] + pub supported_chain: Vec, + pub permissions: TappletPermissions, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub enum TariPermission { + TariPermissionNftGetOwnershipProof, + TariPermissionAccountBalance, + TariPermissionAccountInfo, + TariPermissionAccountList, + TariPermissionKeyList, + TariPermissionTransactionGet, + TariPermissionTransactionSend, + TariPermissionGetNft, + TariPermissionSubstatesRead, + TariPermissionTemplatesRead, +} + +#[derive(Debug, Clone, serde::Serialize)] +pub struct ActiveTapplet { + pub tapplet_id: i32, + pub display_name: String, + pub source: String, + pub version: String, + pub permissions: TappletPermissions, +} diff --git a/src-tauri/src/interface/tapplet.rs b/src-tauri/src/interface/tapplet.rs new file mode 100644 index 000000000..a04f0c02c --- /dev/null +++ b/src-tauri/src/interface/tapplet.rs @@ -0,0 +1,43 @@ +use serde::Serialize; + +use crate::{ + database::models::{InstalledTapplet, Tapplet, TappletVersion}, + ootle::error::Error, +}; + +#[derive(Serialize)] +pub struct InstalledTappletWithName { + pub installed_tapplet: InstalledTapplet, + pub display_name: String, + pub installed_version: String, + pub latest_version: String, +} +#[derive(Debug)] +pub struct TappletSemver { + pub tapplet_version: TappletVersion, + pub semver: semver::Version, +} + +impl TryFrom for TappletSemver { + type Error = Error; + fn try_from(value: TappletVersion) -> Result { + let semver = + semver::Version::parse(&value.version).map_err(|_| Error::VersionParseError)?; + Ok(Self { + tapplet_version: value, + semver, + }) + } +} + +#[derive(Serialize)] +pub struct RegisteredTappletWithVersion { + pub registered_tapp: Tapplet, + pub tapp_version: TappletVersion, +} + +#[derive(Serialize)] +pub struct TappletAssets { + pub icon_url: String, + pub background_url: String, +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a06105ead..6414d09c8 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -25,12 +25,18 @@ use auto_launcher::AutoLauncher; use commands::CpuMinerStatus; +use consts::{DB_FILE_NAME, TAPPLETS_ASSETS_DIR}; use events_manager::EventsManager; use gpu_miner_adapter::GpuMinerStatus; use hardware::hardware_status_monitor::HardwareStatusMonitor; +use indexer_manager::{IndexerConfig, IndexerManager}; use log::{debug, error, info, warn}; use node_adapter::BaseNodeStatus; +use ootle::tapplet_server::start; +use ootle::wallet_daemon::spawn_wallet_daemon; +use ootle::{setup_tokens, AssetServer, DatabaseConnection, OotleWallet, ShutdownTokens, Tokens}; use p2pool::models::Connections; +use port_allocator::PortAllocator; use process_stats_collector::ProcessStatsCollectorBuilder; use release_notes::ReleaseNotes; use serde_json::json; @@ -42,6 +48,7 @@ use telemetry_service::TelemetryService; use tokio::sync::watch::{self}; use updates_manager::UpdatesManager; use utils::locks_utils::{try_read_with_retry, try_write_with_retry}; +use validator_node_manager::{ValidatorNodeConfig, ValidatorNodeManager}; use wallet_adapter::WalletState; use log4rs::config::RawConfig; @@ -99,6 +106,7 @@ mod commands; mod consts; mod cpu_miner; mod credential_manager; +mod database; mod download_utils; mod events; mod events_emitter; @@ -110,12 +118,16 @@ mod github; mod gpu_miner; mod gpu_miner_adapter; mod hardware; +mod indexer_adapter; +mod indexer_manager; +mod interface; mod internal_wallet; mod mm_proxy_adapter; mod mm_proxy_manager; mod network_utils; mod node_adapter; mod node_manager; +mod ootle; mod p2pool; mod p2pool_adapter; mod p2pool_manager; @@ -135,6 +147,8 @@ mod tor_adapter; mod tor_manager; mod updates_manager; mod utils; +mod validator_node_adapter; +mod validator_node_manager; mod wallet_adapter; mod wallet_manager; mod xmrig; @@ -352,6 +366,10 @@ async fn setup_inner( .app_config_dir() .expect("Could not get config dir"); let log_dir = app.path().app_log_dir().expect("Could not get log dir"); + let app_data_dir = app + .path() + .app_data_dir() + .expect("Could not get app data dir"); #[cfg(target_os = "windows")] if cfg!(target_os = "windows") && !cfg!(dev) { @@ -427,6 +445,7 @@ async fn setup_inner( .duration_since(last_binaries_update_timestamp) .unwrap_or(Duration::from_secs(0)) > Duration::from_secs(60 * 60 * 6); + // let should_check_for_update = false; // TODO tmp solution if use_tor && !cfg!(target_os = "macos") { telemetry_service @@ -577,7 +596,7 @@ async fn setup_inner( }), ) .await; - progress.set_max(35).await; + progress.set_max(32).await; progress .update("checking-latest-version-sha-p2pool".to_string(), None, 0) .await; @@ -591,7 +610,64 @@ async fn setup_inner( .await?; sleep(Duration::from_secs(1)); + info!(target: LOG_TARGET, "🚀🚀🚀 OOTLE SECTION"); + if state.config.read().await.ootle_node_enabled() { + info!(target: LOG_TARGET, "🚀🚀🚀 CHECK OOTLE BINARIES"); + //TODO tari validator node binary + // should check for update - for now is set to false because of local build + let _unused = telemetry_service + .send( + "checking-latest-version-tari-validator-node".to_string(), + json!({ + "service": "validator-node", + "percentage":32, + }), + ) + .await; + + progress.set_max(34).await; + progress + .update( + "checking-latest-version-tari-validator-node".to_string(), + None, + 0, + ) + .await; + binary_resolver + .initialize_binary_timeout( + Binaries::TariValidatorNode, + progress.clone(), + false, + rx.clone(), + ) + .await?; + sleep(Duration::from_secs(1)); + info!(target: LOG_TARGET, "🚀 Validator node binary resolved"); + + let _unused = telemetry_service + .send( + "checking-latest-version-tari-indexer".to_string(), + json!({ + "service": "tari-indexer", + "percentage":34, + }), + ) + .await; + //TODO tari ootle indexer binary + // should check for update - for now is set to false because of local build + progress.set_max(36).await; + progress + .update("checking-latest-version-tari-indexer".to_string(), None, 0) + .await; + binary_resolver + .initialize_binary_timeout(Binaries::TariIndexer, progress.clone(), false, rx.clone()) + .await?; + sleep(Duration::from_secs(1)); + info!(target: LOG_TARGET, "🚀 Tari Indexer binary resolved"); + } + if should_check_for_update { + info!(target: LOG_TARGET, "🚀 Check update binary"); state .config .write() @@ -613,6 +689,11 @@ async fn setup_inner( HardwareStatusMonitor::current().initialize().await?; + progress.set_max(37).await; + progress + .update("waiting-for-minotari-node-to-start".to_string(), None, 0) + .await; + let mut tor_control_port = None; if use_tor && !cfg!(target_os = "macos") { state @@ -628,14 +709,14 @@ async fn setup_inner( } let _unused = telemetry_service .send( - "waiting-for-minotari-node-to-start".to_string(), + "waiting-for-tor-to-start".to_string(), json!({ - "service": "minotari_node", - "percentage":35, + "service": "tor_manager", + "percentage":37, }), ) .await; - progress.set_max(37).await; + progress.set_max(38).await; progress .update("waiting-for-minotari-node-to-start".to_string(), None, 0) .await; @@ -663,11 +744,11 @@ async fn setup_inner( "resetting-minotari-node-database".to_string(), json!({ "service": "minotari_node", - "percentage":37, + "percentage":38, }), ) .await; - progress.set_max(38).await; + progress.set_max(39).await; progress .update("minotari-node-restarting".to_string(), None, 0) .await; @@ -683,15 +764,6 @@ async fn setup_inner( } info!(target: LOG_TARGET, "Node has started and is ready"); - let _unused = telemetry_service - .send( - "waiting-for-wallet".to_string(), - json!({ - "service": "wallet", - "percentage":35, - }), - ) - .await; progress.set_max(40).await; progress .update("waiting-for-wallet".to_string(), None, 0) @@ -730,13 +802,14 @@ async fn setup_inner( ) .await; progress.set_max(75).await; - state.node_manager.wait_synced(progress.clone()).await?; - let mut telemetry_id = state - .telemetry_manager - .read() - .await - .get_unique_string() - .await; + // TODO uncomment if contractnet base node (igor) is connected without error + // state.node_manager.wait_synced(progress.clone()).await?; + // let mut telemetry_id = state + // .telemetry_manager + // .read() + // .await + // .get_unique_string() + // .await; if telemetry_id.is_empty() { telemetry_id = "unknown_miner_tari_universe".to_string(); } @@ -750,7 +823,7 @@ async fn setup_inner( "starting-benchmarking".to_string(), json!({ "service": "starting_benchmarking", - "percentage":75, + "percentage":77, }), ) .await; @@ -788,6 +861,7 @@ async fn setup_inner( .with_stats_server_port(state.config.read().await.p2pool_stats_server_port()) .with_cpu_benchmark_hashrate(Some(benchmarked_hashrate)) .build()?; + info!(target: LOG_TARGET, "🌐 Base Node GRPC PORT p2p {:?}", &base_node_grpc); state .p2pool_manager @@ -810,6 +884,133 @@ async fn setup_inner( }), ) .await; + + //TODO RUN OOTLE + if state.config.read().await.ootle_enabled() { + progress.set_max(86).await; + progress.update("starting-ootle".to_string(), None, 0).await; + + let app_handle_clone = app.clone(); + let data_dir_clone = data_dir.clone(); + let log_dir_clone = log_dir.clone(); + let config_dir_clone = config_dir.clone(); + let db_path = app_data_dir.join(DB_FILE_NAME); + + app.manage(DatabaseConnection(Arc::new(std::sync::Mutex::new( + database::establish_connection(db_path.to_str().unwrap_or_default()), + )))); + info!(target: LOG_TARGET, "🚀 DB connection established successfully"); + + app.manage(Tokens { + auth: std::sync::Mutex::new("".to_string()), + permission: std::sync::Mutex::new("".to_string()), + }); + app.manage(ShutdownTokens::default()); + let jrpc_port = PortAllocator::new().assign_port_with_fallback(); + app.manage(OotleWallet { jrpc_port }); + + info!(target: LOG_TARGET, "🚀🚀🚀 RUN OOTLE THREAD {:?}", jrpc_port); + let _ = tauri::async_runtime::spawn(async move { + spawn_wallet_daemon(jrpc_port, data_dir_clone, config_dir_clone, log_dir_clone) + .await + .inspect_err( + |e| error!(target: LOG_TARGET, "Could not start the Tari Ootle: {:?}", e), + ) + .map_err(|e| e.to_string()) + }); + + info!(target: LOG_TARGET, "🚀🚀🚀 RUN TOKEN THREAD"); + let _ = tauri::async_runtime::spawn(async move { + setup_tokens(app_handle_clone) + .await + .inspect_err(|e| error!(target: LOG_TARGET, "Could not set tokens: {:?}", e)) + .map_err(|e| e.to_string()) + }); + let tapp_assets_path = app_data_dir.join(TAPPLETS_ASSETS_DIR); + let (addr, cancel_token) = start(tapp_assets_path).await.unwrap(); //TODO unwrap + app.manage(AssetServer { addr, cancel_token }); + + // run local node + if state.config.read().await.ootle_node_enabled() { + progress.set_max(88).await; + progress + .update("starting-ootle-local-node".to_string(), None, 0) + .await; + + let _unused = telemetry_service + .send( + "starting-validator-node".to_string(), + json!({ + "service": "starting-validator-node", + "percentage":86, + }), + ) + .await; + + let base_node_grpc = state.node_manager.get_grpc_port().await?; + info!(target: LOG_TARGET, "🌐 Base Node GRPC PORT VN {:?}", &base_node_grpc); + let validator_node_config = ValidatorNodeConfig::builder() + .with_base_node(base_node_grpc) + .with_base_path(&data_dir) + .build()?; + let tcp_port = state.node_manager.get_tcp_listener_port().await; + info!(target: LOG_TARGET, "🌐 Base Node TCP {:?}", &tcp_port); + + state + .validator_node_manager + .ensure_started( + state.shutdown.to_signal(), + validator_node_config, + data_dir.clone(), + config_dir.clone(), + log_dir.clone(), + ) + .await?; + + info!(target: LOG_TARGET, "🚀 Ootle enabled & Tari Validator Node started"); + let _unused = telemetry_service + .send( + "starting-tari-indexer".to_string(), + json!({ + "service": "starting-tari-indexer", + "percentage":88, + }), + ) + .await; + + progress.set_max(90).await; + progress + .update("starting-ootle-indexer".to_string(), None, 0) + .await; + let indexer_config = IndexerConfig::builder() + .with_base_node(base_node_grpc) + .with_base_path(data_dir.clone()) + .build()?; + + state + .indexer_manager + .ensure_started( + state.shutdown.to_signal(), + indexer_config, + data_dir.clone(), + config_dir.clone(), + log_dir.clone(), + ) + .await?; + + info!(target: LOG_TARGET, "🚀 Ootle enabled & Tari Indexer started"); + let _unused = telemetry_service + .send( + "starting-mmproxy".to_string(), + json!({ + "service": "starting-mmproxy", + "percentage":90, + }), + ) + .await; + } + } + progress.set_max(100).await; progress .update("starting-mmproxy".to_string(), None, 0) @@ -866,6 +1067,7 @@ async fn setup_inner( ), ); + // TODO disable orphan checker for local node let app_handle_clone: tauri::AppHandle = app.clone(); tauri::async_runtime::spawn(async move { let mut interval: time::Interval = time::interval(Duration::from_secs(30)); @@ -938,6 +1140,10 @@ struct UniverseAppState { cached_p2pool_connections: Arc>>>, systemtray_manager: Arc>, events_manager: Arc, + tokens: Arc>, + validator_node_manager: ValidatorNodeManager, + indexer_manager: IndexerManager, + ootle_wallet: Arc>, } #[derive(Clone, serde::Serialize)] @@ -987,6 +1193,8 @@ fn main() { let wallet_manager2 = wallet_manager.clone(); let (p2pool_stats_tx, p2pool_stats_rx) = watch::channel(None); let p2pool_manager = P2poolManager::new(p2pool_stats_tx, &mut stats_collector); + let validator_node_manager = ValidatorNodeManager::new(&mut stats_collector); + let indexer_manager = IndexerManager::new(&mut stats_collector); let cpu_config = Arc::new(RwLock::new(CpuMinerConfig { node_connection: CpuMinerConnection::BuiltInProxy, @@ -1063,6 +1271,13 @@ fn main() { cached_p2pool_connections: Arc::new(RwLock::new(None)), systemtray_manager: Arc::new(RwLock::new(SystemTrayManager::new())), events_manager: Arc::new(EventsManager::new(wallet_state_watch_rx)), + tokens: Arc::new(RwLock::new(Tokens { + auth: std::sync::Mutex::new("".to_string()), + permission: std::sync::Mutex::new("".to_string()), + })), + validator_node_manager, + indexer_manager, + ootle_wallet: Arc::new(RwLock::new(OotleWallet::default())), }; let app_state_clone = app_state.clone(); let app = tauri::Builder::default() @@ -1081,6 +1296,7 @@ fn main() { })) .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_cli::init()) + .plugin(tauri_plugin_dialog::init()) .setup(|app| { let config_path = app .path() @@ -1149,13 +1365,13 @@ fn main() { // They may not exist. This could be first run. if node_peer_db.exists() { if let Err(e) = remove_dir_all(node_peer_db) { - warn!(target: LOG_TARGET, "Could not clear peer data folder: {}", e); + warn!(target: LOG_TARGET, "Could not clear node peer data folder: {}", e); } } if wallet_peer_db.exists() { if let Err(e) = remove_dir_all(wallet_peer_db) { - warn!(target: LOG_TARGET, "Could not clear peer data folder: {}", e); + warn!(target: LOG_TARGET, "Could not clear wallet peer data folder: {}", e); } } @@ -1289,7 +1505,25 @@ fn main() { commands::sign_ws_data, commands::set_airdrop_tokens, commands::get_airdrop_tokens, - commands::frontend_ready + commands::frontend_ready, + commands::fetch_registered_tapplets, + commands::launch_tapplet, + commands::insert_tapp_registry_db, + commands::read_tapp_registry_db, + commands::get_assets_server_addr, + commands::download_and_extract_tapp, + commands::insert_installed_tapp_db, + commands::read_installed_tapp_db, + commands::update_installed_tapp_db, + commands::delete_installed_tapplet, + commands::add_dev_tapplet, + commands::read_dev_tapplets, + commands::delete_dev_tapplet, + commands::call_wallet, + commands::update_installed_tapplet, + commands::set_ootle_enabled, + commands::set_ootle_node_enabled, + commands::upload_wasm_file ]) .build(tauri::generate_context!()) .inspect_err( diff --git a/src-tauri/src/mm_proxy_adapter.rs b/src-tauri/src/mm_proxy_adapter.rs index 561d58213..1c0a01770 100644 --- a/src-tauri/src/mm_proxy_adapter.rs +++ b/src-tauri/src/mm_proxy_adapter.rs @@ -29,7 +29,7 @@ use crate::utils::file_utils::convert_to_string; use crate::utils::logging_utils::setup_logging; use anyhow::{anyhow, Error}; use async_trait::async_trait; -use log::warn; +use log::{info, warn}; // use log::warn; use reqwest::Client; use serde_json::json; @@ -38,7 +38,7 @@ use tari_shutdown::Shutdown; const LOG_TARGET: &str = "tari::universe::mm_proxy_adapter"; -#[derive(Clone, PartialEq, Default)] +#[derive(Clone, PartialEq, Default, Debug)] pub(crate) struct MergeMiningProxyConfig { pub port: u16, pub p2pool_enabled: bool, @@ -107,7 +107,7 @@ impl ProcessAdapter for MergeMiningProxyAdapter { let working_dir_string = convert_to_string(working_dir)?; let config_dir_string = convert_to_string(config_dir.to_path_buf())?; - + info!(target: LOG_TARGET, "👨‍🔧 --- MM_PROXY_ADAPTER {:?}", &config); let mut args: Vec = vec![ "-b".to_string(), working_dir_string, @@ -206,7 +206,7 @@ impl StatusMonitor for MergeMiningProxyStatusMonitor { ) .is_ok() { - HealthStatus::Healthy + HealthStatus::Healthy } else { if self.start_time.elapsed().as_secs() < 30 { return HealthStatus::Healthy; diff --git a/src-tauri/src/mm_proxy_manager.rs b/src-tauri/src/mm_proxy_manager.rs index 52c63b7a1..181a37a32 100644 --- a/src-tauri/src/mm_proxy_manager.rs +++ b/src-tauri/src/mm_proxy_manager.rs @@ -37,7 +37,7 @@ use crate::process_watcher::ProcessWatcher; const LOG_TARGET: &str = "tari::universe::mm_proxy_manager"; -#[derive(Clone)] +#[derive(Clone, Debug)] pub(crate) struct StartConfig { pub app_shutdown: ShutdownSignal, pub base_path: PathBuf, @@ -129,19 +129,20 @@ impl MmProxyManager { let mut current_start_config = self.start_config.write().await; *current_start_config = Some(config.clone()); let mut process_watcher = self.watcher.write().await; - + let new_port = PortAllocator::new().assign_port_with_fallback(); let new_config = MergeMiningProxyConfig { tari_address: config.tari_address.clone(), base_node_grpc_port: config.base_node_grpc_port, coinbase_extra: config.coinbase_extra.clone(), p2pool_enabled: config.p2pool_enabled, - port: PortAllocator::new().assign_port_with_fallback(), + port: new_port, p2pool_grpc_port: config.p2pool_port, monero_nodes: config.monero_nodes.clone(), use_monero_fail: config.use_monero_fail, }; process_watcher.adapter.config = Some(new_config.clone()); - info!(target: LOG_TARGET, "Starting mmproxy"); + info!(target: LOG_TARGET, "👨‍🔧 --- Starting mmproxy"); + info!(target: LOG_TARGET, "👨‍🔧 --- Starting mmproxy with config {:?} | {:?}", &new_port, &config); process_watcher .start( config.app_shutdown, diff --git a/src-tauri/src/node_adapter.rs b/src-tauri/src/node_adapter.rs index de9bc8c45..f49cd5a3f 100644 --- a/src-tauri/src/node_adapter.rs +++ b/src-tauri/src/node_adapter.rs @@ -70,7 +70,7 @@ impl MinotariNodeAdapter { grpc_port: port, tcp_listener_port, use_pruned_mode: false, - required_initial_peers: 3, + required_initial_peers: 1, //TODO should be 3 - its just for testing use_tor: false, tor_control_port: None, status_broadcast, @@ -85,7 +85,7 @@ impl ProcessAdapter for MinotariNodeAdapter { fn spawn_inner( &self, data_dir: PathBuf, - _config_dir: PathBuf, + config_dir: PathBuf, log_dir: PathBuf, binary_version_path: PathBuf, ) -> Result<(ProcessInstance, Self::StatusMonitor), Error> { @@ -96,18 +96,18 @@ impl ProcessAdapter for MinotariNodeAdapter { let working_dir: PathBuf = data_dir.join("node"); std::fs::create_dir_all(&working_dir)?; - let config_dir = log_dir + let log_config_dir = log_dir .clone() .join("base_node") .join("configs") .join("log4rs_config_base_node.yml"); setup_logging( - &config_dir.clone(), + &log_config_dir.clone(), &log_dir, include_str!("../log4rs/base_node_sample.yml"), )?; let working_dir_string = convert_to_string(working_dir)?; - let config_dir_string = convert_to_string(config_dir)?; + let config_dir_string = convert_to_string(log_config_dir)?; let mut args: Vec = vec![ "-b".to_string(), @@ -144,6 +144,7 @@ impl ProcessAdapter for MinotariNodeAdapter { // args.push("localnet".to_string()); // } if self.use_tor { + info!(target: LOG_TARGET, "🔥 MINOTARI TOR GRPC {:?} from conf dir {:?}", &self.grpc_port, &config_dir); // args.push("-p".to_string()); // args.push( // "base_node.p2p.transport.tor.listener_address_override=/ip4/127.0.0.1/tcp/18189" @@ -172,6 +173,7 @@ impl ProcessAdapter for MinotariNodeAdapter { )); } } else { + info!(target: LOG_TARGET, "🔥 MINOTARI NO-TOR GRPC {:?} from conf dir {:?}", &self.grpc_port, &config_dir); args.push("-p".to_string()); args.push("base_node.p2p.transport.type=tcp".to_string()); args.push("-p".to_string()); @@ -191,6 +193,7 @@ impl ProcessAdapter for MinotariNodeAdapter { "{key}.p2p.seeds.dns_seeds=ip4.seeds.{key}.tari.com,ip6.seeds.{key}.tari.com", key = network.as_key_str(), )); + info!(target: LOG_TARGET, "🔥 MINOTARI NODE NET KEY {:?}", &network.as_key_str()); } #[cfg(target_os = "windows")] diff --git a/src-tauri/src/node_manager.rs b/src-tauri/src/node_manager.rs index 843799406..b9b987952 100644 --- a/src-tauri/src/node_manager.rs +++ b/src-tauri/src/node_manager.rs @@ -110,6 +110,7 @@ impl NodeManager { tor_control_port: Option, ) -> Result<(), NodeManagerError> { { + info!(target: LOG_TARGET, "🔥 [NODE_MANAGER] node ensure_started CONFIG PATH {:?}", &config_path); let mut process_watcher = self.watcher.write().await; process_watcher.adapter.use_tor = use_tor; @@ -138,6 +139,7 @@ impl NodeManager { log_path: PathBuf, ) -> Result<(), anyhow::Error> { let mut process_watcher = self.watcher.write().await; + info!(target: LOG_TARGET, "🔥 [NODE_MANAGER] node start CONFIG PATH {:?}", &config_path); process_watcher .start( app_shutdown, diff --git a/src-tauri/src/ootle/db_connection.rs b/src-tauri/src/ootle/db_connection.rs new file mode 100644 index 000000000..119f343a6 --- /dev/null +++ b/src-tauri/src/ootle/db_connection.rs @@ -0,0 +1,31 @@ +use log::{error, info, warn}; +use std::{thread::sleep, time::Duration}; + +use super::rpc::permission_token; + +const LOG_TARGET: &str = "tari::universe::main"; + +pub async fn try_get_tokens(jrpc_port: Option) -> (String, String) { + let close_max_retries: u32 = 10; // Maximum number of retries + let retry_delay_ms: u64 = 10000; // Delay between retries in milliseconds + + let mut retries = 0; + loop { + match permission_token(jrpc_port).await { + Ok(tokens) => { + info!(target: LOG_TARGET, "✅ Wallet Daemon permission token found"); + return tokens; + } + Err(e) => { + warn!(target: LOG_TARGET, "❌ Wallet Daemon permission token error: {:?}", e); + retries += 1; + if retries >= close_max_retries { + error!(target: LOG_TARGET, "Failed to fetch permission token after {:?} retries: {:?}", close_max_retries,e); + return ("".to_string(), "".to_string()); + } + sleep(Duration::from_millis(retry_delay_ms)); + continue; + } + } + } +} diff --git a/src-tauri/src/ootle/error.rs b/src-tauri/src/ootle/error.rs new file mode 100644 index 000000000..fb2dbead6 --- /dev/null +++ b/src-tauri/src/ootle/error.rs @@ -0,0 +1,113 @@ +use std::num::ParseIntError; +use thiserror::Error; + +#[derive(Debug, Error)] +pub enum Error { + #[error(transparent)] DatabaseError(#[from] DatabaseError), + #[error(transparent)] IOError(#[from] IOError), + #[error(transparent)] RequestError(#[from] RequestError), + #[error(transparent)] TappletServerError(#[from] TappletServerError), + #[error("tauri-error")] TauriError(#[from] tauri::Error), + #[error(transparent)] JsonParsingError(#[from] serde_json::Error), + #[error("failed-to-parse-tapplet-version")] VersionParseError, + #[error("failed-to-find-tapplet-version")] VersionNotFound, + #[error("failed-to-obtain-permission-token-lock")] FailedToObtainPermissionTokenLock, + #[error("failed-to-obtain-auth-token-lock")] FailedToObtainAuthTokenLock, + #[error("failed-to-call-provider | method-{method} & params-{params}")] ProviderError { + method: String, + params: String, + }, + #[error("tapplet-invalid-checksum | version-{version}")] InvalidChecksum { + version: String, + }, + #[error("tapplet-package-incomplete | version-{version}")] TappletIncomplete { + version: String, + }, + #[error("failed-to-request | message-{message}")] RequestFailed { + message: String, + }, +} + +impl serde::Serialize for Error { + fn serialize(&self, serializer: S) -> Result where S: serde::ser::Serializer { + serializer.serialize_str(self.to_string().as_ref()) + } +} + +#[derive(Debug, Error)] +pub enum TappletServerError { + #[error("failed-to-obtain-local-address")] FailedToObtainLocalAddress, + #[error("failed-to-start-tapplet-server")] FailedToStart, + #[error("tapplet-server-already-running")] AlreadyRunning, + #[error("token-for-tapplet-server-is-invalid")] TokenInvalid, + #[error("failed-to-bind-port | port-{port}")] BindPortError { + port: String, + }, +} + +#[derive(Debug, Error)] +pub enum DatabaseError { + #[error("already-exists | entity_name-{entity_name} & field_name-{field_name}")] AlreadyExists { + entity_name: String, + field_name: String, + }, + #[error("failed-to-retrieve-data | entity_name-{entity_name}")] FailedToRetrieveData { + entity_name: String, + }, + #[error("failed-to-delete | entity_name-{entity_name}")] FailedToDelete { + entity_name: String, + }, + #[error("failed-to-update | entity_name-{entity_name}")] FailedToUpdate { + entity_name: String, + }, + #[error("failed-to-create | entity_name-{entity_name}")] FailedToCreate { + entity_name: String, + }, +} + +#[derive(Debug, Error)] +pub enum IOError { + #[error("failed-to-copy-file | from-{from} & to-{to}")] FailedToCopyFile { + from: String, + to: String, + }, + #[error("failed-to-read-dir | path-{path}")] FailedToReadDir { + path: String, + }, + #[error("failed-to-read-file | path-{path}")] FailedToReadFile { + path: String, + }, + #[error("failed-to-create-dir | path-{path}")] FailedToCreateDir { + path: String, + }, + #[error("failed-to-create-file | path-{path}")] FailedToCreateFile { + path: String, + }, + #[error("failed-to-write-file | path-{path}")] FailedToWriteFile { + path: String, + }, + #[error("failed-to-parse-int")] ParseIntError(#[from] ParseIntError), + #[error("failed-to-unpack-file | path-{path}")] FailedToUnpackFile { + path: String, + }, + #[error("missing-package-json-or-tapplet-manifest-json | path-{path}")] InvalidUnpackedFiles { + path: String, + }, + #[error("failed-to-delete-tapplet | path-{path}")] FailedToDeleteTapplet { + path: String, + }, + #[error("failed-to-get-file-path")] FailedToGetFilePath, +} + +#[derive(Debug, Error)] +pub enum RequestError { + #[error("fetch-manifest-error | endpoint-{endpoint}")] FetchManifestError { + endpoint: String, + }, + #[error("manifest-response-error | endpoint-{endpoint}")] ManifestResponseError { + endpoint: String, + }, + #[error("failed-to-download | url-{url}")] FailedToDownload { + url: String, + }, +} diff --git a/src-tauri/src/ootle/hash_calculator.rs b/src-tauri/src/ootle/hash_calculator.rs new file mode 100644 index 000000000..635dee70f --- /dev/null +++ b/src-tauri/src/ootle/hash_calculator.rs @@ -0,0 +1,83 @@ +use crate::ootle::error::{ + Error::{self, IOError}, + IOError::*, +}; +use base64::{engine::general_purpose, Engine as _}; +use sha2::Digest; +use std::fs::read_dir; +use std::io::Read; +use std::path::PathBuf; +use std::{fs, path::Path}; + +fn calculate_hash(data: &[u8], sha: usize) -> String { + match sha { + 224 => format!("{:x}", sha2::Sha224::digest(&data)), + 256 => format!("{:x}", sha2::Sha256::digest(&data)), + 384 => format!("{:x}", sha2::Sha384::digest(&data)), + 512 => format!("{:x}", sha2::Sha512::digest(&data)), + _ => panic!("Unsupported SHA algorithm: {}", sha), + } +} + +fn read_data(path: &Path, sha: usize) -> Result { + let mut results = Vec::new(); + if path.is_dir() { + let paths = read_dir(path).map_err(|_| { + IOError(FailedToReadDir { + path: path.to_str().unwrap_or_default().to_string(), + }) + })?; + for entry in paths { + if let Ok(entry) = entry { + if entry.path().is_file() { + if let Ok(mut file) = fs::File::open(&entry.path()) { + let entry_path = entry.path(); + let path_to_file = entry_path.to_str().unwrap_or_default(); + let mut data = Vec::new(); + file.read_to_end(&mut data).map_err(|_| { + IOError(FailedToReadFile { + path: path_to_file.to_string(), + }) + })?; + let strout = calculate_hash(&data, sha); + results.push(strout + " " + path_to_file); + } + } + } + } + } else { + if let Ok(mut file) = fs::File::open(&path) { + let mut data = Vec::new(); + file.read_to_end(&mut data).map_err(|_| { + IOError(FailedToReadFile { + path: path.to_str().unwrap_or_default().to_string(), + }) + })?; + let strout = calculate_hash(&data, sha); + results.push(strout); + } + } + Ok(results.join("\n")) +} + +fn decode_hex(s: &str) -> Result, Error> { + (0..s.len()) + .step_by(2) + .map(|i| u8::from_str_radix(&s[i..i + 2], 16).map_err(|e| Error::IOError(ParseIntError(e)))) + .collect() +} + +pub fn calculate_checksum(tapplet_path: PathBuf) -> Result { + // sha-512 + let sha: usize = 512; + let tarball_file = tapplet_path.join("tapplet.tar.gz"); + + // calculate sha and convert + let shasum_output = read_data(&tarball_file, sha)?; + let decoded_shasum = decode_hex(&shasum_output)?; + let converted_shasum = general_purpose::STANDARD.encode(decoded_shasum); + + // format output to match `integrity` field from manifest.json + let calculated_integrity = format!("{}{}", "sha512-", converted_shasum.replace("\n", "")); + Ok(calculated_integrity) +} diff --git a/src-tauri/src/ootle/mod.rs b/src-tauri/src/ootle/mod.rs new file mode 100644 index 000000000..33b61c432 --- /dev/null +++ b/src-tauri/src/ootle/mod.rs @@ -0,0 +1,71 @@ +use std::{ + collections::HashMap, + path::PathBuf, + sync::{Arc, Mutex}, +}; + +use db_connection::try_get_tokens; +use diesel::SqliteConnection; +use log::{error, info}; +use tauri::Manager; +use tokio_util::sync::CancellationToken; +use wallet_daemon::spawn_wallet_daemon; + +use crate::{commands::get_ootle_wallet_jrpc_port, consts::WALLET_DAEMON_CONFIG_FILE}; + +pub mod db_connection; +pub mod error; +pub mod hash_calculator; +pub mod rpc; +pub mod tapplet_installer; +pub mod tapplet_server; +pub mod wallet_daemon; + +const LOG_TARGET: &str = "tari::universe::main"; + +pub struct Tokens { + pub auth: Mutex, + pub permission: Mutex, +} +#[derive(Default)] +pub struct ShutdownTokens(pub Arc>>); + +pub struct DatabaseConnection(pub Arc>); + +pub struct AssetServer { + pub addr: String, + pub cancel_token: CancellationToken, +} + +#[derive(Clone)] +pub struct OotleWallet { + pub jrpc_port: u16, +} + +impl Default for OotleWallet { + fn default() -> Self { + OotleWallet { jrpc_port: 18010 } + } +} + +pub async fn setup_tokens(app: tauri::AppHandle) -> Result<(), Box> { + let jrpc_port = get_ootle_wallet_jrpc_port(app.state()).unwrap_or_default(); + let tokens = app.state::(); + let (permission_token, auth_token) = try_get_tokens(Some(jrpc_port)).await; + info!(target: LOG_TARGET, "🚀 Tokens setup successfully"); + tokens + .permission + .lock() + .map_err(|_| error::Error::FailedToObtainPermissionTokenLock) + .unwrap() + .replace_range(.., &permission_token); + tokens + .auth + .lock() + .map_err(|_| error::Error::FailedToObtainAuthTokenLock) + .unwrap() + .replace_range(.., &auth_token); + info!(target: LOG_TARGET, "🚀 Tokens initialized successfully"); + + Ok(()) +} diff --git a/src-tauri/src/ootle/rpc.rs b/src-tauri/src/ootle/rpc.rs new file mode 100644 index 000000000..7ae43bbd2 --- /dev/null +++ b/src-tauri/src/ootle/rpc.rs @@ -0,0 +1,82 @@ +use axum_jrpc::{JsonRpcAnswer, JsonRpcRequest, JsonRpcResponse}; +use log::{error, info}; +use reqwest::header::{AUTHORIZATION, CONTENT_TYPE}; +use reqwest::Url; +use serde::Serialize; +use std::{net::SocketAddr, str::FromStr}; +use tari_wallet_daemon_client::types::{ + AuthLoginAcceptRequest, AuthLoginAcceptResponse, AuthLoginRequest, AuthLoginResponse, +}; + +const LOG_TARGET: &str = "tari::dan::wallet_daemon"; +const DEFAULT_OOTLE_WALLET_JRPC_ADDRESS: &str = "127.0.0.1:18010"; + +pub async fn permission_token(jrpc_port: Option) -> Result<(String, String), anyhow::Error> { + let req_params = AuthLoginRequest { + permissions: vec!["Admin".to_string()], + duration: None, + }; + info!(target: LOG_TARGET, "🌟 RPC Auth request port: {:?} with params: {:?}", &jrpc_port, &req_params); + info!(target: LOG_TARGET, "🚀 Auth tokens request"); + let req_res = make_request(None, "auth.request".to_string(), &req_params, jrpc_port).await?; + let req_res: AuthLoginResponse = serde_json::from_value(req_res)?; + + info!(target: LOG_TARGET, "🚀 Auth tokens got response"); + let auth_token = req_res.auth_token; + + let acc_params = AuthLoginAcceptRequest { + auth_token: auth_token.clone(), + name: auth_token.clone(), + }; + info!(target: LOG_TARGET, "🚀 Auth tokens accept request"); + let acc_res = make_request(None, "auth.accept".to_string(), &acc_params, jrpc_port).await?; + let acc_res: AuthLoginAcceptResponse = serde_json::from_value(acc_res)?; + + info!(target: LOG_TARGET, "🚀 Auth tokens accept response"); + Ok((acc_res.permissions_token, auth_token)) +} + +pub async fn make_request( + token: Option, + method: String, + params: T, + jrpc_port: Option, +) -> Result { + info!(target: LOG_TARGET, "Make request"); + let json_connect_address = jrpc_port.map_or_else( + || DEFAULT_OOTLE_WALLET_JRPC_ADDRESS.to_string(), + |port| format!("127.0.0.1:{}", port), + ); + let address = SocketAddr::from_str(&json_connect_address).unwrap(); + let url = Url::parse(&format!("http://{}", address)).unwrap(); + info!(target: LOG_TARGET, "🌟 MAKE REQUEST URL: {:?} | socket address: {:?}", &url, &address); + + let method_name = method.clone(); + let client = reqwest::Client::new(); + + let body = JsonRpcRequest { + id: axum_jrpc::Id::Num(0), + method, + params: serde_json::to_value(params)?, + }; + let mut builder = client.post(url).header(CONTENT_TYPE, "application/json"); + if let Some(token) = token { + builder = builder.header(AUTHORIZATION, format!("Bearer {token}")); + } + let resp = builder + .json(&body) + .send() + .await? + .json::() + .await?; + match resp.result { + JsonRpcAnswer::Result(result) => { + info!(target: LOG_TARGET, "👁️‍🗨️ JSON rpc request {:?} completed successfully", method_name); + Ok(result) + } + JsonRpcAnswer::Error(error) => { + error!(target: LOG_TARGET, "🚨 JSON rpc request {:?} error: {:?}", method_name, error); + Err(anyhow::Error::msg(error.to_string())) + } + } +} diff --git a/src-tauri/src/ootle/tapplet_installer.rs b/src-tauri/src/ootle/tapplet_installer.rs new file mode 100644 index 000000000..a7a0d2971 --- /dev/null +++ b/src-tauri/src/ootle/tapplet_installer.rs @@ -0,0 +1,222 @@ +use crate::{ + consts::{REGISTRY_URL, TAPPLETS_ASSETS_DIR, TAPPLETS_INSTALLED_DIR}, + database::models::TappletVersion, + interface::{RegisteredTapplets, TappletAssets, TappletConfig, TappletPermissions}, + ootle::{ + error::{ + Error::{self, IOError, JsonParsingError, RequestError}, + IOError::*, + RequestError::*, + }, + hash_calculator::calculate_checksum, + }, +}; +use log::{error, warn}; +use std::{ + fs::{self}, + io::Write, + path::PathBuf, +}; +use tauri::Manager; +pub const LOG_TARGET: &str = "tari::universe"; + +pub fn delete_tapplet(tapplet_path: PathBuf) -> Result<(), Error> { + let path = tapplet_path + .clone() + .into_os_string() + .into_string() + .map_err(|_| IOError(FailedToGetFilePath))?; + fs::remove_dir_all(tapplet_path).map_err(|_| IOError(FailedToDeleteTapplet { path })) +} + +pub fn check_extracted_files(tapplet_path: PathBuf) -> Result { + // TODO define all needed files + // universe.tari/tapplets_installed///package + let tapp_dir: PathBuf = tapplet_path.join("package"); + let pkg_json_file = tapp_dir.join("package.json"); + // let manifest_file = tapp_dir.join("dist").join("tapplet.manifest.json"); + let path = tapplet_path + .into_os_string() + .into_string() + .map_err(|_| IOError(FailedToGetFilePath))?; + + if pkg_json_file.exists() { + Ok(true) + } else { + Err(IOError(InvalidUnpackedFiles { path })) + } +} + +pub fn get_tapp_download_path( + registry_id: String, + version: String, + app_handle: tauri::AppHandle, +) -> Result { + // app_path = /home/user/.local/share/universe.tari + let app_path = app_handle + .path() + .app_data_dir() + .expect("Could not get data dir"); + + let tapplet_path = app_path + .join(TAPPLETS_INSTALLED_DIR) + .join(registry_id) + .join(version); + + Ok(tapplet_path) +} + +async fn download_file(url: &str, dest: PathBuf) -> Result<(), Error> { + let client = reqwest::Client::new(); + let mut response = client.get(url).send().await.map_err(|_| { + RequestError(FailedToDownload { + url: url.to_string(), + }) + })?; + + if response.status().is_success() { + let dest_parent = dest.parent().unwrap(); + let path = dest + .clone() + .into_os_string() + .into_string() + .map_err(|_| IOError(FailedToGetFilePath))?; + fs::create_dir_all(&dest_parent).map_err(|_| { + IOError(FailedToCreateDir { + path: dest_parent.to_str().unwrap().to_owned(), + }) + })?; + + let mut file = fs::File::create(dest) + .map_err(|_| IOError(FailedToCreateFile { path: path.clone() }))?; + + while let Some(chunk) = response.chunk().await.map_err(|_| { + RequestError(FailedToDownload { + url: url.to_string(), + }) + })? { + file.write_all(&chunk) + .map_err(|_| IOError(FailedToWriteFile { path: path.clone() }))?; + } + } else if response.status().is_server_error() { + error!(target: LOG_TARGET, "❌ Download server error! Status: {:?}", response.status()); + } else { + error!(target: LOG_TARGET, "❌ Download failed! Unknown status. Server response: {:?}", response); + } + + Ok(()) +} + +fn get_or_create_tapp_asset_dir( + tapp_root_dir: PathBuf, + tapplet_name: &str, +) -> Result { + let tapp_asset_dir = tapp_root_dir.join(TAPPLETS_ASSETS_DIR).join(tapplet_name); + let path = tapp_asset_dir + .clone() + .into_os_string() + .into_string() + .map_err(|_| IOError(FailedToGetFilePath))?; + fs::create_dir_all(path.clone()).map_err(|_| IOError(FailedToCreateDir { path }))?; + return Ok(tapp_asset_dir); +} + +pub async fn download_asset( + app_handle: tauri::AppHandle, + tapplet_name: String, +) -> Result { + // let tapp_root_dir: PathBuf = app_handle.path().app_data_dir().unwrap().to_path_buf(); + let tapp_root_dir: PathBuf = app_handle + .path() + .app_data_dir() + .expect("Could not get data dir"); + let tapp_asset_dir = get_or_create_tapp_asset_dir(tapp_root_dir, &tapplet_name)?; + let assets = get_asset_urls(tapplet_name)?; + + let icon_dest = tapp_asset_dir.join("logo.svg"); + let background_dest = tapp_asset_dir.join("background.svg"); + + download_file(&assets.icon_url, icon_dest.clone()).await?; + download_file(&assets.background_url, background_dest.clone()).await?; + + Ok(TappletAssets { + icon_url: icon_dest.into_os_string().into_string().unwrap(), + background_url: background_dest.into_os_string().into_string().unwrap(), + }) +} + +pub fn get_asset_urls(tapplet_name: String) -> Result { + let icon = format!("{}/src/{}/images/logo.svg", REGISTRY_URL, tapplet_name); + let background = format!( + "{}/src/{}/images/background.svg", + REGISTRY_URL, tapplet_name + ); + Ok(TappletAssets { + icon_url: icon, + background_url: background, + }) +} + +pub async fn fetch_tapp_registry_manifest() -> Result { + let manifest_endpoint = format!("{}/dist/tapplets-registry.manifest.json", REGISTRY_URL); + + let manifest_res = reqwest::get(&manifest_endpoint) + .await + .map_err(|_| { + RequestError(FetchManifestError { + endpoint: manifest_endpoint.clone(), + }) + })? + .text() + .await + .map_err(|_| { + RequestError(ManifestResponseError { + endpoint: manifest_endpoint.clone(), + }) + })?; + + let tapplets: RegisteredTapplets = + serde_json::from_str(&manifest_res).map_err(|e| JsonParsingError(e))?; + Ok(tapplets) +} + +pub fn check_files_and_validate_checksum( + tapp: TappletVersion, + tapp_dir: PathBuf, +) -> Result { + let is_package_complete = check_extracted_files(tapp_dir.clone())?; + if !is_package_complete { + return Err(Error::TappletIncomplete { + version: tapp.version.clone(), + }); + } + // calculate `integrity` from downloaded tarball file + let integrity = calculate_checksum(tapp_dir)?; + let is_checksum_valid = tapp.integrity == integrity; + if !is_checksum_valid { + return Err(Error::InvalidChecksum { + version: tapp.version.clone(), + }); + } + Ok(is_checksum_valid) +} + +pub fn get_tapp_permissions(tapp_path: PathBuf) -> Result { + // tapp_dir = universe.tari/tapplets_installed///package + let tapp_dir: PathBuf = tapp_path.join("package"); + let tapp_config = tapp_dir.join("dist").join("tapplet.config.json"); + if !tapp_config.exists() { + warn!(target: LOG_TARGET, "❌ Failed to get Tapplet permissions. Config file not found."); + return Ok(TappletPermissions { + required_permissions: vec![], + optional_permissions: vec![], + }); + } + + let config = fs::read_to_string(tapp_config.clone()).unwrap_or_default(); + let tapplet: TappletConfig = serde_json::from_str(&config).map_err(|e| JsonParsingError(e))?; + Ok(TappletPermissions { + required_permissions: tapplet.permissions.required_permissions, + optional_permissions: tapplet.permissions.optional_permissions, + }) +} diff --git a/src-tauri/src/ootle/tapplet_server.rs b/src-tauri/src/ootle/tapplet_server.rs new file mode 100644 index 000000000..0c55fe931 --- /dev/null +++ b/src-tauri/src/ootle/tapplet_server.rs @@ -0,0 +1,60 @@ +use crate::ootle::error::{ + Error::{self, TappletServerError}, + TappletServerError::*, +}; + +use axum::Router; +use log::{error, info}; +use std::{net::SocketAddr, path::PathBuf}; +use tokio::select; +use tokio_util::sync::CancellationToken; +use tower_http::services::ServeDir; +const LOG_TARGET: &str = "tari::tapplet"; + +pub async fn start(tapplet_path: PathBuf) -> Result<(String, CancellationToken), Error> { + serve(using_serve_dir(tapplet_path), 0).await +} + +pub fn using_serve_dir(tapplet_path: PathBuf) -> Router { + let serve_dir = ServeDir::new(tapplet_path); + Router::new().nest_service("/", serve_dir) +} + +pub async fn serve(app: Router, port: u16) -> Result<(String, CancellationToken), Error> { + let cancel_token = CancellationToken::new(); + let cancel_token_clone = cancel_token.clone(); + + let addr = SocketAddr::from(([127, 0, 0, 1], port)); + let listener = tokio::net::TcpListener::bind(addr) + .await + .inspect_err(|e| error!(target: LOG_TARGET, "❌ Failed to bind port server error: {:?}", e)) + .map_err(|_| { + TappletServerError(BindPortError { + port: addr.to_string(), + }) + })?; + let address = listener + .local_addr() + .inspect_err( + |e| error!(target: LOG_TARGET, "❌ Failed to obtain local address error: {:?}", e), + ) + .map_err(|_| TappletServerError(FailedToObtainLocalAddress))? + .to_string(); + + tauri::async_runtime::spawn(async move { + axum::serve(listener, app) + .with_graceful_shutdown(shutdown_signal(cancel_token_clone)) + .await + .inspect_err(|e| error!(target: LOG_TARGET, "❌ Failed to start server error: {:?}", e)) + .map_err(|_| TappletServerError(FailedToStart)) + }); + info!(target: LOG_TARGET, "🚀 Tapplet start process completed successfully"); + + Ok((address, cancel_token)) +} + +async fn shutdown_signal(cancel_token: CancellationToken) { + select! { + _ = cancel_token.cancelled() => {} + } +} diff --git a/src-tauri/src/ootle/wallet_daemon.rs b/src-tauri/src/ootle/wallet_daemon.rs new file mode 100644 index 000000000..f68b79fd3 --- /dev/null +++ b/src-tauri/src/ootle/wallet_daemon.rs @@ -0,0 +1,94 @@ +use std::{ + fs, + net::{IpAddr, Ipv4Addr, SocketAddr}, + panic, + path::PathBuf, + process, +}; + +use crate::{ + consts::WALLET_DAEMON_CONFIG_FILE, port_allocator::PortAllocator, + utils::logging_utils::setup_logging, +}; +use log::{info, warn}; +use tari_common_dan2::configuration::Network; +use tari_dan_app_utilities::configuration::load_configuration; +use tari_dan_wallet_daemon::{ + cli::Cli, + config::{ApplicationConfig, WalletDaemonConfig}, + run_tari_dan_wallet_daemon, +}; +use tari_shutdown_dan2::Shutdown; +use tauri::Url; + +const LOG_TARGET: &str = "tari::dan::wallet_daemon"; + +pub async fn spawn_wallet_daemon( + port: u16, + data_dir: PathBuf, + config_dir: PathBuf, + log_dir: PathBuf, +) -> Result<(), anyhow::Error> { + let default_hook = panic::take_hook(); + panic::set_hook(Box::new(move |info| { + default_hook(info); + process::exit(1); + })); + let wallet_daemon_config_file = config_dir.join(WALLET_DAEMON_CONFIG_FILE); + info!(target: LOG_TARGET, "🌟 WALLET DAEMON config file {:?}", &wallet_daemon_config_file); + let wallet_daemon_config_file = wallet_daemon_config_file.to_str().unwrap().to_owned(); + let log_config_file = log_dir + .join("wallet_daemon") + .join("configs") + .join("log4rs_config_wallet.yml"); + let _contents = setup_logging( + &log_config_file.clone(), + &log_dir, + include_str!("../../log4rs/universe_sample.yml"), + )?; + + let mut cli = Cli::init(); + let network = Network::get_current_or_user_setting_or_default(); + info!(target: LOG_TARGET, "🌟 WALLET DAEMON NETWORK {:?}", &network); + cli.common.network = Some(network); + cli.common.base_path = data_dir.to_str().unwrap().to_owned(); + cli.common.config = wallet_daemon_config_file.clone(); + cli.common.log_config = Some(log_config_file.clone()); + + let cfg = load_configuration(wallet_daemon_config_file, true, &cli, None).unwrap(); + + let mut config = ApplicationConfig::load_from(&cfg).unwrap(); + config.dan_wallet_daemon = WalletDaemonConfig::default(); + let listening_json_rpc_address = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), port); + + config.dan_wallet_daemon.indexer_json_rpc_url = + Url::parse("http://18.217.22.26:12006/json_rpc").unwrap(); // TODO get from config + config.dan_wallet_daemon.json_rpc_address = Some(listening_json_rpc_address); + let ui_port = PortAllocator::new().assign_port_with_fallback(); + config.dan_wallet_daemon.ui_connect_address = Some(format!("127.0.0.1:{}", ui_port)); //TODO get from config + let signaling_server_port = PortAllocator::new().assign_port_with_fallback(); + let signaling_server_addr = SocketAddr::new( + IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), + signaling_server_port, + ); + config.dan_wallet_daemon.signaling_server_address = Some(signaling_server_addr); + + info!(target: LOG_TARGET, "🌟 WALLET DAEMON CONFIG: {:?}", &config); + + // Remove the file if it was left behind by a previous run + let _file = fs::remove_file(data_dir.join("pid")); + + let shutdown = Shutdown::new(); + let shutdown_signal = shutdown.to_signal(); + + match run_tari_dan_wallet_daemon(config, shutdown_signal).await { + Ok(_) => { + info!(target: LOG_TARGET, "🚀 Running wallet daemon"); + return Ok(()); + } + Err(e) => { + warn!(target: LOG_TARGET, "Error running wallet daemon: {}", e); + return Err(e); + } + } +} diff --git a/src-tauri/src/p2pool_adapter.rs b/src-tauri/src/p2pool_adapter.rs index b5cc11824..851ed9c2f 100644 --- a/src-tauri/src/p2pool_adapter.rs +++ b/src-tauri/src/p2pool_adapter.rs @@ -128,6 +128,9 @@ impl ProcessAdapter for P2poolAdapter { Network::NextNet => { envs.insert("TARI_NETWORK".to_string(), "nextnet".to_string()); } + Network::Igor => { + envs.insert("TARI_NETWORK".to_string(), "igor".to_string()); + } _ => { return Err(anyhow!("Unsupported network")); } diff --git a/src-tauri/src/process_stats_collector.rs b/src-tauri/src/process_stats_collector.rs index f3e6dda83..21745e705 100644 --- a/src-tauri/src/process_stats_collector.rs +++ b/src-tauri/src/process_stats_collector.rs @@ -39,6 +39,10 @@ pub(crate) struct ProcessStatsCollectorBuilder { tor_rx: Receiver, wallet_tx: Option>, wallet_rx: Receiver, + indexer_tx: Option>, + indexer_rx: Receiver, + validator_node_tx: Option>, + validator_node_rx: Receiver, } impl ProcessStatsCollectorBuilder { @@ -53,6 +57,9 @@ impl ProcessStatsCollectorBuilder { let (p2pool_tx, p2pool_rx) = tokio::sync::watch::channel(ProcessWatcherStats::default()); let (tor_tx, tor_rx) = tokio::sync::watch::channel(ProcessWatcherStats::default()); let (wallet_tx, wallet_rx) = tokio::sync::watch::channel(ProcessWatcherStats::default()); + let (indexer_tx, indexer_rx) = tokio::sync::watch::channel(ProcessWatcherStats::default()); + let (validator_node_tx, validator_node_rx) = + tokio::sync::watch::channel(ProcessWatcherStats::default()); Self { cpu_miner_tx: Some(cpu_miner_tx), @@ -69,6 +76,10 @@ impl ProcessStatsCollectorBuilder { tor_rx, wallet_tx: Some(wallet_tx), wallet_rx, + indexer_tx: Some(indexer_tx), + indexer_rx, + validator_node_tx: Some(validator_node_tx), + validator_node_rx, } } @@ -112,6 +123,18 @@ impl ProcessStatsCollectorBuilder { .expect("Cannot take wallet more than once") } + pub fn take_indexer(&mut self) -> Sender { + self.indexer_tx + .take() + .expect("Cannot take indexer more than once") + } + + pub fn take_validator_node(&mut self) -> Sender { + self.validator_node_tx + .take() + .expect("Cannot take validator_node more than once") + } + pub fn build(self) -> ProcessStatsCollector { ProcessStatsCollector { cpu_miner_rx: self.cpu_miner_rx, @@ -121,6 +144,8 @@ impl ProcessStatsCollectorBuilder { p2pool_rx: self.p2pool_rx, tor_rx: self.tor_rx, wallet_rx: self.wallet_rx, + indexer_rx: self.indexer_rx, + validator_node_rx: self.validator_node_rx, } } } @@ -134,6 +159,8 @@ pub(crate) struct ProcessStatsCollector { p2pool_rx: Receiver, tor_rx: Receiver, wallet_rx: Receiver, + indexer_rx: Receiver, + validator_node_rx: Receiver, } impl ProcessStatsCollector { @@ -163,4 +190,10 @@ impl ProcessStatsCollector { pub fn get_wallet_stats(&self) -> ProcessWatcherStats { self.wallet_rx.borrow().clone() } + pub fn get_indexer_stats(&self) -> ProcessWatcherStats { + self.indexer_rx.borrow().clone() + } + pub fn get_validator_node_stats(&self) -> ProcessWatcherStats { + self.validator_node_rx.borrow().clone() + } } diff --git a/src-tauri/src/process_watcher.rs b/src-tauri/src/process_watcher.rs index f15de4e27..a184cd3df 100644 --- a/src-tauri/src/process_watcher.rs +++ b/src-tauri/src/process_watcher.rs @@ -101,7 +101,8 @@ impl ProcessWatcher { warn!(target: LOG_TARGET, "Tried to start process watcher for {} twice", name); return Ok(()); } - info!(target: LOG_TARGET, "Starting process watcher for {}", name); + info!(target: LOG_TARGET, "🔥 Starting process watcher for {}", name); + info!(target: LOG_TARGET, "🔥 Starting process watcher with paths {:?} | {:?} | {:?}", &base_path, &config_path, &log_path); self.kill_previous_instances(base_path.clone()).await?; self.internal_shutdown = Shutdown::new(); @@ -114,7 +115,7 @@ impl ProcessWatcher { .read() .await .resolve_path_to_binary_files(binary)?; - info!(target: LOG_TARGET, "Using {:?} for {}", binary_path, name); + info!(target: LOG_TARGET, "🔥 Using {:?} for {}", binary_path, name); let (mut child, status_monitor) = self.adapter .spawn(base_path, config_path, log_path, binary_path)?; diff --git a/src-tauri/src/validator_node_adapter.rs b/src-tauri/src/validator_node_adapter.rs new file mode 100644 index 000000000..a3394ba86 --- /dev/null +++ b/src-tauri/src/validator_node_adapter.rs @@ -0,0 +1,182 @@ +use anyhow::anyhow; +use anyhow::Error; +use async_trait::async_trait; +use log::{debug, info, warn}; +use std::collections::HashMap; +use std::path::PathBuf; +use tari_common::configuration::Network; +use tari_shutdown::Shutdown; + +use crate::process_adapter::HealthStatus; +use crate::process_adapter::ProcessStartupSpec; +use crate::process_adapter::{ProcessAdapter, ProcessInstance, StatusMonitor}; + +use crate::utils::file_utils::convert_to_string; +use crate::utils::logging_utils::setup_logging; +// #[cfg(target_os = "windows")] +// use crate::utils::setup_utils::setup_utils::add_firewall_rule; +use crate::validator_node_manager::ValidatorNodeConfig; + +const LOG_TARGET: &str = "tari::universe::validator_node_adapter"; + +pub struct ValidatorNodeAdapter { + pub(crate) config: Option, +} + +impl ValidatorNodeAdapter { + pub fn new() -> Self { + Self { config: None } + } + + #[allow(dead_code)] + pub fn config(&self) -> Option<&ValidatorNodeConfig> { + self.config.as_ref() + } +} + +impl ProcessAdapter for ValidatorNodeAdapter { + type StatusMonitor = ValidatorNodeStatusMonitor; + + fn spawn_inner( + &self, + data_dir: PathBuf, + _config_dir: PathBuf, + log_dir: PathBuf, + binary_version_path: PathBuf, + ) -> Result<(ProcessInstance, Self::StatusMonitor), Error> { + let inner_shutdown = Shutdown::new(); + + info!(target: LOG_TARGET, "Starting validator node"); + + let working_dir = data_dir.join("validator_node"); + std::fs::create_dir_all(&working_dir).unwrap_or_else(|error| { + warn!(target: LOG_TARGET, "Could not create validator_node working directory - {}", error); + }); + let working_dir_string = convert_to_string(working_dir)?; + + if self.config.is_none() { + return Err(anyhow!("ValidatorNodeAdapter config is not set")); + } + let config = self + .config + .as_ref() + .ok_or_else(|| anyhow!("ValidatorNodeAdapter config is not set"))?; + + let config_dir = &log_dir + .join("validator_node") + .join("configs") + .join("log4rs_config_validator_node.yml"); + setup_logging( + &config_dir.clone(), + &log_dir, + include_str!("../log4rs/universe_sample.yml"), + )?; + + let network = Network::get_current_or_user_setting_or_default(); + + let args: Vec = vec![ + // "start".to_string(), + "-b".to_string(), + working_dir_string, + "--network".to_string(), + network.to_string(), + format!( + "--json-rpc-public-address={}", + config.json_rpc_public_address + ), + format!( + "-pvalidator_node.base_node_grpc_url={}", + config.base_node_grpc_url + ), + format!( + "-pvalidator_node.json_rpc_listener_address={}", + config.json_rpc_address + ), + format!( + "-pvalidator_node.http_ui_listener_address={}", + config.web_ui_address + ), + format!( + "-pvalidator_node.base_layer_scanning_interval={}", + config.base_layer_scanning_interval + ), + ]; + let pid_file_name = self.pid_file_name().to_string(); + + let mut envs = HashMap::new(); + match Network::get_current_or_user_setting_or_default() { + Network::Esmeralda => { + envs.insert("TARI_NETWORK".to_string(), "esmeralda".to_string()); + } + Network::NextNet => { + envs.insert("TARI_NETWORK".to_string(), "nextnet".to_string()); + } + Network::Igor => { + envs.insert("TARI_NETWORK".to_string(), "igor".to_string()); + } + _ => { + return Err(anyhow!("Unsupported network")); + } + }; + + #[cfg(target_os = "windows")] + add_firewall_rule( + "sha_validator_node.exe".to_string(), + binary_version_path.clone(), + )?; + + debug!(target: LOG_TARGET, "🚀 Tari Validator Node args {:?}", &args); + + Ok(( + ProcessInstance { + shutdown: inner_shutdown, + handle: None, + startup_spec: ProcessStartupSpec { + file_path: binary_version_path, + envs: Some(envs), + args, + data_dir, + pid_file_name, + name: self.name().to_string(), + }, + }, + ValidatorNodeStatusMonitor::new(config.grpc_port), + )) + } + + fn name(&self) -> &str { + "validator_node" + } + + fn pid_file_name(&self) -> &str { + "validator_node_pid" + } +} + +#[derive(Clone)] +pub struct ValidatorNodeStatusMonitor { + grpc_port: u16, +} + +impl ValidatorNodeStatusMonitor { + pub fn new(port: u16) -> Self { + Self { grpc_port: port } + } +} + +#[async_trait] +impl StatusMonitor for ValidatorNodeStatusMonitor { + async fn check_health(&self) -> HealthStatus { + if self.status().await.is_ok() { + HealthStatus::Healthy + } else { + HealthStatus::Unhealthy + } + } +} + +impl ValidatorNodeStatusMonitor { + pub async fn status(&self) -> Result { + Ok(self.grpc_port) //TODO + } +} diff --git a/src-tauri/src/validator_node_manager.rs b/src-tauri/src/validator_node_manager.rs new file mode 100644 index 000000000..51226e1d5 --- /dev/null +++ b/src-tauri/src/validator_node_manager.rs @@ -0,0 +1,239 @@ +use std::path::PathBuf; +use std::sync::Arc; +use std::time::Duration; + +use futures_util::future::FusedFuture; +use log::warn; +use tari_shutdown::ShutdownSignal; +use tokio::sync::RwLock; +use tokio::time::sleep; + +use crate::process_watcher::ProcessWatcher; +use crate::validator_node_adapter::ValidatorNodeAdapter; +use crate::ProcessStatsCollectorBuilder; + +const LOG_TARGET: &str = "tari::universe::validator_node_manager"; + +/** + * FULL CONFIG FROM TARI-DAN REPO +#[derive(Debug, Serialize, Deserialize, Clone)] +#[serde(deny_unknown_fields)] +#[allow(clippy::struct_excessive_bools)] +pub struct ValidatorNodeConfig { + override_from: Option, + pub shard_key_file: PathBuf, + /// A path to the file that stores your node identity and secret key + pub identity_file: PathBuf, + //// The node's publicly-accessible hostname + // pub public_address: Option, + /// The Tari base node's GRPC URL + pub base_node_grpc_url: Option, + /// If set to false, there will be no base layer scanning at all + pub scan_base_layer: bool, + /// How often do we want to scan the base layer for changes + #[serde(with = "serializers::seconds")] + pub base_layer_scanning_interval: Duration, + /// The relative path to store persistent data + pub data_dir: PathBuf, + /// The p2p configuration settings + pub p2p: P2pConfig, + /// P2P RPC configuration + pub rpc: RpcConfig, + /// GRPC address of the validator node application + pub grpc_address: Option, + /// JSON-RPC address of the validator node application + pub json_rpc_listener_address: Option, + /// The jrpc address where the UI should connect (it can be the same as the json_rpc_address, but doesn't have to + /// be), if this will be None, then the listen_addr will be used. + pub json_rpc_public_address: Option, + /// The address of the HTTP UI + pub http_ui_listener_address: Option, + /// Template config + pub templates: TemplateConfig, + /// Fee claim public key + pub fee_claim_public_key: RistrettoPublicKey, + /// Create identity file if not exists + pub dont_create_id: bool, + /// The (optional) sidechain to run this on + pub validator_node_sidechain_id: Option, + /// The templates sidechain id + pub template_sidechain_id: Option, + /// The burnt utxo sidechain id + pub burnt_utxo_sidechain_id: Option, + /// The path to store layer one transactions. + pub layer_one_transaction_path: PathBuf, +} + */ + +#[derive(Clone)] +pub struct ValidatorNodeConfig { + pub base_path: String, + pub json_rpc_address: String, + pub json_rpc_public_address: String, + pub grpc_port: u16, + pub base_node_grpc_url: String, + pub web_ui_address: String, + pub base_layer_scanning_interval: u16, +} + +pub struct ValidatorNodeConfigBuilder { + config: ValidatorNodeConfig, +} + +impl ValidatorNodeConfigBuilder { + pub fn new() -> Self { + Self { + config: ValidatorNodeConfig::default(), + } + } + + pub fn with_base_node(&mut self, grpc_port: u16) -> &mut Self { + self.config.base_node_grpc_url = format!("http://127.0.0.1:{}", grpc_port); + self + } + + pub fn with_base_path(&mut self, base_path: &PathBuf) -> &mut Self { + self.config.base_path = base_path.to_string_lossy().to_string(); + self + } + + pub fn build(&self) -> Result { + // TODO set proper values not hardcoded ones + //contractnet + // let jrpc_port = 12024; + // let web_ui_port = 12025; + // let grpc_port = 12021; + let jrpc_port = 18005; + let web_ui_port = 18006; + let grpc_port = 18002; + Ok(ValidatorNodeConfig { + base_path: self.config.base_path.clone(), + json_rpc_address: format!("http://127.0.0.1:{}", jrpc_port), + json_rpc_public_address: format!("http://127.0.0.1:{}", jrpc_port), + base_node_grpc_url: self.config.base_node_grpc_url.clone(), + web_ui_address: format!("http://127.0.0.1:{}", web_ui_port), + base_layer_scanning_interval: 10, + grpc_port, + }) + } +} + +impl ValidatorNodeConfig { + pub fn builder() -> ValidatorNodeConfigBuilder { + ValidatorNodeConfigBuilder::new() + } +} + +impl Default for ValidatorNodeConfig { + fn default() -> Self { + // contractnet + // base_path: String::from(""), + // json_rpc_address: String::from("http://127.0.0.1:12024"), + // json_rpc_public_address: String::from("http://127.0.0.1:12024"), + // base_node_grpc_url: String::from("http://127.0.0.1:12021"), + // web_ui_address: String::from("http://127.0.0.1:12025"), + // base_layer_scanning_interval: 10, + // grpc_port: 12024, + //TODO SET DEFAULT + Self { + base_path: String::from(""), + json_rpc_address: String::from("http://127.0.0.1:18005"), + json_rpc_public_address: String::from("http://127.0.0.1:18005"), + base_node_grpc_url: String::from("http://127.0.0.1:18002"), + web_ui_address: String::from("http://127.0.0.1:18006"), + base_layer_scanning_interval: 10, + grpc_port: 18002, + } + } +} + +impl Clone for ValidatorNodeManager { + fn clone(&self) -> Self { + Self { + watcher: self.watcher.clone(), + } + } +} + +pub struct ValidatorNodeManager { + watcher: Arc>>, +} + +impl ValidatorNodeManager { + pub fn new(stats_collector: &mut ProcessStatsCollectorBuilder) -> Self { + let adapter = ValidatorNodeAdapter::new(); + let process_watcher = ProcessWatcher::new(adapter, stats_collector.take_validator_node()); + + Self { + watcher: Arc::new(RwLock::new(process_watcher)), + } + } + + pub async fn is_running(&self) -> bool { + let process_watcher = self.watcher.read().await; + process_watcher.is_running() + } + + pub async fn is_pid_file_exists(&self, base_path: PathBuf) -> bool { + let lock = self.watcher.read().await; + lock.is_pid_file_exists(base_path) + } + + pub async fn ensure_started( + &self, + app_shutdown: ShutdownSignal, + config: ValidatorNodeConfig, + base_path: PathBuf, + config_path: PathBuf, + log_path: PathBuf, + ) -> Result<(), anyhow::Error> { + let mut process_watcher = self.watcher.write().await; + + process_watcher.adapter.config = Some(config); + process_watcher.health_timeout = Duration::from_secs(28); + process_watcher.poll_time = Duration::from_secs(30); + process_watcher + .start( + app_shutdown.clone(), + base_path, + config_path, + log_path, + crate::binaries::Binaries::TariValidatorNode, + ) + .await?; + process_watcher.wait_ready().await?; + if let Some(status_monitor) = &process_watcher.status_monitor { + loop { + if app_shutdown.is_terminated() || app_shutdown.is_triggered() { + break; + } + sleep(Duration::from_secs(5)).await; + if let Ok(_stats) = status_monitor.status().await { + break; + } else { + warn!(target: LOG_TARGET, "ValidatorNode stats not available yet"); + } + } // wait until we have stats from validatorNode, so its started + } + Ok(()) + } + + pub async fn stop(&self) -> Result { + let mut process_watcher = self.watcher.write().await; + let exit_code = process_watcher.stop().await?; + if exit_code != 0 { + warn!(target: LOG_TARGET, "ValidatorNode process exited with code {}", exit_code); + } + Ok(exit_code) + } + + pub async fn grpc_port(&self) -> u16 { + let process_watcher = self.watcher.read().await; + process_watcher + .adapter + .config + .as_ref() + .map(|c| c.grpc_port) + .unwrap_or_default() + } +} diff --git a/src-tauri/src/wallet_manager.rs b/src-tauri/src/wallet_manager.rs index ff6b8f427..5ae4a9486 100644 --- a/src-tauri/src/wallet_manager.rs +++ b/src-tauri/src/wallet_manager.rs @@ -158,6 +158,11 @@ impl WalletManager { lock.is_pid_file_exists(base_path) } + pub async fn get_grpc_port(&self) -> u16 { + let process_watcher = self.watcher.read().await; + process_watcher.adapter.grpc_port + } + #[deprecated( note = "Do not use. Use internal wallet instead. This address is the address of the view key wallet and not the internal wallet." )] diff --git a/src-tauri/src/xmrig_adapter.rs b/src-tauri/src/xmrig_adapter.rs index 52913e017..800485ccb 100644 --- a/src-tauri/src/xmrig_adapter.rs +++ b/src-tauri/src/xmrig_adapter.rs @@ -22,7 +22,7 @@ use anyhow::Error; use async_trait::async_trait; -use log::warn; +use log::{info, warn}; use std::path::PathBuf; use tari_shutdown::Shutdown; use tokio::sync::watch; @@ -37,6 +37,8 @@ use crate::xmrig::http_api::XmrigHttpApiClient; const LOG_TARGET: &str = "tari::universe::xmrig_adapter"; +#[derive(Debug)] + pub enum XmrigNodeConnection { LocalMmproxy { host_name: String, port: u16 }, Benchmark, @@ -74,6 +76,7 @@ impl XmrigAdapter { pub fn new(summary_broadcast: watch::Sender>) -> Self { let http_api_port = PortAllocator::new().assign_port_with_fallback(); let http_api_token = "pass".to_string(); + info!(target: LOG_TARGET, "👨‍🔧 --- XMRIG NEW http port {}", &http_api_port); Self { node_connection: None, monero_address: None, @@ -144,7 +147,7 @@ impl ProcessAdapter for XmrigAdapter { for extra_option in &self.extra_options { args.push(extra_option.clone()); } - + info!(target: LOG_TARGET, "👨‍🔧 --- XMRIG spawn inner url client {}", format!("http://127.0.0.1:{}", self.http_api_port)); Ok(( ProcessInstance { shutdown: xmrig_shutdown, diff --git a/src-tauri/wallet_daemon.config.toml b/src-tauri/wallet_daemon.config.toml new file mode 100644 index 000000000..8b72e57c0 --- /dev/null +++ b/src-tauri/wallet_daemon.config.toml @@ -0,0 +1,191 @@ +######################################################################################################################## +# # +# Common Configuration Options (CommonConfig, AutoUpdateConfig, MetricsConfig) # +# # +######################################################################################################################## + +[stagenet.auto_update] +# Customize the hosts that are used to check for updates. These hosts must contain update information in DNS TXT records. +update_uris = ["updates.stagenet.taripulse.com"] + +[auto_update] +# Name server for auto update (default = "1.1.1.1:53/cloudflare.net") +#name_server = "1.1.1.1:53/cloudflare.net" + +# Customize the hosts that are used to check for updates. These hosts must contain update information in DNS TXT +# records. (default = []) +#update_uris = [] + +#use_dnssec = false + +#download_base_url = "" + +# Customize the location of the update SHA hashes and maintainer-signed signature. +#hashes_url = "https://
/hashes.txt" +#hashes_sig_url = "https://
/hashes.txt.sig" + +# This interval in seconds to check for software updates. Setting this to 0 disables checking. +check_interval = 300 + +[metrics] +# server_bind_address = "127.0.0.1:5577" +# push_endpoint = http://localhost:9091/metrics/job/base-node + +######################################################################################################################## +# # +# Peer Seeds Configuration Options (PeerSeedsConfig) # +# # +######################################################################################################################## + +[peer_seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +#dns_seeds = [] +# Custom specified peer seed nodes +#peer_seeds = [] +# DNS name server to use for DNS seeds +#dns_seeds_name_server = "1.1.1.1:853/cloudflare-dns.com" +# All DNS seed records must pass DNSSEC validation +#dns_seeds_use_dnssec = false + +[nextnet.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +dns_seeds = ["seeds.nextnet.tari.com"] +# Custom specified peer seed nodes +peer_seeds = [ + #"a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/onion3/rhoqxfbzz3uidp23erxu4mkwwexc2gg4q45rcxfpbhb35ycdv4ex2fid:18141", + #"a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/ip4/54.77.66.39/tcp/18189", +] + +[stagenet.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +dns_seeds = ["seeds.stagenet.tari.com"] +# Custom specified peer seed nodes +peer_seeds = [ + #"a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/onion3/rhoqxfbzz3uidp23erxu4mkwwexc2gg4q45rcxfpbhb35ycdv4ex2fid:18141", + #"a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/ip4/54.77.66.39/tcp/18189", +] + +[esmeralda.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +dns_seeds = ["seeds.esmeralda.tari.com"] +# Custom specified peer seed nodes +peer_seeds = [ + #"a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/onion3/rhoqxfbzz3uidp23erxu4mkwwexc2gg4q45rcxfpbhb35ycdv4ex2fid:18141", + #"a062ae2345b0db0df9fb1504b99511e23d98f8513f9b5503efcc6dad8eca7e47::/ip4/54.77.66.39/tcp/18189", +] + + +[igor.p2p.seeds] +# DNS seeds hosts - DNS TXT records are queried from these hosts and the resulting peers added to the comms peer list. +dns_seeds = [] +# Custom specified peer seed nodes +peer_seeds = [ + "921f9248b3e4a2b72c8b702a4ed8cc779a6301fe241eaf470065e51531cb5162::/ip4/18.217.22.26/tcp/12000" +] +# peer_seeds = [ +# # 2222bb888618d65d7b16e355f9 +# "8e7eb81e512f3d6347bf9b1ca9cd67d2c8e29f2836fc5bd608206505cc72af34::/ip6/fd56:2026:93c0:0:9e:96fb:e119:d8ec/tcp/18189", +# # aaaaf562a6ef070706fb9a7244 +# "40a9d8573745072534bce7d0ecafe882b1c79570375a69841c08a98dee9ecb5f::/ip6/fd56:2026:93c0:0:9e:96fb:e119:d8ec/tcp/18189", +# # dddd69c587a10c41ef2bf51397 +# "126c7ee64f71aca36398b977dd31fbbe9f9dad615df96473fb655bef5709c540::/ip6/fd56:2026:93c0:0:9e:96fb:e119:d8ec/tcp/18189", + + +# # Local DAN Seeds, Stringhandler +# # da100065d065f839dab6b6fb4f +# "f24a6ed54362cee25c8e08e92bcd33e4d8ab2b733862948f863c982040d0d447::/onion3/s7sto2fd6cqf3wak2ec23gygb3d77p2ro7pcl2vesk6notgedjhy4nyd:18141", +# # da4000fb6a031eced4ce65fe31 +# "9c127e9451d6721bfbe2b75434fcc19f6c7ab23523d4dacf7f5f5d601d2c8840::/onion3/kfh6trtkccp6mdbob42sb3sd464lzorn2ufys4zglnqhoxzsa4souaqd:18141", +# ] + +######################################################################################################################## +# # +# Validator Node Configuration Options (ValidatorNodeConfig) # +# # +######################################################################################################################## + +[validator_node] + +# A path to the file that stores your node identity and secret key (default = "validator_node_id.json") +#identity_file = "validator_node_id.json" + +# A path to the file that stores the tor hidden service private key, if using the tor transport +# (default = "validator_node_tor_id.json") +#tor_identity_file = "validator_node_tor_id.json" + +# The node's publicly-accessible hostname. This is the host name that is advertised on the network so that +# peers can find you. +# _NOTE_: If using the `tor` transport type, public_address will be ignored and an onion address will be +# automatically configured (default = ) +#public_address = + +# The Minotari base node's GRPC address. (default = "127.0.0.1/" the value is based on network) +#base_node_grpc_address = "127.0.0.1/tcp/18142" + +# The Minotari console wallet's GRPC address. (default = "127.0.0.1/" the value is based on network) +#wallet_grpc_address = "127.0.0.1/tcp/18143" + +# How often do we want to scan the base layer for changes. (default = 10) +#base_layer_scanning_interval = 10 + +# The relative path to store persistent data (default = "data/validator_node") +#data_dir = "data/validator_node" + +# JSON-RPC listener address (default = "127.0.0.1:18200") +#json_rpc_address = "127.0.0.1:18200" + +# HTTP UI listener address (default = "127.0.0.1:5000") +#http_ui_address = "127.0.0.1:5000" + +# Set to true to enable auto registration for each epoch (default = true) +#auto_register = true + +[validator_node.p2p] +#enable_mdns = true +#listener_port = 0 +#reachability_mode = "auto" + +######################################################################################################################## +# # +# Indexer Configuration Options (IndexerConfig) # +# # +######################################################################################################################## + +[indexer] + +# A path to the file that stores your node identity and secret key (default = "indexer_id.json") +#identity_file = "indexer_id.json" + +# A path to the file that stores the tor hidden service private key, if using the tor transport +# (default = "indexer_tor_id.json") +#tor_identity_file = "indexer_tor_id.json" + +# The node's publicly-accessible hostname. This is the host name that is advertised on the network so that +# peers can find you. +# _NOTE_: If using the `tor` transport type, public_address will be ignored and an onion address will be +# automatically configured (default = ) +#public_address = + +# The Minotari base node's GRPC address. (default = "127.0.0.1/" the value is based on network) +#base_node_grpc_address = "127.0.0.1/tcp/18142" + +# How often do we want to scan the base layer for changes. (default = 10) +#base_layer_scanning_interval = 10 + +# The relative path to store persistent data (default = "data/indexer") +#data_dir = "data/indexer" + +# JSON-RPC listener address (default = "127.0.0.1:18300") +#json_rpc_address = "127.0.0.1:18300" + +# HTTP UI listener address (default = "127.0.0.1:15000") +#http_ui_address = "127.0.0.1:15000" + +# Substate ids to keep watching +#address_watchlist=[] + +# How often do we want to scan the dan layer for change. (default = 10) +#dan_layer_scanning_internal=10 + +[indexer.p2p] +#transport = "tor" \ No newline at end of file diff --git a/src/assets/tari.svg b/src/assets/tari.svg new file mode 100644 index 000000000..38947b1f7 --- /dev/null +++ b/src/assets/tari.svg @@ -0,0 +1,18 @@ + + + node-icon + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/ootle/ActiveTappletView.tsx b/src/components/ootle/ActiveTappletView.tsx new file mode 100644 index 000000000..1a81924b4 --- /dev/null +++ b/src/components/ootle/ActiveTappletView.tsx @@ -0,0 +1,28 @@ +import { useTappletProviderStore } from '@app/store/useTappletProviderStore'; +import { Box, IconButton, Typography } from '@mui/material'; +import { Tapplet } from './Tapplet'; +import { MdClose } from 'react-icons/md'; +import { useTappletsStore } from '@app/store/useTappletsStore'; +import { HeaderContainer } from './styles'; + +export default function ActiveTappletView() { + const tappProvider = useTappletProviderStore((s) => s.tappletProvider); + const tapplet = useTappletsStore((s) => s.activeTapplet); + const deactivateTapplet = useTappletsStore((s) => s.deactivateTapplet); + + return ( + <> + + deactivateTapplet()}> + + + + {tapplet ? `${tapplet.display_name} v${tapplet.version} ` : 'Unknown tapplet'} + + + + {tapplet && } + + + ); +} diff --git a/src/components/ootle/Tapplet.tsx b/src/components/ootle/Tapplet.tsx new file mode 100644 index 000000000..a4990b172 --- /dev/null +++ b/src/components/ootle/Tapplet.tsx @@ -0,0 +1,80 @@ +import { useTappletProviderStore } from '@app/store/useTappletProviderStore'; +import { useUIStore } from '@app/store/useUIStore'; +import { TappletProvider } from '@app/types/ootle/TappletProvider'; +import { useCallback, useEffect, useRef } from 'react'; + +interface TappletProps { + source: string; + provider?: TappletProvider; +} + +export const Tapplet: React.FC = ({ source, provider }) => { + const tappletRef = useRef(null); + const runTransaction = useTappletProviderStore((s) => s.runTransaction); + const addTransaction = useTappletProviderStore((s) => s.addTransaction); + const setDialogToShow = useUIStore((s) => s.setDialogToShow); + + function sendWindowSize() { + if (tappletRef.current) { + const height = tappletRef.current.offsetHeight; + const width = tappletRef.current.offsetWidth; + const tappletWindow = tappletRef.current.contentWindow; + + provider?.setWindowSize(width, height); + provider?.sendWindowSizeMessage(tappletWindow, source); + } + } + + function handleMessage(event: MessageEvent) { + if (event.data.type === 'request-parent-size') { + if (tappletRef.current) { + const height = tappletRef.current.offsetHeight; + const width = tappletRef.current.offsetWidth; + const tappletWindow = tappletRef.current.contentWindow; + + provider?.setWindowSize(width, height); + provider?.sendWindowSizeMessage(tappletWindow, source); + } + } else if (event.data.type === 'provider-call') { + console.info('🤝 [TU Tapplet][handle msg] event data:', event.data); + console.info('🤝 [TU Tapplet][handle msg] TX ADDED'); + if (event.data.methodName === 'submitTransaction') { + addTransaction(event); + setDialogToShow('txSimulation'); + // runTappletTxSimulation(event); + return; + } + runTappletTx(event); + } + } + + const runTappletTx = useCallback( + async (event: MessageEvent) => { + await runTransaction(event); + }, + [runTransaction] + ); + + // const runTappletTxSimulation = useCallback( + // async (event: MessageEvent) => { + // console.warn('SIIIIMULATION run TX'); + // const { balanceUpdates, txSimulation } = await runSimulation(event.data.id); + // console.warn('SIIIIMULATION RES TX', txSimulation); + // console.warn('SIIIIMULATION RES BALANCES', balanceUpdates); + // }, + // [runSimulation] + // ); + + useEffect(() => { + window.addEventListener('resize', sendWindowSize); + window.addEventListener('message', handleMessage); + + return () => { + window.removeEventListener('resize', sendWindowSize); + window.removeEventListener('message', handleMessage); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ; +}; diff --git a/src/components/ootle/styles.ts b/src/components/ootle/styles.ts new file mode 100644 index 000000000..155c7f8a2 --- /dev/null +++ b/src/components/ootle/styles.ts @@ -0,0 +1,107 @@ +import { m } from 'framer-motion'; +import styled, { css } from 'styled-components'; + +export const Wrapper = styled('div')` + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 99999; + + display: flex; + justify-content: center; + align-items: center; + + pointer-events: all; + + overflow: hidden; + overflow-y: auto; + + padding: 140px 40px; + + @media (max-height: 955px) { + align-items: flex-start; + } + + @media (max-height: 800px) { + padding: 60px 40px 60px 40px; + } +`; + +export const Cover = styled(m.div)` + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.5); + z-index: 0; + cursor: pointer; + + backdrop-filter: blur(10px); +`; + +export const BoxWrapper = styled(m.div)<{ $boxWidth?: number; $padding?: number }>` + width: 100%; + + flex-shrink: 0; + + border-radius: 35px; + background: linear-gradient(180deg, #c9eb00 32.79%, #fff 92.04%); + box-shadow: 28px 28px 77px 0px rgba(0, 0, 0, 0.1); + + position: relative; + z-index: 1; + + display: flex; + flex-direction: column; + justify-content: flex-end; + gap: 40px; + max-width: 635px; + + ${({ $boxWidth }) => + $boxWidth && + css` + max-width: ${$boxWidth}px; + `} + + padding: 50px; + + ${({ $padding }) => + $padding && + css` + padding: ${$padding}px; + `} +`; + +export const CloseButton = styled('button')` + cursor: pointer; + position: absolute; + top: -20px; + left: 100%; + margin-left: 5px; + transition: transform 0.2s ease; + color: rgba(255, 255, 255, 0.5); + transition: + color 0.2s ease, + transform 0.2s ease; + + &:hover { + color: #fff; + transform: scale(1.1); + } +`; + +export const HeaderContainer = styled.div` + width: 100%; + color: ${({ theme }) => theme.palette.text.primary}; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 4px; + padding: 5px; + position: sticky; + top: 0; + z-index: 1; +`; diff --git a/src/containers/floating/FloatingElements.tsx b/src/containers/floating/FloatingElements.tsx index 9c263ab20..ef6c20f91 100644 --- a/src/containers/floating/FloatingElements.tsx +++ b/src/containers/floating/FloatingElements.tsx @@ -13,6 +13,7 @@ import CriticalProblemDialog from './CriticalProblemDialog/CriticalProblemDialog import ShellOfSecrets from '../main/ShellOfSecrets/ShellOfSecrets.tsx'; import ReleaseNotesDialog from './ReleaseNotesDialog/ReleaseNotesDialog.tsx'; import LudicrousCofirmationDialog from './LudicrousCofirmationDialog/LudicrousCofirmationDialog.tsx'; +import TappletTransactionDialog from './TappletTransactionDialog/TappletTransactionDialog.tsx'; import { memo } from 'react'; const environment = import.meta.env.MODE; @@ -32,6 +33,7 @@ const FloatingElements = memo(function FloatingElements() { + {environment === 'development' && } ); diff --git a/src/containers/floating/Settings/SettingsModal.tsx b/src/containers/floating/Settings/SettingsModal.tsx index ac3129331..18c01da9e 100644 --- a/src/containers/floating/Settings/SettingsModal.tsx +++ b/src/containers/floating/Settings/SettingsModal.tsx @@ -17,9 +17,11 @@ import { ExperimentalSettings, GeneralSettings, MiningSettings, + OotleSettings, PoolMiningSettings, WalletSettings, ReleaseNotes, + OotleWalletSettings, } from './sections'; import { Container, ContentContainer, HeaderContainer, SectionWrapper } from './SettingsModal.styles.ts'; @@ -40,6 +42,8 @@ const SettingsModal = memo(function SettingsModal() { airdrop: , experimental: , releaseNotes: , + ootle: , + ootleWallet: , }; const sectionMarkup = markups[activeSection]; diff --git a/src/containers/floating/Settings/sections/index.ts b/src/containers/floating/Settings/sections/index.ts index 06725e9c0..a785c24f9 100644 --- a/src/containers/floating/Settings/sections/index.ts +++ b/src/containers/floating/Settings/sections/index.ts @@ -3,9 +3,11 @@ import { ConnectionsSettings } from './connections/ConnectionsSettings.tsx'; import { ExperimentalSettings } from './experimental/ExperimentalSettings.tsx'; import { GeneralSettings } from './general/GeneralSettings.tsx'; import { MiningSettings } from './mining/MiningSettings.tsx'; +import { OotleSettings } from './ootle/OotleSettings.tsx'; import { PoolMiningSettings } from './p2p/PoolMiningSettings.tsx'; import { WalletSettings } from './wallet/WalletSettings.tsx'; import { ReleaseNotes } from './releaseNotes/ReleaseNotes.tsx'; +import { OotleWalletSettings } from './ootleWallet/OotleWalletSettings.tsx'; export { AirdropSettings, @@ -16,4 +18,6 @@ export { PoolMiningSettings, WalletSettings, ReleaseNotes, + OotleSettings, + OotleWalletSettings, }; diff --git a/src/containers/floating/Settings/sections/ootle/OotleSettings.styles.ts b/src/containers/floating/Settings/sections/ootle/OotleSettings.styles.ts new file mode 100644 index 000000000..56b952efe --- /dev/null +++ b/src/containers/floating/Settings/sections/ootle/OotleSettings.styles.ts @@ -0,0 +1,95 @@ +import styled from 'styled-components'; +import { Stack } from '@app/components/elements/Stack.tsx'; +import { Input } from '@app/components/elements/inputs/Input.tsx'; + +export const TappletsGroupWrapper = styled.div<{ $category?: string }>` +display: flex; + flex-direction: column; + width: 100%; + position: relative; + border-top: 1px solid ${({ theme }) => theme.palette.divider}; + padding-top: 20px; + margin-top: 10px; + &:before { + content: '${({ $category }) => $category || 'Tapplets'}'; + position: absolute; + background-color: ${({ theme }) => theme.palette.background.paper}; + top: -9px; + + color: ${({ theme }) => theme.palette.primary.light}; + font-size: 12px; + font-weight: 600; + line-height: 18px; + letter-spacing: -0.1px; + padding-right: 12px; +`; + +export const TappletsGroup = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + font-size: 12px; + gap: 6px; + position: relative; + color: ${({ theme }) => theme.palette.text.secondary}; + + ol, + ul { + max-width: 100%; + padding-inline-start: 30px; + line-height: 1.3; + + li { + word-wrap: anywhere; + &::marker { + font-weight: 500; + } + } + } +`; + +export const TappletsGroupTitle = styled.div` + display: flex; + color: ${({ theme }) => theme.palette.text.primary}; + justify-content: space-between; +`; +export const TappletsGroupContent = styled.div` + display: flex; + gap: 4px; + flex-direction: column; + width: 100%; +`; +export const TappletsGroupAction = styled.div` + display: flex; + font-size: 12px; + gap: 6px; +`; + +export const StyledStack = styled(Stack)` + width: 100%; +`; + +export const StyledInput = styled(Input)` + font-size: 12px; +`; + +export const StyledForm = styled.form` + width: 100%; + // Reserve space for error message + min-height: 53px; +`; + +export const Count = styled.div<{ $count: number }>` + border-radius: 11px; + background-color: ${({ theme }) => theme.palette.background.accent}; + color: ${({ theme }) => theme.palette.text.primary}; + font-weight: 600; + display: flex; + align-items: center; + justify-content: center; + padding: 2px 6px; + line-height: 1; + width: ${({ $count }) => ($count > 999 ? 'auto' : '22px')}; + height: ${({ $count }) => ($count > 999 ? 'auto' : '22px')}; + font-size: ${({ $count }) => ($count > 999 ? '10px' : '11px')}; +`; diff --git a/src/containers/floating/Settings/sections/ootle/OotleSettings.tsx b/src/containers/floating/Settings/sections/ootle/OotleSettings.tsx new file mode 100644 index 000000000..93f78aff7 --- /dev/null +++ b/src/containers/floating/Settings/sections/ootle/OotleSettings.tsx @@ -0,0 +1,68 @@ +import { + SettingsGroup, + SettingsGroupAction, + SettingsGroupContent, + SettingsGroupTitle, + SettingsGroupWrapper, +} from '../../components/SettingsGroup.styles'; +import { useAppConfigStore } from '@app/store/useAppConfigStore'; + +import { Typography } from '@app/components/elements/Typography'; + +import { useTranslation } from 'react-i18next'; +import { ToggleSwitch } from '@app/components/elements/ToggleSwitch'; +import { useCallback } from 'react'; +import { TappletsOverview } from './TappletsOverview'; + +export const OotleSettings = () => { + const { t } = useTranslation(['settings', 'ootle'], { useSuspense: false }); + const ootleMode = useAppConfigStore((s) => s.ootle_enabled); + const ootleLocalNode = useAppConfigStore((s) => s.ootle_local_node); + + const setOotleEnabled = useAppConfigStore((s) => s.setOotleEnabled); + const setOotleLocalNode = useAppConfigStore((s) => s.setOotleLocalNode); + + const handleOotleSwitch = useCallback(() => { + setOotleEnabled(!ootleMode); + }, [ootleMode, setOotleEnabled]); + + const handleIndexerSwitch = useCallback(() => { + setOotleLocalNode(!ootleLocalNode); + }, [ootleLocalNode, setOotleLocalNode]); + + return ( + <> + + + + + {t('tabs.ootle', { ns: 'settings' })} + + {t('Enable or disable the Tari Ootle')} + + + + + + + {ootleMode && ( + <> + + + + + {t('local-tari-indexer', { ns: 'ootle' })} + + {t('Run Tari Indexer locally')} + + + + + + + + + )} + + ); +}; diff --git a/src/containers/floating/Settings/sections/ootle/TappletsDev.tsx b/src/containers/floating/Settings/sections/ootle/TappletsDev.tsx new file mode 100644 index 000000000..b63a9e4cb --- /dev/null +++ b/src/containers/floating/Settings/sections/ootle/TappletsDev.tsx @@ -0,0 +1,166 @@ +import { useTranslation } from 'react-i18next'; + +import { Typography } from '@app/components/elements/Typography.tsx'; +import { Avatar, IconButton, List, ListItem, ListItemAvatar, ListItemText } from '@mui/material'; + +import { SettingsGroupContent, SettingsGroupTitle } from '../../components/SettingsGroup.styles.ts'; +import { SquaredButton } from '@app/components/elements/buttons/SquaredButton.tsx'; +import { TappletsGroup, TappletsGroupWrapper } from './OotleSettings.styles.ts'; +import { MdLaunch, MdDelete } from 'react-icons/md'; +import tariLogo from '@app/assets/tari.svg'; +import { useTappletsStore } from '@app/store/useTappletsStore.ts'; +import { useCallback, useEffect } from 'react'; + +import { Controller, useForm } from 'react-hook-form'; +import { IoCheckmarkOutline, IoCloseOutline } from 'react-icons/io5'; +import { useAppStateStore } from '@app/store/appStateStore.ts'; +import { Count, StyledForm, StyledInput, StyledStack } from './OotleSettings.styles.ts'; + +const endpointRegex = /^(https?:\/\/)?(localhost|127\.0\.0\.1):\d{1,6}?$/; + +export default function TappletsDev() { + const { t } = useTranslation('ootle', { useSuspense: false }); + const initialDevTappEndpoint = ''; + const setError = useAppStateStore((s) => s.setError); + const { devTapplets, setActiveTappById, addDevTapp, deleteDevTapp, getDevTapps } = useTappletsStore(); + const { isSettingsOpen, setIsSettingsOpen } = useAppStateStore(); + const devTappletsCount = devTapplets?.length || 0; + + const { + control, + watch, + handleSubmit, + setValue, + reset, + trigger, + formState: { errors }, + } = useForm({ + defaultValues: { endpoint: '' }, + }); + const endpoint = watch('endpoint'); + + useEffect(() => { + setValue('endpoint', initialDevTappEndpoint); + }, [initialDevTappEndpoint, setValue]); + + const handleApply = useCallback( + async (data: { endpoint: string }) => { + await addDevTapp(data.endpoint); + }, + [addDevTapp] + ); + + const handleReset = useCallback(() => { + reset({ endpoint: initialDevTappEndpoint }); + }, [reset]); + + useEffect(() => { + trigger('endpoint'); + }, [endpoint, trigger]); + + useEffect(() => { + getDevTapps(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleLaunch = useCallback( + async (tappletId: number) => { + try { + setActiveTappById(tappletId, true); + setIsSettingsOpen(!isSettingsOpen); + } catch (e) { + setError(`Error while launching dev tapplet: ${e}`); + } + }, + [isSettingsOpen, setActiveTappById, setError, setIsSettingsOpen] + ); + + return ( + + getDevTapps()} + color="tariPurple" + size="medium" + style={{ width: '25%', alignContent: 'center', marginBottom: 10 }} + > + {t('refresh-list')} + + + + { + const { ref: _ref, ...rest } = field; + return ( + + ); + }} + /> + {!errors.endpoint && ( + + + + )} + + + + + {errors.endpoint && {errors.endpoint.message}} + + + + + {t('dev-tapplets')} + {devTappletsCount ? ( + + {devTappletsCount} + + ) : null} + + + + {devTapplets.map((item, index) => ( + + + + + + handleLaunch(item.id)} + > + + + { + deleteDevTapp(item.id); + }} + > + + + + ))} + + + + + ); +} diff --git a/src/containers/floating/Settings/sections/ootle/TappletsInstalled.tsx b/src/containers/floating/Settings/sections/ootle/TappletsInstalled.tsx new file mode 100644 index 000000000..57ad3189f --- /dev/null +++ b/src/containers/floating/Settings/sections/ootle/TappletsInstalled.tsx @@ -0,0 +1,127 @@ +import { useTranslation } from 'react-i18next'; + +import { Typography } from '@app/components/elements/Typography.tsx'; +import { Avatar, IconButton, List, ListItem, ListItemAvatar, ListItemText } from '@mui/material'; + +import { SettingsGroupContent, SettingsGroupTitle } from '../../components/SettingsGroup.styles.ts'; +import { MdUpdate, MdDelete, MdLaunch } from 'react-icons/md'; +import { useCallback, useEffect } from 'react'; +import { TappletsGroup, TappletsGroupWrapper } from './OotleSettings.styles.ts'; +import tariLogo from '@app/assets/tari.svg'; +import { useTappletsStore } from '@app/store/useTappletsStore.ts'; +import { useAppStateStore } from '@app/store/appStateStore.ts'; +import { Count } from './OotleSettings.styles.ts'; + +export default function TappletsInstalled() { + const { t } = useTranslation('ootle', { useSuspense: false }); + const { isSettingsOpen, setIsSettingsOpen } = useAppStateStore(); + const setActiveTappById = useTappletsStore((s) => s.setActiveTappById); + const deleteInstalledTapp = useTappletsStore((s) => s.deleteInstalledTapp); + const updateInstalledTapp = useTappletsStore((s) => s.updateInstalledTapp); + const getInstalledTapps = useTappletsStore((s) => s.getInstalledTapps); + const installedTapplets = useTappletsStore((s) => s.installedTapplets); + const installedTappletsCount = installedTapplets?.length || 0; + + const updateInstalledTappletHandler = useCallback( + async (id: number, installedTappletId: number) => { + try { + console.info('Update id, tapp id ', id, installedTappletId); + updateInstalledTapp(id, installedTappletId); + } catch (e) { + console.error('Error closing application| handleClose in CriticalProblemDialog: ', e); + } + }, + [updateInstalledTapp] + ); + + const deleteInstalledTappletHandler = useCallback( + async (id: number) => { + try { + deleteInstalledTapp(id); + } catch (e) { + console.error('Error closing application| handleClose in CriticalProblemDialog: ', e); + } + }, + [deleteInstalledTapp] + ); + + const handleLaunch = useCallback( + async (id: number) => { + try { + setActiveTappById(id); + setIsSettingsOpen(!isSettingsOpen); + } catch (e) { + console.error('Error closing application| handleClose in CriticalProblemDialog: ', e); + } + }, + [isSettingsOpen, setActiveTappById, setIsSettingsOpen] + ); + + useEffect(() => { + getInstalledTapps(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + <> + + + + + {t('installed-tapplets')} + {installedTappletsCount ? ( + + {installedTappletsCount} + + ) : null} + + + + {installedTapplets.map((item, index) => ( + + + + + + handleLaunch(item.installed_tapplet.id)} + > + + + {item.latest_version && item.installed_version !== item.latest_version && ( + + updateInstalledTappletHandler( + item.installed_tapplet.id, + item.installed_tapplet.tapplet_id + ) + } + > + + + )} + deleteInstalledTappletHandler(item.installed_tapplet.id)} + > + + + + ))} + + + + + + ); +} diff --git a/src/containers/floating/Settings/sections/ootle/TappletsOverview.tsx b/src/containers/floating/Settings/sections/ootle/TappletsOverview.tsx new file mode 100644 index 000000000..9ee0f6a41 --- /dev/null +++ b/src/containers/floating/Settings/sections/ootle/TappletsOverview.tsx @@ -0,0 +1,13 @@ +import TappletsDev from './TappletsDev'; +import TappletsInstalled from './TappletsInstalled'; +import TappletsRegistered from './TappletsRegistered'; + +export const TappletsOverview = () => { + return ( + <> + + + + + ); +}; diff --git a/src/containers/floating/Settings/sections/ootle/TappletsRegistered.tsx b/src/containers/floating/Settings/sections/ootle/TappletsRegistered.tsx new file mode 100644 index 000000000..833251c39 --- /dev/null +++ b/src/containers/floating/Settings/sections/ootle/TappletsRegistered.tsx @@ -0,0 +1,82 @@ +import { useTranslation } from 'react-i18next'; + +import { Typography } from '@app/components/elements/Typography.tsx'; + +import { SettingsGroupContent, SettingsGroupTitle } from '../../components/SettingsGroup.styles.ts'; +import { SquaredButton } from '@app/components/elements/buttons/SquaredButton.tsx'; +import { Avatar, IconButton, List, ListItem, ListItemAvatar, ListItemText } from '@mui/material'; +import { MdDownload } from 'react-icons/md'; +import { TappletsGroup, TappletsGroupWrapper } from './OotleSettings.styles.ts'; +import { useTappletsStore } from '@app/store/useTappletsStore.ts'; +import { useCallback, useEffect } from 'react'; +import { Count } from './OotleSettings.styles.ts'; + +export default function TappletsRegistered() { + const { t } = useTranslation('ootle', { useSuspense: false }); + const fetchRegisteredTapplets = useTappletsStore((s) => s.fetchRegisteredTapps); + const registeredTapplets = useTappletsStore((s) => s.registeredTapplets); + const installRegisteredTapp = useTappletsStore((s) => s.installRegisteredTapp); + const registeredTappletsCount = registeredTapplets?.length || 0; + + const handleInstall = useCallback( + async (id: string) => { + try { + await installRegisteredTapp(id); + } catch (e) { + console.error('Error closing application| handleClose in CriticalProblemDialog: ', e); + } + }, + [installRegisteredTapp] + ); + + useEffect(() => { + fetchRegisteredTapplets(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + fetchRegisteredTapplets()} + color="tariPurple" + size="medium" + style={{ width: '25%', alignContent: 'center', marginBottom: 10 }} + > + {t('refresh-list')} + + + + + {t('registered-tapplets')} + {registeredTappletsCount ? ( + + {registeredTappletsCount} + + ) : null} + + + + {registeredTapplets.map((item) => ( + + + + + + handleInstall(item.id)} + sx={{ marginLeft: 8 }} + > + + + + ))} + + + + + ); +} diff --git a/src/containers/floating/Settings/sections/ootleWallet/OotleWalletBalance.tsx b/src/containers/floating/Settings/sections/ootleWallet/OotleWalletBalance.tsx new file mode 100644 index 000000000..876b4098d --- /dev/null +++ b/src/containers/floating/Settings/sections/ootleWallet/OotleWalletBalance.tsx @@ -0,0 +1,110 @@ +import { SettingsGroup, SettingsGroupContent, SettingsGroupWrapper } from '../../components/SettingsGroup.styles'; + +import { Typography } from '@app/components/elements/Typography'; + +import { useTranslation } from 'react-i18next'; +import { useCallback, useEffect } from 'react'; +import { useTappletProviderStore } from '@app/store/useTappletProviderStore'; + +import { Stack } from '@app/components/elements/Stack'; +import { CardContainer, ConnectionIcon } from '../../components/Settings.styles'; +import { CardComponent } from '../../components/Card.component'; +import SelectAccount from './SelectOotleAccount'; +import { useOotleWalletStore } from '@app/store/useOotleWalletStore'; +import { shortenSubstateAddress } from '@app/utils'; + +const OotleWalletBalance = () => { + const { t } = useTranslation(['settings', 'ootle'], { useSuspense: false }); + + const tappProvider = useTappletProviderStore((s) => s.tappletProvider); + const isTappProviderInitialized = useTappletProviderStore((s) => s.isInitialized); + const initTappletProvider = useTappletProviderStore((s) => s.initTappletProvider); + const ootleAccount = useOotleWalletStore((s) => s.ootleAccount); + const ootleAccountsList = useOotleWalletStore((s) => s.ootleAccountsList); + const getOotleAccountInfo = useOotleWalletStore((s) => s.getOotleAccountInfo); + const getOotleAccountsList = useOotleWalletStore((s) => s.getOotleAccountsList); + + // TODO fetch all data from backend + const refreshProvider = useCallback(async () => { + try { + if (!tappProvider) { + await initTappletProvider(); + return; + } + } catch (error) { + console.error(error); + } + }, [tappProvider, initTappletProvider]); + + const refreshAccount = useCallback(async () => { + try { + await getOotleAccountInfo(); + } catch (error) { + console.error(error); + } + }, [getOotleAccountInfo]); + + const refreshAccountsList = useCallback(async () => { + try { + await getOotleAccountsList(); + } catch (error) { + console.error(error); + } + }, [getOotleAccountsList]); + + useEffect(() => { + refreshProvider(); + refreshAccount(); + refreshAccountsList(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + <> + + + + + + + {isTappProviderInitialized ? 'Provider initialized' : 'Provider not initialized'} + + + {t('Tari Ootle Account')} + {ootleAccount?.account_name} + {ootleAccount?.address} + + + + + + + {Object.entries(ootleAccount?.resources || []).map(([key, value]) => ( + + ))} + + + + + + + + + + ); +}; + +export default OotleWalletBalance; diff --git a/src/containers/floating/Settings/sections/ootleWallet/OotleWalletSettings.tsx b/src/containers/floating/Settings/sections/ootleWallet/OotleWalletSettings.tsx new file mode 100644 index 000000000..db84dc4c6 --- /dev/null +++ b/src/containers/floating/Settings/sections/ootleWallet/OotleWalletSettings.tsx @@ -0,0 +1,11 @@ +import OotleWalletBalance from './OotleWalletBalance'; +import TemplateFileUploader from './TemplateFileUploader'; + +export const OotleWalletSettings = () => { + return ( + <> + + + + ); +}; diff --git a/src/containers/floating/Settings/sections/ootleWallet/SelectOotleAccount.tsx b/src/containers/floating/Settings/sections/ootleWallet/SelectOotleAccount.tsx new file mode 100644 index 000000000..fdbdcb22a --- /dev/null +++ b/src/containers/floating/Settings/sections/ootleWallet/SelectOotleAccount.tsx @@ -0,0 +1,89 @@ +import { useCallback, useState } from 'react'; +import Box from '@mui/material/Box'; +import { DialogContent, FormControl, MenuItem, Select, SelectChangeEvent } from '@mui/material'; +import { useOotleWalletStore } from '@app/store/useOotleWalletStore'; +import { AccountInfo } from '@tari-project/typescript-bindings'; +import { OotleAccount } from '@app/types/ootle'; +import { SquaredButton } from '@app/components/elements/buttons/SquaredButton'; +import { Input } from '@app/components/elements/inputs/Input'; +import { SettingsGroup } from '../../components/SettingsGroup.styles'; + +interface SelectAccountProps { + accountsList: AccountInfo[]; + currentAccount?: OotleAccount; +} + +function SelectOotleAccount({ accountsList, currentAccount }: SelectAccountProps) { + const createAccount = useOotleWalletStore((s) => s.createAccount); + const setDefaultAccount = useOotleWalletStore((s) => s.setDefaultAccount); + const currentAccountName = currentAccount?.account_name ?? ''; + const [newAccountName, setNewAccountName] = useState(''); + + const handleCreateNewAccount = useCallback(async () => { + console.info('CREATE ACCOUNT', newAccountName); + await createAccount(newAccountName); + }, [createAccount, newAccountName]); + + const handleChange = useCallback( + async (event: SelectChangeEvent) => { + console.info('CHANGE ACCOUNT TO: ', event.target.value); + return await setDefaultAccount(event.target.value); + }, + [setDefaultAccount] + ); + + const onAddAccountChange = (e: React.ChangeEvent) => { + setNewAccountName(e.target.value); + }; + + //TODO refactor select component + return ( + + + + + + + + + {'Create account'} + + + + + ); +} + +export default SelectOotleAccount; diff --git a/src/containers/floating/Settings/sections/ootleWallet/TemplateFileUploader.tsx b/src/containers/floating/Settings/sections/ootleWallet/TemplateFileUploader.tsx new file mode 100644 index 000000000..3bc7082e3 --- /dev/null +++ b/src/containers/floating/Settings/sections/ootleWallet/TemplateFileUploader.tsx @@ -0,0 +1,65 @@ +import { useCallback, useState } from 'react'; +import { SquaredButton } from '@app/components/elements/buttons/SquaredButton'; +import { Typography } from '@app/components/elements/Typography'; +import { open } from '@tauri-apps/plugin-dialog'; +import { invoke } from '@tauri-apps/api/core'; + +export async function uploadFile(url: string, formData: FormData) { + const response = await fetch(`${url}/upload_template`, { + method: 'POST', + body: formData, + }); + if (!response.ok) { + throw new Error('Failed to refresh token'); + } + + const data = await response.json(); + return data; +} + +function TemplateFileUploader() { + const [selectedFilePath, setSelectedFilePath] = useState(''); + + const handleFileUpload = useCallback(async () => { + console.info('handle file upload path ', selectedFilePath); + invoke('upload_wasm_file', { file: selectedFilePath }).catch((e) => console.error('Failed to upload', e)); + }, [selectedFilePath]); + + const handleFileSelect = useCallback(async () => { + console.info('handle file select '); + const file = await open({ + multiple: false, + directory: false, + }); + console.info('handle file', file); + if (file) { + setSelectedFilePath(file); + } + console.info('handle file upload file path', file); + }, []); + + return ( +
+ {'Upload wasm file'} + {`Path: ${selectedFilePath}`} + + {'Select wasm file'} + + + {'Upload wasm file'} + +
+ ); +} + +export default TemplateFileUploader; diff --git a/src/containers/floating/Settings/types.ts b/src/containers/floating/Settings/types.ts index 500fda67d..eb4b515e8 100644 --- a/src/containers/floating/Settings/types.ts +++ b/src/containers/floating/Settings/types.ts @@ -7,6 +7,8 @@ export const SETTINGS_TYPES = [ 'connections', 'experimental', 'releaseNotes', + 'ootle', + 'ootleWallet', ] as const; type SettingsTuple = typeof SETTINGS_TYPES; export type SettingsType = SettingsTuple[number]; diff --git a/src/containers/floating/TappletTransactionDialog/TappletTransactionDialog.styles.ts b/src/containers/floating/TappletTransactionDialog/TappletTransactionDialog.styles.ts new file mode 100644 index 000000000..3e1535534 --- /dev/null +++ b/src/containers/floating/TappletTransactionDialog/TappletTransactionDialog.styles.ts @@ -0,0 +1,9 @@ +import styled from 'styled-components'; + +export const ButtonsWrapper = styled.div(() => ({ + display: 'flex', + justifyContent: 'right', + marginTop: '16px', + alignItems: 'center', + gap: '16px', +})); diff --git a/src/containers/floating/TappletTransactionDialog/TappletTransactionDialog.tsx b/src/containers/floating/TappletTransactionDialog/TappletTransactionDialog.tsx new file mode 100644 index 000000000..6b441be8d --- /dev/null +++ b/src/containers/floating/TappletTransactionDialog/TappletTransactionDialog.tsx @@ -0,0 +1,69 @@ +import { useTranslation } from 'react-i18next'; + +import { useUIStore } from '@app/store/useUIStore'; + +import { DialogContent, Dialog } from '@app/components/elements/dialog/Dialog'; +import { SquaredButton } from '@app/components/elements/buttons/SquaredButton'; +import { Typography } from '@app/components/elements/Typography'; +import { memo, useCallback, useState } from 'react'; +import { ButtonsWrapper } from './TappletTransactionDialog.styles'; +import { useTappletProviderStore } from '@app/store/useTappletProviderStore'; + +const TappletTransactionDialog = memo(function AutoUpdateDialog() { + const { t } = useTranslation('setup-view', { useSuspense: false }); //TODO add transaltion + const open = useUIStore((s) => s.dialogToShow === 'txSimulation'); + const setDialogToShow = useUIStore((s) => s.setDialogToShow); + const [maxFee, setMaxFee] = useState(0); + const getPendingTransaction = useTappletProviderStore((s) => s.getPendingTransaction); + const tx = getPendingTransaction(); + + const handleClose = useCallback(() => { + console.info('Tx cancelled'); + console.warn('Cancel TX', tx); + setMaxFee(0); + setDialogToShow(null); + if (!tx) return; + tx.cancel(); + }, [setDialogToShow, tx]); + + const handleSubmit = useCallback(async () => { + const isDryRun = maxFee == 0; + console.warn('SUBMIT run TX', tx); + if (!tx) return; + if (isDryRun) { + const { balanceUpdates, txSimulation, estimatedFee } = await tx.runSimulation(); + console.warn('SIIIIMULATION RES TX', txSimulation); + if (estimatedFee) setMaxFee(estimatedFee); + console.warn('SIIIIMULATION RES BALANCES', balanceUpdates); + console.warn('SIIIIMULATION RES FEE', estimatedFee); + return; + } else { + const result = await tx.submit(); + console.warn('TX submit result', result); + setMaxFee(0); + setDialogToShow(null); + } + }, [maxFee, setDialogToShow, tx]); + + return ( + + + {'Transaction'} + {`Id ${tx?.id} fee: ${maxFee}`} + {`Status ${tx?.status}`} + + <> + + {'Cancel'} + + + {maxFee ? 'Submit' : 'Estimate fee'} + + + + + + ); +}); + +export default TappletTransactionDialog; diff --git a/src/containers/main/Dashboard/Dashboard.tsx b/src/containers/main/Dashboard/Dashboard.tsx index 2585a38c8..40139d90c 100644 --- a/src/containers/main/Dashboard/Dashboard.tsx +++ b/src/containers/main/Dashboard/Dashboard.tsx @@ -1,10 +1,16 @@ +import { useAppConfigStore } from '@app/store/useAppConfigStore'; import MiningView from './MiningView/MiningView'; import { DashboardContentContainer } from './styles'; +import { useTappletsStore } from '@app/store/useTappletsStore'; +import ActiveTappletView from '@app/components/ootle/ActiveTappletView'; export default function Dashboard() { + const ootleMode = useAppConfigStore((s) => s.ootle_enabled); + const activeTapplet = useTappletsStore((s) => s.activeTapplet); + return ( - - + + {ootleMode && activeTapplet ? : } ); } diff --git a/src/containers/main/Dashboard/styles.ts b/src/containers/main/Dashboard/styles.ts index f2eb4566c..1f4ca6bcb 100644 --- a/src/containers/main/Dashboard/styles.ts +++ b/src/containers/main/Dashboard/styles.ts @@ -1,7 +1,7 @@ import styled from 'styled-components'; import * as m from 'motion/react-m'; -export const DashboardContentContainer = styled(m.div)` +export const DashboardContentContainer = styled(m.div)<{ $ootleModeOn?: boolean }>` display: flex; align-items: center; flex-direction: column; @@ -9,6 +9,7 @@ export const DashboardContentContainer = styled(m.div)` height: 100%; flex-grow: 1; position: relative; + pointer-events: ${({ $ootleModeOn }) => ($ootleModeOn ? 'auto' : 'none')}; `; export const ProgressWrapper = styled.div` diff --git a/src/store/useAppConfigStore.ts b/src/store/useAppConfigStore.ts index 57f770653..54eeb6f9e 100644 --- a/src/store/useAppConfigStore.ts +++ b/src/store/useAppConfigStore.ts @@ -36,6 +36,8 @@ interface Actions { setShowExperimentalSettings: (showExperimentalSettings: boolean) => Promise; setP2poolStatsServerPort: (port: number | null) => Promise; setPreRelease: (preRelease: boolean) => Promise; + setOotleEnabled: (enabled: boolean) => void; + setOotleLocalNode: (enabled: boolean) => void; } type AppConfigStoreState = State & Actions; @@ -66,6 +68,8 @@ const initialState: State = { show_experimental_settings: false, p2pool_stats_server_port: null, pre_release: false, + ootle_enabled: false, + ootle_local_node: false, }; export const useAppConfigStore = create()((set) => ({ @@ -303,6 +307,25 @@ export const useAppConfigStore = create()((set) => ({ set({ pre_release: !preRelease }); }); }, + setOotleEnabled: (enabled) => { + set({ ootle_enabled: enabled }); + invoke('set_ootle_enabled', { enabled }).catch((e) => { + const appStateStore = useAppStateStore.getState(); + console.error('Could not set ootle local node enabled', e); + appStateStore.setError('Could not change ootle local node enabled'); + set({ ootle_local_node: !enabled }); + }); + }, + setOotleLocalNode: async (enabled) => { + console.info('setlocalootle', enabled); + set({ ootle_local_node: enabled }); + invoke('set_ootle_node_enabled', { enabled }).catch((e) => { + const appStateStore = useAppStateStore.getState(); + console.error('Could not set ootle local node enabled', e); + appStateStore.setError('Could not change ootle local node enabled'); + set({ ootle_local_node: !enabled }); + }); + }, })); export const fetchAppConfig = async () => { diff --git a/src/store/useOotleWalletStore.ts b/src/store/useOotleWalletStore.ts new file mode 100644 index 000000000..f3c54db79 --- /dev/null +++ b/src/store/useOotleWalletStore.ts @@ -0,0 +1,94 @@ +import { create } from './create.ts'; +import { useTappletProviderStore } from './useTappletProviderStore.ts'; +import { OotleAccount } from '@app/types/ootle/account.ts'; +import { AccountInfo } from '@tari-project/typescript-bindings'; + +interface State { + ootleAccount?: OotleAccount; + ootleAccountsList: AccountInfo[]; +} + +interface Actions { + createAccount: (name: string) => Promise; + setDefaultAccount: (name: string) => Promise; + getOotleAccountInfo: () => Promise; + getOotleAccountsList: () => Promise; +} + +type OotleWalletStoreState = State & Actions; + +const initialState: State = { + ootleAccount: undefined, + ootleAccountsList: [], +}; + +export const useOotleWalletStore = create()((set) => ({ + ...initialState, + createAccount: async (name: string) => { + const provider = useTappletProviderStore.getState().tappletProvider; + try { + if (!provider) { + return; + } + + const responseNewAcc = await provider.createFreeTestCoins(name); + + console.info('created acc: ', responseNewAcc); + // this needs to be set manually + await provider.setDefaultAccount(name); + const account = await provider.getAccount(); + set({ + ootleAccount: account, + }); + } catch (error) { + console.error('Could not create the new Ootle account: ', error); + } + }, + setDefaultAccount: async (name: string) => { + const provider = useTappletProviderStore.getState().tappletProvider; + try { + if (!provider) { + return; + } + await provider.setDefaultAccount(name); + // if tapplet uses TU Provider it gets default account + // this is to make sure tapplet uses the account selected by the user + const account = await provider.getAccount(); + set({ + ootleAccount: account, + }); + } catch (error) { + console.error('Could not set the default Ootle account: ', error); + } + }, + getOotleAccountInfo: async () => { + const provider = useTappletProviderStore.getState().tappletProvider; + try { + if (!provider) { + return; + } + // if tapplet uses TU Provider it gets default account + // this is to make sure tapplet uses the account selected by the user + const account = await provider.getAccount(); + set({ + ootleAccount: account, + }); + } catch (error) { + console.error('Could not get the Ootle account info: ', error); + } + }, + getOotleAccountsList: async () => { + const provider = useTappletProviderStore.getState().tappletProvider; + try { + if (!provider) { + return; + } + const list = await provider.getAccountsList(); + set({ + ootleAccountsList: list.accounts, + }); + } catch (error) { + console.error('Could not get ootle accounts list: ', error); + } + }, +})); diff --git a/src/store/useTappletProviderStore.ts b/src/store/useTappletProviderStore.ts new file mode 100644 index 000000000..1632dd2e7 --- /dev/null +++ b/src/store/useTappletProviderStore.ts @@ -0,0 +1,333 @@ +import { create } from './create.ts'; +import { ActiveTapplet } from '@app/types/ootle/tapplet.ts'; +import { useAppStateStore } from './appStateStore.ts'; +import { TappletProvider, TappletProviderParams } from '@app/types/ootle/TappletProvider.ts'; +import { toPermission } from '@app/types/ootle/tariPermissions.ts'; +import { TransactionEvent, TUTransaction, txCheck } from '@app/types/ootle/transaction.ts'; +import { TariPermissions } from '@tari-project/tari-permissions'; +import { FinalizeResult, SubmitTransactionRequest, TransactionStatus, UpSubstates } from '@tari-project/tarijs'; +import { useOotleWalletStore } from './useOotleWalletStore.ts'; +import { AccountsGetBalancesResponse } from '@tari-project/typescript-bindings'; +import { BalanceUpdate, TxSimulation, TxSimulationResult } from '@app/types/ootle/txSimulation.ts'; + +interface State { + isInitialized: boolean; + tappletProvider?: TappletProvider; + transactions: Record; +} + +//TODO do we need tapp provider id at all? +interface Actions { + initTappletProvider: () => Promise; + setTappletProvider: (id: string, launchedTapplet: ActiveTapplet) => Promise; + addTransaction: (event: MessageEvent) => Promise; + getTransactionById: (id: number) => TUTransaction | undefined; + getPendingTransaction: () => TUTransaction | undefined; + runTransaction: (event: MessageEvent) => Promise; +} + +type TappletProviderStoreState = State & Actions; + +const initialState: State = { + isInitialized: false, + tappletProvider: undefined, + transactions: {}, +}; + +export const useTappletProviderStore = create()((set, get) => ({ + ...initialState, + initTappletProvider: async () => { + try { + console.info(`🌎️ [TU store][init provider]`); + + const params: TappletProviderParams = { + id: '0', + permissions: { requiredPermissions: [], optionalPermissions: [] }, + }; + const provider: TappletProvider = TappletProvider.build(params); + + set({ isInitialized: true, tappletProvider: provider }); + } catch (error) { + const appStateStore = useAppStateStore.getState(); + console.error('Error setting tapplet provider: ', error); + appStateStore.setError(`Error setting tapplet provider: ${error}`); + } + }, + setTappletProvider: async (id: string, launchedTapplet: ActiveTapplet) => { + try { + // TODO tmp solution + const requiredPermissions = new TariPermissions(); + const optionalPermissions = new TariPermissions(); + if (launchedTapplet.permissions) { + launchedTapplet.permissions.requiredPermissions.map((p) => + requiredPermissions.addPermission(toPermission(p)) + ); + launchedTapplet.permissions.optionalPermissions.map((p) => + optionalPermissions.addPermission(toPermission(p)) + ); + } + const params: TappletProviderParams = { + id, + permissions: launchedTapplet.permissions ?? { requiredPermissions: [], optionalPermissions: [] }, + }; + const provider: TappletProvider = TappletProvider.build(params); + + set({ isInitialized: true, tappletProvider: provider }); + } catch (error) { + const appStateStore = useAppStateStore.getState(); + console.error('Error setting tapplet provider: ', error); + appStateStore.setError(`Error setting tapplet provider: ${error}`); + } + }, + addTransaction: async (event: MessageEvent) => { + const { methodName, args, id } = event.data; + const provider = get().tappletProvider; + const appStateStore = useAppStateStore.getState(); + + const runSimulation = async (): Promise => { + // const { methodName, args, id } = event.data; + // const provider = get().tappletProvider; + const account = useOotleWalletStore.getState().ootleAccount; + const appStateStore = useAppStateStore.getState(); + console.info(`🌎️🌎️🌎️ [TU store][run simulation] SIMULATION`, methodName, id, args); + console.info(`🌎️🌎️🌎️ [TU store][run simulation] provider & acc`, provider, account); + try { + if (!provider || !account) { + return createInvalidTransactionResponse('Provider and/or account undefined'); + } + if (methodName !== 'submitTransaction') { + return createInvalidTransactionResponse(`Simulation for ${methodName} not supported`); + } + + console.info(`🌎️🌎️🌎️ [TU store][run simulation] Run method "${methodName}"`); + const transactionReq: SubmitTransactionRequest = { ...args[0], is_dry_run: true }; + console.info(`🌎️🌎️🌎️ [TU store][run simulation] tx req`, transactionReq); + const tx = await provider?.runOne(methodName, [transactionReq]); + await provider.client.waitForTransactionResult({ + transaction_id: tx.transaction_id, + timeout_secs: 10, + }); + const txReceipt = await provider.getTransactionResult(tx.transaction_id); + const txResult = txReceipt.result as FinalizeResult | null; + console.info(`🌎️🌎️🌎️ [TU store][run simulation] tx result`, txResult); + if (!txResult?.result) { + return createInvalidTransactionResponse('Transaction result undefined'); + } + + const txSimulation: TxSimulation = { + status: txReceipt.status, + errorMsg: getErrorMessage(txResult), + }; + if (!txCheck.isAccept(txResult.result)) return { balanceUpdates: [], txSimulation }; + + const walletBalances = await fetchWalletBalances(provider, account.address); + const balanceUpdates = calculateBalanceUpdates(txResult.result.Accept.up_substates, walletBalances); + + if (txReceipt.status !== TransactionStatus.Accepted) { + set((state) => ({ + transactions: { + ...state.transactions, + [id]: { + ...state.transactions[id], + ...{ status: 'failure' }, + }, + }, + })); + console.info(`🌎️🌎️🌎️ [TU store][run simulation] updated status`, get().transactions); + } + + return { balanceUpdates, txSimulation, estimatedFee: txResult.fee_receipt.total_fees_paid }; + } catch (error) { + console.error(`Error running method "${methodName}": ${error}`); + appStateStore.setError(`Error running method "${methodName}": ${error}`); + return createInvalidTransactionResponse(`Error running method "${methodName}": ${error}`); + } + }; + + const submit = async (): Promise => { + // const { methodName, args, id } = event.data; + try { + console.info(`🌎️🌎️🌎️ [TU store][SUBMIT] ID`, id); + if (!provider) { + appStateStore.setError(`Provider undefined`); + return null; + } + // const provider = get().tappletProvider; + console.info(`🌎️ [TU store][run tx] Running method "${methodName}"`); + const result = await provider?.runOne(methodName, args); + if (event.source) { + event.source.postMessage({ id, result, type: 'provider-call' }, { targetOrigin: event.origin }); + } + await provider.client.waitForTransactionResult({ + transaction_id: result.transaction_id, + timeout_secs: 10, + }); + const txReceipt = await provider.getTransactionResult(result.transaction_id); + const txResult = txReceipt.result as FinalizeResult | null; + console.info(`🌎️ [TU store][run tx] RESULT AND RECEIPT`, txReceipt, txResult); + set((state) => ({ + transactions: { + ...state.transactions, + [id]: { + ...state.transactions[id], + ...{ status: txReceipt.status == TransactionStatus.Accepted ? 'success' : 'failure' }, + }, + }, + })); + return txResult; + } catch (error) { + console.error(`Error running method "${methodName}": ${error}`); + appStateStore.setError(`Error running method "${methodName}": ${error}`); + return null; + } + }; + + const cancel = async () => { + if (event.source) { + event.source.postMessage( + { id, result: {}, resultError: 'Transaction was cancelled', type: 'provider-call' }, + { targetOrigin: event.origin } + ); + } + + console.info(`🌎️🌎️🌎️ [TU store][CANCEL] ID`, id); + // TODO fix + set((state) => ({ + transactions: { + ...state.transactions, + [id]: { + ...state.transactions[id], + ...{ status: 'cancelled' }, + }, + }, + })); + console.info(`🌎️🌎️🌎️ [TU store][run simulation] updated status`, get().transactions); + }; + + try { + console.info(`🌎️ [TU store][init tx]`); + + const newTransaction: TUTransaction = { + methodName, + args, + id, + status: 'pending', + submit, + cancel, + runSimulation, + }; + console.info(`🌎️🌎️🌎️ [TU store][init tx] TX ADDED ID`, id); + // update state + // const transactions = [...get().transactions, newTx]; + set((state) => ({ + transactions: { + ...state.transactions, + [id]: newTransaction, + }, + })); + console.info(`🌎️ [TU store][init tx] success`, newTransaction); + } catch (error) { + // const appStateStore = useAppStateStore.getState(); + console.error('Error setting new transaction: ', error); + appStateStore.setError(`Error setting new transaction: ${error}`); + } + }, + runTransaction: async (event: MessageEvent) => { + const { methodName, args, id } = event.data; + try { + const provider = get().tappletProvider; + console.info(`🌎️ [TU store][run tx] Running method "${methodName}"`); + const result = await provider?.runOne(methodName, args); + if (event.source) { + event.source.postMessage({ id, result, type: 'provider-call' }, { targetOrigin: event.origin }); + } + } catch (error) { + const appStateStore = useAppStateStore.getState(); + console.error(`Error running method "${methodName}": ${error}`); + appStateStore.setError(`Error running method "${methodName}": ${error}`); + } + }, + + getTransactionById: (id) => { + return get().transactions[id]; + }, + getPendingTransaction: () => { + console.log('TX STORE', get().transactions); + const pendingTransaction = Object.values(get().transactions).find( + (transaction) => transaction.status === 'pending' + ); + console.log('TX pending', pendingTransaction); + return pendingTransaction; + }, + // runSimulation: async (id) => { + // const tx = get().transactions.find((transaction) => transaction.id === id); + // console.log('TX SIMULATION RUN ID', tx); + // if (!tx) + // return { + // balanceUpdates: [], + // txSimulation: { + // status: TransactionStatus.InvalidTransaction, + // errorMsg: 'No tx found', + // }, + // }; + // const { balanceUpdates, estimatedFee, txSimulation } = await tx.runSimulation(); + // console.log('TX SIMULATION', balanceUpdates, estimatedFee, txSimulation); + // return { balanceUpdates, txSimulation, estimatedFee }; + // }, +})); + +const createInvalidTransactionResponse = (errorMsg: string) => ({ + balanceUpdates: [], + txSimulation: { + status: TransactionStatus.InvalidTransaction, + errorMsg, + }, +}); + +const fetchWalletBalances = async ( + provider: TappletProvider, + address: string +): Promise => { + try { + return await provider.getAccountBalances(address); + } catch (error) { + console.error(error); + throw new Error(`Error fetching account balances: ${error}`); + } +}; + +const calculateBalanceUpdates = ( + up_substates: UpSubstates, + walletBalances: AccountsGetBalancesResponse +): BalanceUpdate[] => { + return up_substates + .map((upSubstate) => { + const [substateId, { substate }] = upSubstate; + + if (!txCheck.isVaultId(substateId) || !txCheck.isVaultSubstate(substate)) return undefined; + if (!txCheck.isFungible(substate.Vault.resource_container)) return undefined; + + const userBalance = walletBalances.balances.find((balance) => { + return txCheck.isVaultId(balance.vault_address) && balance.vault_address.Vault === substateId.Vault; + }); + + if (!userBalance) return undefined; + + return { + vaultAddress: substateId.Vault, + tokenSymbol: userBalance.token_symbol || '', + currentBalance: userBalance.balance, + newBalance: substate.Vault.resource_container.Fungible.amount, + }; + }) + .filter((vault): vault is BalanceUpdate => vault !== undefined); +}; + +const getErrorMessage = (txResult: FinalizeResult): string | undefined => { + if (txCheck.isReject(txResult?.result)) { + return txResult.result.Reject as string; + } else if (txCheck.isAcceptFeeRejectRest(txResult?.result)) { + return txResult.result.AcceptFeeRejectRest[1] as string; + } + return undefined; +}; diff --git a/src/store/useTappletsStore.ts b/src/store/useTappletsStore.ts new file mode 100644 index 000000000..894a5b747 --- /dev/null +++ b/src/store/useTappletsStore.ts @@ -0,0 +1,181 @@ +import { invoke } from '@tauri-apps/api/core'; +import { create } from './create.ts'; +import { + ActiveTapplet, + DevTapplet, + InstalledTappletWithAssets, + RegisteredTapplet, + RegisteredTappletWithAssets, + TappletConfig, +} from '@app/types/ootle/tapplet.ts'; +import { useAppStateStore } from './appStateStore.ts'; +import { useTappletProviderStore } from './useTappletProviderStore.ts'; + +export const TAPPLET_CONFIG_FILE = 'tapplet.config.json'; //TODO + +interface State { + isInitialized: boolean; + isFetching: boolean; + devTapplets: DevTapplet[]; + installedTapplets: InstalledTappletWithAssets[]; + registeredTapplets: RegisteredTappletWithAssets[]; + activeTapplet: ActiveTapplet | undefined; +} + +interface Actions { + installRegisteredTapp: (tappletId: string) => Promise; + fetchRegisteredTapps: () => Promise; + getInstalledTapps: () => Promise; + setActiveTapp: (tapplet?: ActiveTapplet) => Promise; + setActiveTappById: (tappletId: number, isDev?: boolean) => Promise; + deactivateTapplet: () => Promise; + addDevTapp: (endpoint: string) => Promise; + deleteDevTapp: (devTappletId: number) => Promise; + deleteInstalledTapp: (tappletId: number) => Promise; + updateInstalledTapp: (tappletId: number, installedTappletId: number) => Promise; + getDevTapps: () => Promise; +} + +type TappletsStoreState = State & Actions; + +const initialState: State = { + isFetching: false, + isInitialized: false, + installedTapplets: [], + registeredTapplets: [], + devTapplets: [], + activeTapplet: undefined, +}; + +export const useTappletsStore = create()((set, get) => ({ + ...initialState, + fetchRegisteredTapps: async () => { + console.info('[STORE TAPP] fetch registered tapp'); + set({ isFetching: true }); + try { + // TODO invoke to fetch tapplets + await invoke('fetch_registered_tapplets'); + console.info('[STORE TAPP] fetch tapp done'); + const registeredTapplets: RegisteredTapplet[] = await invoke('read_tapp_registry_db'); + console.info('[STORE TAPP] read db tapp done', registeredTapplets); + const assetsServerAddr = await invoke('get_assets_server_addr'); + const tappletsWithAssets = registeredTapplets.map((tapp) => ({ + ...tapp, + logoAddr: `${assetsServerAddr}/${tapp.package_name}/logo.svg`, + backgroundAddr: `${assetsServerAddr}/${tapp.package_name}/background.svg`, + })); + + set({ isFetching: false, isInitialized: true, registeredTapplets: tappletsWithAssets }); + } catch (error) { + const appStateStore = useAppStateStore.getState(); + console.error('Error fetching registered tapplets: ', error); + appStateStore.setError(`'Error fetching registered tapplets: ${error}`); + } + }, + getInstalledTapps: async () => { + console.info('[STORE TAPP] fetch registered tapp'); + set({ isFetching: true }); + try { + const installedTapplets = await invoke('read_installed_tapp_db'); + console.info('[STORE] get installed tapp success', installedTapplets); + set({ installedTapplets }); + } catch (error) { + const appStateStore = useAppStateStore.getState(); + console.error('Error fetching registered tapplets: ', error); + appStateStore.setError(`'Error fetching registered tapplets: ${error}`); + } + }, + installRegisteredTapp: async (tappletId: string) => { + console.info('[STORE] fetch tapp'); + try { + // TODO invoke to add tapplet + const tapplet = await invoke('download_and_extract_tapp', { tappletId }); + const installedTapplet = await invoke('insert_installed_tapp_db', { tappletId }); + console.info('[STORE] fetch tapp success', tapplet, installedTapplet); + // TODO refactor types and assets path + const tapp: InstalledTappletWithAssets = { + display_name: tapplet.display_name, + installed_tapplet: installedTapplet, + installed_version: installedTapplet.tapplet_version_id, + latest_version: '', + logoAddr: tapplet.logoAddr, + backgroundAddr: tapplet.backgroundAddr, + }; + + set((state) => ({ + isInitialized: true, + installedTapplets: [...state.installedTapplets, tapp], + })); + } catch (error) { + const appStateStore = useAppStateStore.getState(); + console.error('Error installing tapplet: ', error); + appStateStore.setError(`'Error installing tapplet: ${error}`); + } + }, + setActiveTapp: async (tapplet) => { + set({ activeTapplet: tapplet }); + }, + deactivateTapplet: async () => { + set({ activeTapplet: undefined }); + }, + setActiveTappById: async (tappletId, isDev) => { + console.info('SET ACTIVE TAP', tappletId, get().activeTapplet?.tapplet_id); + if (tappletId == get().activeTapplet?.tapplet_id) return; + const tappProviderState = useTappletProviderStore.getState(); + // dev tapplet + if (isDev) { + const tapplet = get().devTapplets.find((tapp) => tapp.id === tappletId); + if (!tapplet) return; + const resp = await fetch(`${tapplet.endpoint}/${TAPPLET_CONFIG_FILE}`); + if (!resp.ok) return; + const config: TappletConfig = await resp.json(); + console.info('Dev Tapplet config', config); + if (!config) return; + const activeTapplet: ActiveTapplet = { + tapplet_id: tapplet.id, + version: config.version, + display_name: tapplet.display_name, + source: tapplet.endpoint, + permissions: config.permissions, + supportedChain: config.supportedChain, + }; + set({ activeTapplet }); + tappProviderState.setTappletProvider(config.packageName, activeTapplet); + return; + } + + const activeTapplet = await invoke('launch_tapplet', { installedTappletId: tappletId }); + set({ activeTapplet }); + tappProviderState.setTappletProvider(tappletId.toString(), activeTapplet); + return; + }, + addDevTapp: async (endpoint) => { + const devTapp = await invoke('add_dev_tapplet', { endpoint }); + console.info('[STORE] add dev tapp', devTapp); + const devTapplets = await invoke('read_dev_tapplets'); + console.info('[STORE] add dev tapplets', devTapplets); + set({ devTapplets }); + }, + deleteDevTapp: async (devTappletId) => { + const removedTappSize = await invoke('delete_dev_tapplet', { devTappletId }); + console.info('[STORE] delete dev tapp: id | db removedTappSize', devTappletId, removedTappSize); + set((state) => ({ devTapplets: state.devTapplets.filter((tapp) => tapp.id !== devTappletId) })); + }, + getDevTapps: async () => { + const devTapplets = await invoke('read_dev_tapplets'); + console.info('[STORE get dev tapplets', devTapplets); + set({ devTapplets }); + }, + deleteInstalledTapp: async (tappletId) => { + const removedTappSize = await invoke('delete_installed_tapplet', { tappletId }); + console.info('[STORE] delete installed tapp: id | db removedTappSize', tappletId, removedTappSize); + set((state) => ({ + installedTapplets: state.installedTapplets.filter((tapp) => tapp.installed_tapplet.id !== tappletId), + })); + }, + updateInstalledTapp: async (tappletId, installedTappletId) => { + const installedTapplets = await invoke('update_installed_tapplet', { tappletId, installedTappletId }); + console.info('[STORE] update tapp: id | installedTappId', tappletId, installedTappletId); + set({ installedTapplets }); + }, +})); diff --git a/src/store/useUIStore.ts b/src/store/useUIStore.ts index 872653d6d..e4f38c335 100644 --- a/src/store/useUIStore.ts +++ b/src/store/useUIStore.ts @@ -4,7 +4,14 @@ import { Theme } from '@app/theme/types.ts'; import { animationDarkBg, animationLightBg, setAnimationProperties } from '@app/visuals.ts'; import { useAppConfigStore } from './useAppConfigStore.ts'; -export const DIALOG_TYPES = ['logs', 'restart', 'autoUpdate', 'releaseNotes', 'ludicrousConfirmation'] as const; +export const DIALOG_TYPES = [ + 'logs', + 'restart', + 'autoUpdate', + 'releaseNotes', + 'ludicrousConfirmation', + 'txSimulation', +] as const; type DialogTypeTuple = typeof DIALOG_TYPES; export type DialogType = DialogTypeTuple[number]; diff --git a/src/types/app-status.ts b/src/types/app-status.ts index 5d26fd5eb..d7d759934 100644 --- a/src/types/app-status.ts +++ b/src/types/app-status.ts @@ -48,6 +48,8 @@ export interface AppConfig { created_at: string; p2pool_stats_server_port: number | null; pre_release: boolean; + ootle_enabled: boolean; + ootle_local_node: boolean; } export enum ExternalDependencyStatus { diff --git a/src/types/invoke.ts b/src/types/invoke.ts index d49e678f5..bec9d47f2 100644 --- a/src/types/invoke.ts +++ b/src/types/invoke.ts @@ -13,6 +13,14 @@ import { Language } from '@app/i18initializer'; import { PaperWalletDetails } from '@app/types/app-status.ts'; import { displayMode, modeType } from '@app/store/types.ts'; import { AirdropTokens } from '@app/store/useAirdropStore'; +import { + DevTapplet, + InstalledTapplet, + InstalledTappletWithAssets, + ActiveTapplet, + RegisteredTapplet, + RegisteredTappletWithAssets, +} from './ootle/tapplet'; declare module '@tauri-apps/api/core' { function invoke( @@ -96,4 +104,32 @@ declare module '@tauri-apps/api/core' { param: 'log_web_message', payload: { level: 'log' | 'error' | 'warn' | 'info'; message: string } ): Promise; + + /** + * Tati Ootle + */ + function invoke(param: 'read_installed_tapp_db'): Promise; + function invoke(param: 'read_tapp_registry_db'): Promise; + function invoke(param: 'insert_installed_tapp_db', payload: { tappletId: string }): Promise; + function invoke( + param: 'update_tapp', + payload: { tappletId: string; installedTappletId: string } + ): Promise; + function invoke(param: 'get_assets_server_addr'): Promise; + function invoke(param: 'add_dev_tapplet', payload: { endpoint: string }): Promise; + function invoke(param: 'read_dev_tapplets'): Promise; + function invoke(param: 'delete_dev_tapplet', payload: { devTappletId: number }): Promise; + function invoke(param: 'delete_installed_tapplet', payload: { tappletId: number }): Promise; + function invoke( + param: 'update_installed_tapplet', + payload: { tappletId: number; installedTappletId: number } + ): Promise; + function invoke( + param: 'download_and_extract_tapp', + payload: { tappletId: string } + ): Promise; + function invoke(param: 'launch_tapplet', payload: { installedTappletId: number }): Promise; + function invoke(param: 'set_ootle_enabled', payload: { enabled: boolean }): Promise; + function invoke(param: 'set_ootle_node_enabled', payload: { enabled: boolean }): Promise; + function invoke(param: 'upload_wasm_file', payload: { file: string }): Promise; } diff --git a/src/types/ootle/TappletProvider.ts b/src/types/ootle/TappletProvider.ts new file mode 100644 index 000000000..40bb7fe5b --- /dev/null +++ b/src/types/ootle/TappletProvider.ts @@ -0,0 +1,310 @@ +import { + WalletDaemonClient, + stringToSubstateId, + substateIdToString, + KeyBranch, + AccountsGetBalancesResponse, + TransactionSubmitRequest, + AccountsListResponse, +} from '@tari-project/wallet_jrpc_client'; +import { + Account, + SubmitTransactionRequest, + SubmitTransactionResponse, + Substate, + TariProvider, + TemplateDefinition, + TransactionResult, + TransactionStatus, + VaultBalances, +} from '@tari-project/tarijs'; +import type { ListSubstatesResponse } from '@tari-project/tari-provider'; +import { + AccountSetDefaultResponse, + ComponentAccessRules, + Instruction, + PublishTemplateRequest, + PublishTemplateResponse, + SubstateType, +} from '@tari-project/typescript-bindings'; +import { TappletPermissions } from './tapplet'; +import { IPCRpcTransport } from './ipc_transport'; +import { OotleAccount } from './account'; + +export interface WindowSize { + width: number; + height: number; +} + +export interface TappletProviderParams { + id: string; + permissions: TappletPermissions; + name?: string; + onConnection?: () => void; +} + +export type TappletProviderMethod = Exclude; + +export class TappletProvider implements TariProvider { + public providerName = 'TappletProvider'; + id: string; + params: TappletProviderParams; + client: WalletDaemonClient; + isProviderConnected: boolean; + + private constructor( + params: TappletProviderParams, + connection: WalletDaemonClient, + public width = 0, + public height = 0 + ) { + this.params = params; + this.client = connection; + this.isProviderConnected = true; + this.id = params.id; + } + + static build(params: TappletProviderParams): TappletProvider { + const client = WalletDaemonClient.new(new IPCRpcTransport()); + return new TappletProvider(params, client); + } + public setWindowSize(width: number, height: number): void { + this.width = width; + this.height = height; + } + + public sendWindowSizeMessage(tappletWindow: Window | null, targetOrigin: string): void { + tappletWindow?.postMessage({ height: this.height, width: this.width, type: 'resize' }, targetOrigin); + } + /* eslint-disable @typescript-eslint/no-explicit-any */ + async runOne(method: TappletProviderMethod, args: any[]): Promise { + console.info('[TU][TappletProvider] runOne', method); + const res = (this[method] as (...args: any) => Promise)(...args); + return res; + } + + public isConnected(): boolean { + return this.isProviderConnected; //TODO tmp solution shoule be better one + } + + public async getClient(): Promise { + return this.client; + } + + // TODO account name should be included in TU Provider method definition to pass the arg + public async createFreeTestCoins(accountName = 'test', amount = 1_000_000, fee?: number): Promise { + const res = await this.client.createFreeTestCoins({ + account: (accountName && { Name: accountName }) || null, + amount, + max_fee: fee ?? null, + key_id: null, + }); + return { + account_id: res.account.key_index, + address: (res.account.address as { Component: string }).Component, + public_key: res.public_key, + resources: [], + }; + } + + public async createAccount( + accountName?: string, + fee?: number, + customAccessRules?: ComponentAccessRules, + isDefault = true + ): Promise { + const res = await this.client.accountsCreate({ + account_name: accountName ?? null, + custom_access_rules: customAccessRules ?? null, + is_default: isDefault, + key_id: null, + max_fee: fee ?? null, + }); + return { + account_id: 0, + address: (res.address as { Component: string }).Component, + public_key: res.public_key, + resources: [], + }; + } + + public requestParentSize(): Promise { + return Promise.resolve({ width: this.width, height: this.height }); + } + + public async getAccount(): Promise { + const { account, public_key } = await this.client.accountsGetDefault({}); + console.info('🔌 [TU][Provider] getAccount with accountsGetDefault', account, public_key); + + // TODO tip: if fails try `account: { ComponentAddress: account.address }` + const { balances } = await this.client.accountsGetBalances({ + account: { ComponentAddress: substateIdToString(account.address) }, + refresh: false, + }); + console.info('[TU]appletProvider] getAccount', account.name, balances); + return { + account_id: account.key_index, + address: substateIdToString(account.address), + account_name: account.name ?? '', + public_key, + + resources: balances.map((b: any) => ({ + type: b.resource_type, + resource_address: b.resource_address, + balance: b.balance + b.confidential_balance, + token_symbol: b.token_symbol, + vault_id: + typeof b.vault_address === 'string' && b.vault_address.length > 0 + ? b.vault_address + : 'Vault' in b.vault_address + ? b.vault_address.Vault + : b.vault_address, + })), + }; + } + + public async getAccountBalances(componentAddress: string): Promise { + return await this.client.accountsGetBalances({ + account: { ComponentAddress: componentAddress }, + refresh: true, + }); + } + + public async getAccountsList(limit = 10, offset = 0): Promise { + return await this.client.accountsList({ + limit, + offset, + }); + } + + public async getAccountsBalances(accountName: string, refresh = false): Promise { + return await this.client.accountsGetBalances({ account: { Name: accountName }, refresh }); + } + + public async getSubstate(substate_id: string): Promise { + const substateId = stringToSubstateId(substate_id); + const { value, record } = await this.client.substatesGet({ substate_id: substateId }); + return { + value, + address: { + substate_id: substateIdToString(record.substate_id), + version: record.version, + }, + }; + } + + public async submitTransaction(req: SubmitTransactionRequest): Promise { + const params: TransactionSubmitRequest = { + transaction: { + V1: { + network: req.network, + fee_instructions: req.fee_instructions as Instruction[], + instructions: req.instructions as Instruction[], + inputs: req.required_substates.map((s) => ({ + // TODO: Hmm The bindings want a SubstateId object, but the wallet only wants a string. Any is used to skip type checking here + substate_id: s.substate_id as any, + version: s.version ?? null, + })), + min_epoch: null, + max_epoch: null, + is_seal_signer_authorized: req.is_seal_signer_authorized, + }, + }, + signing_key_index: req.account_id, + autofill_inputs: [], + detect_inputs: true, + proof_ids: [], + detect_inputs_use_unversioned: req.detect_inputs_use_unversioned, + }; + + const res = await this.client.submitTransaction(params); + return { transaction_id: res.transaction_id }; + } + + public async getTransactionResult(transactionId: string): Promise { + const res = await this.client.getTransactionResult({ + transaction_id: transactionId, + }); + + return { + transaction_id: transactionId, + status: convertStringToTransactionStatus(res.status), + result: res.result as any, + }; + } + + public async getPublicKey(branch: string, index: number): Promise { + const res = await this.client.createKey({ branch: branch as KeyBranch, specific_index: index }); + return res.public_key; + } + + public async getTemplateDefinition(template_address: string): Promise { + return await this.client.templatesGet({ template_address }); + } + + public async getConfidentialVaultBalances( + viewKeyId: number, + vaultId: string, + min: number | null = null, + max: number | null = null + ): Promise { + const res = await this.client.viewVaultBalance({ + view_key_id: viewKeyId, + vault_id: vaultId, + minimum_expected_value: min, + maximum_expected_value: max, + }); + return { balances: res.balances as unknown as Map }; + } + + public async listSubstates( + filter_by_template: string | null, + filter_by_type: SubstateType | null, + limit: number | null, + offset: number | null + ): Promise { + const res = await this.client.substatesList({ + filter_by_template, + filter_by_type, + limit: limit ? BigInt(limit) : null, + offset: offset ? BigInt(offset) : null, + }); + const substates = res.substates.map((s) => ({ + substate_id: substateIdToString(s.substate_id), + module_name: s.module_name, + version: s.version, + template_address: s.template_address, + })); + + return { substates }; + } + + public async setDefaultAccount(accountName: string): Promise { + return await this.client.accountsSetDefault({ account: { Name: accountName } }); + } + + public async transactionsPublishTemplate(request: PublishTemplateRequest): Promise { + return await this.client.publishTemplate(request); + } +} + +function convertStringToTransactionStatus(status: string): TransactionStatus { + switch (status) { + case 'New': + return TransactionStatus.New; + case 'DryRun': + return TransactionStatus.DryRun; + case 'Pending': + return TransactionStatus.Pending; + case 'Accepted': + return TransactionStatus.Accepted; + case 'Rejected': + return TransactionStatus.Rejected; + case 'InvalidTransaction': + return TransactionStatus.InvalidTransaction; + case 'OnlyFeeAccepted': + return TransactionStatus.OnlyFeeAccepted; + default: + throw new Error(`Unknown status: ${status}`); + } +} diff --git a/src/types/ootle/account.ts b/src/types/ootle/account.ts new file mode 100644 index 000000000..2d40cefa4 --- /dev/null +++ b/src/types/ootle/account.ts @@ -0,0 +1,9 @@ +import { VaultData } from '@tari-project/tarijs'; + +export interface OotleAccount { + account_id: number; + address: string; + public_key: string; + resources: VaultData[]; + account_name: string; +} diff --git a/src/types/ootle/index.ts b/src/types/ootle/index.ts new file mode 100644 index 000000000..ef716d293 --- /dev/null +++ b/src/types/ootle/index.ts @@ -0,0 +1,20 @@ +export type { OotleAccount } from './account'; +export type { IPCRpcTransport } from './ipc_transport'; +export type { + ActiveTapplet, + DevTapplet, + DevTappletWithAssets, + InstalledTapplet, + InstalledTappletWithAssets, + RegisteredTapplet, + RegisteredTappletWithAssets, + RegisteredTappletWithVersion, + SupportedChain, + TappletAudit, + TappletConfig, + TappletPermissions, + TappletVersion, +} from './tapplet'; +export type { TransactionEvent, txCheck } from './transaction'; +export type { TappletProvider, TappletProviderMethod, TappletProviderParams } from './TappletProvider'; +export { toPermission } from './tariPermissions'; diff --git a/src/types/ootle/ipc_transport.ts b/src/types/ootle/ipc_transport.ts new file mode 100644 index 000000000..b90fbfb41 --- /dev/null +++ b/src/types/ootle/ipc_transport.ts @@ -0,0 +1,15 @@ +import { transports } from '@tari-project/wallet_jrpc_client'; +import { invoke } from '@tauri-apps/api/core'; + +export class IPCRpcTransport implements transports.RpcTransport { + async sendRequest(request: transports.RpcRequest, _: transports.RpcTransportOptions): Promise { + return await invoke('call_wallet', { + method: request.method, + params: JSON.stringify(request.params), + }); + } + + async get_token(): Promise { + return await invoke('get_permission_token', {}); + } +} diff --git a/src/types/ootle/tapplet.ts b/src/types/ootle/tapplet.ts new file mode 100644 index 000000000..bab958a6c --- /dev/null +++ b/src/types/ootle/tapplet.ts @@ -0,0 +1,92 @@ +import { TariPermission } from '@tari-project/tari-permissions'; + +export interface RegisteredTapplet { + id: string; + registry_id: string; + package_name: string; + display_name: string; + author_name: string; + author_website: string; + about_summary: string; + about_description: string; + category: string; +} + +export type RegisteredTappletWithAssets = RegisteredTapplet & { + logoAddr: string; + backgroundAddr: string; +}; + +export interface InstalledTapplet { + id: number; + tapplet_id: number; //TODO change to number because of rust i32 + tapplet_version_id: string; +} + +export interface InstalledTappletWithAssets { + installed_tapplet: InstalledTapplet; + display_name: string; + installed_version: string; + latest_version: string; + logoAddr: string; + backgroundAddr: string; +} + +export interface DevTapplet { + id: number; + package_name: string; + endpoint: string; + display_name: string; + about_summary: string; + about_description: string; +} + +export type DevTappletWithAssets = DevTapplet & { + about_summary: string; + about_description: string; +}; + +export interface TappletVersion { + id: string; + tapplet_id: string; + version: string; + integrity: string; + registry_url: string; + logo_url: string; +} + +export interface RegisteredTappletWithVersion { + id: string; + registered_tapp: RegisteredTapplet; + tapp_version: TappletVersion; +} + +export interface TappletAudit { + id: string; + tapplet_id: string; + auditor: string; + report_url: string; +} + +export interface ActiveTapplet { + tapplet_id: number; + display_name: string; + source: string; + version: string; + permissions?: TappletPermissions; + supportedChain: SupportedChain[]; +} + +export type SupportedChain = 'MAINNET' | 'STAGENET' | 'NEXTNET' | ''; +export interface TappletConfig { + packageName: string; + version: string; + permissions: TappletPermissions; + supportedChain: SupportedChain[]; +} + +// TODO impor it from tari.js when is possible +export interface TappletPermissions { + requiredPermissions: TariPermission[]; + optionalPermissions: TariPermission[]; +} diff --git a/src/types/ootle/tariPermissions.ts b/src/types/ootle/tariPermissions.ts new file mode 100644 index 000000000..6e6ff70e0 --- /dev/null +++ b/src/types/ootle/tariPermissions.ts @@ -0,0 +1,33 @@ +import { + TariPermission, + TariPermissionAccountBalance, + TariPermissionAccountInfo, + TariPermissionAccountList, + TariPermissionGetNft, + TariPermissionKeyList, + TariPermissionNftGetOwnershipProof, + TariPermissionTransactionGet, + TariPermissionTransactionSend, +} from '@tari-project/tari-permissions'; + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export function toPermission(permission: any): TariPermission { + if (Object.prototype.hasOwnProperty.call(permission, 'AccountBalance')) { + return new TariPermissionAccountBalance(permission.AccountBalance); + } else if (permission === 'AccountInfo') { + return new TariPermissionAccountInfo(); + } else if (Object.prototype.hasOwnProperty.call(permission, 'AccountList')) { + return new TariPermissionAccountList(permission.AccountList); + } else if (permission == 'KeyList') { + return new TariPermissionKeyList(); + } else if (Object.prototype.hasOwnProperty.call(permission, 'TransactionSend')) { + return new TariPermissionTransactionSend(permission.TransactionSend); + } else if (permission === 'TransactionGet') { + return new TariPermissionTransactionGet(); + } else if (Object.prototype.hasOwnProperty.call(permission, 'GetNft')) { + return new TariPermissionGetNft(permission.GetNft); + } else if (Object.prototype.hasOwnProperty.call(permission, 'NftGetOwnershipProof')) { + return new TariPermissionNftGetOwnershipProof(permission.NftGetOwnershipProof); + } + return permission; +} diff --git a/src/types/ootle/transaction.ts b/src/types/ootle/transaction.ts new file mode 100644 index 000000000..c02984923 --- /dev/null +++ b/src/types/ootle/transaction.ts @@ -0,0 +1,68 @@ +import { + SubstateDiff, + TransactionResult, + VaultId, + Vault, + SubstateId, + SubstateValue, + ResourceContainer, + ResourceAddress, + Amount, + RejectReason, +} from '@tari-project/typescript-bindings'; +import { TappletProvider } from './TappletProvider'; +import { FinalizeResult, SubmitTransactionRequest } from '@tari-project/tarijs'; +import { TxSimulationResult } from './txSimulation'; + +export interface TransactionEvent { + methodName: Exclude; + /* eslint-disable @typescript-eslint/no-explicit-any */ + args: any[]; + id: number; +} + +function isOfType(obj: T, key: keyof T): boolean { + return obj !== null && typeof obj === 'object' && key in obj; +} + +export const txCheck = { + isAccept: (result: TransactionResult): result is { Accept: SubstateDiff } => { + return 'Accept' in result; + }, + + isVaultId: (substateId: SubstateId): substateId is { Vault: VaultId } => { + return isOfType(substateId, 'Vault' as keyof SubstateId); + }, + + isVaultSubstate: (substate: SubstateValue): substate is { Vault: Vault } => { + return 'Vault' in substate; + }, + + isFungible: ( + resourceContainer: ResourceContainer + ): resourceContainer is { Fungible: { address: ResourceAddress; amount: Amount; locked_amount: Amount } } => { + return 'Fungible' in resourceContainer; + }, + + isReject: (result: TransactionResult): result is { Reject: RejectReason } => { + return 'Reject' in result; + }, + isAcceptFeeRejectRest: ( + result: TransactionResult + ): result is { AcceptFeeRejectRest: [SubstateDiff, RejectReason] } => { + return 'AcceptFeeRejectRest' in result; + }, +}; + +export type TappletTxStatus = 'dryRun' | 'pending' | 'success' | 'failure' | 'cancelled'; +export type TappletProviderMethod = Exclude; + +export interface TUTransaction { + id: number; + methodName: TappletProviderMethod; + args: SubmitTransactionRequest[]; + status: TappletTxStatus; + submit: () => Promise; + cancel: () => void; + runSimulation: () => Promise; +} diff --git a/src/types/ootle/txSimulation.ts b/src/types/ootle/txSimulation.ts new file mode 100644 index 000000000..08ff4e7cf --- /dev/null +++ b/src/types/ootle/txSimulation.ts @@ -0,0 +1,29 @@ +import { TransactionStatus } from '@tari-project/tarijs'; + +export type SimulationStatus = 'pending' | 'success' | 'failure'; + +export interface Simulation { + transactionId: number; + status: SimulationStatus; + balanceUpdates: BalanceUpdate[]; + errorMsg: string; + transaction: TxSimulation; +} + +export interface BalanceUpdate { + currentBalance: number; + newBalance: number; + vaultAddress: string; + tokenSymbol: string; +} + +export interface TxSimulation { + status: TransactionStatus; + errorMsg?: string; +} + +export interface TxSimulationResult { + balanceUpdates: BalanceUpdate[]; + txSimulation: TxSimulation; + estimatedFee?: number; +} diff --git a/src/utils/formatters.ts b/src/utils/formatters.ts index 4cc07ac30..b4c7ee979 100644 --- a/src/utils/formatters.ts +++ b/src/utils/formatters.ts @@ -101,3 +101,26 @@ export function formatHashrate(hashrate: number, joinUnit = true): string { return (hashrate / 1000000000000000).toFixed(2) + (joinUnit ? ' PH/s' : 'P'); } } + +export function shortenSubstateAddress(input: string, startChars = 5, endChars = 5): string { + // example address string: component_3636be07822720b55b6053769d91af4af959c12bd17187c3673716e09a4ebe33 + const parts = input.split('_'); + + // Check if the input has the expected format + if (parts.length < 2) { + return input; + } + + const prefix = parts[0]; // SubstateId + const longString = parts[1]; // Address + + // Ensure the long string is long enough to shorten + if (longString.length <= startChars + endChars) { + return input; + } + + const startPart = longString.substring(0, startChars); + const endPart = longString.substring(longString.length - endChars); + + return `${prefix}_${startPart}(...)${endPart}`; +}