diff --git a/.gitignore b/.gitignore index 7ceb59f..e598a86 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ dist-ssr *.sln *.sw? .env + +src-tauri/binaries/hwi-* diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..bae4b7c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 bithyve + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index db4a448..3dbe37f 100644 --- a/README.md +++ b/README.md @@ -105,3 +105,12 @@ We use several tools to maintain code quality and consistency: You can find the CI configuration in `.github/workflows/ci.yml`. Before submitting a pull request, please ensure that your code passes all linting and formatting checks. + +## License + +This project is licensed under the **MIT License.** + +## Community + +- Follow us on [Twitter](https://twitter.com/bitcoinKeeper_) +- Join our [Telegram](https://t.me/bitcoinkeeper) diff --git a/package-lock.json b/package-lock.json index 8918920..d4dbb2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,13 @@ { "name": "keeper-desktop", - "version": "0.1.0", + "version": "0.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "keeper-desktop", - "version": "0.1.0", + "version": "0.1.2", + "hasInstallScript": true, "dependencies": { "@tanstack/react-query": "^5.52.1", "@tauri-apps/api": "^1", @@ -17,18 +18,28 @@ }, "devDependencies": { "@tauri-apps/cli": "^1", + "@types/adm-zip": "^0.5.5", + "@types/node": "^22.5.4", + "@types/openpgp": "^4.4.22", "@types/qrcode.react": "^1.0.5", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", + "@types/tar": "^6.1.13", "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^8.3.0", "@vitejs/plugin-react": "^4.2.1", + "adm-zip": "^0.5.16", + "axios": "^1.7.7", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", + "openpgp": "^5.11.2", "prettier": "^3.3.3", + "rimraf": "^6.0.1", + "tar": "^7.4.3", + "tsx": "^4.19.1", "typescript": "^5.2.2", "vite": "^5.3.1" } @@ -616,6 +627,22 @@ "node": ">=12" } }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/openbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", @@ -802,6 +829,71 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@isaacs/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -885,6 +977,16 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -1339,6 +1441,15 @@ "node": ">= 10" } }, + "node_modules/@types/adm-zip": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.5.tgz", + "integrity": "sha512-YCGstVMjc4LTY5uK9/obvxBya93axZOVOyf2GSUulADzmLhYE45u2nAssCs/fWBs1Ifq5Vat75JTPwd5XZoPJw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1380,12 +1491,39 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/openpgp": { + "version": "4.4.22", + "resolved": "https://registry.npmjs.org/@types/openpgp/-/openpgp-4.4.22.tgz", + "integrity": "sha512-afQsbrWITIcSI3OBBJtTA87H5Av2/bjRn6YBHD+abxqJVpD2HRwjP6DL7drboJcuizwcnwnVKSupXYYdImdIoQ==", + "dev": true, + "dependencies": { + "@types/bn.js": "*" + } + }, "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", @@ -1420,6 +1558,16 @@ "@types/react": "*" } }, + "node_modules/@types/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "minipass": "^4.0.0" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz", @@ -1684,6 +1832,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "dev": true, + "engines": { + "node": ">=12.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1857,6 +2014,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1872,12 +2047,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1994,6 +2186,15 @@ "node": ">=4" } }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2009,6 +2210,18 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2149,6 +2362,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2161,12 +2383,24 @@ "node": ">=6.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.5.13", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", "dev": true }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -2833,12 +3067,69 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -2848,6 +3139,36 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2949,22 +3270,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2982,6 +3317,82 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/glob/node_modules/lru-cache": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/glob/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -3308,6 +3719,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -3545,9 +3965,24 @@ "set-function-name": "^2.0.1" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.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==" }, "node_modules/js-yaml": { @@ -3704,6 +4139,33 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3716,6 +4178,111 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", + "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/minizlib/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/minizlib/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minizlib/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3858,6 +4425,18 @@ "wrappy": "1" } }, + "node_modules/openpgp": { + "version": "5.11.2", + "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.11.2.tgz", + "integrity": "sha512-f8dJFVLwdkvPvW3VPFs6q9Vs2+HNhdvwls7a/MIFcQUB+XiQzRe7alfa3RtwfGJU7oUDDMAWPZ0nYsHa23Az+A==", + "dev": true, + "dependencies": { + "asn1.js": "^5.0.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -3905,6 +4484,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3950,6 +4535,37 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -4052,6 +4668,12 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4222,6 +4844,15 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -4233,16 +4864,19 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4341,6 +4975,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -4429,6 +5069,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -4438,6 +5090,71 @@ "node": ">=0.10.0" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -4535,6 +5252,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4587,6 +5317,41 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4632,45 +5397,471 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/tsx": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1" + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">= 0.8.0" + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], "dev": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" + "node": ">=18" } }, - "node_modules/typed-array-byte-length": { + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", @@ -4757,6 +5948,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", @@ -4958,6 +6155,133 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 7c10e71..7470895 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "keeper-desktop", "private": true, - "version": "0.1.0", + "version": "0.1.2", "type": "module", "scripts": { "dev": "vite", @@ -12,6 +12,8 @@ "lint:fix": "eslint 'src/**/*.{js,jsx,ts,tsx}' --fix", "format": "prettier --write 'src/**/*.{js,jsx,ts,tsx,json,css,md}'", "format:check": "prettier --check 'src/**/*.{js,jsx,ts,tsx,json,css,md}'", + "get-hwi": "rimraf src-tauri/binaries/hwi-* && tsx scripts/get-hwi.ts", + "postinstall": "tsx scripts/get-hwi.ts", "tauri:lint": "cd src-tauri && cargo clippy --all-targets --all-features -- -D warnings", "tauri:format": "cd src-tauri && cargo fmt", "tauri:format:check": "cd src-tauri && cargo fmt -- --check" @@ -26,18 +28,28 @@ }, "devDependencies": { "@tauri-apps/cli": "^1", + "@types/adm-zip": "^0.5.5", + "@types/node": "^22.5.4", + "@types/openpgp": "^4.4.22", "@types/qrcode.react": "^1.0.5", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", + "@types/tar": "^6.1.13", "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^8.3.0", "@vitejs/plugin-react": "^4.2.1", + "adm-zip": "^0.5.16", + "axios": "^1.7.7", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", + "openpgp": "^5.11.2", "prettier": "^3.3.3", + "rimraf": "^6.0.1", + "tar": "^7.4.3", + "tsx": "^4.19.1", "typescript": "^5.2.2", "vite": "^5.3.1" } diff --git a/scripts/get-hwi.ts b/scripts/get-hwi.ts new file mode 100644 index 0000000..04f52cb --- /dev/null +++ b/scripts/get-hwi.ts @@ -0,0 +1,292 @@ +import fs from "fs/promises"; +import path from "path"; +import axios from "axios"; +import { createHash } from "crypto"; +import { fileURLToPath } from "url"; +import AdmZip from "adm-zip"; +import * as tar from "tar"; +import * as openpgp from "openpgp"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const HWI_VERSION = "3.1.0"; +const HWI_BASE_URL = `https://github.com/bitcoin-core/HWI/releases/download/${HWI_VERSION}`; +const BINARY_DIR = path.join(__dirname, "..", "src-tauri", "binaries"); +const PUBLIC_KEY_PATH = path.join(__dirname, "resources", "achow-key.asc"); +const SHASUM_FILENAME = "SHA256SUMS.txt.asc"; + +const BINARIES: Record< + string, + Array<{ filename: string; targetName: string }> +> = { + win32: [ + { + filename: `hwi-${HWI_VERSION}-windows-x86_64.zip`, + targetName: "hwi-x86_64-pc-windows-msvc.exe", + }, + ], + darwin: [ + { + filename: `hwi-${HWI_VERSION}-mac-arm64.tar.gz`, + targetName: "hwi-aarch64-apple-darwin", + }, + { + filename: `hwi-${HWI_VERSION}-mac-x86_64.tar.gz`, + targetName: "hwi-x86_64-apple-darwin", + }, + ], + linux: [ + { + filename: `hwi-${HWI_VERSION}-linux-aarch64.tar.gz`, + targetName: "hwi-aarch64-unknown-linux-gnu", + }, + { + filename: `hwi-${HWI_VERSION}-linux-x86_64.tar.gz`, + targetName: "hwi-x86_64-unknown-linux-gnu", + }, + ], +}; + +async function downloadFile(url: string, outputPath: string): Promise { + try { + const response = await axios.get(url, { responseType: "arraybuffer" }); + await fs.writeFile(outputPath, response.data); + } catch (error) { + console.error(`Failed to download ${url}: ${error.message}`); + throw error; + } +} + +async function verifyShasumSignature(signaturePath: string): Promise { + try { + const clearsignedMessage = await fs.readFile(signaturePath, "utf8"); + const publicKeyArmored = await fs.readFile(PUBLIC_KEY_PATH, "utf8"); + const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored }); + + const message = await openpgp.readCleartextMessage({ + cleartextMessage: clearsignedMessage, + }); + const verificationResult = await openpgp.verify({ + message, + verificationKeys: publicKey, + }); + + const { verified, keyID } = verificationResult.signatures[0]; + await verified; + + console.log(`Signature verified with key ID: ${keyID.toHex()}`); + return true; + } catch (error) { + console.error(`Signature verification failed: ${error.message}`); + return false; + } +} + +async function verifyChecksum( + filePath: string, + expectedHash: string, +): Promise { + const fileBuffer = await fs.readFile(filePath); + const calculatedHash = createHash("sha256").update(fileBuffer).digest("hex"); + + const isMatch = calculatedHash === expectedHash; + console.log( + `Checksum verification for ${path.basename(filePath)}: ${isMatch ? "Matched" : "Mismatched"}`, + ); + return isMatch; +} + +async function extractBinary( + archivePath: string, + targetDir: string, +): Promise { + if (archivePath.endsWith(".zip")) { + const zip = new AdmZip(archivePath); + zip.extractAllTo(targetDir, true); + const files = await fs.readdir(targetDir); + const exeFile = files.find( + (file) => file.endsWith(".exe") && !file.includes("qt"), + ); + return exeFile ? path.join(targetDir, exeFile) : ""; + } else if (archivePath.endsWith(".tar.gz")) { + await tar.x({ file: archivePath, C: targetDir }); + const files = await fs.readdir(targetDir); + const hwiBinary = files.find( + (file) => file.startsWith("hwi") && !file.includes("qt"), + ); + return hwiBinary ? path.join(targetDir, hwiBinary) : ""; + } + throw new Error(`Unsupported archive format: ${archivePath}`); +} + +async function setPermissions(filePath: string): Promise { + try { + await fs.chmod(filePath, 0o755); + console.log(`Set permissions for ${path.basename(filePath)} to 755`); + } catch (error) { + console.error( + `Failed to set permissions for ${path.basename(filePath)}: ${error.message}`, + ); + throw error; + } +} + +async function cleanDirectory(dir: string): Promise { + try { + const files = await fs.readdir(dir); + for (const file of files) { + if (file.startsWith("hwi-")) { + await fs.unlink(path.join(dir, file)); + } + } + } catch (error) { + console.error(`Failed to clean up HWI files in ${dir}: ${error.message}`); + throw error; + } +} + +async function cleanupUnnecessaryFiles(dir: string): Promise { + try { + const files = await fs.readdir(dir); + for (const file of files) { + if (file.includes("-qt")) { + const filePath = path.join(dir, file); + await fs.unlink(filePath); + console.log(`Removed file: ${path.basename(filePath)}`); + } + } + } catch (error) { + console.error(`Failed to clean up files in ${dir}: ${error.message}`); + throw error; + } +} + +async function shouldDownloadBinaries(): Promise { + try { + const files = await fs.readdir(BINARY_DIR); + const hwiFiles = files.filter((file) => file.startsWith("hwi-")); + return ( + hwiFiles.length < + Object.values(BINARIES).reduce( + (acc, platformBinaries) => acc + platformBinaries.length, + 0, + ) + ); + } catch (error) { + if (error.code === "ENOENT") { + await fs.mkdir(BINARY_DIR, { recursive: true }); + return true; + } + throw error; + } +} + +async function main() { + try { + const isEmpty = await shouldDownloadBinaries(); + if (!isEmpty) { + console.log( + "src-tauri/binaries already has all HWI binaries. Skipping download.", + ); + return; + } + + console.log( + "src-tauri/binaries doesn't have all HWI binaries. Downloading...", + ); + + await cleanDirectory(BINARY_DIR); + + const signaturePath = path.join(BINARY_DIR, SHASUM_FILENAME); + await downloadFile(`${HWI_BASE_URL}/${SHASUM_FILENAME}`, signaturePath); + + const isSignatureValid = await verifyShasumSignature(signaturePath); + if (!isSignatureValid) { + throw new Error("Signature verification failed. Aborting."); + } + + const shasumContent = await fs.readFile(signaturePath, "utf8"); + const shaLines = shasumContent + .split("\n") + .filter((line) => line.trim() !== "" && !line.startsWith("-----")); + + for (const binaryInfoList of Object.values(BINARIES)) { + for (const { filename, targetName } of binaryInfoList) { + const downloadUrl = `${HWI_BASE_URL}/${filename}`; + console.log(`Downloading ${downloadUrl}`); + const outputPath = path.join(BINARY_DIR, filename); + + await downloadFile(downloadUrl, outputPath); + + const archiveHashLine = shaLines.find((line) => + line.includes(filename), + ); + if (!archiveHashLine) { + throw new Error(`No hash found for ${filename}`); + } + const [archiveExpectedHash] = archiveHashLine.split(" "); + + const isArchiveChecksumValid = await verifyChecksum( + outputPath, + archiveExpectedHash, + ); + if (!isArchiveChecksumValid) { + throw new Error( + `Archive checksum verification failed for ${filename}`, + ); + } + + const extractedPath = await extractBinary(outputPath, BINARY_DIR); + if (!extractedPath) { + throw new Error(`Failed to extract binary from ${filename}`); + } + + const binaryHashLine = shaLines.find((line) => + line.includes(`${filename}/${path.basename(extractedPath)}`), + ); + if (!binaryHashLine) { + throw new Error( + `No hash found for extracted binary from ${filename}`, + ); + } + const [binaryExpectedHash] = binaryHashLine.split(" "); + + const isBinaryChecksumValid = await verifyChecksum( + extractedPath, + binaryExpectedHash, + ); + if (!isBinaryChecksumValid) { + throw new Error( + `Binary checksum verification failed for extracted file from ${filename}`, + ); + } + + const finalPath = path.join(BINARY_DIR, targetName); + await fs.rename(extractedPath, finalPath); + await setPermissions(finalPath); + + await fs.unlink(outputPath); + } + } + + await cleanupUnnecessaryFiles(BINARY_DIR); + + await fs.unlink(signaturePath); + + console.log("Final files in BINARY_DIR:"); + console.log(await fs.readdir(BINARY_DIR)); + } catch (error) { + console.error("An error occurred:", error); + process.exit(1); + } +} + +if (import.meta.url === `file://${encodeURI(process.argv[1])}`) { + main().catch((error) => { + console.error("An error occurred:", error); + process.exit(1); + }); +} + +export { main as getHwi }; diff --git a/scripts/resources/achow-key.asc b/scripts/resources/achow-key.asc new file mode 100644 index 0000000..5506d99 --- /dev/null +++ b/scripts/resources/achow-key.asc @@ -0,0 +1,706 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +1TkCHSAACgkQF1ZXMuCOXkFfDhAAjCzeIKK7zGbFvJi85YgEUSQD3e1mqujZUm+R +DLPVuT+KMKGOtX3tRJzeH0ezC0/9vyAWQKwOLNiY2XOPhXb06ssn7bLUHvBvti9u +YhRyQf/Xzn0KQv+3s+MazXVtsCCCTp1gAYMWVqaBCxsgGTNsABD7xaFEBXkzo0KK +cGAxlMsy4z1P4LL6mS52tap2xPHwVGob+BVjEL1u8Yol52LksX0M5uTWhWwM65cn +flAzJiAny09cYMwynkVhswEqynt9qlpWrGYCUnr6GEkdo5jTDF8qi7RgOkr7MKel +Z+k0Ubc/R3Zm4NqRjPX7Fkw1DoFfX6/rOyEU6QdI0eOC3qOMpjizcw0Afz2XyH1V +BhSllrAT4+wFoB/VDoEsZIqOFUoFlw+GwgetL9Knw3ZvH75XAa97JvnHNwsunFAW +xc8DGOkQXhScQC3VylFpmzYMz9fymygttQOdS5bDJ6jPJQbAkKINevFGd25INuSr +OdfvsXHtJzu4Cx4/V6RQkromovRv7fzptWYTmx7z1V5fHWX3El+Lw1GndHq89osy +vVHxRR8K58+7mu9ugvaKrQ3u0VB+3t/sjpaPurpiZLfONZbB792tY3wrknL9/eNW +brr3dEkYO412HzUnA/SVBbxxW0oRXJFU7wPBNHyhmudl89urAnvwQTGGH9szaqXZ +ug7uPmK0M0FuZHJldyBDaG93IChPZmZpY2lhbCBOZXcgS2V5KSA8YWNob3cxMDFA +Z21haWwuY29tPokCVgQwAQgAQBYhBBUoEjAHhclkRNMzTRdWVzLgjl5BBQJjRD54 +Ih0gVGhlc2UgZW1haWxzIGFyZSBubyBsb25nZXIgdXNlZC4ACgkQF1ZXMuCOXkHP +mxAAqkl5BGihjq8+4zmTOnW+TcrClu+9WdsktaFWrLKaj3XxY9UK+IEkFNjPPTX9 +DTZDNovhW/f+6gQiOvOkRbzT3hmr2LtRNO0yzHquVwccHLZbSGm02bpHqvby+2hW +TOq1f7xuveUY3OpLncpMml4pco283J+54w8FWrqSPe6yz1rsypnSC6majzDnri+c +SNyswwhZMxD+hEYX8Z57pXIHvKBNXqPVjPuq0DAae1rXN2J0AnnJSv3Ahq9PYsiL +mbGK5zRtb8M4hCxVY4ie2pBWfyw/K78ANKxviyRCmy/GHM+45DP+5qv0lf0fKA2z +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 +j4Tk8A== +=Am5q +-----END PGP PUBLIC KEY BLOCK----- diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index ef037d3..6ffdd4a 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1801,7 +1801,7 @@ dependencies = [ [[package]] name = "keeper-desktop" -version = "0.1.0" +version = "0.1.2" dependencies = [ "aes-gcm", "bitcoin", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 962b473..1b9279c 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "keeper-desktop" -version = "0.1.0" +version = "0.1.2" description = "Bitcoin Keeper Desktop App" authors = ["Ben Kaufman"] repository = "https://github.com/bithyve/keeper-desktop" diff --git a/src-tauri/binaries/hwi-aarch64-apple-darwin b/src-tauri/binaries/hwi-aarch64-apple-darwin deleted file mode 100755 index 0dc49d9..0000000 Binary files a/src-tauri/binaries/hwi-aarch64-apple-darwin and /dev/null differ diff --git a/src-tauri/binaries/hwi-aarch64-unknown-linux-gnu b/src-tauri/binaries/hwi-aarch64-unknown-linux-gnu deleted file mode 100755 index 3f2541b..0000000 Binary files a/src-tauri/binaries/hwi-aarch64-unknown-linux-gnu and /dev/null differ diff --git a/src-tauri/binaries/hwi-x86_64-apple-darwin b/src-tauri/binaries/hwi-x86_64-apple-darwin deleted file mode 100755 index 25b6718..0000000 Binary files a/src-tauri/binaries/hwi-x86_64-apple-darwin and /dev/null differ diff --git a/src-tauri/binaries/hwi-x86_64-pc-windows-msvc.exe b/src-tauri/binaries/hwi-x86_64-pc-windows-msvc.exe deleted file mode 100755 index 0873bbe..0000000 Binary files a/src-tauri/binaries/hwi-x86_64-pc-windows-msvc.exe and /dev/null differ diff --git a/src-tauri/binaries/hwi-x86_64-unknown-linux-gnu b/src-tauri/binaries/hwi-x86_64-unknown-linux-gnu deleted file mode 100755 index cc52d11..0000000 Binary files a/src-tauri/binaries/hwi-x86_64-unknown-linux-gnu and /dev/null differ diff --git a/src-tauri/src/channel.rs b/src-tauri/src/channel.rs index baba238..f59f3a4 100644 --- a/src-tauri/src/channel.rs +++ b/src-tauri/src/channel.rs @@ -106,7 +106,11 @@ impl Channel { if let Some(client) = &self.client { let mut data = json!({"room": room, "data": encrypted}); if let Some(network) = network { - data["network"] = serde_json::Value::String(network.to_string()); + data["network"] = serde_json::Value::String(if network == "bitcoin" { + "MAINNET".to_string() + } else { + "TESTNET".to_string() + }); } client .emit(event, data) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 0627b7c..b56ab40 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -7,7 +7,7 @@ }, "package": { "productName": "Keeper Desktop", - "version": "0.1.0" + "version": "0.1.2" }, "tauri": { "allowlist": { diff --git a/src/services/hwiService.ts b/src/services/hwiService.ts index eeffe1f..81ea19e 100644 --- a/src/services/hwiService.ts +++ b/src/services/hwiService.ts @@ -41,6 +41,9 @@ const hwiService = { deviceType: string, network: string, ): Promise => { + if (network === "mainnet") { + network = "bitcoin"; + } await invoke("set_hwi_client", { fingerprint, deviceType, network }); },