From 33bf07ec46783c84e1f3a9b537031ba336e5986e Mon Sep 17 00:00:00 2001 From: bits Date: Wed, 18 Mar 2026 02:58:27 +0300 Subject: [PATCH] Initial Tauri GUI (Source) --- .gitignore | 24 + .vscode/extensions.json | 3 + README.md | 7 + index.html | 14 + package-lock.json | 2157 +++++++++ package.json | 32 + public/rlidentity.webp | Bin 0 -> 93246 bytes src-tauri/.gitignore | 7 + src-tauri/Cargo.lock | 6259 +++++++++++++++++++++++++++ src-tauri/Cargo.toml | 27 + src-tauri/build.rs | 3 + src-tauri/capabilities/default.json | 19 + src-tauri/permissions/main.toml | 17 + src-tauri/src/lib.rs | 235 + src-tauri/src/main.rs | 6 + src-tauri/tauri.conf.json | 48 + src/App.css | 465 ++ src/App.tsx | 567 +++ src/assets/react.svg | 1 + src/main.tsx | 32 + src/vite-env.d.ts | 1 + tsconfig.json | 25 + tsconfig.node.json | 10 + vite.config.ts | 31 + 24 files changed, 9990 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/rlidentity.webp create mode 100644 src-tauri/.gitignore create mode 100644 src-tauri/Cargo.lock create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/default.json create mode 100644 src-tauri/permissions/main.toml create mode 100644 src-tauri/src/lib.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/assets/react.svg create mode 100644 src/main.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..24d7cc6 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..102e366 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Tauri + React + Typescript + +This template should help get you started developing with Tauri, React and Typescript in Vite. + +## Recommended IDE Setup + +- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) diff --git a/index.html b/index.html new file mode 100644 index 0000000..5d5a5c0 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + + RLidentity + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..17f2e2c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2157 @@ +{ + "name": "rlidentitygui", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rlidentitygui", + "version": "2.0.0", + "dependencies": { + "@tauri-apps/api": "^2.10.1", + "@tauri-apps/plugin-opener": "^2", + "@tauri-apps/plugin-process": "^2.3.1", + "@tauri-apps/plugin-shell": "^2.3.5", + "@tauri-apps/plugin-updater": "^2.10.0", + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.10.1", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "autoprefixer": "^10.4.27", + "postcss": "^8.5.6", + "tailwindcss": "^4.2.1", + "typescript": "~5.8.3", + "vite": "^7.0.4" + } + }, + "node_modules/@babel/code-frame": { + "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.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "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": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "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", + "dependencies": { + "@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", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "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.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "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.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "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.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "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.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "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": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "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.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "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.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "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.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "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.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "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": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tauri-apps/api": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.10.1.tgz", + "integrity": "sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==", + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.10.1.tgz", + "integrity": "sha512-jQNGF/5quwORdZSSLtTluyKQ+o6SMa/AUICfhf4egCGFdMHqWssApVgYSbg+jmrZoc8e1DscNvjTnXtlHLS11g==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.10.1", + "@tauri-apps/cli-darwin-x64": "2.10.1", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.10.1", + "@tauri-apps/cli-linux-arm64-gnu": "2.10.1", + "@tauri-apps/cli-linux-arm64-musl": "2.10.1", + "@tauri-apps/cli-linux-riscv64-gnu": "2.10.1", + "@tauri-apps/cli-linux-x64-gnu": "2.10.1", + "@tauri-apps/cli-linux-x64-musl": "2.10.1", + "@tauri-apps/cli-win32-arm64-msvc": "2.10.1", + "@tauri-apps/cli-win32-ia32-msvc": "2.10.1", + "@tauri-apps/cli-win32-x64-msvc": "2.10.1" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.10.1.tgz", + "integrity": "sha512-Z2OjCXiZ+fbYZy7PmP3WRnOpM9+Fy+oonKDEmUE6MwN4IGaYqgceTjwHucc/kEEYZos5GICve35f7ZiizgqEnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.10.1.tgz", + "integrity": "sha512-V/irQVvjPMGOTQqNj55PnQPVuH4VJP8vZCN7ajnj+ZS8Kom1tEM2hR3qbbIRoS3dBKs5mbG8yg1WC+97dq17Pw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.10.1.tgz", + "integrity": "sha512-Hyzwsb4VnCWKGfTw+wSt15Z2pLw2f0JdFBfq2vHBOBhvg7oi6uhKiF87hmbXOBXUZaGkyRDkCHsdzJcIfoJC2w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.10.1.tgz", + "integrity": "sha512-OyOYs2t5GkBIvyWjA1+h4CZxTcdz1OZPCWAPz5DYEfB0cnWHERTnQ/SLayQzncrT0kwRoSfSz9KxenkyJoTelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.10.1.tgz", + "integrity": "sha512-MIj78PDDGjkg3NqGptDOGgfXks7SYJwhiMh8SBoZS+vfdz7yP5jN18bNaLnDhsVIPARcAhE1TlsZe/8Yxo2zqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.10.1.tgz", + "integrity": "sha512-X0lvOVUg8PCVaoEtEAnpxmnkwlE1gcMDTqfhbefICKDnOTJ5Est3qL0SrWxizDackIOKBcvtpejrSiVpuJI1kw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.10.1.tgz", + "integrity": "sha512-2/12bEzsJS9fAKybxgicCDFxYD1WEI9kO+tlDwX5znWG2GwMBaiWcmhGlZ8fi+DMe9CXlcVarMTYc0L3REIRxw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.10.1.tgz", + "integrity": "sha512-Y8J0ZzswPz50UcGOFuXGEMrxbjwKSPgXftx5qnkuMs2rmwQB5ssvLb6tn54wDSYxe7S6vlLob9vt0VKuNOaCIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.10.1.tgz", + "integrity": "sha512-iSt5B86jHYAPJa/IlYw++SXtFPGnWtFJriHn7X0NFBVunF6zu9+/zOn8OgqIWSl8RgzhLGXQEEtGBdR4wzpVgg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.10.1.tgz", + "integrity": "sha512-gXyxgEzsFegmnWywYU5pEBURkcFN/Oo45EAwvZrHMh+zUSEAvO5E8TXsgPADYm31d1u7OQU3O3HsYfVBf2moHw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.10.1.tgz", + "integrity": "sha512-6Cn7YpPFwzChy0ERz6djKEmUehWrYlM+xTaNzGPgZocw3BD7OfwfWHKVWxXzdjEW2KfKkHddfdxK1XXTYqBRLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-opener": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-opener/-/plugin-opener-2.5.3.tgz", + "integrity": "sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-process": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.3.1.tgz", + "integrity": "sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-shell": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.3.5.tgz", + "integrity": "sha512-jewtULhiQ7lI7+owCKAjc8tYLJr92U16bPOeAa472LHJdgaibLP83NcfAF2e+wkEcA53FxKQAZ7byDzs2eeizg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.10.1" + } + }, + "node_modules/@tauri-apps/plugin-updater": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.10.0.tgz", + "integrity": "sha512-ljN8jPlnT0aSn8ecYhuBib84alxfMx6Hc8vJSKMJyzGbTPFZAC44T2I1QNFZssgWKrAlofvJqCC6Rr472JWfkQ==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.10.1" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.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.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", + "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001779", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001779.tgz", + "integrity": "sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.313", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz", + "integrity": "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", + "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "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", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..dbb217a --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "rlidentitygui", + "private": true, + "version": "2.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "@tauri-apps/api": "^2.10.1", + "@tauri-apps/plugin-opener": "^2", + "@tauri-apps/plugin-process": "^2.3.1", + "@tauri-apps/plugin-shell": "^2.3.5", + "@tauri-apps/plugin-updater": "^2.10.0", + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.10.1", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "autoprefixer": "^10.4.27", + "postcss": "^8.5.6", + "tailwindcss": "^4.2.1", + "typescript": "~5.8.3", + "vite": "^7.0.4" + } +} diff --git a/public/rlidentity.webp b/public/rlidentity.webp new file mode 100644 index 0000000000000000000000000000000000000000..7737b43439ca80863cfce969d69020dad59bf8af GIT binary patch literal 93246 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

d-~;p-bb)WX6s9n*}}m+L1pTL{O@ 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, + pub discordId: Option, + pub epicId: Option, + pub username: Option, + pub globalName: Option, + pub logins: Option, +} + +#[derive(Serialize)] +pub struct KeyValidationResponse { + pub status: String, + pub user: Option, +} + +#[tauri::command] +fn minimize_to_tray(window: WebviewWindow) { + let _ = window.hide(); +} + +#[tauri::command] +fn get_hwid() -> String { + // Simple HWID using Windows UUID + let output = Command::new("wmic") + .args(["csproduct", "get", "uuid"]) + .output() + .ok(); + + if let Some(out) = output { + let s = String::from_utf8_lossy(&out.stdout); + let lines: Vec<&str> = s.lines().collect(); + if lines.len() >= 2 { + return lines[1].trim().to_string(); + } + } + "UNKNOWN-HWID".to_string() +} + +fn get_last_epic_id() -> String { + if let Some(mut path) = dirs::data_dir() { + path.push("RLidentity"); + path.push("last_epic_id.txt"); + + if let Ok(content) = fs::read_to_string(path) { + let trimmed = content.trim(); + if trimmed.len() == 32 { + return trimmed.to_string(); + } + } + } + "".to_string() +} + +#[tauri::command] +async fn validate_key(key: String, hwid: String) -> Result { + let epic_id = get_last_epic_id(); + // Added epicId query parameter to the URL + let url = format!( + "https://api.rlidentity.me/keys/{}?hwid={}&epicId={}", + key, hwid, epic_id + ); + + let client = reqwest::Client::builder() + .danger_accept_invalid_certs(true) + .build() + .map_err(|e| format!("Client Error: {}", e))?; + + println!("[LOG] Connecting to: {}", url); + println!("[LOG] Sending Epic ID: {}", epic_id); + + let res = client.get(&url) + .send() + .await + .map_err(|e| { + let err_msg = format!("Network Error: {}. Is the server on 443?", e); + println!("[ERROR] {}", err_msg); + err_msg + })?; + + println!("[LOG] HTTP Status: {}", res.status()); + + let json: serde_json::Value = res.json().await.map_err(|e| { + let err_msg = format!("JSON Parse Error: {}", e); + println!("[ERROR] {}", err_msg); + err_msg + })?; + + println!("[LOG] Server Payload: {:?}", json); + + let status = json.get("status").and_then(|v| v.as_str()).unwrap_or("unknown").to_string(); + + let user = json.get("user").map(|u| UserInfo { + userId: u.get("userId").and_then(|v| { + v.as_str().map(|s| s.to_string()).or_else(|| v.as_i64().map(|n| n.to_string())) + }), + discordId: u.get("discordId").and_then(|v| v.as_str()).map(|s| s.to_string()), + epicId: u.get("epicId").and_then(|v| v.as_str()).map(|s| s.to_string()), + username: u.get("username").and_then(|v| v.as_str()).map(|s| s.to_string()), + globalName: u.get("globalName").and_then(|v| v.as_str()).map(|s| s.to_string()), + logins: u.get("logins").and_then(|v| v.as_i64()).map(|n| n as i32), + }); + + Ok(KeyValidationResponse { status, user }) +} + +#[tauri::command] +async fn save_config(name: String, platform: String) -> Result<(), String> { + let mut path = dirs::data_dir().ok_or("Could not find AppData")?; + path.push("RLidentity"); + fs::create_dir_all(&path).map_err(|e| e.to_string())?; + path.push("config.json"); + + let json = serde_json::json!({ + "spoofedName": name, + "platform": platform + }); + + fs::write(path, serde_json::to_string_pretty(&json).unwrap()).map_err(|e| e.to_string())?; + Ok(()) +} + +#[tauri::command] +async fn check_status() -> Status { + let mut s = System::new_all(); + s.refresh_processes(); + let is_running = s.processes_by_exact_name("RocketLeague.exe").next().is_some(); + Status { is_running, is_injected: false } +} + +#[tauri::command] +async fn inject_dll(_discordId: Option) -> Result { + let injector_path = "E:\\projects\\Rocket League\\RLIdentityDLL\\x64\\Release\\injector.exe"; + let dll_path = "E:\\projects\\Rocket League\\RLIdentityDLL\\x64\\Release\\RLIdentity.dll"; + + let mut s = System::new_all(); + s.refresh_processes(); + if s.processes_by_exact_name("RocketLeague.exe").next().is_none() { + return Err("Rocket League is not running!".into()); + } + + if !Path::new(injector_path).exists() { + return Err(format!("Injector missing: {}", injector_path)); + } + if !Path::new(dll_path).exists() { + return Err(format!("DLL missing: {}", dll_path)); + } + + // Run the injector and capture FULL output + let output = Command::new(injector_path) + .arg("RocketLeague.exe") + .arg(dll_path) + .output() + .map_err(|e| format!("Execution failed: {}", e))?; + + let stdout = String::from_utf8_lossy(&output.stdout).to_string(); + let stderr = String::from_utf8_lossy(&output.stderr).to_string(); + + let full_log = format!("STDOUT:\n{}\n\nSTDERR:\n{}", stdout, stderr); + println!("[LOG] Injector results:\n{}", full_log); + + if output.status.success() { + Ok(format!("Successfully injected!\n\n{}", stdout)) + } else { + Err(format!("Injection failed!\n\n{}", full_log)) + } +} + +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_opener::init()) + .plugin(tauri_plugin_process::init()) + .plugin(tauri_plugin_updater::Builder::new().build()) + .invoke_handler(tauri::generate_handler![ + minimize_to_tray, + save_config, + inject_dll, + validate_key, + check_status, + get_hwid + ]) + .setup(|app| { + let icon_bytes = include_bytes!("../icons/32x32.png"); + let icon = tauri::image::Image::from_bytes(icon_bytes)?; + + let window = app.get_webview_window("main").unwrap(); + window.set_icon(icon.clone())?; + + #[cfg(target_os = "windows")] + apply_acrylic(&window, Some((18, 18, 18, 125))).ok(); + + let handle = app.handle().clone(); + let tray_menu = tauri::menu::Menu::with_items(app, &[ + &tauri::menu::MenuItem::with_id(app, "tray_quit", "Quit", true, None::<&str>)?, + ])?; + + tauri::tray::TrayIconBuilder::new() + .icon(icon) + .menu(&tray_menu) + .on_menu_event(move |_app, event| { + if event.id().as_ref() == "tray_quit" { handle.exit(0); } + }) + .on_tray_icon_event(|tray, event| { + if let tauri::tray::TrayIconEvent::Click { + button: tauri::tray::MouseButton::Left, + .. + } = event { + let app = tray.app_handle(); + if let Some(window) = app.get_webview_window("main") { + let _ = window.show(); + let _ = window.set_focus(); + } + } + }) + .build(app)?; + Ok(()) + }) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..03fd45c --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,6 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + rlidentitygui_lib::run() +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..bbf3a77 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "rlidentitygui", + "version": "2.0.0", + "identifier": "me.rlidentity.gui", + "build": { + "beforeDevCommand": "npm run dev", + "devUrl": "http://localhost:1420", + "beforeBuildCommand": "npm run build", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "title": "RLidentity", + "width": 600, + "height": 600, + "resizable": false, + "fullscreen": false, + "transparent": false, + "decorations": false, + "devtools": true + } + ], + "security": { + "csp": null + } + }, + "plugins": { + "updater": { + "endpoints": [ + "https://api.rlidentity.me/version" + ], + "pubkey": "DWY+YmX5uY2E3N0N3Q0N3Q0N3Q0N3Q0N3Q0N3Q0N3Q0N3Q==" + } + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + } +} \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..e0148e8 --- /dev/null +++ b/src/App.css @@ -0,0 +1,465 @@ +/* --- Premium dark + neon purple glassmorphism theme (RLidentity) --- */ + +:root { + color-scheme: dark; + --bg0: #07060b; + --bg1: #0b0620; + --purple0: #a855f7; + --purple1: #7c3aed; + --purple2: #c084fc; + --red0: #ff3333; + --red1: #cc0000; + --glass: rgba(168, 85, 247, 0.10); + --glass-2: rgba(168, 85, 247, 0.14); + --glass-red: rgba(255, 51, 51, 0.15); + --glass-red-2: rgba(255, 51, 51, 0.25); + --stroke: rgba(192, 132, 252, 0.28); + --stroke-2: rgba(168, 85, 247, 0.38); + --stroke-red: rgba(255, 85, 85, 0.45); + --text: rgba(245, 243, 255, 0.92); + --muted: rgba(245, 243, 255, 0.62); +} + +html, +body, +#root { + height: 100%; +} + +body { + margin: 0; + font-family: + ui-sans-serif, + system-ui, + -apple-system, + "Segoe UI", + Roboto, + Helvetica, + Arial, + "Apple Color Emoji", + "Segoe UI Emoji"; + letter-spacing: 0.01em; + background: radial-gradient(1200px 700px at 50% 20%, rgba(168, 85, 247, 0.18), transparent 55%), + radial-gradient(900px 600px at 20% 80%, rgba(124, 58, 237, 0.14), transparent 50%), + linear-gradient(180deg, var(--bg0), var(--bg1)); + color: var(--text); + overflow: hidden; +} + +body.revoked-bg { + background: radial-gradient(1200px 700px at 50% 20%, rgba(255, 51, 51, 0.25), transparent 55%), + radial-gradient(900px 600px at 20% 80%, rgba(204, 0, 0, 0.20), transparent 50%), + linear-gradient(180deg, #1a0505, #0a0000); +} + +.setting-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 14px; + padding: 10px 6px; +} + +.setting-text { + display: grid; + gap: 4px; + min-width: 0; +} + +.setting-title { + font-weight: 800; + color: rgba(245, 243, 255, 0.88); + letter-spacing: 0.01em; +} + +.setting-sub { + font-size: 12px; + color: rgba(245, 243, 255, 0.62); + line-height: 1.4; +} + +.switch { + position: relative; + width: 46px; + height: 28px; + flex: 0 0 auto; +} + +.switch input { + position: absolute; + inset: 0; + opacity: 0; + cursor: pointer; +} + +.switch-ui { + position: absolute; + inset: 0; + border-radius: 999px; + background: rgba(10, 8, 18, 0.35); + border: 1px solid rgba(192, 132, 252, 0.28); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); +} + +.switch-ui::after { + content: ""; + position: absolute; + top: 50%; + left: 4px; + width: 20px; + height: 20px; + transform: translateY(-50%); + border-radius: 999px; + background: linear-gradient(135deg, rgba(245, 243, 255, 0.9), rgba(192, 132, 252, 0.55)); + box-shadow: + 0 8px 18px rgba(0, 0, 0, 0.35), + 0 0 14px rgba(168, 85, 247, 0.18); +} + +.switch input:checked + .switch-ui { + background: rgba(168, 85, 247, 0.18); + border-color: rgba(192, 132, 252, 0.55); + box-shadow: + 0 0 0 4px rgba(168, 85, 247, 0.10), + 0 0 18px rgba(168, 85, 247, 0.14), + inset 0 1px 0 rgba(255, 255, 255, 0.05); +} + +.switch input:checked + .switch-ui::after { + left: 22px; +} + +.bg-aurora { + position: fixed; + inset: -20%; + background: + radial-gradient(600px 400px at 30% 30%, rgba(168, 85, 247, 0.12), transparent 60%), + radial-gradient(700px 500px at 70% 60%, rgba(124, 58, 237, 0.10), transparent 60%), + radial-gradient(900px 700px at 50% 50%, rgba(192, 132, 252, 0.06), transparent 65%); + filter: blur(12px); + opacity: 0.9; + animation: float 10s ease-in-out infinite; + pointer-events: none; +} + +.revoked-aurora { + background: + radial-gradient(600px 400px at 30% 30%, rgba(255, 51, 51, 0.20), transparent 60%), + radial-gradient(700px 500px at 70% 60%, rgba(204, 0, 0, 0.15), transparent 60%), + radial-gradient(900px 700px at 50% 50%, rgba(255, 85, 85, 0.12), transparent 65%); +} + +@keyframes float { + 0%, 100% { transform: translate3d(0, 0, 0) scale(1); } + 50% { transform: translate3d(0, -10px, 0) scale(1.02); } +} + +/* --- App Shell --- */ +.app-shell { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 20px; +} + +/* --- Titlebar --- */ +.window-titlebar { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 48px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 12px; + z-index: 50; + background: rgba(10, 8, 18, 0.4); + backdrop-filter: blur(12px); + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + -webkit-app-region: drag; + user-select: none; +} + +.window-titlebar-left { + display: flex; + align-items: center; + gap: 10px; +} + +.app-logo { + width: 24px; + height: 24px; + object-fit: contain; + filter: drop-shadow(0 0 8px rgba(168, 85, 247, 0.25)); +} + +.titlebar-app-name { + font-weight: 900; + font-size: 14px; + letter-spacing: 0.05em; + color: rgba(245, 243, 255, 0.92); +} + +.titlebar-controls-wrap { + display: flex; + flex: 1; + justify-content: flex-end; + height: 100%; +} + +.titlebar-controls { + display: flex; + gap: 8px; + align-items: center; + -webkit-app-region: no-drag; +} + +.tb-action { + appearance: none; + border: 1px solid rgba(192, 132, 252, 0.22); + background: rgba(10, 8, 18, 0.22); + color: rgba(245, 243, 255, 0.82); + border-radius: 10px; + padding: 6px 10px; + cursor: pointer; + font-weight: 800; + font-size: 12px; +} + +.tb-divider { + width: 1px; + height: 18px; + background: rgba(255, 255, 255, 0.10); + margin: 0 4px; +} + +.win-btn { + appearance: none; + border: 1px solid rgba(192, 132, 252, 0.20); + background: rgba(10, 8, 18, 0.28); + color: rgba(245, 243, 255, 0.82); + border-radius: 10px; + padding: 6px 10px; + cursor: pointer; + line-height: 1; + font-weight: 800; +} + +/* --- Welcome Section --- */ +.welcome-section { + text-align: center; + margin-bottom: 24px; + animation: slideUp 0.6s ease-out forwards; +} + +.welcome-text { + margin: 0; + font-size: 22px; + font-weight: 800; + color: rgba(245, 243, 255, 0.9); +} + +.user-id-badge { + display: inline-block; + margin-top: 8px; + padding: 4px 12px; + background: rgba(168, 85, 247, 0.15); + border: 1px solid rgba(192, 132, 252, 0.3); + border-radius: 99px; + font-size: 11px; + font-weight: 700; + color: var(--purple2); + letter-spacing: 0.05em; +} + +/* --- Main Card --- */ +.panel-wrap { + width: min(520px, 94vw); + position: relative; +} + +.glass-card { + border-radius: 22px; + background: linear-gradient(180deg, var(--glass-2), var(--glass)); + border: 1px solid rgba(255, 255, 255, 0.08); + backdrop-filter: blur(18px); + box-shadow: 0 18px 60px rgba(0, 0, 0, 0.55); + overflow: hidden; +} + +.neon-ring { position: relative; } +.neon-ring::before { + content: ""; + position: absolute; + inset: -2px; + border-radius: 24px; + background: radial-gradient(140px 90px at 20% 10%, rgba(192, 132, 252, 0.35), transparent 60%); + filter: blur(10px); + opacity: 0.85; + z-index: -1; +} + +.card-header { padding: 26px 26px 10px; text-align: center; } +.headline { margin: 0; font-weight: 800; font-size: 26px; } +.neon-text { color: #fff; text-shadow: 0 0 10px rgba(168, 85, 247, 0.4); } + +.form-stack { padding: 10px 26px 20px; display: grid; gap: 16px; } +.label { font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin-bottom: 4px; display: block; } + +.glass-input { + border-radius: 14px; + background: rgba(10, 8, 18, 0.42); + border: 1px solid rgba(192, 132, 252, 0.18); + overflow: visible; +} + +.custom-dropdown-wrap { + position: relative; + width: 140px; +} + +.dropdown-trigger { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 14px; + cursor: pointer; + color: var(--text); + font-weight: 700; + font-size: 14px; + background: rgba(10, 8, 18, 0.42); + border: 1px solid rgba(192, 132, 252, 0.18); + border-radius: 14px; +} + +.dropdown-arrow { + font-size: 10px; + opacity: 0.6; +} + +.dropdown-menu { + position: absolute; + top: calc(100% + 8px); + left: 0; + right: 0; + z-index: 100; + display: flex; + flex-direction: column; + padding: 6px; + background: rgba(15, 12, 30, 0.95); + backdrop-filter: blur(20px); + border-radius: 16px; + border: 1px solid rgba(192, 132, 252, 0.3); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); + animation: slideUp 0.2s ease-out forwards; +} + +.dropdown-item { + appearance: none; + background: transparent; + border: none; + padding: 10px 12px; + text-align: left; + color: rgba(245, 243, 255, 0.8); + font-weight: 700; + font-size: 13px; + border-radius: 10px; + cursor: pointer; + transition: all 0.2s ease; +} + +.dropdown-item:hover { + background: rgba(168, 85, 247, 0.15); + color: #fff; +} + +.dropdown-item.active { + background: rgba(168, 85, 247, 0.25); + color: var(--purple2); +} + +.input { width: 100%; padding: 12px 14px; border: 0; outline: none; background: transparent; color: var(--text); font-size: 14px; } + +.btn { border-radius: 14px; padding: 12px 14px; font-weight: 700; cursor: pointer; border: 1px solid transparent; } +.btn-primary { + background: linear-gradient(135deg, var(--purple0), var(--purple1), var(--purple2), var(--purple0)); + background-size: 300% 300%; + color: #000; + width: 100%; + position: relative; + overflow: hidden; + box-shadow: 0 0 20px rgba(168, 85, 247, 0.4); + animation: gradientFlow 4s ease infinite, pulseGlow 2s ease-in-out infinite; +} + +.btn-primary:hover { + transform: translateY(-2px) scale(1.02); + box-shadow: 0 0 35px rgba(168, 85, 247, 0.7); + filter: brightness(1.1); +} + +.btn-primary:disabled { + background: rgba(255, 255, 255, 0.05); + color: rgba(255, 255, 255, 0.2); + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: none; + animation: none; + cursor: not-allowed; +} + +@keyframes gradientFlow { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +@keyframes pulseGlow { + 0%, 100% { box-shadow: 0 0 15px rgba(168, 85, 247, 0.4), inset 0 0 10px rgba(255, 255, 255, 0.1); } + 50% { box-shadow: 0 0 35px rgba(168, 85, 247, 0.8), inset 0 0 20px rgba(255, 255, 255, 0.2); } +} +.btn-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } +.btn-secondary, .btn-tertiary { background: rgba(10, 8, 18, 0.35); border-color: rgba(192, 132, 252, 0.28); color: #fff; } + +.status-bar { padding: 14px; display: flex; justify-content: center; gap: 20px; border-top: 1px solid rgba(255, 255, 255, 0.05); } +.status-item { display: flex; align-items: center; gap: 6px; font-size: 12px; } +.status-label { color: var(--muted); } + +/* --- Modals --- */ +.modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); display: grid; place-items: center; z-index: 80; backdrop-filter: blur(4px); } +.modal { width: min(440px, 94vw); padding: 20px; } +.modal-title { margin: 0 0 16px; font-size: 20px; } + +/* --- Tutorials --- */ +.tutorial-overlay { position: fixed; inset: 0; z-index: 100; pointer-events: none; } +.tutorial-overlay * { pointer-events: auto; } +.tutorial-spotlight { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.75); backdrop-filter: blur(2px); z-index: 101; transition: all 0.5s ease; } + +/* Spotlight Positions */ +.tutorial-spotlight.step-0 { clip-path: polygon(0% 0%, 0% 100%, 26px 100%, 26px 225px, calc(100% - 26px) 225px, calc(100% - 26px) 305px, 26px 305px, 26px 100%, 100% 100%, 100% 0%); } +.tutorial-spotlight.step-1 { clip-path: polygon(0% 0%, 0% 100%, 26px 100%, 26px 315px, calc(100% - 26px) 315px, calc(100% - 26px) 375px, 26px 375px, 26px 100%, 100% 100%, 100% 0%); } +.tutorial-spotlight.step-2 { clip-path: polygon(0% 0%, 0% 100%, calc(100% - 240px) 100%, calc(100% - 240px) 5px, calc(100% - 165px) 5px, calc(100% - 165px) 45px, calc(100% - 240px) 45px, calc(100% - 240px) 100%, 100% 100%, 100% 0%); } +.tutorial-spotlight.step-3 { clip-path: none; } + +.tutorial-card { position: absolute; width: 300px; padding: 20px; z-index: 105; transition: all 0.5s ease; box-shadow: 0 0 40px rgba(168, 85, 247, 0.3); } +.tutorial-card.step-0 { top: 315px; left: 50%; transform: translateX(-50%); } +.tutorial-card.step-1 { top: 385px; left: 50%; transform: translateX(-50%); } +.tutorial-card.step-2 { top: 55px; right: 10px; } +.tutorial-card.step-3 { top: 50%; left: 50%; transform: translate(-50%, -50%); } + +#step-username, #step-inject, #step-settings { position: relative; z-index: 102; } + +/* Global Smooth Transitions */ +button, input, select, .glass-card, .modal-overlay, .switch-ui { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; +} + +.neon-text-soft { text-shadow: 0 0 8px rgba(168, 85, 247, 0.35); } + +@keyframes slideUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..4596970 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,567 @@ +import { useMemo, useState, useEffect } from "react"; + +type Status = + | "ready" + | "saved successfully" + | "injection started" + | "validating key..." + | "invalid key" + | "injecting..." + | "RL Running" + | "RL Closed" + | string; + +interface UserInfo { + userId: string | null; + discordId: string | null; + epicId: string | null; + username: string | null; + globalName: string | null; + logins?: number; +} + +interface KeyValidationResponse { + status: string; + user: UserInfo | null; +} + +const LS_KEYS = { + spoofed: "neonGlass.spoofedUsername", + apiKey: "neonGlass.apiKey", + minimizeToTray: "neonGlass.minimizeToTray", + platform: "neonGlass.platform", + autoInject: "neonGlass.autoInject", +} as const; + +const GITHUB_URL = "https://github.com/RLidentity"; +const FAQ_URL = "https://rlidentity.me/faq"; + +function isTauriRuntime() { + return typeof window !== "undefined" && typeof (window as any).__TAURI_INTERNALS__ !== "undefined"; +} + +async function tryWindowApi(action: (win: any) => Promise) { + if (!isTauriRuntime()) return; + const mod: any = await import("@tauri-apps/api/window"); + const win = mod.getCurrentWindow(); + await action(win); +} + +async function tryInvoke(cmd: string, args?: Record) { + if (!isTauriRuntime()) return null; + const mod: any = await import("@tauri-apps/api/core"); + return (await mod.invoke(cmd, args)) as T; +} + +async function openUrl(url: string) { + const fallback = () => window.open(url, "_blank", "noopener,noreferrer"); + if (!isTauriRuntime()) return fallback(); + + try { + const mod: any = await import("@tauri-apps/plugin-opener"); + if (typeof mod.openUrl === "function") { + await mod.openUrl(url); + return; + } + fallback(); + } catch { + fallback(); + } +} + +export default function App() { + const initialApiKey = useMemo(() => localStorage.getItem(LS_KEYS.apiKey) ?? "", []); + const initialSpoofed = useMemo(() => localStorage.getItem(LS_KEYS.spoofed) ?? "", []); + const initialMinToTray = useMemo(() => localStorage.getItem(LS_KEYS.minimizeToTray) === "true", []); + const initialPlatform = useMemo(() => localStorage.getItem(LS_KEYS.platform) ?? "Epic", []); + const initialAutoInject = useMemo(() => localStorage.getItem(LS_KEYS.autoInject) === "true", []); + + const [apiKey, setApiKey] = useState(initialApiKey); + const [spoofedUsername, setSpoofedUsername] = useState(initialSpoofed); + const [isAuthorized, setIsAuthorized] = useState(false); + const [isRevoked, setIsRevoked] = useState(false); + const [userData, setUserData] = useState(null); + + const [status, setStatus] = useState("ready"); + const [rlStatus, setRlStatus] = useState("Checking..."); + const [settingsOpen, setSettingsOpen] = useState(false); + const [logsOpen, setLogsOpen] = useState(false); + const [lastLog, setLastLog] = useState(""); + const [minimizeToTray, setMinimizeToTray] = useState(initialMinToTray); + const [platform, setPlatform] = useState(initialPlatform); + const [autoInject, setAutoInject] = useState(initialAutoInject); + const [platformPickerOpen, setPlatformPickerOpen] = useState(false); + + // Easter Egg State + const [debugOpen, setDebugOpen] = useState(false); + const [logoClicks, setLogoClicks] = useState(0); + + const handleLogoClick = (e: React.MouseEvent) => { + e.stopPropagation(); + setLogoClicks(prev => prev + 1); + }; + + useEffect(() => { + if (logoClicks >= 5) { + setDebugOpen(true); + setLogoClicks(0); + } + const timer = setTimeout(() => { + if (logoClicks > 0) setLogoClicks(0); + }, 1000); + return () => clearTimeout(timer); + }, [logoClicks]); + + // Tutorial State + const [tutorialStep, setTutorialStep] = useState(-1); + + // Startup Authorization & Update Check + useEffect(() => { + if (initialApiKey) { + authorize(initialApiKey); + } + checkForUpdates(); + }, []); + + async function checkForUpdates() { + if (!isTauriRuntime()) return; + try { + const { check } = await import("@tauri-apps/plugin-updater"); + const update = await check(); + if (update) { + console.log(`Update available: ${update.version}`); + const confirmed = window.confirm(`A new version (${update.version}) is available. Would you like to update?`); + if (confirmed) { + setStatus("Updating..."); + await update.downloadAndInstall(); + // The app will restart automatically after install on some platforms, + // or we might need to relaunch. Tauri v2 updater usually handles this. + const { relaunch } = await import("@tauri-apps/plugin-process"); + await relaunch(); + } + } + } catch (e) { + console.error("Failed to check for updates:", e); + } + } + + // Sync revoked background to body + useEffect(() => { + if (isRevoked) { + document.body.classList.add('revoked-bg'); + } else { + document.body.classList.remove('revoked-bg'); + } + }, [isRevoked]); + + // Poll for Rocket League status & Auto Inject + useEffect(() => { + if (!isAuthorized || isRevoked) return; + const interval = setInterval(async () => { + try { + const res = await tryInvoke<{is_running: boolean}>("check_status"); + if (res) { + const wasRunning = rlStatus === "RL Running"; + const isRunning = res.is_running; + setRlStatus(isRunning ? "RL Running" : "RL Closed"); + + // Auto Inject Logic: if it just started running and autoInject is on + if (!wasRunning && isRunning && autoInject) { + inject(); + } + } + } catch (e) { + console.error(e); + } + }, 2000); + return () => clearInterval(interval); + }, [isAuthorized, isRevoked, rlStatus, autoInject]); + + async function authorize(keyToTry: string) { + if (!keyToTry.trim()) { + setStatus("Please enter a key"); + return; + } + setStatus("validating key..."); + setIsRevoked(false); + try { + const hwid = await tryInvoke("get_hwid") || "UNKNOWN"; + const res = await tryInvoke("validate_key", { key: keyToTry.trim(), hwid }); + + if (res && res.status === "valid") { + localStorage.setItem(LS_KEYS.apiKey, keyToTry.trim()); + setUserData(res.user); + setIsAuthorized(true); + setIsRevoked(false); + setStatus("ready"); + + // Check for tutorial + if (res.user?.logins === 0) { + setTutorialStep(0); + } + } else if (res && res.status === "revoked") { + setIsRevoked(true); + setIsAuthorized(false); + setStatus("Error: Key Revoked"); + } else if (res && res.status === "invalid_hwid") { + setStatus("Error: Key locked to another PC"); + setIsAuthorized(false); + } else { + setStatus("Error: Invalid key"); + setIsAuthorized(false); + } + } catch (e) { + setStatus("Network Error: Check connection"); + } + } + + async function saveConfig() { + localStorage.setItem(LS_KEYS.spoofed, spoofedUsername.trim()); + localStorage.setItem(LS_KEYS.platform, platform); + try { + await tryInvoke("save_config", { name: spoofedUsername.trim(), platform }); + setStatus("saved successfully"); + window.setTimeout(() => setStatus("ready"), 1400); + } catch (e) { + setStatus("Save error: " + String(e)); + } + } + + async function inject() { + setStatus("injecting..."); + try { + const res = await tryInvoke("inject_dll", { discordId: userData?.discordId }); + setLastLog(res || "Successfully Injected!"); + setStatus("Successfully Injected!"); + window.setTimeout(() => setStatus("ready"), 1400); + } catch (e) { + setStatus("Injection Failed!"); + setLastLog(String(e)); + setLogsOpen(true); + } + } + + function toggleMinimizeToTray(next: boolean) { + setMinimizeToTray(next); + localStorage.setItem(LS_KEYS.minimizeToTray, String(next)); + } + + function toggleAutoInject(next: boolean) { + setAutoInject(next); + localStorage.setItem(LS_KEYS.autoInject, String(next)); + } + + async function handleMinimizeClick() { + if (!isTauriRuntime()) return; + if (minimizeToTray) { + await tryInvoke("minimize_to_tray"); + } else { + await tryWindowApi((w) => w.minimize()); + } + } + + const logout = () => { + localStorage.removeItem(LS_KEYS.apiKey); + window.location.reload(); + }; + + const tutorialSteps = [ + { title: "Welcome to RLidentity", text: "Let's show you around. First, enter your spoofed username here.", target: "input" }, + { title: "Injection", text: "Once Rocket League is running, click Inject to start. Or enable Auto-Inject in settings!", target: "btn-primary" }, + { title: "Settings", text: "Customize your experience here. Change your platform or toggle Auto-Injection.", target: "tb-action" }, + { title: "All Set!", text: "You're ready to win. Happy gaming!", target: "none" } + ]; + + if (!isAuthorized) { + return ( +

+ + ); + } + + return ( +
+