diff --git a/.env.example b/.env.example index 9f52a41..3474cc9 100644 --- a/.env.example +++ b/.env.example @@ -1,10 +1,13 @@ # Miden Contract Addresses -VITE_MIDEN_ID_CONTRACT_ADDRESS=0x88751c1fec53b640361a89e3570acb -VITE_MIDEN_FAUCET_CONTRACT_ADDRESS=0x54bf4e12ef20082070758b022456c7 -VITE_MIDEN_FAUCET_ID_BECH32=mtst1ap2t7nsjausqsgrswk9syfzkcu328yna_qruqqypuyph +VITE_MIDEN_ID_CONTRACT_ADDRESS=0x61b6080c4843bc507be706f6b7c050 +VITE_MIDEN_FAUCET_CONTRACT_ADDRESS=0x37d5977a8e16d8205a360820f0230f +VITE_MIDEN_FAUCET_ID_BECH32=mtst1aqmat9m63ctdsgz6xcyzpuprpulwk9vg_qruqqypuyph # API Configuration VITE_API_BASE=https://your-backend-api.com +# Dashboard API Configuration (admin dashboard) +VITE_DASHBOARD_API_BASE=http://localhost:3081 + # File Upload Configuration (in bytes) VITE_MAX_FILE_SIZE=5242880 diff --git a/README.md b/README.md index 4cc9278..27beb99 100644 --- a/README.md +++ b/README.md @@ -337,4 +337,4 @@ For issues and questions: --- -Built with ❤️ for the Miden ecosystem +Built with ❤️ for the Miden ecosystem. diff --git a/package-lock.json b/package-lock.json index 16857a4..99d7126 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,12 @@ "name": "midenid-frontend", "version": "0.0.0", "dependencies": { - "@demox-labs/miden-sdk": "^0.12.5", - "@demox-labs/miden-wallet-adapter": "^0.10.0", "@hookform/resolvers": "^5.2.2", + "@miden-sdk/miden-sdk": "^0.13.1", + "@miden-sdk/miden-wallet-adapter": "^0.13.2", + "@miden-sdk/react": "^0.13.2", "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", @@ -21,6 +23,7 @@ "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tooltip": "^1.2.8", "framer-motion": "^12.23.24", "motion": "^12.23.24", @@ -98,13 +101,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -113,9 +116,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -123,22 +126,21 @@ } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -155,14 +157,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -185,13 +187,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -202,18 +204,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", - "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.5", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -248,29 +250,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -293,9 +295,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -303,15 +305,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -365,27 +367,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -395,13 +397,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -411,13 +413,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -427,14 +429,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -476,17 +478,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", - "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" + "@babel/plugin-syntax-typescript": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -516,9 +518,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "dev": true, "license": "MIT", "engines": { @@ -526,33 +528,33 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -560,9 +562,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { @@ -573,88 +575,10 @@ "node": ">=6.9.0" } }, - "node_modules/@demox-labs/miden-sdk": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@demox-labs/miden-sdk/-/miden-sdk-0.12.5.tgz", - "integrity": "sha512-Oq+MKObtOEY3aro+q1coVSc2RKrIycWbz9hBvnxqIlUkHzn6iL8X4+TG8t14co03cyuVt1dz1F13w0ScQSBMuA==", - "dependencies": { - "@rollup/plugin-typescript": "^12.3.0", - "dexie": "^4.0.1", - "glob": "^11.0.0" - } - }, - "node_modules/@demox-labs/miden-wallet-adapter": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@demox-labs/miden-wallet-adapter/-/miden-wallet-adapter-0.10.0.tgz", - "integrity": "sha512-pCyV1vnhwNebBf8MEI6Tz6pbnMe5Kt9I/XiwOskA200o1wK1Sp7z8b3MdLnjyXNe7CXn3gJJFdBqzbU96vF1Lg==", - "license": "MIT", - "dependencies": { - "@demox-labs/miden-wallet-adapter-base": "^0.10.0", - "@demox-labs/miden-wallet-adapter-miden": "^0.10.0", - "@demox-labs/miden-wallet-adapter-react": "^0.10.0", - "@demox-labs/miden-wallet-adapter-reactui": "^0.10.0" - }, - "peerDependencies": { - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", - "react": "^19.1.1", - "react-dom": "^19.1.1" - } - }, - "node_modules/@demox-labs/miden-wallet-adapter-base": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@demox-labs/miden-wallet-adapter-base/-/miden-wallet-adapter-base-0.10.0.tgz", - "integrity": "sha512-BLPJdIz1eq/s8iUOkwGttpo04ShyqExaflS14lmgnyhXEDevTs5xWAu3ipgrVNEf79gYNeh4AQ/KKC29DsVXcQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@demox-labs/miden-wallet-adapter-miden": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@demox-labs/miden-wallet-adapter-miden/-/miden-wallet-adapter-miden-0.10.0.tgz", - "integrity": "sha512-yvZVNRBRY+lvYnyZ+I/VdPBNH9GrMEw6iG//7pztHTQSicxIC8mQZSFEoV1xWWvQglMlpycyZnDMM+R5zv2AwQ==", - "license": "MIT", - "dependencies": { - "@demox-labs/miden-wallet-adapter-base": "^0.10.0", - "nanoid": "^5.0.9" - }, - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@demox-labs/miden-wallet-adapter-react": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@demox-labs/miden-wallet-adapter-react/-/miden-wallet-adapter-react-0.10.0.tgz", - "integrity": "sha512-498XMpvY5QyEDjYbS6CUjzgAuD7BZFL1LxYIWskIglK/TOEGWZEOINT+bsXgan4Bgd+ybfKcJNYY0aAmyPtc2A==", - "license": "MIT", - "dependencies": { - "@demox-labs/miden-wallet-adapter-base": "^0.10.0" - }, - "peerDependencies": { - "react": "^19.1.1" - } - }, - "node_modules/@demox-labs/miden-wallet-adapter-reactui": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@demox-labs/miden-wallet-adapter-reactui/-/miden-wallet-adapter-reactui-0.10.0.tgz", - "integrity": "sha512-SdHq7ic6S4GXFcuIg8mtSSS/iFQeLOeBqJYlXh3LrHMGfKVQll9nRhGT1ZvJlXfQdC3/aX3fCNDqsgNzfosTjg==", - "license": "MIT", - "dependencies": { - "@demox-labs/miden-wallet-adapter-base": "^0.10.0", - "@demox-labs/miden-wallet-adapter-react": "^0.10.0" - }, - "peerDependencies": { - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", - "react": "^19.1.1", - "react-dom": "^19.1.1" - } - }, "node_modules/@dotenvx/dotenvx": { - "version": "1.51.4", - "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.51.4.tgz", - "integrity": "sha512-AoziS8lRQ3ew/lY5J4JSlzYSN9Fo0oiyMBY37L3Bwq4mOQJT5GSrdZYLFPt6pH1LApDI3ZJceNyx+rHRACZSeQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.52.0.tgz", + "integrity": "sha512-CaQcc8JvtzQhUSm9877b6V4Tb7HCotkcyud9X2YwdqtQKwgljkMRwU96fVYKnzN3V0Hj74oP7Es+vZ0mS+Aa1w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -746,13 +670,13 @@ } }, "node_modules/@dotenvx/dotenvx/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@dotenvx/dotenvx/node_modules/npm-run-path": { @@ -833,9 +757,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], @@ -850,9 +774,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], @@ -867,9 +791,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], @@ -884,9 +808,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -901,9 +825,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -918,9 +842,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], @@ -935,9 +859,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], @@ -952,9 +876,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -969,9 +893,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -986,9 +910,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -1003,9 +927,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], @@ -1020,9 +944,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], @@ -1037,9 +961,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], @@ -1054,9 +978,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], @@ -1071,9 +995,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], @@ -1088,9 +1012,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], @@ -1105,9 +1029,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -1122,9 +1046,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", "cpu": [ "arm64" ], @@ -1139,9 +1063,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], @@ -1156,9 +1080,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", "cpu": [ "arm64" ], @@ -1173,9 +1097,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -1190,9 +1114,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", "cpu": [ "arm64" ], @@ -1207,9 +1131,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -1224,9 +1148,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], @@ -1241,9 +1165,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], @@ -1258,9 +1182,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], @@ -1432,31 +1356,31 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.4.tgz", + "integrity": "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==", "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.5.tgz", + "integrity": "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.3", + "@floating-ui/core": "^1.7.4", "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.7.tgz", + "integrity": "sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.4" + "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", @@ -1470,9 +1394,9 @@ "license": "MIT" }, "node_modules/@hono/node-server": { - "version": "1.19.7", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.7.tgz", - "integrity": "sha512-vUcD0uauS7EU2caukW8z5lJKtoGMokxNbJtBiwHgpqxEXokaHCBkQUmCHhjFB1VUTWdqj25QoMkMKzgjq+uhrw==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", "dev": true, "license": "MIT", "engines": { @@ -1606,56 +1530,6 @@ } } }, - "node_modules/@inquirer/core/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@inquirer/core/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==", - "dev": true, - "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/@inquirer/core/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/core/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@inquirer/figures": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", @@ -1684,42 +1558,13 @@ } } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@jridgewell/gen-mapping": { @@ -1772,14 +1617,112 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@miden-sdk/miden-sdk": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@miden-sdk/miden-sdk/-/miden-sdk-0.13.1.tgz", + "integrity": "sha512-GmlBBh3UhPQ6cNnU9l+CN6XrmlrRW6u2IDK5nZYhLc8wnbUgETj2UVbbWGKD51L5R4VXJeYk1fk4UMqTlpvf4w==", + "dependencies": { + "@rollup/plugin-typescript": "^12.3.0", + "dexie": "^4.0.1", + "glob": "^11.0.0" + } + }, + "node_modules/@miden-sdk/miden-wallet-adapter": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@miden-sdk/miden-wallet-adapter/-/miden-wallet-adapter-0.13.2.tgz", + "integrity": "sha512-YvfyaWFbwky9q3EvbIBOnBqZ0Wen6InzmucfIFIu/kHIGpAos5LI/OjV+prKZZ2J0XUbhcgxa9TeT8Rc5keT+w==", + "license": "MIT", + "dependencies": { + "@miden-sdk/miden-wallet-adapter-base": "^0.13.2", + "@miden-sdk/miden-wallet-adapter-miden": "^0.13.2", + "@miden-sdk/miden-wallet-adapter-react": "^0.13.2", + "@miden-sdk/miden-wallet-adapter-reactui": "^0.13.2" + }, + "peerDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "react": "^19.1.1", + "react-dom": "^19.1.1" + } + }, + "node_modules/@miden-sdk/miden-wallet-adapter-base": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@miden-sdk/miden-wallet-adapter-base/-/miden-wallet-adapter-base-0.13.2.tgz", + "integrity": "sha512-DhuC/tVtB6JGuW0OZ5GmrmZLE75uUyzMUC0a4bYzN3+oAyYPy/oLEmsE4Ct0DWoSlZ5pQMOL1cTVjrR49sOUSA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1" + } + }, + "node_modules/@miden-sdk/miden-wallet-adapter-miden": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@miden-sdk/miden-wallet-adapter-miden/-/miden-wallet-adapter-miden-0.13.2.tgz", + "integrity": "sha512-vfCAyAA6gXe5lbwxq0tn7gCW937YDlWLXCGMO7FIfkGwXP2kuzDa0tm7TKO2sapOUURdRYqLzV5eFAOICVt4Gg==", + "license": "MIT", + "dependencies": { + "@miden-sdk/miden-wallet-adapter-base": "^0.13.2", + "nanoid": "^5.0.9" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, + "node_modules/@miden-sdk/miden-wallet-adapter-react": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@miden-sdk/miden-wallet-adapter-react/-/miden-wallet-adapter-react-0.13.2.tgz", + "integrity": "sha512-9DzFfi+Jx0OK/QU8JDe0xEV3XjUcjymON36HY/tiBbFwitGQlPKK/+l5biYsIR+Yl5I7JojDlsxvZWzVUR6KaQ==", + "license": "MIT", + "dependencies": { + "@miden-sdk/miden-wallet-adapter-base": "^0.13.2", + "@miden-sdk/miden-wallet-adapter-miden": "^0.13.2" + }, + "peerDependencies": { + "@miden-sdk/react": "^0.13.0", + "react": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@miden-sdk/react": { + "optional": true + } + } + }, + "node_modules/@miden-sdk/miden-wallet-adapter-reactui": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@miden-sdk/miden-wallet-adapter-reactui/-/miden-wallet-adapter-reactui-0.13.2.tgz", + "integrity": "sha512-y2pUJ97H1IbO5jpo0IHeAzIgXmm2XtQrw1lL7xhmcc1uOuVxHm1zoN0q4UxQZuJecUQAGLT/wsAM37hDNO7CAQ==", + "license": "MIT", + "dependencies": { + "@miden-sdk/miden-wallet-adapter-base": "^0.13.2", + "@miden-sdk/miden-wallet-adapter-react": "^0.13.2" + }, + "peerDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "react": "^19.1.1", + "react-dom": "^19.1.1" + } + }, + "node_modules/@miden-sdk/react": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@miden-sdk/react/-/react-0.13.2.tgz", + "integrity": "sha512-78i3/5YUUwitqvJA02HVXZ61RXEOyaiRsm1agVUtOblOmazuIgMEW4P3gdlX9YUiGr06l9O+Rw1ol5FZCOJTXQ==", + "license": "MIT", + "dependencies": { + "zustand": "^5.0.0" + }, + "peerDependencies": { + "@miden-sdk/miden-sdk": "^0.13.0", + "react": ">=18.0.0" + } + }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.1.tgz", - "integrity": "sha512-yO28oVFFC7EBoiKdAn+VqRm+plcfv4v0xp6osG/VsCB0NlPZWi87ajbCZZ8f/RvOFLEu7//rSRmuZZ7lMoe3gQ==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", + "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", "dev": true, "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.7", + "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -1787,14 +1730,15 @@ "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" + "zod-to-json-schema": "^3.25.1" }, "engines": { "node": ">=18" @@ -1837,9 +1781,9 @@ "license": "MIT" }, "node_modules/@mswjs/interceptors": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.40.0.tgz", - "integrity": "sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==", + "version": "0.41.2", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.2.tgz", + "integrity": "sha512-7G0Uf0yK3f2bjElBLGHIQzgRgMESczOMyYVasq1XK8P5HaXtlW4eQhz9MBL+TQILZLaruq+ClGId+hH0w4jvWw==", "dev": true, "license": "MIT", "dependencies": { @@ -1860,7 +1804,6 @@ "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -2010,6 +1953,52 @@ } } }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -2796,6 +2785,35 @@ } } }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-tooltip": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", @@ -3014,9 +3032,9 @@ "license": "MIT" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", - "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", "dev": true, "license": "MIT" }, @@ -3069,9 +3087,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", "cpu": [ "arm" ], @@ -3083,9 +3101,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", "cpu": [ "arm64" ], @@ -3097,9 +3115,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", "cpu": [ "arm64" ], @@ -3111,9 +3129,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", "cpu": [ "x64" ], @@ -3125,9 +3143,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", "cpu": [ "arm64" ], @@ -3139,9 +3157,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", "cpu": [ "x64" ], @@ -3153,9 +3171,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", "cpu": [ "arm" ], @@ -3167,9 +3185,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", "cpu": [ "arm" ], @@ -3181,9 +3199,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", "cpu": [ "arm64" ], @@ -3195,9 +3213,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", "cpu": [ "arm64" ], @@ -3209,9 +3227,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", "cpu": [ "loong64" ], @@ -3223,9 +3241,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", "cpu": [ "loong64" ], @@ -3237,9 +3255,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", "cpu": [ "ppc64" ], @@ -3251,9 +3269,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", "cpu": [ "ppc64" ], @@ -3265,9 +3283,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", "cpu": [ "riscv64" ], @@ -3279,9 +3297,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", "cpu": [ "riscv64" ], @@ -3293,9 +3311,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", "cpu": [ "s390x" ], @@ -3307,9 +3325,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", "cpu": [ "x64" ], @@ -3321,9 +3339,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", "cpu": [ "x64" ], @@ -3335,9 +3353,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", "cpu": [ "x64" ], @@ -3349,9 +3367,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", "cpu": [ "arm64" ], @@ -3363,9 +3381,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", "cpu": [ "arm64" ], @@ -3377,9 +3395,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", "cpu": [ "ia32" ], @@ -3391,9 +3409,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", "cpu": [ "x64" ], @@ -3405,9 +3423,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", "cpu": [ "x64" ], @@ -3450,7 +3468,6 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -3491,14 +3508,40 @@ "path-browserify": "^1.0.1" } }, + "node_modules/@ts-morph/common/node_modules/balanced-match": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", + "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jackspeak": "^4.2.3" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.0.tgz", + "integrity": "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -3591,11 +3634,10 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -3605,7 +3647,6 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -3617,18 +3658,25 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/validate-npm-package-name": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.2.tgz", + "integrity": "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz", - "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz", + "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.52.0", - "@typescript-eslint/type-utils": "8.52.0", - "@typescript-eslint/utils": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/type-utils": "8.55.0", + "@typescript-eslint/utils": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -3641,7 +3689,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.52.0", + "@typescript-eslint/parser": "^8.55.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -3657,17 +3705,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", - "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz", + "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.52.0", - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", "debug": "^4.4.3" }, "engines": { @@ -3683,14 +3730,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz", - "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz", + "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.52.0", - "@typescript-eslint/types": "^8.52.0", + "@typescript-eslint/tsconfig-utils": "^8.55.0", + "@typescript-eslint/types": "^8.55.0", "debug": "^4.4.3" }, "engines": { @@ -3705,14 +3752,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz", - "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz", + "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0" + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3723,9 +3770,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz", - "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz", + "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==", "dev": true, "license": "MIT", "engines": { @@ -3740,15 +3787,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz", - "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz", + "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0", - "@typescript-eslint/utils": "8.52.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -3765,9 +3812,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", - "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz", + "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==", "dev": true, "license": "MIT", "engines": { @@ -3779,16 +3826,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz", - "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz", + "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.52.0", - "@typescript-eslint/tsconfig-utils": "8.52.0", - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0", + "@typescript-eslint/project-service": "8.55.0", + "@typescript-eslint/tsconfig-utils": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", @@ -3833,9 +3880,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3846,16 +3893,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", - "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz", + "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.52.0", - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0" + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3870,13 +3917,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz", - "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz", + "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/types": "8.55.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -3888,16 +3935,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", - "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz", + "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.5", + "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.53", + "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, @@ -3914,7 +3961,6 @@ "integrity": "sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.6.1", @@ -4061,7 +4107,6 @@ "integrity": "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "3.2.4", "fflate": "^0.8.2", @@ -4113,7 +4158,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4204,6 +4248,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4213,6 +4258,7 @@ "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" @@ -4373,9 +4419,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.11", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", - "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4396,9 +4442,9 @@ } }, "node_modules/body-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", - "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "dev": true, "license": "MIT", "dependencies": { @@ -4408,7 +4454,7 @@ "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", - "qs": "^6.14.0", + "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" }, @@ -4464,7 +4510,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -4567,9 +4612,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001762", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", - "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", "dev": true, "funding": [ { @@ -4810,6 +4855,7 @@ "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" @@ -4822,12 +4868,13 @@ "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/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { @@ -4896,9 +4943,9 @@ } }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "dev": true, "license": "MIT", "dependencies": { @@ -4907,6 +4954,10 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cosmiconfig": { @@ -5040,9 +5091,9 @@ } }, "node_modules/default-browser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", - "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "dev": true, "license": "MIT", "dependencies": { @@ -5109,9 +5160,9 @@ "license": "MIT" }, "node_modules/dexie": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.2.1.tgz", - "integrity": "sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.3.0.tgz", + "integrity": "sha512-5EeoQpJvMKHe6zWt/FSIIuRa3CWlZeIl6zKXt+Lz7BU6RoRRLgX9dZEynRfXrkLcldKYCBiz7xekTEylnie1Ug==", "license": "Apache-2.0" }, "node_modules/didyoumean": { @@ -5122,9 +5173,9 @@ "license": "Apache-2.0" }, "node_modules/diff": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", - "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5146,9 +5197,9 @@ "license": "MIT" }, "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "version": "17.2.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.4.tgz", + "integrity": "sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -5173,20 +5224,14 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/eciesjs": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.16.tgz", - "integrity": "sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.17.tgz", + "integrity": "sha512-TOOURki4G7sD1wDCjj7NfLaXZZ49dFOeEb5y39IXpb8p0hRzVvfvzZHOi5JcT+PpyAbi/Y+lxPb8eTag2WYH8w==", "dev": true, "license": "MIT", "dependencies": { - "@ecies/ciphers": "^0.2.4", + "@ecies/ciphers": "^0.2.5", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.7", "@noble/hashes": "^1.8.0" @@ -5205,16 +5250,17 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, "license": "MIT" }, "node_modules/encodeurl": { @@ -5288,9 +5334,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5301,32 +5347,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/escalade": { @@ -5365,7 +5411,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -5568,9 +5613,9 @@ } }, "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "license": "MIT" }, "node_modules/eventsource": { @@ -5678,11 +5723,14 @@ } }, "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz", + "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==", "dev": true, "license": "MIT", + "dependencies": { + "ip-address": "10.0.1" + }, "engines": { "node": ">= 16" }, @@ -5986,13 +6034,13 @@ } }, "node_modules/framer-motion": { - "version": "12.24.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.24.0.tgz", - "integrity": "sha512-ggTMRkIDPc76lHmM+dRT1MmVfFV6t/y+jkWjWuzR7FG5xRvnAAl/5wFPjzSkLE8Nu5E5uIQRCNxmIXtWJVo6XQ==", + "version": "12.34.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.0.tgz", + "integrity": "sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg==", "license": "MIT", "dependencies": { - "motion-dom": "^12.24.0", - "motion-utils": "^12.23.28", + "motion-dom": "^12.34.0", + "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { @@ -6190,6 +6238,7 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "BlueOak-1.0.0", "dependencies": { "foreground-child": "^3.3.1", @@ -6222,13 +6271,37 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", + "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", + "license": "MIT", + "dependencies": { + "jackspeak": "^4.2.3" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.0.tgz", + "integrity": "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -6323,12 +6396,11 @@ "license": "MIT" }, "node_modules/hono": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.3.tgz", - "integrity": "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==", + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.9.tgz", + "integrity": "sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -6395,9 +6467,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", - "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { @@ -6455,6 +6527,16 @@ "dev": true, "license": "ISC" }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -6530,6 +6612,7 @@ "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==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6705,12 +6788,12 @@ "license": "ISC" }, "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@isaacs/cliui": "^9.0.0" }, "engines": { "node": "20 || >=22" @@ -7157,12 +7240,12 @@ } }, "node_modules/motion": { - "version": "12.24.0", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.24.0.tgz", - "integrity": "sha512-FAnpl/DhCFct3p+T2hCjAY95w+3EggUk3b8Ql4jQ6mmdRbEaGD1000goqWeEYVoD7mqx9H0As9ORmRADD4LQAw==", + "version": "12.34.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.34.0.tgz", + "integrity": "sha512-01Sfa/zgsD/di8zA/uFW5Eb7/SPXoGyUfy+uMRMW5Spa8j0z/UbfQewAYvPMYFCXRlyD6e5aLHh76TxeeJD+RA==", "license": "MIT", "dependencies": { - "framer-motion": "^12.24.0", + "framer-motion": "^12.34.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -7183,18 +7266,18 @@ } }, "node_modules/motion-dom": { - "version": "12.24.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.24.0.tgz", - "integrity": "sha512-RD2kZkFd/GH4fITI8IJvypGgn0vIu5vkrJaXIAkYqORGs5P0CKDHKNvswmoY1H+tbUAOPSh6VtUqoAmc/3Gvig==", + "version": "12.34.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.0.tgz", + "integrity": "sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q==", "license": "MIT", "dependencies": { - "motion-utils": "^12.23.28" + "motion-utils": "^12.29.2" } }, "node_modules/motion-utils": { - "version": "12.23.28", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.28.tgz", - "integrity": "sha512-0W6cWd5Okoyf8jmessVK3spOmbyE0yTdNKujHctHH9XdAE4QDuZ1/LjSXC68rrhsJU+TkzXURC5OdSWh9ibOwQ==", + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", + "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", "license": "MIT" }, "node_modules/mrmime": { @@ -7215,15 +7298,15 @@ "license": "MIT" }, "node_modules/msw": { - "version": "2.12.7", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.7.tgz", - "integrity": "sha512-retd5i3xCZDVWMYjHEVuKTmhqY8lSsxujjVrZiGbbdoxxIBg5S7rCuYy/YQpfrTYIxpd/o0Kyb/3H+1udBMoYg==", + "version": "2.12.10", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.10.tgz", + "integrity": "sha512-G3VUymSE0/iegFnuipujpwyTM2GuZAKXNeerUSrG2+Eg391wW63xFs5ixWsK9MWzr1AGoSkYGmyAzNgbR3+urw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@inquirer/confirm": "^5.0.0", - "@mswjs/interceptors": "^0.40.0", + "@mswjs/interceptors": "^0.41.2", "@open-draft/deferred-promise": "^2.2.0", "@types/statuses": "^2.0.6", "cookie": "^1.0.2", @@ -7233,7 +7316,7 @@ "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", - "rettime": "^0.7.0", + "rettime": "^0.10.1", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.0", @@ -7587,31 +7670,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ora/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ora/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/outvariant": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", @@ -7768,9 +7826,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -7850,14 +7908,13 @@ } }, "node_modules/playwright": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", - "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { - "playwright-core": "1.57.0" + "playwright-core": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -7870,9 +7927,9 @@ } }, "node_modules/playwright-core": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", - "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7902,7 +7959,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", @@ -8201,9 +8257,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8264,26 +8320,24 @@ } }, "node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.3" + "react": "^19.2.4" } }, "node_modules/react-easy-crop": { @@ -8301,11 +8355,10 @@ } }, "node_modules/react-hook-form": { - "version": "7.70.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.70.0.tgz", - "integrity": "sha512-COOMajS4FI3Wuwrs3GPpi/Jeef/5W1DRR84Yl5/ShlT3dKVFUfoGiEZ/QE6Uw8P4T2/CLJdcTVYKvWBMQTEpvw==", + "version": "7.71.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz", + "integrity": "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==", "license": "MIT", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -8395,9 +8448,9 @@ } }, "node_modules/react-router": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.11.0.tgz", - "integrity": "sha512-uI4JkMmjbWCZc01WVP2cH7ZfSzH91JAZUDd7/nIprDgWxBV1TkkmLToFh7EbMTcMak8URFRa2YoBL/W8GWnCTQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", + "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -8574,9 +8627,9 @@ } }, "node_modules/rettime": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.7.0.tgz", - "integrity": "sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz", + "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==", "dev": true, "license": "MIT" }, @@ -8592,12 +8645,11 @@ } }, "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -8609,31 +8661,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.1", - "@rollup/rollup-android-arm64": "4.55.1", - "@rollup/rollup-darwin-arm64": "4.55.1", - "@rollup/rollup-darwin-x64": "4.55.1", - "@rollup/rollup-freebsd-arm64": "4.55.1", - "@rollup/rollup-freebsd-x64": "4.55.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", - "@rollup/rollup-linux-arm-musleabihf": "4.55.1", - "@rollup/rollup-linux-arm64-gnu": "4.55.1", - "@rollup/rollup-linux-arm64-musl": "4.55.1", - "@rollup/rollup-linux-loong64-gnu": "4.55.1", - "@rollup/rollup-linux-loong64-musl": "4.55.1", - "@rollup/rollup-linux-ppc64-gnu": "4.55.1", - "@rollup/rollup-linux-ppc64-musl": "4.55.1", - "@rollup/rollup-linux-riscv64-gnu": "4.55.1", - "@rollup/rollup-linux-riscv64-musl": "4.55.1", - "@rollup/rollup-linux-s390x-gnu": "4.55.1", - "@rollup/rollup-linux-x64-gnu": "4.55.1", - "@rollup/rollup-linux-x64-musl": "4.55.1", - "@rollup/rollup-openbsd-x64": "4.55.1", - "@rollup/rollup-openharmony-arm64": "4.55.1", - "@rollup/rollup-win32-arm64-msvc": "4.55.1", - "@rollup/rollup-win32-ia32-msvc": "4.55.1", - "@rollup/rollup-win32-x64-gnu": "4.55.1", - "@rollup/rollup-win32-x64-msvc": "4.55.1", + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" } }, @@ -8792,9 +8844,9 @@ "license": "ISC" }, "node_modules/shadcn": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-3.6.2.tgz", - "integrity": "sha512-2g48/7UsXTSWMFU9GYww85AN5iVTkErbeycrcleI55R+atqW8HE1M/YDFyQ+0T3Bwsd4e8vycPu9gmwODunDpw==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-3.8.4.tgz", + "integrity": "sha512-pSad/m1+PGzB0aLsRBV0EkyGg9al1nJqYUuucg6d8v8xZspPZ5/ehGNEp5M4b1KQYqdO5/gGPbkhVbgmXqG9Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -8804,7 +8856,8 @@ "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", - "@modelcontextprotocol/sdk": "^1.17.2", + "@modelcontextprotocol/sdk": "^1.26.0", + "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", @@ -8826,8 +8879,10 @@ "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", + "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", + "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, @@ -9106,55 +9161,23 @@ "license": "MIT" }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "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-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/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/stringify-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-5.0.0.tgz", @@ -9177,6 +9200,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -9188,23 +9212,11 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -9508,22 +9520,22 @@ } }, "node_modules/tldts": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", - "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.23.tgz", + "integrity": "sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.19" + "tldts-core": "^7.0.23" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", - "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz", + "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==", "dev": true, "license": "MIT" }, @@ -9623,8 +9635,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", @@ -9640,9 +9651,9 @@ } }, "node_modules/type-fest": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.3.1.tgz", - "integrity": "sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", "dev": true, "license": "(MIT OR CC0-1.0)", "dependencies": { @@ -9675,7 +9686,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9685,16 +9695,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.52.0.tgz", - "integrity": "sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.55.0.tgz", + "integrity": "sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.52.0", - "@typescript-eslint/parser": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0", - "@typescript-eslint/utils": "8.52.0" + "@typescript-eslint/eslint-plugin": "8.55.0", + "@typescript-eslint/parser": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9842,6 +9852,16 @@ "dev": true, "license": "MIT" }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9853,12 +9873,11 @@ } }, "node_modules/vite": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", - "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -10020,7 +10039,6 @@ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", @@ -10148,27 +10166,10 @@ } }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -10176,22 +10177,21 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "node_modules/wrap-ansi/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==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -10202,10 +10202,11 @@ "node": ">=8" } }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "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==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -10214,18 +10215,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -10409,11 +10398,10 @@ } }, "node_modules/zod": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -10427,6 +10415,35 @@ "peerDependencies": { "zod": "^3.25 || ^4" } + }, + "node_modules/zustand": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.11.tgz", + "integrity": "sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index b4c735f..b03ce5a 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,12 @@ "prepare": "husky" }, "dependencies": { - "@demox-labs/miden-sdk": "^0.12.5", - "@demox-labs/miden-wallet-adapter": "^0.10.0", "@hookform/resolvers": "^5.2.2", + "@miden-sdk/miden-sdk": "^0.13.1", + "@miden-sdk/miden-wallet-adapter": "^0.13.2", + "@miden-sdk/react": "^0.13.2", "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", @@ -28,6 +30,7 @@ "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tooltip": "^1.2.8", "framer-motion": "^12.23.24", "motion": "^12.23.24", diff --git a/src/api/dashboard.ts b/src/api/dashboard.ts new file mode 100644 index 0000000..cdd5486 --- /dev/null +++ b/src/api/dashboard.ts @@ -0,0 +1,230 @@ +/** + * Dashboard API service + * Handles session-based authentication and dashboard data fetching + */ + +import type { + DashboardLoginRequest, + DashboardLoginResponse, + DashboardLogoutResponse, + DashboardData, + DashboardLimit, + ResetStoreResponse, + TelegramStatusResponse, + TelegramToggleResponse, + ApiResponse, +} from '@/types/api'; +import { DASHBOARD_API_BASE, API_BASE } from '@/shared'; + +/** + * Login to the dashboard + * @param username - Admin username + * @param password - Admin password + * @returns Login response with success status + */ +export async function dashboardLogin( + username: string, + password: string +): Promise> { + if (!username || !password) { + return { + success: false, + error: 'Username and password are required', + }; + } + + try { + const response = await fetch(`${DASHBOARD_API_BASE}/api/login`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + credentials: 'include', + body: JSON.stringify({ username, password } as DashboardLoginRequest), + }); + + const data = await response.json(); + + if (!response.ok) { + return { + success: false, + error: data.message || `HTTP ${response.status}`, + }; + } + + return { + success: true, + data: data as DashboardLoginResponse, + }; + } catch (error) { + console.error('Dashboard login failed:', error); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error', + }; + } +} + +/** + * Logout from the dashboard + * @returns Logout response + */ +export async function dashboardLogout(): Promise> { + try { + const response = await fetch(`${DASHBOARD_API_BASE}/api/logout`, { + method: 'POST', + credentials: 'include', + }); + + const data = await response.json(); + + return { + success: response.ok, + data: data as DashboardLogoutResponse, + }; + } catch (error) { + console.error('Dashboard logout failed:', error); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error', + }; + } +} + +/** + * Get dashboard data + * @param limit - Number of recent domains to return (10, 25, 50, or 100) + * @returns Dashboard data including blockchain status, stats, and recent domains + */ +export async function getDashboardData( + limit: DashboardLimit = 10 +): Promise> { + try { + const response = await fetch( + `${DASHBOARD_API_BASE}/api/dashboard-data?limit=${limit}`, + { + credentials: 'include', + } + ); + + if (response.status === 401) { + const errorData = await response.json(); + return { + success: false, + error: errorData.error || 'Not authenticated', + }; + } + + if (!response.ok) { + const errorText = await response.text(); + return { + success: false, + error: `HTTP ${response.status}: ${errorText}`, + }; + } + + const data: DashboardData = await response.json(); + return { + success: true, + data, + }; + } catch (error) { + console.error('Failed to get dashboard data:', error); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error', + }; + } +} + +/** + * Reset the Miden store + * @returns Reset store response + */ +export async function resetStore(): Promise> { + try { + const response = await fetch(`${API_BASE}/admin/reset-store`, { + method: 'POST', + }); + + const data: ResetStoreResponse = await response.json(); + + if (!response.ok) { + return { + success: false, + error: data.message || `HTTP ${response.status}`, + }; + } + + return { + success: true, + data, + }; + } catch (error) { + console.error('Failed to reset store:', error); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error', + }; + } +} + +/** + * Get Telegram notifications status + * @returns Telegram status response + */ +export async function getTelegramStatus(): Promise> { + try { + const response = await fetch(`${API_BASE}/admin/telegram-notifications/status`); + + const data: TelegramStatusResponse = await response.json(); + + return { + success: response.ok, + data, + }; + } catch (error) { + console.error('Failed to get Telegram status:', error); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error', + }; + } +} + +/** + * Toggle Telegram notifications + * @param enable - Whether to enable or disable notifications + * @returns Toggle response + */ +export async function toggleTelegramNotifications( + enable: boolean +): Promise> { + try { + const endpoint = enable ? 'enable' : 'disable'; + const response = await fetch( + `${API_BASE}/admin/telegram-notifications/${endpoint}`, + { method: 'POST' } + ); + + const data: TelegramToggleResponse = await response.json(); + + if (!response.ok) { + return { + success: false, + error: data.message || `HTTP ${response.status}`, + }; + } + + return { + success: true, + data, + }; + } catch (error) { + console.error('Failed to toggle Telegram notifications:', error); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error', + }; + } +} diff --git a/src/components/MobileSidebar.tsx b/src/components/MobileSidebar.tsx index bceb737..55e4e01 100644 --- a/src/components/MobileSidebar.tsx +++ b/src/components/MobileSidebar.tsx @@ -7,7 +7,7 @@ import { SheetContent, SheetTrigger, } from '@/components/ui/sheet' -import { WalletMultiButton } from '@demox-labs/miden-wallet-adapter-reactui' +import { WalletMultiButton } from '@miden-sdk/miden-wallet-adapter' import { Separator } from '@/components/ui/separator' import { useTheme } from './ThemeProvider' import ThemeToggle from './ThemeToggle' diff --git a/src/components/RegisterModal.tsx b/src/components/RegisterModal.tsx index 5f95a61..5b943b9 100644 --- a/src/components/RegisterModal.tsx +++ b/src/components/RegisterModal.tsx @@ -6,12 +6,12 @@ import { } from "@/components/ui/shadcn-io/animated-modal"; import { type ReactNode, useState, useEffect } from "react"; import { cloneElement, isValidElement } from "react"; -import { useWallet } from "@demox-labs/miden-wallet-adapter"; +import { useWallet } from "@miden-sdk/miden-wallet-adapter"; import { - MIDEN_FAUCET_CONTRACT_ADDRESS, + MIDEN_FAUCET_ID_BECH32, MIDEN_ID_CONTRACT_ADDRESS, } from "@/shared/constants"; -import { AccountId, Felt } from "@demox-labs/miden-sdk"; +import { AccountId, Felt } from "@miden-sdk/miden-sdk"; import { useToast } from "@/hooks/useToast"; import { ToastCause } from "@/types/toast"; import { TermsModal } from "@/components/TermsModal"; @@ -22,7 +22,7 @@ import { ConfirmedStep } from "./register-modal/ConfirmedStep"; import { transactionCreator } from "@/lib/transactionCreator"; import { REGISTER_NOTE_SCRIPT, MIDEN_NAME_CONTRACT_CODE } from "@/shared"; import { encodeDomain } from "@/utils/encode"; -import { NoteInputs, MidenArrays } from "@demox-labs/miden-sdk"; +import { NoteInputs, MidenArrays } from "@miden-sdk/miden-sdk"; import { getDomainPrice } from "@/shared/pricing"; import { bech32ToAccountId, instantiateClient } from "@/lib/midenClient"; import { executeStep } from "@/utils/errorHandler"; @@ -55,18 +55,26 @@ function RegisterModalContent({ }) { const domainPrice = getDomainPrice(domain.length); const { connected, requestTransaction, address } = useWallet(); + const { open } = useModal(); const showToast = useToast(); const [currentStep, setCurrentStep] = useState("registration"); const [isPurchasing, setIsPurchasing] = useState(false); const [noteId, setNoteId] = useState(null); const [termsOpen, setTermsOpen] = useState(false); - const faucetId = AccountId.fromHex(MIDEN_FAUCET_CONTRACT_ADDRESS as string) + const faucetId = AccountId.fromBech32(MIDEN_FAUCET_ID_BECH32 as string); const accountId = address ? bech32ToAccountId(address) : null const destinationAccountId = AccountId.fromHex(MIDEN_ID_CONTRACT_ADDRESS as string) + // Reset when modal closes + useEffect(() => { + if (!open) { + setCurrentStep("registration"); + } + }, [open]); + // Reset when domain changes useEffect(() => { setCurrentStep("registration"); @@ -97,6 +105,10 @@ function RegisterModalContent({ () => encodeDomain(domain) ); + console.log("buyAmount:", buyAmount.toString()); + + console.log("faucetId:", faucetId.toString()); + const noteInputs = await executeStep( ErrorCodes.NOTE_INPUTS_CREATION_FAILED, 'Note inputs creation', diff --git a/src/components/SiteHeader.tsx b/src/components/SiteHeader.tsx index 0ac88b8..54f80cf 100644 --- a/src/components/SiteHeader.tsx +++ b/src/components/SiteHeader.tsx @@ -2,7 +2,7 @@ import { Menubar } from '@/components/ui/menubar' import { Separator } from '@/components/ui/separator' import { Link } from 'react-router' import { MobileSidebar } from './MobileSidebar' -import { WalletMultiButton } from '@demox-labs/miden-wallet-adapter-reactui' +import { WalletMultiButton } from '@miden-sdk/miden-wallet-adapter' import { DropdownMenu, DropdownMenuContent, diff --git a/src/components/TestnetWarningModal.tsx b/src/components/TestnetWarningModal.tsx index e3c17ee..b4a9bc0 100644 --- a/src/components/TestnetWarningModal.tsx +++ b/src/components/TestnetWarningModal.tsx @@ -34,6 +34,9 @@ export function TestnetWarningModal() {
Important: Names registered on the testnet may be wiped out during maintenance or new deployments. Registration on testnet does not guarantee name availability or ownership on mainnet.
+
+ Miden name is transitioning from testnet version v0.12 to v0.13. During this transition application can behave unpredictably. +
diff --git a/src/components/register-modal/RegistrationStep.tsx b/src/components/register-modal/RegistrationStep.tsx index f8e43be..4c03a92 100644 --- a/src/components/register-modal/RegistrationStep.tsx +++ b/src/components/register-modal/RegistrationStep.tsx @@ -1,8 +1,8 @@ import { useState } from "react"; import { Button } from "@/components/ui/button"; -import { useWallet, WalletMultiButton } from "@demox-labs/miden-wallet-adapter"; +import { useWallet, WalletMultiButton } from "@miden-sdk/miden-wallet-adapter"; import { TOKEN_SYMBOL, getDomainPrice } from "@/shared/pricing"; -import type { AccountId } from "@demox-labs/miden-sdk"; +import type { AccountId } from "@miden-sdk/miden-sdk"; import { MIDEN_FAUCET_ID_BECH32 } from "@/shared"; import { ErrorCodes } from "@/types/errors"; import { executeStep } from "@/utils/errorHandler"; diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx new file mode 100644 index 0000000..2b69729 --- /dev/null +++ b/src/components/ui/alert-dialog.tsx @@ -0,0 +1,139 @@ +import * as React from "react" +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" + +import { cn } from "@/utils/cn" +import { buttonVariants } from "@/components/ui/button" + +const AlertDialog = AlertDialogPrimitive.Root + +const AlertDialogTrigger = AlertDialogPrimitive.Trigger + +const AlertDialogPortal = AlertDialogPrimitive.Portal + +const AlertDialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName + +const AlertDialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + +)) +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName + +const AlertDialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +AlertDialogHeader.displayName = "AlertDialogHeader" + +const AlertDialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +AlertDialogFooter.displayName = "AlertDialogFooter" + +const AlertDialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName + +const AlertDialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogDescription.displayName = + AlertDialogPrimitive.Description.displayName + +const AlertDialogAction = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName + +const AlertDialogCancel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +} diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx new file mode 100644 index 0000000..f4df7e4 --- /dev/null +++ b/src/components/ui/switch.tsx @@ -0,0 +1,27 @@ +import * as React from "react" +import * as SwitchPrimitives from "@radix-ui/react-switch" + +import { cn } from "@/utils/cn" + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + +export { Switch } diff --git a/src/components/ui/table.tsx b/src/components/ui/table.tsx new file mode 100644 index 0000000..281e2cb --- /dev/null +++ b/src/components/ui/table.tsx @@ -0,0 +1,117 @@ +import * as React from "react" + +import { cn } from "@/utils/cn" + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)) +Table.displayName = "Table" + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableHeader.displayName = "TableHeader" + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableBody.displayName = "TableBody" + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0", + className + )} + {...props} + /> +)) +TableFooter.displayName = "TableFooter" + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableRow.displayName = "TableRow" + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableHead.displayName = "TableHead" + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableCell.displayName = "TableCell" + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableCaption.displayName = "TableCaption" + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +} diff --git a/src/contexts/DashboardAuthContext.tsx b/src/contexts/DashboardAuthContext.tsx new file mode 100644 index 0000000..a8b8966 --- /dev/null +++ b/src/contexts/DashboardAuthContext.tsx @@ -0,0 +1,73 @@ +import { createContext, useContext, useState, useCallback, useEffect, type ReactNode } from 'react'; +import { useNavigate, useLocation } from 'react-router'; +import { dashboardLogin, dashboardLogout, getDashboardData } from '@/api/dashboard'; + +interface DashboardAuthContextType { + isAuthenticated: boolean; + isLoading: boolean; + login: (username: string, password: string) => Promise<{ success: boolean; error?: string }>; + logout: () => Promise; +} + +const DashboardAuthContext = createContext(undefined); + +export function DashboardAuthProvider({ children }: { children: ReactNode }) { + const [isAuthenticated, setIsAuthenticated] = useState(false); + const [isLoading, setIsLoading] = useState(true); + const navigate = useNavigate(); + const location = useLocation(); + + // Check authentication status on mount + useEffect(() => { + const checkAuth = async () => { + setIsLoading(true); + const result = await getDashboardData(10); + setIsAuthenticated(result.success); + setIsLoading(false); + }; + + checkAuth(); + }, []); + + // Redirect based on auth status + useEffect(() => { + if (isLoading) return; + + const isLoginPage = location.pathname === '/dashboard/login'; + + if (isAuthenticated && isLoginPage) { + navigate('/dashboard', { replace: true }); + } else if (!isAuthenticated && !isLoginPage) { + navigate('/dashboard/login', { replace: true }); + } + }, [isAuthenticated, isLoading, location.pathname, navigate]); + + const login = useCallback(async (username: string, password: string) => { + const result = await dashboardLogin(username, password); + if (result.success) { + setIsAuthenticated(true); + return { success: true }; + } + return { success: false, error: result.error }; + }, []); + + const logout = useCallback(async () => { + await dashboardLogout(); + setIsAuthenticated(false); + navigate('/dashboard/login', { replace: true }); + }, [navigate]); + + return ( + + {children} + + ); +} + +export function useDashboardAuth() { + const context = useContext(DashboardAuthContext); + if (context === undefined) { + throw new Error('useDashboardAuth must be used within a DashboardAuthProvider'); + } + return context; +} diff --git a/src/lib/midenClient.ts b/src/lib/midenClient.ts index f0a9263..18789d2 100644 --- a/src/lib/midenClient.ts +++ b/src/lib/midenClient.ts @@ -6,7 +6,7 @@ import { Word, Felt, SigningInputs, -} from '@demox-labs/miden-sdk'; +} from '@miden-sdk/miden-sdk'; import { uint8ArrayToHex, createMessage } from '@/utils'; import type { CreateMessageParams } from '@/types/profile'; import type { SignedData } from '@/types/auth'; @@ -65,7 +65,7 @@ export const safeAccountImport = async (client: WebClient, accountId: AccountId) export const accountIdToBech32 = ( accountId: AccountId, - networkId: NetworkId = NetworkId.Testnet, + networkId: NetworkId = NetworkId.testnet(), ) => { return Address.fromAccountId(accountId).toBech32(networkId) }; diff --git a/src/lib/transactionCreator.ts b/src/lib/transactionCreator.ts index e36f4cc..0866d39 100644 --- a/src/lib/transactionCreator.ts +++ b/src/lib/transactionCreator.ts @@ -1,10 +1,8 @@ import { AccountId, - Felt, FungibleAsset, Note, NoteAssets, - NoteExecutionHint, NoteInputs, NoteMetadata, NoteRecipient, @@ -13,13 +11,15 @@ import { OutputNote, TransactionRequestBuilder, MidenArrays, - WebClient -} from '@demox-labs/miden-sdk'; + WebClient, + NoteAttachment, + NoteExecutionHint +} from '@miden-sdk/miden-sdk'; import { CustomTransaction, type MidenTransaction, TransactionType, -} from "@demox-labs/miden-wallet-adapter-base"; +} from "@miden-sdk/miden-wallet-adapter"; import { generateRandomSerialNumber, accountIdToBech32 } from "./midenClient"; import { executeStep } from '@/utils/errorHandler'; import { ErrorCodes } from '@/types/errors'; @@ -103,7 +103,7 @@ export async function transactionCreator({ ErrorCodes.SCRIPT_BUILDER_AND_COMPILER, "Script builder or compiler", () => { - const builder = client.createScriptBuilder() + const builder = client.createCodeBuilder() const registerComponentLib = builder.buildLibrary(libraryName, libraryScript) builder.linkDynamicLibrary(registerComponentLib) const script = builder.compileNoteScript(noteScript) @@ -122,15 +122,15 @@ export async function transactionCreator({ const assets = new FungibleAsset(faucetId, amount); const noteAssets = new NoteAssets([assets]); - const noteTag = NoteTag.fromAccountId(destinationAccountId); + const noteTag = NoteTag.withAccountTarget(destinationAccountId); + + const networkTarget = NoteAttachment.newNetworkAccountTarget(destinationAccountId, NoteExecutionHint.always()) const noteMetadata = new NoteMetadata( senderAccountId, noteType, - noteTag, - NoteExecutionHint.always(), - new Felt(BigInt(0)) - ); + noteTag + ).withAttachment(networkTarget); const note = new Note( noteAssets, diff --git a/src/main.tsx b/src/main.tsx index 520c3f9..92c4f80 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -3,9 +3,11 @@ import { createRoot } from 'react-dom/client' import './index.css' import App from './App.tsx' import { ThemeProvider } from '@/components/ThemeProvider.tsx' -import { WalletProvider } from '@demox-labs/miden-wallet-adapter-react' -import { MidenWalletAdapter } from '@demox-labs/miden-wallet-adapter-miden' -import { WalletModalProvider } from '@demox-labs/miden-wallet-adapter-reactui' +import { + WalletProvider, + WalletModalProvider, + MidenWalletAdapter, +} from '@miden-sdk/miden-wallet-adapter'; import { createBrowserRouter, RouterProvider } from 'react-router' import { Loader2 } from 'lucide-react' @@ -14,6 +16,11 @@ const Home = lazy(() => import('@/pages/home/page')) // const MyDomains = lazy(() => import('./pages/my-domains/page.tsx')) const NotFound = lazy(() => import('./pages/not-found/page.tsx')) +// Dashboard pages (separate auth system) +const DashboardLayout = lazy(() => import('@/pages/dashboard/layout')) +const DashboardLogin = lazy(() => import('@/pages/dashboard/login/page')) +const Dashboard = lazy(() => import('@/pages/dashboard/page')) + const PageLoader = () => (
@@ -60,6 +67,33 @@ const router = createBrowserRouter([ ) } ] + }, + // Dashboard routes (separate from wallet-based auth) + { + path: "/dashboard", + element: ( + }> + + + ), + children: [ + { + path: "login", + element: ( + }> + + + ) + }, + { + index: true, + element: ( + }> + + + ) + } + ] } ]) diff --git a/src/pages/dashboard/components/BlockchainStatusCard.tsx b/src/pages/dashboard/components/BlockchainStatusCard.tsx new file mode 100644 index 0000000..37cc90f --- /dev/null +++ b/src/pages/dashboard/components/BlockchainStatusCard.tsx @@ -0,0 +1,35 @@ +import { Blocks, Clock } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import type { BlockchainStatus } from '@/types/api'; + +interface BlockchainStatusCardProps { + blockchain: BlockchainStatus; +} + +export function BlockchainStatusCard({ blockchain }: BlockchainStatusCardProps) { + return ( + + + + + Blockchain Status + + + +
+ Current Block + + {blockchain.current_block.toLocaleString()} + +
+
+ + + Sync Interval + + {blockchain.sync_interval_secs}s +
+
+
+ ); +} diff --git a/src/pages/dashboard/components/DashboardHeader.tsx b/src/pages/dashboard/components/DashboardHeader.tsx new file mode 100644 index 0000000..a5b6df7 --- /dev/null +++ b/src/pages/dashboard/components/DashboardHeader.tsx @@ -0,0 +1,38 @@ +import { LogOut, RefreshCw } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { ThemeToggle } from '@/components/ThemeToggle'; +import { useDashboardAuth } from '@/contexts/DashboardAuthContext'; + +interface DashboardHeaderProps { + onRefresh: () => void; + isRefreshing: boolean; +} + +export function DashboardHeader({ onRefresh, isRefreshing }: DashboardHeaderProps) { + const { logout } = useDashboardAuth(); + + return ( +
+
+

+ Miden Dashboard +

+
+ + + +
+
+
+ ); +} diff --git a/src/pages/dashboard/components/DashboardSkeleton.tsx b/src/pages/dashboard/components/DashboardSkeleton.tsx new file mode 100644 index 0000000..dda8227 --- /dev/null +++ b/src/pages/dashboard/components/DashboardSkeleton.tsx @@ -0,0 +1,60 @@ +import { Card, CardContent, CardHeader } from '@/components/ui/card'; +import { Skeleton } from '@/components/ui/skeleton'; + +export function DashboardSkeleton() { + return ( +
+ {/* Stats cards skeleton */} +
+ {[...Array(4)].map((_, i) => ( + + + + + + + + + + ))} +
+ + {/* Blockchain status skeleton */} + + + + + +
+ + +
+
+ + +
+
+
+ + {/* Recent domains table skeleton */} + + + + + + +
+ {[...Array(5)].map((_, i) => ( +
+ + + + +
+ ))} +
+
+
+
+ ); +} diff --git a/src/pages/dashboard/components/NotificationCard.tsx b/src/pages/dashboard/components/NotificationCard.tsx new file mode 100644 index 0000000..1b4a85d --- /dev/null +++ b/src/pages/dashboard/components/NotificationCard.tsx @@ -0,0 +1,58 @@ +import { useState } from 'react'; +import { Bell, Loader2 } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Switch } from '@/components/ui/switch'; +import { Label } from '@/components/ui/label'; +import { toggleTelegramNotifications } from '@/api/dashboard'; + +interface NotificationCardProps { + telegramEnabled: boolean; + onStatusChange: (enabled: boolean) => void; +} + +export function NotificationCard({ telegramEnabled, onStatusChange }: NotificationCardProps) { + const [isToggling, setIsToggling] = useState(false); + + const handleToggle = async (checked: boolean) => { + setIsToggling(true); + const result = await toggleTelegramNotifications(checked); + + if (result.success && result.data) { + onStatusChange(result.data.enabled); + } + + setIsToggling(false); + }; + + return ( + + + + + Notifications + + + +
+
+ +

+ Receive error alerts via Telegram +

+
+
+ {isToggling && } + +
+
+
+
+ ); +} diff --git a/src/pages/dashboard/components/RecentDomainsTable.tsx b/src/pages/dashboard/components/RecentDomainsTable.tsx new file mode 100644 index 0000000..1f5e376 --- /dev/null +++ b/src/pages/dashboard/components/RecentDomainsTable.tsx @@ -0,0 +1,90 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import type { DomainRegistration, DashboardLimit } from '@/types/api'; + +interface RecentDomainsTableProps { + domains: DomainRegistration[]; + limit: DashboardLimit; + onLimitChange: (limit: DashboardLimit) => void; +} + +export function RecentDomainsTable({ domains, limit, onLimitChange }: RecentDomainsTableProps) { + const formatDate = (dateString: string) => { + return new Date(dateString).toLocaleString(); + }; + + const truncateAccountId = (accountId: string) => { + if (accountId.length <= 16) return accountId; + return `${accountId.slice(0, 10)}...${accountId.slice(-6)}`; + }; + + return ( + + + Recent Domain Registrations + + + + + + + Domain + Account ID + Block + Registered + + + + {domains.length === 0 ? ( + + + No domains registered yet + + + ) : ( + domains.map((domain) => ( + + + {domain.domain}.miden + + + {truncateAccountId(domain.account_id)} + + {domain.created_block.toLocaleString()} + {formatDate(domain.created_at)} + + )) + )} + +
+
+
+ ); +} diff --git a/src/pages/dashboard/components/RecentErrorsTable.tsx b/src/pages/dashboard/components/RecentErrorsTable.tsx new file mode 100644 index 0000000..5363866 --- /dev/null +++ b/src/pages/dashboard/components/RecentErrorsTable.tsx @@ -0,0 +1,94 @@ +import { AlertTriangle } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table'; +import { Badge } from '@/components/ui/badge'; +import type { ErrorLog } from '@/types/api'; + +interface RecentErrorsTableProps { + errors: ErrorLog[]; +} + +export function RecentErrorsTable({ errors }: RecentErrorsTableProps) { + const formatDate = (dateString: string) => { + return new Date(dateString).toLocaleString(); + }; + + const getStatusBadgeVariant = (statusCode: number) => { + if (statusCode >= 500) return 'destructive'; + if (statusCode >= 400) return 'secondary'; + return 'default'; + }; + + const truncateText = (text: string | null, maxLength: number = 50) => { + if (!text) return '-'; + if (text.length <= maxLength) return text; + return `${text.slice(0, maxLength)}...`; + }; + + return ( + + + + + Recent Errors + + + + + + + Status + Method + Path + Error + Time + + + + {errors.length === 0 ? ( + + + No errors recorded + + + ) : ( + errors.map((error) => ( + + + + {error.status_code} + + + + + {error.method} + + + + {truncateText(error.path, 30)} + + + {truncateText(error.error_message, 40)} + + + {formatDate(error.created_at)} + + + )) + )} + +
+
+
+ ); +} diff --git a/src/pages/dashboard/components/ResetStoreCard.tsx b/src/pages/dashboard/components/ResetStoreCard.tsx new file mode 100644 index 0000000..d8a4b67 --- /dev/null +++ b/src/pages/dashboard/components/ResetStoreCard.tsx @@ -0,0 +1,112 @@ +import { useState } from 'react'; +import { RotateCcw, Loader2, AlertTriangle } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Button } from '@/components/ui/button'; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from '@/components/ui/alert-dialog'; +import { resetStore } from '@/api/dashboard'; + +interface ResetStoreCardProps { + lastReset: string | null; + onResetComplete: () => void; +} + +export function ResetStoreCard({ lastReset, onResetComplete }: ResetStoreCardProps) { + const [isResetting, setIsResetting] = useState(false); + const [error, setError] = useState(null); + + const formatDate = (dateString: string | null) => { + if (!dateString) return 'Never'; + return new Date(dateString).toLocaleString(); + }; + + const handleReset = async () => { + setIsResetting(true); + setError(null); + + const result = await resetStore(); + + if (result.success) { + onResetComplete(); + } else { + setError(result.error || 'Failed to reset store'); + } + + setIsResetting(false); + }; + + return ( + + + + + Store Management + + + +
+ Last Reset + {formatDate(lastReset)} +
+ + {error && ( +
+ {error} +
+ )} + + + + + + + + + + Reset Miden Store + + + This will reset the Miden store and restart the client. This action + cannot be undone. Are you sure you want to proceed? + + + + Cancel + + Reset Store + + + + +
+
+ ); +} diff --git a/src/pages/dashboard/components/StatsCard.tsx b/src/pages/dashboard/components/StatsCard.tsx new file mode 100644 index 0000000..21c76f7 --- /dev/null +++ b/src/pages/dashboard/components/StatsCard.tsx @@ -0,0 +1,26 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import type { ReactNode } from 'react'; + +interface StatsCardProps { + title: string; + value: string | number; + description?: string; + icon?: ReactNode; +} + +export function StatsCard({ title, value, description, icon }: StatsCardProps) { + return ( + + + {title} + {icon} + + +
{value}
+ {description && ( +

{description}

+ )} +
+
+ ); +} diff --git a/src/pages/dashboard/components/index.ts b/src/pages/dashboard/components/index.ts new file mode 100644 index 0000000..dc2f61b --- /dev/null +++ b/src/pages/dashboard/components/index.ts @@ -0,0 +1,8 @@ +export { DashboardHeader } from './DashboardHeader'; +export { StatsCard } from './StatsCard'; +export { BlockchainStatusCard } from './BlockchainStatusCard'; +export { RecentDomainsTable } from './RecentDomainsTable'; +export { RecentErrorsTable } from './RecentErrorsTable'; +export { DashboardSkeleton } from './DashboardSkeleton'; +export { NotificationCard } from './NotificationCard'; +export { ResetStoreCard } from './ResetStoreCard'; diff --git a/src/pages/dashboard/dashboard-pages/components/BlockchainStatusCard.tsx b/src/pages/dashboard/dashboard-pages/components/BlockchainStatusCard.tsx new file mode 100644 index 0000000..37cc90f --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/BlockchainStatusCard.tsx @@ -0,0 +1,35 @@ +import { Blocks, Clock } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import type { BlockchainStatus } from '@/types/api'; + +interface BlockchainStatusCardProps { + blockchain: BlockchainStatus; +} + +export function BlockchainStatusCard({ blockchain }: BlockchainStatusCardProps) { + return ( + + + + + Blockchain Status + + + +
+ Current Block + + {blockchain.current_block.toLocaleString()} + +
+
+ + + Sync Interval + + {blockchain.sync_interval_secs}s +
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/DashboardHeader.tsx b/src/pages/dashboard/dashboard-pages/components/DashboardHeader.tsx new file mode 100644 index 0000000..a5b6df7 --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/DashboardHeader.tsx @@ -0,0 +1,38 @@ +import { LogOut, RefreshCw } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { ThemeToggle } from '@/components/ThemeToggle'; +import { useDashboardAuth } from '@/contexts/DashboardAuthContext'; + +interface DashboardHeaderProps { + onRefresh: () => void; + isRefreshing: boolean; +} + +export function DashboardHeader({ onRefresh, isRefreshing }: DashboardHeaderProps) { + const { logout } = useDashboardAuth(); + + return ( +
+
+

+ Miden Dashboard +

+
+ + + +
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/DashboardSkeleton.tsx b/src/pages/dashboard/dashboard-pages/components/DashboardSkeleton.tsx new file mode 100644 index 0000000..dda8227 --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/DashboardSkeleton.tsx @@ -0,0 +1,60 @@ +import { Card, CardContent, CardHeader } from '@/components/ui/card'; +import { Skeleton } from '@/components/ui/skeleton'; + +export function DashboardSkeleton() { + return ( +
+ {/* Stats cards skeleton */} +
+ {[...Array(4)].map((_, i) => ( + + + + + + + + + + ))} +
+ + {/* Blockchain status skeleton */} + + + + + +
+ + +
+
+ + +
+
+
+ + {/* Recent domains table skeleton */} + + + + + + +
+ {[...Array(5)].map((_, i) => ( +
+ + + + +
+ ))} +
+
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/NotificationCard.tsx b/src/pages/dashboard/dashboard-pages/components/NotificationCard.tsx new file mode 100644 index 0000000..1b4a85d --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/NotificationCard.tsx @@ -0,0 +1,58 @@ +import { useState } from 'react'; +import { Bell, Loader2 } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Switch } from '@/components/ui/switch'; +import { Label } from '@/components/ui/label'; +import { toggleTelegramNotifications } from '@/api/dashboard'; + +interface NotificationCardProps { + telegramEnabled: boolean; + onStatusChange: (enabled: boolean) => void; +} + +export function NotificationCard({ telegramEnabled, onStatusChange }: NotificationCardProps) { + const [isToggling, setIsToggling] = useState(false); + + const handleToggle = async (checked: boolean) => { + setIsToggling(true); + const result = await toggleTelegramNotifications(checked); + + if (result.success && result.data) { + onStatusChange(result.data.enabled); + } + + setIsToggling(false); + }; + + return ( + + + + + Notifications + + + +
+
+ +

+ Receive error alerts via Telegram +

+
+
+ {isToggling && } + +
+
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/RecentDomainsTable.tsx b/src/pages/dashboard/dashboard-pages/components/RecentDomainsTable.tsx new file mode 100644 index 0000000..1f5e376 --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/RecentDomainsTable.tsx @@ -0,0 +1,90 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import type { DomainRegistration, DashboardLimit } from '@/types/api'; + +interface RecentDomainsTableProps { + domains: DomainRegistration[]; + limit: DashboardLimit; + onLimitChange: (limit: DashboardLimit) => void; +} + +export function RecentDomainsTable({ domains, limit, onLimitChange }: RecentDomainsTableProps) { + const formatDate = (dateString: string) => { + return new Date(dateString).toLocaleString(); + }; + + const truncateAccountId = (accountId: string) => { + if (accountId.length <= 16) return accountId; + return `${accountId.slice(0, 10)}...${accountId.slice(-6)}`; + }; + + return ( + + + Recent Domain Registrations + + + + + + + Domain + Account ID + Block + Registered + + + + {domains.length === 0 ? ( + + + No domains registered yet + + + ) : ( + domains.map((domain) => ( + + + {domain.domain}.miden + + + {truncateAccountId(domain.account_id)} + + {domain.created_block.toLocaleString()} + {formatDate(domain.created_at)} + + )) + )} + +
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/RecentErrorsTable.tsx b/src/pages/dashboard/dashboard-pages/components/RecentErrorsTable.tsx new file mode 100644 index 0000000..5363866 --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/RecentErrorsTable.tsx @@ -0,0 +1,94 @@ +import { AlertTriangle } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table'; +import { Badge } from '@/components/ui/badge'; +import type { ErrorLog } from '@/types/api'; + +interface RecentErrorsTableProps { + errors: ErrorLog[]; +} + +export function RecentErrorsTable({ errors }: RecentErrorsTableProps) { + const formatDate = (dateString: string) => { + return new Date(dateString).toLocaleString(); + }; + + const getStatusBadgeVariant = (statusCode: number) => { + if (statusCode >= 500) return 'destructive'; + if (statusCode >= 400) return 'secondary'; + return 'default'; + }; + + const truncateText = (text: string | null, maxLength: number = 50) => { + if (!text) return '-'; + if (text.length <= maxLength) return text; + return `${text.slice(0, maxLength)}...`; + }; + + return ( + + + + + Recent Errors + + + + + + + Status + Method + Path + Error + Time + + + + {errors.length === 0 ? ( + + + No errors recorded + + + ) : ( + errors.map((error) => ( + + + + {error.status_code} + + + + + {error.method} + + + + {truncateText(error.path, 30)} + + + {truncateText(error.error_message, 40)} + + + {formatDate(error.created_at)} + + + )) + )} + +
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/ResetStoreCard.tsx b/src/pages/dashboard/dashboard-pages/components/ResetStoreCard.tsx new file mode 100644 index 0000000..d8a4b67 --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/ResetStoreCard.tsx @@ -0,0 +1,112 @@ +import { useState } from 'react'; +import { RotateCcw, Loader2, AlertTriangle } from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Button } from '@/components/ui/button'; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from '@/components/ui/alert-dialog'; +import { resetStore } from '@/api/dashboard'; + +interface ResetStoreCardProps { + lastReset: string | null; + onResetComplete: () => void; +} + +export function ResetStoreCard({ lastReset, onResetComplete }: ResetStoreCardProps) { + const [isResetting, setIsResetting] = useState(false); + const [error, setError] = useState(null); + + const formatDate = (dateString: string | null) => { + if (!dateString) return 'Never'; + return new Date(dateString).toLocaleString(); + }; + + const handleReset = async () => { + setIsResetting(true); + setError(null); + + const result = await resetStore(); + + if (result.success) { + onResetComplete(); + } else { + setError(result.error || 'Failed to reset store'); + } + + setIsResetting(false); + }; + + return ( + + + + + Store Management + + + +
+ Last Reset + {formatDate(lastReset)} +
+ + {error && ( +
+ {error} +
+ )} + + + + + + + + + + Reset Miden Store + + + This will reset the Miden store and restart the client. This action + cannot be undone. Are you sure you want to proceed? + + + + Cancel + + Reset Store + + + + +
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/StatsCard.tsx b/src/pages/dashboard/dashboard-pages/components/StatsCard.tsx new file mode 100644 index 0000000..21c76f7 --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/StatsCard.tsx @@ -0,0 +1,26 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import type { ReactNode } from 'react'; + +interface StatsCardProps { + title: string; + value: string | number; + description?: string; + icon?: ReactNode; +} + +export function StatsCard({ title, value, description, icon }: StatsCardProps) { + return ( + + + {title} + {icon} + + +
{value}
+ {description && ( +

{description}

+ )} +
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/components/index.ts b/src/pages/dashboard/dashboard-pages/components/index.ts new file mode 100644 index 0000000..dc2f61b --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/components/index.ts @@ -0,0 +1,8 @@ +export { DashboardHeader } from './DashboardHeader'; +export { StatsCard } from './StatsCard'; +export { BlockchainStatusCard } from './BlockchainStatusCard'; +export { RecentDomainsTable } from './RecentDomainsTable'; +export { RecentErrorsTable } from './RecentErrorsTable'; +export { DashboardSkeleton } from './DashboardSkeleton'; +export { NotificationCard } from './NotificationCard'; +export { ResetStoreCard } from './ResetStoreCard'; diff --git a/src/pages/dashboard/dashboard-pages/layout.tsx b/src/pages/dashboard/dashboard-pages/layout.tsx new file mode 100644 index 0000000..11af35b --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/layout.tsx @@ -0,0 +1,15 @@ +import { Outlet } from 'react-router'; +import { DashboardAuthProvider } from '@/contexts/DashboardAuthContext'; +import { ThemeProvider } from '@/components/ThemeProvider'; + +export default function DashboardLayout() { + return ( + + +
+ +
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/login/page.tsx b/src/pages/dashboard/dashboard-pages/login/page.tsx new file mode 100644 index 0000000..448069b --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/login/page.tsx @@ -0,0 +1,113 @@ +import { useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { z } from 'zod'; +import { Loader2 } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { useDashboardAuth } from '@/contexts/DashboardAuthContext'; + +const loginSchema = z.object({ + username: z.string().min(1, 'Username is required'), + password: z.string().min(1, 'Password is required'), +}); + +type LoginFormData = z.infer; + +export default function DashboardLogin() { + const { login, isLoading: authLoading } = useDashboardAuth(); + const [error, setError] = useState(null); + const [isSubmitting, setIsSubmitting] = useState(false); + + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: zodResolver(loginSchema), + }); + + const onSubmit = async (data: LoginFormData) => { + setError(null); + setIsSubmitting(true); + + const result = await login(data.username, data.password); + + if (!result.success) { + setError(result.error || 'Invalid username or password'); + } + + setIsSubmitting(false); + }; + + if (authLoading) { + return ( +
+ +
+ ); + } + + return ( +
+ + + + Miden Dashboard + + + Login + + + +
+
+ + + {errors.username && ( +

{errors.username.message}

+ )} +
+ +
+ + + {errors.password && ( +

{errors.password.message}

+ )} +
+ + {error && ( +
+ {error} +
+ )} + + +
+
+
+
+ ); +} diff --git a/src/pages/dashboard/dashboard-pages/page.tsx b/src/pages/dashboard/dashboard-pages/page.tsx new file mode 100644 index 0000000..00be97c --- /dev/null +++ b/src/pages/dashboard/dashboard-pages/page.tsx @@ -0,0 +1,162 @@ +import { useState, useEffect, useCallback } from 'react'; +import { Globe, Users } from 'lucide-react'; +import { getDashboardData } from '@/api/dashboard'; +import { useDashboardAuth } from '@/contexts/DashboardAuthContext'; +import type { DashboardData, DashboardLimit } from '@/types/api'; +import { + DashboardHeader, + StatsCard, + BlockchainStatusCard, + RecentDomainsTable, + RecentErrorsTable, + DashboardSkeleton, + NotificationCard, + ResetStoreCard, +} from './components'; + +const AUTO_REFRESH_INTERVAL = 30000; // 30 seconds + +export default function Dashboard() { + const { isLoading: authLoading } = useDashboardAuth(); + const [data, setData] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const [isRefreshing, setIsRefreshing] = useState(false); + const [limit, setLimit] = useState(10); + const [error, setError] = useState(null); + + const fetchData = useCallback(async (showRefreshing = false) => { + if (showRefreshing) { + setIsRefreshing(true); + } + + const result = await getDashboardData(limit); + + if (result.success && result.data) { + setData(result.data); + setError(null); + } else { + setError(result.error || 'Failed to load dashboard data'); + } + + setIsLoading(false); + setIsRefreshing(false); + }, [limit]); + + // Initial fetch and limit changes + useEffect(() => { + if (!authLoading) { + fetchData(); + } + }, [authLoading, fetchData]); + + // Auto-refresh every 30 seconds + useEffect(() => { + if (authLoading || isLoading) return; + + const interval = setInterval(() => { + fetchData(false); + }, AUTO_REFRESH_INTERVAL); + + return () => clearInterval(interval); + }, [authLoading, isLoading, fetchData]); + + const handleRefresh = () => { + fetchData(true); + }; + + const handleLimitChange = (newLimit: DashboardLimit) => { + setLimit(newLimit); + }; + + const handleTelegramStatusChange = (enabled: boolean) => { + if (data) { + setData({ + ...data, + notifications: { ...data.notifications, telegram_enabled: enabled }, + }); + } + }; + + const handleResetComplete = () => { + // Refresh data after reset to get updated timestamp + fetchData(true); + }; + + if (authLoading || isLoading) { + return ( +
+ +
+ +
+
+ ); + } + + if (error) { + return ( +
+ +
+
+

{error}

+ +
+
+
+ ); + } + + if (!data) return null; + + return ( +
+ +
+ {/* Admin actions - actionable items first */} +
+ + + +
+ + {/* Stats cards */} +
+ } + /> + } + /> +
+ + {/* Recent errors and domains - side by side on larger screens */} +
+ + +
+
+
+ ); +} diff --git a/src/pages/dashboard/layout.tsx b/src/pages/dashboard/layout.tsx new file mode 100644 index 0000000..11af35b --- /dev/null +++ b/src/pages/dashboard/layout.tsx @@ -0,0 +1,15 @@ +import { Outlet } from 'react-router'; +import { DashboardAuthProvider } from '@/contexts/DashboardAuthContext'; +import { ThemeProvider } from '@/components/ThemeProvider'; + +export default function DashboardLayout() { + return ( + + +
+ +
+
+
+ ); +} diff --git a/src/pages/dashboard/login/page.tsx b/src/pages/dashboard/login/page.tsx new file mode 100644 index 0000000..448069b --- /dev/null +++ b/src/pages/dashboard/login/page.tsx @@ -0,0 +1,113 @@ +import { useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { z } from 'zod'; +import { Loader2 } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { useDashboardAuth } from '@/contexts/DashboardAuthContext'; + +const loginSchema = z.object({ + username: z.string().min(1, 'Username is required'), + password: z.string().min(1, 'Password is required'), +}); + +type LoginFormData = z.infer; + +export default function DashboardLogin() { + const { login, isLoading: authLoading } = useDashboardAuth(); + const [error, setError] = useState(null); + const [isSubmitting, setIsSubmitting] = useState(false); + + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: zodResolver(loginSchema), + }); + + const onSubmit = async (data: LoginFormData) => { + setError(null); + setIsSubmitting(true); + + const result = await login(data.username, data.password); + + if (!result.success) { + setError(result.error || 'Invalid username or password'); + } + + setIsSubmitting(false); + }; + + if (authLoading) { + return ( +
+ +
+ ); + } + + return ( +
+ + + + Miden Dashboard + + + Login + + + +
+
+ + + {errors.username && ( +

{errors.username.message}

+ )} +
+ +
+ + + {errors.password && ( +

{errors.password.message}

+ )} +
+ + {error && ( +
+ {error} +
+ )} + + +
+
+
+
+ ); +} diff --git a/src/pages/dashboard/page.tsx b/src/pages/dashboard/page.tsx new file mode 100644 index 0000000..00be97c --- /dev/null +++ b/src/pages/dashboard/page.tsx @@ -0,0 +1,162 @@ +import { useState, useEffect, useCallback } from 'react'; +import { Globe, Users } from 'lucide-react'; +import { getDashboardData } from '@/api/dashboard'; +import { useDashboardAuth } from '@/contexts/DashboardAuthContext'; +import type { DashboardData, DashboardLimit } from '@/types/api'; +import { + DashboardHeader, + StatsCard, + BlockchainStatusCard, + RecentDomainsTable, + RecentErrorsTable, + DashboardSkeleton, + NotificationCard, + ResetStoreCard, +} from './components'; + +const AUTO_REFRESH_INTERVAL = 30000; // 30 seconds + +export default function Dashboard() { + const { isLoading: authLoading } = useDashboardAuth(); + const [data, setData] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const [isRefreshing, setIsRefreshing] = useState(false); + const [limit, setLimit] = useState(10); + const [error, setError] = useState(null); + + const fetchData = useCallback(async (showRefreshing = false) => { + if (showRefreshing) { + setIsRefreshing(true); + } + + const result = await getDashboardData(limit); + + if (result.success && result.data) { + setData(result.data); + setError(null); + } else { + setError(result.error || 'Failed to load dashboard data'); + } + + setIsLoading(false); + setIsRefreshing(false); + }, [limit]); + + // Initial fetch and limit changes + useEffect(() => { + if (!authLoading) { + fetchData(); + } + }, [authLoading, fetchData]); + + // Auto-refresh every 30 seconds + useEffect(() => { + if (authLoading || isLoading) return; + + const interval = setInterval(() => { + fetchData(false); + }, AUTO_REFRESH_INTERVAL); + + return () => clearInterval(interval); + }, [authLoading, isLoading, fetchData]); + + const handleRefresh = () => { + fetchData(true); + }; + + const handleLimitChange = (newLimit: DashboardLimit) => { + setLimit(newLimit); + }; + + const handleTelegramStatusChange = (enabled: boolean) => { + if (data) { + setData({ + ...data, + notifications: { ...data.notifications, telegram_enabled: enabled }, + }); + } + }; + + const handleResetComplete = () => { + // Refresh data after reset to get updated timestamp + fetchData(true); + }; + + if (authLoading || isLoading) { + return ( +
+ +
+ +
+
+ ); + } + + if (error) { + return ( +
+ +
+
+

{error}

+ +
+
+
+ ); + } + + if (!data) return null; + + return ( +
+ +
+ {/* Admin actions - actionable items first */} +
+ + + +
+ + {/* Stats cards */} +
+ } + /> + } + /> +
+ + {/* Recent errors and domains - side by side on larger screens */} +
+ + +
+
+
+ ); +} diff --git a/src/pages/home/components/domain-card.tsx b/src/pages/home/components/domain-card.tsx index 1738b14..cbd5936 100644 --- a/src/pages/home/components/domain-card.tsx +++ b/src/pages/home/components/domain-card.tsx @@ -2,7 +2,7 @@ import { Card, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Loader2 } from 'lucide-react' import { RegisterModal } from '@/components/RegisterModal' -import { useWallet, useWalletModal } from '@demox-labs/miden-wallet-adapter' +import { useWallet, useWalletModal } from '@miden-sdk/miden-wallet-adapter' import { useDomainAvailability } from '@/hooks/useDomainAvailability' interface DomainCardProps { @@ -22,7 +22,9 @@ export function DomainCard({ domain }: DomainCardProps) { const cardContent = ( [PRICE]) -const.ACCOUNT_ID_TO_DOMAIN_SLOT=3 -const.DOMAIN_TO_ACCOUNT_ID_SLOT=4 -const.DOMAIN_TO_OWNER_SLOT=5 -const.REF_RATE_SLOT=6 -const.REF_TOTAL_REVENUE_SLOT=7 -const.REF_CLAIMED_REVENUE_SLOT=8 -const.DOMAIN_COUNT_SLOT=9 -const.TOTAL_REVENUE_SLOT=10 # protocol total revenue map([0, 0, token_prefix, token_suffix] -> amount) -const.CLAIMED_REVENUE_SLOT=11 -const.ONCHAIN_INIT_SLOT=12 +export const MIDEN_NAME_CONTRACT_CODE = `use miden::protocol::active_account +use miden::protocol::native_account +use miden::protocol::account_id +use miden::protocol::input_note +use miden::protocol::output_note +use miden::protocol::active_note +use miden::protocol::tx +use miden::standards::wallets::basic->basic_wallet + +# Storage Slots +const INIT_FLAG_SLOT = word("naming::init_flag") +const OWNER_SLOT = word("naming::owner") +const PRICES_SLOT = word("naming::prices") # domain prices map([0, letter_count, payment_token_prefix, payment_token_suffix] -> [PRICE]) +const ACCOUNT_ID_TO_DOMAIN_SLOT = word("naming::account_to_domain") +const DOMAIN_TO_ACCOUNT_ID_SLOT = word("naming::domain_to_account") +const DOMAIN_TO_OWNER_SLOT = word("naming::domain_to_owner") +const REF_RATE_SLOT = word("naming::ref_rate") +const REF_TOTAL_REVENUE_SLOT = word("naming::ref_total_revenue") +const REF_CLAIMED_REVENUE_SLOT = word("naming::ref_claimed_revenue") +const DOMAIN_COUNT_SLOT = word("naming::domain_count") +const TOTAL_REVENUE_SLOT = word("naming::total_revenue") # protocol total revenue map([0, 0, token_prefix, token_suffix] -> amount) +const CLAIMED_REVENUE_SLOT = word("naming::claimed_revenue") +const ONCHAIN_INIT_SLOT = word("naming::onchain_init") #const.DOMAIN_EXPIRY_DATES=12 # domain expiry dates map(DOMAIN -> expiry timestamp) #const.ONE_YEAR_TIMESTAMP_SLOT=13 -## Errors -const.ERR_ONLY_OWNER="Only owner" -const.ERR_ONLY_DOMAIN_OWNER="Only domain owner" -const.ERR_ALREADY_INITIALIZED="Contract already initialized" -const.ERR_PAYMENT_TOKEN_NOT_ALLOWED="This payment token not allowed" -const.ERR_PRICE_ZERO="Price zero for this length" -const.ERR_VALIDATE_PAYMENT_SUB_OVERFLOW="Validating payment sub overflow" -const.ERR_INSUFFICIENT_AMOUNT_PAID="Paid amount less than price" -const.ERR_DOMAIN_NOT_AVAILABLE="Domain is already taken" -const.ERR_DOMAIN_LENGTH_TOO_HIGH="21 characters allowed" -const.ERR_REF_RATE_OVERLIMIT="Ref rate higher or equal to 10000" -const.ERR_REF_RATE_TOO_HIGH="Max 2500 ref rate" -const.ERR_REF_RATE_ZERO="Ref rate zero" -const.ERR_REF_NOT_EXIST="Referrer rate is zero" -const.DOMAIN_LENGTH_TOO_HIGH="Maximum 21 characters allowed" -const.ERR_INVALID_DOMAIN_LENGTH="Domain length field does not match actual character count" -const.ERR_EMPTY_DOMAIN="Domain length zero" -const.ERR_CALCULATE_DISCOUNT_OVERFLOW="Overflow at discount calc" -const.ERR_CALCULATE_DISCOUNT_UNDERFLOW="Underflow at discount calc" -const.ERR_DOMAIN_REGISTRATION_LENGTH_TOO_HIGH="Max 10 years" -const.ERR_OVERFLOW_AT_DOMAIN_TIMESTAMP_LENGTH="Timestamp len overflow" -const.ERR_DOMAIN_NOT_EXPIRED="Domain not expired" -const.ERR_U32_OVERFLOW="U32 Overflow" -const.ERR_DOMAIN_EXPIRED="Domain expired" -const.ERR_UNDERFLOW_AT_FEE_CALC="Fee calculation underflow" -const.ERR_OVERFLOW_AT_FEE_CALC="Fee calculation overflow" - -## Memory Pointers - -const.MEM_DOMAIN=0x0020 # WORD -const.MEM_PAYMENT_TOKEN=0x0024 # WORD -const.MEM_REFERRER=0x0028 # WORD -const.MEM_DOMAIN_NEW_OWNER=0x002C # WORD +# Errors +const ERR_ONLY_OWNER="Only owner" +const ERR_ONLY_DOMAIN_OWNER="Only domain owner" +const ERR_ALREADY_INITIALIZED="Contract already initialized" +const ERR_PAYMENT_TOKEN_NOT_ALLOWED="This payment token not allowed" +const ERR_PRICE_ZERO="Price zero for this length" +const ERR_VALIDATE_PAYMENT_SUB_OVERFLOW="Validating payment sub overflow" +const ERR_INSUFFICIENT_AMOUNT_PAID="Paid amount less than price" +const ERR_DOMAIN_NOT_AVAILABLE="Domain is already taken" +const ERR_DOMAIN_LENGTH_TOO_HIGH="21 characters allowed" +const ERR_REF_RATE_OVERLIMIT="Ref rate higher or equal to 10000" +const ERR_REF_RATE_TOO_HIGH="Max 2500 ref rate" +const ERR_REF_RATE_ZERO="Ref rate zero" +const ERR_REF_NOT_EXIST="Referrer rate is zero" +const DOMAIN_LENGTH_TOO_HIGH="Maximum 21 characters allowed" +const ERR_INVALID_DOMAIN_LENGTH="Domain length field does not match actual character count" +const ERR_EMPTY_DOMAIN="Domain length zero" +const ERR_CALCULATE_DISCOUNT_OVERFLOW="Overflow at discount calc" +const ERR_CALCULATE_DISCOUNT_UNDERFLOW="Underflow at discount calc" +const ERR_DOMAIN_REGISTRATION_LENGTH_TOO_HIGH="Max 10 years" +const ERR_OVERFLOW_AT_DOMAIN_TIMESTAMP_LENGTH="Timestamp len overflow" +const ERR_DOMAIN_NOT_EXPIRED="Domain not expired" +const ERR_U32_OVERFLOW="U32 Overflow" +const ERR_DOMAIN_EXPIRED="Domain expired" +const ERR_UNDERFLOW_AT_FEE_CALC="Fee calculation underflow" +const ERR_OVERFLOW_AT_FEE_CALC="Fee calculation overflow" + +# Memory Pointers + +const MEM_DOMAIN=0x0020 # WORD +const MEM_PAYMENT_TOKEN=0x0024 # WORD +const MEM_REFERRER=0x0028 # WORD +const MEM_DOMAIN_NEW_OWNER=0x002C # WORD #const.MEM_REG_LEN=0x0030 # WORD -const.MEM_RECIPIENT=0x0034 # WORD -const.MEM_NOTE_DETAILS=0x0038 # WORD -const.MEM_REF_RATE=0x003C # WORD -const.MEM_TOTAL_PAID_AMT=0x0050 # felt -const.MEM_PROTOCOL_FEE_AMT=0x0051 # felt -const.MEM_REFERRER_FEE_AMT=0x0052 # felt - -## Constants +const MEM_RECIPIENT=0x0034 # WORD +const MEM_NOTE_DETAILS=0x0038 # WORD +const MEM_REF_RATE=0x003C # WORD +const MEM_TOTAL_PAID_AMT=0x0050 # felt +const MEM_PROTOCOL_FEE_AMT=0x0051 # felt +const MEM_REFERRER_FEE_AMT=0x0052 # felt + +# Constants #const.YEAR=31536000 # In seconds #const.MAX_REG_LEN=10 # Years -const.MAX_NAME_LENGTH=21 -const.MAX_REF_RATE=10000 # Basis point -const.REF_RATE_LIMIT=2500 # %25 +const MAX_NAME_LENGTH=21 +const MAX_REF_RATE=10000 # Basis point +const REF_RATE_LIMIT=2500 # %25 -const.MAX_FELT_PART=0xFFFFFFFFFFFFFF # 8*7 bits +const MAX_FELT_PART=0xFFFFFFFFFFFFFF # 8*7 bits -const.PAD_4TH_CHAR=16777216 -const.PAD_3RD_CHAR=65536 -const.PAD_2ND_CHAR=256 -const.PAD_1ST_CHAR=1 +const PAD_4TH_CHAR=16777216 +const PAD_3RD_CHAR=65536 +const PAD_2ND_CHAR=256 +const PAD_1ST_CHAR=1 # Input: [PAYMENT_TOKEN, DOMAIN] # Output: [] -export.register +pub proc register mem_storew_be.MEM_PAYMENT_TOKEN dropw mem_storew_be.MEM_DOMAIN dropw # [] @@ -103,7 +103,6 @@ export.register exec._clear_domain_mapping #exec._calculate_domain_price - debug.stack.4 # [price] #exec._increase_total_revenue @@ -114,7 +113,7 @@ end # Input: [DOMAIN] # This function must be called to activate and match domain with account id -export.activate_domain +pub proc activate_domain mem_storew_be.MEM_DOMAIN dropw exec._assert_only_domain_owner @@ -123,7 +122,7 @@ export.activate_domain end # Inputs: [NEW_OWNER, DOMAIN] -export.transfer +pub proc transfer mem_storew_be.MEM_DOMAIN_NEW_OWNER dropw mem_storew_be.MEM_DOMAIN dropw @@ -137,29 +136,29 @@ export.transfer end # Inputs: [TOKEN] -export.claim_referral_earnings +pub proc claim_referral_earnings nop # TODO end # Input: [OWNER] -export.init - push.INIT_FLAG_SLOT exec.active_account::get_item drop drop drop +pub proc init + push.INIT_FLAG_SLOT[0..2] exec.active_account::get_item drop drop drop assertz.err=ERR_ALREADY_INITIALIZED # [OWNER] - push.OWNER_SLOT exec.native_account::set_item dropw + push.OWNER_SLOT[0..2] exec.native_account::set_item dropw # [] - push.1.0.0.0 push.INIT_FLAG_SLOT exec.native_account::set_item dropw + push.1.0.0.0 push.INIT_FLAG_SLOT[0..2] exec.native_account::set_item dropw end -## Nonsense function just to init contract on chain -export.init_on_chain - push.1.0.0.0 push.ONCHAIN_INIT_SLOT exec.native_account::set_item dropw +# Nonsense function just to init contract on chain +pub proc init_on_chain + push.1.0.0.0 push.ONCHAIN_INIT_SLOT[0..2] exec.native_account::set_item dropw end # Input: [ASSET] # Output: [pad(16)] -export.receive_asset +pub proc receive_asset exec.native_account::add_asset # => [ASSET', pad(12)] @@ -168,28 +167,28 @@ export.receive_asset # => [pad(16)] end -## Only owner methods +# Only owner methods # Input: [NEW_OWNER] # Output: [] -export.update_registry_owner +pub proc update_registry_owner exec._assert_only_owner # [0, 0, new_owner_prefix, new_owner_suffix] - push.OWNER_SLOT + push.OWNER_SLOT[0..2] exec.native_account::set_item dropw end # Input: [0, letter_count, token_prefix, token_suffix, PRICE] # Output: [] -export.set_price +pub proc set_price exec._assert_only_owner - push.PRICES_SLOT - exec.native_account::set_map_item dropw dropw + push.PRICES_SLOT[0..2] + exec.native_account::set_map_item dropw end # Input: [TOKEN, NOTE_DETAILS, RECIPIENT] -export.claim_protocol_revenue +pub proc claim_protocol_revenue mem_storew_be.MEM_PAYMENT_TOKEN dropw mem_storew_be.MEM_NOTE_DETAILS dropw mem_storew_be.MEM_RECIPIENT dropw @@ -212,55 +211,55 @@ export.claim_protocol_revenue end # Input: [TOKEN] -export.withdraw_assets +pub proc withdraw_assets mem_storew_be.MEM_PAYMENT_TOKEN dropw exec._assert_only_owner nop end -## Internal Methods +# Internal Methods # Input: [] Memory [DOMAIN] # Output: [] -proc._clear_domain_mapping +proc _clear_domain_mapping padw mem_loadw_be.MEM_DOMAIN # [DOMAIN] - push.DOMAIN_TO_ACCOUNT_ID_SLOT exec.active_account::get_map_item + push.DOMAIN_TO_ACCOUNT_ID_SLOT[0..2] exec.active_account::get_map_item # [ACCOUNT] padw swapw # [ACCOUNT, ZERO] - push.ACCOUNT_ID_TO_DOMAIN_SLOT exec.native_account::set_map_item dropw dropw + push.ACCOUNT_ID_TO_DOMAIN_SLOT[0..2] exec.native_account::set_map_item dropw # [] padw mem_loadw_be.MEM_DOMAIN # [DOMAIN] padw swapw # [DOMAIN, ZERO] - push.DOMAIN_TO_ACCOUNT_ID_SLOT exec.native_account::set_map_item dropw dropw + push.DOMAIN_TO_ACCOUNT_ID_SLOT[0..2] exec.native_account::set_map_item dropw # [] end # Input: [amt] Memory [PAYMENT_TOKEN] # Output: [] -proc._increase_total_revenue +proc _increase_total_revenue padw mem_loadw_be.MEM_PAYMENT_TOKEN - push.TOTAL_REVENUE_SLOT exec.active_account::get_map_item drop drop drop + push.TOTAL_REVENUE_SLOT[0..2] exec.active_account::get_map_item drop drop drop # [total_amount, amt] add push.0.0.0 # [FINAL_AMT] padw mem_loadw_be.MEM_PAYMENT_TOKEN # [PAYMENT_TOKEN, FINAL_AMT] - push.TOTAL_REVENUE_SLOT exec.native_account::set_map_item dropw dropw + push.TOTAL_REVENUE_SLOT[0..2] exec.native_account::set_map_item dropw # [] end # Input: [] Memory [PAYMENT_TOKEN] # Output: [claimable_revenue] -proc._get_remaining_revenue +proc _get_remaining_revenue padw mem_loadw_be.MEM_PAYMENT_TOKEN - push.TOTAL_REVENUE_SLOT exec.active_account::get_map_item drop drop drop + push.TOTAL_REVENUE_SLOT[0..2] exec.active_account::get_map_item drop drop drop # [total_revenue] padw mem_loadw_be.MEM_PAYMENT_TOKEN - push.CLAIMED_REVENUE_SLOT exec.active_account::get_map_item drop drop drop + push.CLAIMED_REVENUE_SLOT[0..2] exec.active_account::get_map_item drop drop drop # [claimed_revenue, total_revenue] u32assert2 u32overflowing_sub assertz.err=ERR_U32_OVERFLOW # [claimable_revenue] @@ -268,7 +267,7 @@ end # Input: [amt] Memory [PAYMENT_TOKEN] # Output: [ASSET] -proc._get_asset +proc _get_asset push.0 swap padw mem_loadw_be.MEM_PAYMENT_TOKEN drop drop # [prefix, suffix, amt, 0] @@ -276,39 +275,39 @@ end # Input: [account_prefix, account_suffix] Memory [DOMAIN] # Output: [] -proc._update_domain_map +proc _update_domain_map push.0.0 dupw # [ACCOUNT, ACCOUNT] padw mem_loadw_be.MEM_DOMAIN - push.DOMAIN_TO_ACCOUNT_ID_SLOT - exec.native_account::set_map_item dropw dropw + push.DOMAIN_TO_ACCOUNT_ID_SLOT[0..2] + exec.native_account::set_map_item dropw # [ACCOUNT] padw mem_loadw_be.MEM_DOMAIN swapw # [ACCOUNT, DOMAIN] - push.ACCOUNT_ID_TO_DOMAIN_SLOT - exec.native_account::set_map_item dropw dropw + push.ACCOUNT_ID_TO_DOMAIN_SLOT[0..2] + exec.native_account::set_map_item dropw # [] end # Input: [new_owner_prefix, new_owner_suffix] Memory [DOMAIN] # Output: [] -proc._update_domain_owner +proc _update_domain_owner push.0.0 # [0,0, prefix, suffix] padw mem_loadw_be.MEM_DOMAIN # [DOMAIN, 0, 0, prefix, suffix] - push.DOMAIN_TO_OWNER_SLOT + push.DOMAIN_TO_OWNER_SLOT[0..2] # [slot, DOMAIN, 0, 0, prefix, suffix] - exec.native_account::set_map_item dropw dropw + exec.native_account::set_map_item dropw # [] end # Input: [] Memory [DOMAIN] # Output: [] -proc._assert_only_domain_owner +proc _assert_only_domain_owner padw mem_loadw_be.MEM_DOMAIN - push.DOMAIN_TO_OWNER_SLOT + push.DOMAIN_TO_OWNER_SLOT[0..2] # [slot, DOMAIN] exec.active_account::get_map_item drop drop # [owner_prefix, owner_suffix] @@ -321,37 +320,37 @@ end # Input: [] # Output: [] -proc._after_domain_register +proc _after_domain_register exec._increase_domain_count end # Input: [] # Output: [] -proc._increase_domain_count - push.DOMAIN_COUNT_SLOT +proc _increase_domain_count + push.DOMAIN_COUNT_SLOT[0..2] exec.active_account::get_item drop drop drop # [total_supply] add.1 push.0.0.0 # [0, 0, 0, total_supply + 1] - push.DOMAIN_COUNT_SLOT exec.native_account::set_item dropw + push.DOMAIN_COUNT_SLOT[0..2] exec.native_account::set_item dropw end # Input: [] Memory [DOMAIN, PAYMENT_TOKEN] # Output: [price] # Call it after validate domain -proc._calculate_domain_price +proc _calculate_domain_price padw mem_loadw_be.MEM_PAYMENT_TOKEN drop drop # [prefix, suffix] padw mem_loadw_be.MEM_DOMAIN swap.3 drop drop drop # [length, prefix, suffix] push.0 - push.PRICES_SLOT exec.active_account::get_map_item drop drop drop + push.PRICES_SLOT[0..2] exec.active_account::get_map_item drop drop drop # [price] end # Input: [] Memory [PAYMENT_TOKEN] # Output: [balance] -proc._get_balance +proc _get_balance padw mem_loadw_be.MEM_PAYMENT_TOKEN drop drop exec.active_account::get_balance # [balance] @@ -359,10 +358,10 @@ end # Input: [min_amt] Memory [PAYMENT_TOKEN] # Output: [] -proc._receive_payment +proc _receive_payment exec._get_balance # [before_bal, min_amt] - exec.active_note::add_assets_to_account + exec.basic_wallet::add_assets_to_account exec._get_balance # [after_bal, before_bal, min_amt] swap u32overflowing_sub assertz.err=ERR_VALIDATE_PAYMENT_SUB_OVERFLOW @@ -370,19 +369,19 @@ proc._receive_payment # [] end -proc._unsafe_receive_asset - exec.active_note::add_assets_to_account +proc _unsafe_receive_asset + exec.basic_wallet::add_assets_to_account end # Input: [] Memory [PAYMENT_TOKEN] # Output: [] -proc._assert_payment_token +proc _assert_payment_token padw mem_loadw_be.MEM_PAYMENT_TOKEN drop drop push.1 # [letter, prefix, suffix] push.0 # [PRICES_KEY] - push.PRICES_SLOT + push.PRICES_SLOT[0..2] exec.active_account::get_map_item drop drop drop # [price] gt.0 assert.err=ERR_PAYMENT_TOKEN_NOT_ALLOWED @@ -391,10 +390,10 @@ end # Input: [] # Output: [] -proc._assert_only_owner +proc _assert_only_owner push.0 exec.input_note::get_sender # [caller_prefix, caller_suffix] - push.OWNER_SLOT + push.OWNER_SLOT[0..2] exec.active_account::get_item # [0, 0, owner_prefix, owner_suffix, caller_prefix, caller_suffix] drop drop @@ -405,9 +404,9 @@ end # Input: [] Memory [DOMAIN] # Output: [] -proc._assert_domain_available +proc _assert_domain_available padw mem_loadw_be.MEM_DOMAIN - push.DOMAIN_TO_OWNER_SLOT + push.DOMAIN_TO_OWNER_SLOT[0..2] exec.active_account::get_map_item drop drop push.0.0 exec.account_id::is_equal @@ -416,7 +415,7 @@ end # Input: [] Memory [DOMAIN] # Output: [] -proc._assert_domain_rules +proc _assert_domain_rules padw mem_loadw_be.MEM_DOMAIN dupw # [DOMAIN, DOMAIN] @@ -430,12 +429,12 @@ proc._assert_domain_rules end ############################ -## Domain length validations +# Domain length validations ############################ # Input: [] Memory [DOMAIN] # Output: [length] -proc._get_domain_length +proc _get_domain_length padw mem_loadw_be.MEM_DOMAIN swap.3 drop drop drop # [length] @@ -443,7 +442,7 @@ end # Input: [length, felt1, felt2, felt3] -> DOMAIN # Output: [] -proc._validate_domain_length +proc _validate_domain_length # Stack: [length, felt1, felt2, felt3] dup eq.0 assertz.err=ERR_EMPTY_DOMAIN dup lte.21 assert.err=ERR_DOMAIN_LENGTH_TOO_HIGH @@ -466,7 +465,7 @@ end # Input: [felt] # Output: [count] -proc._count_chars_in_felt +proc _count_chars_in_felt u32split # [u32_high, u32_low] exec._count_chars_in_u32 @@ -480,7 +479,7 @@ end # Input: [u32] # Output: [count] -proc._count_chars_in_u32 +proc _count_chars_in_u32 push.0 swap # push count # [u32, count] u32divmod.PAD_4TH_CHAR swap diff --git a/src/shared/index.ts b/src/shared/index.ts index b4d856e..5ae66a2 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -4,7 +4,8 @@ export { MIDEN_FAUCET_CONTRACT_ADDRESS, MIDEN_FAUCET_ID_BECH32, MAX_FILE_SIZE, - API_BASE + API_BASE, + DASHBOARD_API_BASE, } from './constants'; // Contracts diff --git a/src/shared/notes/register-note.ts b/src/shared/notes/register-note.ts index 5ab0029..20b5a2a 100644 --- a/src/shared/notes/register-note.ts +++ b/src/shared/notes/register-note.ts @@ -1,16 +1,17 @@ export const REGISTER_NOTE_SCRIPT = ` -use.miden_name::naming -use.miden::active_note -use.std::sys +use miden_name::naming +use miden::protocol::active_note +use miden::core::sys -const.TOKEN_PTR=0 -const.DOMAIN_PTR=4 -# Input (arguments): [TOKEN, DOMAIN] +const TOKEN_PTR=0 +const DOMAIN_PTR=4 +const REG_LEN_PTR=8 +# Input (arguments): [TOKEN, DOMAIN, REG_LEN] begin push.0 exec.active_note::get_inputs drop drop - padw mem_loadw_be.DOMAIN_PTR padw mem_loadw_be.TOKEN_PTR + padw mem_loadw_be.REG_LEN_PTR padw mem_loadw_be.DOMAIN_PTR padw mem_loadw_be.TOKEN_PTR # [TOKEN, DOMAIN, REG_LEN] call.naming::register exec.sys::truncate_stack diff --git a/src/types/api/dashboard.ts b/src/types/api/dashboard.ts new file mode 100644 index 0000000..3bb507d --- /dev/null +++ b/src/types/api/dashboard.ts @@ -0,0 +1,84 @@ +/** + * Dashboard API types + * Session-based authentication for admin dashboard + */ + +// Request types +export interface DashboardLoginRequest { + username: string; + password: string; +} + +// Response types +export interface DashboardLoginResponse { + success: boolean; + message: string; +} + +export interface DashboardLogoutResponse { + success: boolean; + message: string; +} + +export interface BlockchainStatus { + current_block: number; + sync_interval_secs: number; +} + +export interface NotificationStatus { + telegram_enabled: boolean; +} + +export interface DomainRegistration { + domain: string; + account_id: string; + created_block: number; + created_at: string; +} + +export interface SystemStats { + total_domains: number; + total_profiles: number; + last_store_reset: string | null; +} + +export interface ErrorLog { + id: number; + status_code: number; + method: string; + path: string; + error_message: string | null; + request_body: string | null; + created_at: string; +} + +export interface DashboardData { + blockchain: BlockchainStatus; + notifications: NotificationStatus; + recent_domains: DomainRegistration[]; + recent_errors: ErrorLog[]; + stats: SystemStats; +} + +export interface DashboardErrorResponse { + error: string; +} + +// Valid limit values for dashboard data +export type DashboardLimit = 10 | 25 | 50 | 100; + +// Admin action response types +export interface ResetStoreResponse { + success: boolean; + message: string; +} + +export interface TelegramStatusResponse { + enabled: boolean; + message: string; +} + +export interface TelegramToggleResponse { + enabled: boolean; + message: string; +} diff --git a/src/types/api/index.ts b/src/types/api/index.ts index 70e3bb1..7f86898 100644 --- a/src/types/api/index.ts +++ b/src/types/api/index.ts @@ -2,3 +2,4 @@ export * from './common'; export * from './requests'; export * from './responses'; +export * from './dashboard'; diff --git a/src/types/hooks.ts b/src/types/hooks.ts index d2db3f7..db884d9 100644 --- a/src/types/hooks.ts +++ b/src/types/hooks.ts @@ -1,4 +1,4 @@ -import type { AccountId } from '@demox-labs/miden-sdk'; +import type { AccountId } from '@miden-sdk/miden-sdk'; // Balance hook params (from hooks/useBalance.tsx) export interface BalanceParams { diff --git a/src/utils/__tests__/decode.test.ts b/src/utils/__tests__/decode.test.ts index c11fe75..174ee03 100644 --- a/src/utils/__tests__/decode.test.ts +++ b/src/utils/__tests__/decode.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect } from 'vitest'; import { decodeChar, decodeDomain } from '../decode'; import { encodeDomain } from '../encode'; -import { Felt, Word } from '@demox-labs/miden-sdk'; +import { Felt, Word } from '@miden-sdk/miden-sdk'; describe('decodeChar', () => { it('should decode values 1-26 to lowercase letters a-z', () => { diff --git a/src/utils/decode.ts b/src/utils/decode.ts index 0a956de..640a44d 100644 --- a/src/utils/decode.ts +++ b/src/utils/decode.ts @@ -1,4 +1,4 @@ -import { Word } from '@demox-labs/miden-sdk'; +import { Word } from '@miden-sdk/miden-sdk'; /** * Decodes a numeric value back to its character representation. diff --git a/src/utils/encode.ts b/src/utils/encode.ts index 0adbb94..05e1429 100644 --- a/src/utils/encode.ts +++ b/src/utils/encode.ts @@ -1,4 +1,4 @@ -import { Felt, Word } from '@demox-labs/miden-sdk'; +import { Felt, Word } from '@miden-sdk/miden-sdk'; /** * Encodes a character to its numeric representation. diff --git a/vite.config.ts b/vite.config.ts index 3e4a3f5..7009176 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -10,7 +10,7 @@ export default defineConfig({ } }, optimizeDeps: { - exclude: ['@demox-labs/miden-sdk'], + exclude: ['@miden-sdk/miden-sdk'], include: ['buffer'], }, assetsInclude: ['**/*.masm'], @@ -24,9 +24,7 @@ export default defineConfig({ // Vendor chunks 'react-vendor': ['react', 'react-dom', 'react-router'], 'miden-wallet': [ - '@demox-labs/miden-wallet-adapter', - '@demox-labs/miden-wallet-adapter-react', - '@demox-labs/miden-wallet-adapter-reactui' + '@miden-sdk/miden-wallet-adapter' ], 'ui-vendor': [ '@radix-ui/react-dialog',