diff --git a/artifacts/load-report-2026-01-17.json b/artifacts/load-report-2026-01-17.json deleted file mode 100644 index 59be98a3..00000000 --- a/artifacts/load-report-2026-01-17.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "relayUrl": "ws://127.0.0.1:3333", - "numClients": 100, - "durationSec": 10, - "eventsPerSec": 50, - "reportFile": "artifacts/load-report-2026-01-17.json", - "useInternalRelay": false - }, - "metrics": { - "durationActual": 10.393, - "totalSent": 505, - "totalReceived": 443, - "errors": 0, - "throughput": { - "sentPerSec": 48.590397382853844, - "receivedPerSec": 42.624843644760894, - "bytesSentPerSec": 66310.88232464159, - "bytesReceivedPerSec": 598279.8999326469 - }, - "latency": { - "avgRoundtripMs": 12.214446952595937, - "avgPubAckMs": 12.590361445783133, - "p95RoundtripMs": 24, - "p99RoundtripMs": 35 - }, - "messageTypes": { - "OK": 505, - "EOSE": 10, - "EVENT": 4430 - }, - "resourceUsage": { - "user": 3681110, - "system": 245713 - } - }, - "bottlenecks": [], - "remediation": [] -} \ No newline at end of file diff --git a/artifacts/load-report.json b/artifacts/load-report.json deleted file mode 100644 index 59be98a3..00000000 --- a/artifacts/load-report.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "relayUrl": "ws://127.0.0.1:3333", - "numClients": 100, - "durationSec": 10, - "eventsPerSec": 50, - "reportFile": "artifacts/load-report-2026-01-17.json", - "useInternalRelay": false - }, - "metrics": { - "durationActual": 10.393, - "totalSent": 505, - "totalReceived": 443, - "errors": 0, - "throughput": { - "sentPerSec": 48.590397382853844, - "receivedPerSec": 42.624843644760894, - "bytesSentPerSec": 66310.88232464159, - "bytesReceivedPerSec": 598279.8999326469 - }, - "latency": { - "avgRoundtripMs": 12.214446952595937, - "avgPubAckMs": 12.590361445783133, - "p95RoundtripMs": 24, - "p99RoundtripMs": 35 - }, - "messageTypes": { - "OK": 505, - "EOSE": 10, - "EVENT": 4430 - }, - "resourceUsage": { - "user": 3681110, - "system": 245713 - } - }, - "bottlenecks": [], - "remediation": [] -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ed2af934..d9858251 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,6 @@ "license": "GPL-3.0-or-later", "dependencies": { "@floating-ui/dom": "^1.7.4", - "path": "^0.12.7", - "webtorrent": "^1.9.7", "ws": "^8.19.0" }, "devDependencies": { @@ -1025,22 +1023,6 @@ "node": ">=4" } }, - "node_modules/@webtorrent/http-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webtorrent/http-node/-/http-node-1.3.0.tgz", - "integrity": "sha512-GWZQKroPES4z91Ijx6zsOsb7+USOxjy66s8AoTWg0HiBBdfnbtf9aeh3Uav0MgYn4BL8Q7tVSUpd0gGpngKGEQ==", - "license": "MIT", - "dependencies": { - "freelist": "^1.0.3", - "http-parser-js": "^0.4.3" - } - }, - "node_modules/addr-to-ip-port": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/addr-to-ip-port/-/addr-to-ip-port-1.5.4.tgz", - "integrity": "sha512-ByxmJgv8vjmDcl3IDToxL2yrWFrRtFpZAToY0f46XFXl8zS081t7El5MXIodwm7RC6DhHBRoOSMLFSPKCtHukg==", - "license": "MIT" - }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -1193,20 +1175,6 @@ "postcss": "^8.1.0" } }, - "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1214,40 +1182,6 @@ "dev": true, "license": "MIT" }, - "node_modules/bare-events": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.0.tgz", - "integrity": "sha512-AOhh6Bg5QmFIXdViHbMc2tLDsBIRxdkIaIddPslJF9Z5De3APBScuqGP2uThXnIpqFrgoxMNC6km7uXNIMLHXA==", - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/baseline-browser-mapping": { "version": "2.9.15", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", @@ -1258,18 +1192,6 @@ "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/bencode": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.3.tgz", - "integrity": "sha512-D/vrAD4dLVX23NalHwb8dSvsUsxeRPO8Y7ToKA015JQYq69MLDOMkC0uGZYA/MPpltLO8rt8eqFC2j8DxjTZ/w==", - "license": "MIT" - }, - "node_modules/bep53-range": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bep53-range/-/bep53-range-1.1.1.tgz", - "integrity": "sha512-ct6s33iiwRCUPp9KXnJ4QMWDgHIgaw36caK/5XEQ9L8dCzSQlJt1Vk6VmHh1VD4AlGCAI4C2zmtfItifBBPrhQ==", - "license": "MIT" - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -1283,256 +1205,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binary-search": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz", - "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==", - "license": "CC0-1.0" - }, - "node_modules/bitfield": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/bitfield/-/bitfield-4.2.0.tgz", - "integrity": "sha512-kUTatQb/mBd8uhvdLrUkouGDBUQiJaIOvPlptUwOWp6MFqih4d1MiVf0m3ATxfZSzu+LjW/awFeABltYa62uIA==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/bittorrent-dht": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-10.0.7.tgz", - "integrity": "sha512-o6elCANGteECXz82LFqG1Ov2fG4uNzfUU7pBMx9ixxKUh99ZXNrhbiNLRNN2F2vBnqKSN7SHlUW4LJ5Z2u1eKw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bencode": "^2.0.3", - "debug": "^4.3.4", - "k-bucket": "^5.1.0", - "k-rpc": "^5.1.0", - "last-one-wins": "^1.0.4", - "lru": "^3.1.0", - "randombytes": "^2.1.0", - "record-cache": "^1.2.0", - "simple-sha1": "^3.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/bittorrent-lsd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bittorrent-lsd/-/bittorrent-lsd-1.1.1.tgz", - "integrity": "sha512-dWxU2Mr2lU6jzIKgZrTsXgeXDCIcYpR1b6f2n89fn7juwPAYbNU04OgWjcQPLiNliY0filsX5CQAWntVErpk+Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "chrome-dgram": "^3.0.6", - "debug": "^4.2.0" - } - }, - "node_modules/bittorrent-peerid": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/bittorrent-peerid/-/bittorrent-peerid-1.3.6.tgz", - "integrity": "sha512-VyLcUjVMEOdSpHaCG/7odvCdLbAB1y3l9A2V6WIje24uV7FkJPrQrH/RrlFmKxP89pFVDEnE+YlHaFujlFIZsg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bittorrent-protocol": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bittorrent-protocol/-/bittorrent-protocol-3.5.5.tgz", - "integrity": "sha512-cfzO//WtJGNLHXS58a4exJCSq1U0dkP2DZCQxgADInYFPdOfV1EmtpEN9toLOluVCXJRYAdwW5H6Li/hrn697A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bencode": "^2.0.2", - "bitfield": "^4.0.0", - "debug": "^4.3.4", - "randombytes": "^2.1.0", - "rc4": "^0.1.5", - "readable-stream": "^3.6.0", - "simple-sha1": "^3.1.0", - "speedometer": "^1.1.0", - "unordered-array-remove": "^1.0.2" - } - }, - "node_modules/bittorrent-tracker": { - "version": "9.19.0", - "resolved": "https://registry.npmjs.org/bittorrent-tracker/-/bittorrent-tracker-9.19.0.tgz", - "integrity": "sha512-09d0aD2b+MC+zWvWajkUAKkYMynYW4tMbTKiRSthKtJZbafzEoNQSUHyND24SoCe3ZOb2fKfa6fu2INAESL9wA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bencode": "^2.0.1", - "bittorrent-peerid": "^1.3.3", - "bn.js": "^5.2.0", - "chrome-dgram": "^3.0.6", - "clone": "^2.0.0", - "compact2string": "^1.4.1", - "debug": "^4.1.1", - "ip": "^1.1.5", - "lru": "^3.1.0", - "minimist": "^1.2.5", - "once": "^1.4.0", - "queue-microtask": "^1.2.3", - "random-iterate": "^1.0.1", - "randombytes": "^2.1.0", - "run-parallel": "^1.2.0", - "run-series": "^1.1.9", - "simple-get": "^4.0.0", - "simple-peer": "^9.11.0", - "simple-websocket": "^9.1.0", - "socks": "^2.0.0", - "string2compact": "^1.3.0", - "unordered-array-remove": "^1.0.2", - "ws": "^7.4.5" - }, - "bin": { - "bittorrent-tracker": "bin/cmd.js" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "bufferutil": "^4.0.3", - "utf-8-validate": "^5.0.5" - } - }, - "node_modules/bittorrent-tracker/node_modules/ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", - "license": "MIT" - }, - "node_modules/bittorrent-tracker/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/blob-to-buffer": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", - "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/block-iterator": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/block-iterator/-/block-iterator-1.1.1.tgz", - "integrity": "sha512-DrjdVWZemVO4iBf4tiOXjUrY5cNesjzy0t7sIiu2rdl8cOCHRxAgKjSJFc3vBZYYMMmshUAxajl8QQh/uxXTKQ==", - "license": "MIT" - }, - "node_modules/block-stream2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "license": "MIT", - "dependencies": { - "readable-stream": "^3.4.0" - } - }, - "node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -1556,12 +1228,6 @@ "node": ">=8" } }, - "node_modules/browserify-package-json": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-package-json/-/browserify-package-json-1.0.1.tgz", - "integrity": "sha512-CikZxJGNyNOBERbeALo0NUUeJgHs5NyEvuYChX/PcsBV91TAvEq4hYDaWSenSieT8XwAutNnS3FGvyzIMOughQ==", - "license": "MIT" - }, "node_modules/browserslist": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", @@ -1597,76 +1263,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "license": "MIT", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "license": "MIT" - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "license": "MIT" - }, - "node_modules/cache-chunk-store": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/cache-chunk-store/-/cache-chunk-store-3.2.2.tgz", - "integrity": "sha512-2lJdWbgHFFxcSth9s2wpId3CR3v1YC63KjP4T9WhpW7LWlY7Hiiei3QwwqzkWqlJTfR8lSy9F5kRQECeyj+yQA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "lru": "^3.1.0", - "queue-microtask": "^1.2.3" - } - }, "node_modules/cacheable": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz", @@ -1774,95 +1370,6 @@ "node": ">= 6" } }, - "node_modules/chrome-dgram": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.6.tgz", - "integrity": "sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "run-series": "^1.1.9" - } - }, - "node_modules/chrome-dns": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chrome-dns/-/chrome-dns-1.0.1.tgz", - "integrity": "sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==", - "license": "MIT", - "dependencies": { - "chrome-net": "^3.3.2" - } - }, - "node_modules/chrome-net": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/chrome-net/-/chrome-net-3.3.4.tgz", - "integrity": "sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/chunk-store-stream": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/chunk-store-stream/-/chunk-store-stream-4.3.0.tgz", - "integrity": "sha512-qby+/RXoiMoTVtPiylWZt7KFF1jy6M829TzMi2hxZtBIH9ptV19wxcft6zGiXLokJgCbuZPGNGab6DWHqiSEKw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "block-stream2": "^2.0.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1913,15 +1420,6 @@ "node": ">= 6" } }, - "node_modules/compact2string": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/compact2string/-/compact2string-1.4.1.tgz", - "integrity": "sha512-3D+EY5nsRhqnOwDxveBv5T8wGo4DEvYxjDtPGmdOX+gfr5gE92c2RC0w2wa+xEefm07QuVqqcF3nZJUZ92l/og==", - "license": "BSD", - "dependencies": { - "ipaddr.js": ">= 0.1.5" - } - }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -1949,65 +1447,6 @@ } } }, - "node_modules/cpus": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cpus/-/cpus-1.0.3.tgz", - "integrity": "sha512-PXHBvGLuL69u55IkLa5e5838fLhIMHxmkV4ge42a8alGyn7BtawYgI0hQ849EedvtHIOLNNH3i6eQU1BiE9SUA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/create-torrent": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/create-torrent/-/create-torrent-5.0.9.tgz", - "integrity": "sha512-WQ/bMe+aCBSa5EonIkgw7CTM/1JnJDQuLJhA78omSWvuEbXDwaUy0rG3a+IYt+EiO+rdTLxdsBwrsn/wfWOMQA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bencode": "^2.0.3", - "block-iterator": "^1.0.1", - "fast-readable-async-iterator": "^1.1.1", - "is-file": "^1.0.0", - "join-async-iterator": "^1.1.1", - "junk": "^3.1.0", - "minimist": "^1.2.7", - "piece-length": "^2.0.1", - "queue-microtask": "^1.2.3", - "run-parallel": "^1.2.0", - "simple-sha1": "^3.1.0" - }, - "bin": { - "create-torrent": "bin/cmd.js" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -2118,6 +1557,7 @@ "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" @@ -2138,21 +1578,6 @@ "dev": true, "license": "MIT" }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2226,15 +1651,6 @@ "dev": true, "license": "MIT" }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/entities": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", @@ -2258,12 +1674,6 @@ "node": ">=6" } }, - "node_modules/err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", - "license": "MIT" - }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -2375,30 +1785,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } - }, "node_modules/fake-indexeddb": { "version": "6.2.5", "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-6.2.5.tgz", @@ -2409,16 +1795,6 @@ "node": ">=18" } }, - "node_modules/fast-blob-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fast-blob-stream/-/fast-blob-stream-1.1.1.tgz", - "integrity": "sha512-wdRazMMeM2pl8hq1lFG8fzix8p1VLAJunTTE2RADiFBwbUfZwybUm6IwPrmMS7qTthiayr166NoXeqWe3hfR5w==", - "license": "MIT", - "dependencies": { - "fast-readable-async-iterator": "^1.1.1", - "streamx": "^2.12.4" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2426,12 +1802,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "license": "MIT" - }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -2462,12 +1832,6 @@ "node": ">= 6" } }, - "node_modules/fast-readable-async-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-readable-async-iterator/-/fast-readable-async-iterator-1.1.2.tgz", - "integrity": "sha512-RvoeUNYOmXLr3j6ZcThapEWw8xoXZe0DHHIOvqJH2VOzbJ9lYLDSIpJg0hqoSkh9yzFPvR1aocuWl67ECPZrdQ==", - "license": "MIT" - }, "node_modules/fast-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", @@ -2595,39 +1959,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/freelist": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/freelist/-/freelist-1.0.3.tgz", - "integrity": "sha512-Ji7fEnMdZDGbS5oXElpRJsn9jPvBR8h/037D3bzreNmS8809cISq/2D9//JbA/TaZmkkN8cmecXwmQHmM+NHhg==", - "license": "MIT" - }, - "node_modules/fs-chunk-store": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-chunk-store/-/fs-chunk-store-3.0.1.tgz", - "integrity": "sha512-YrOFuXtUJQBkOZ2QBXBoIrjLJ/TNTpEaGnxV+TmL1qaW5J4ah6lxMh/X9pb3To+hbaoT/pRuBXLkkqoavQoQFw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2", - "random-access-file": "^2.0.1", - "randombytes": "^2.0.3", - "run-parallel": "^1.1.2", - "thunky": "^1.0.1" - } - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2653,12 +1984,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-browser-rtc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", - "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==", - "license": "MIT" - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -2698,18 +2023,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -2934,12 +2247,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-parser-js": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", - "integrity": "sha512-u8u5ZaG0Tr/VvHlucK2ufMuOp4/5bvwgneXle+y228K5rMbJOlVjThONcaAw3ikAy8b2OO9RfEucdMHFz3UWMA==", - "license": "MIT" - }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -2981,26 +2288,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", @@ -3011,29 +2298,6 @@ "node": ">= 4" } }, - "node_modules/immediate-chunk-store": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/immediate-chunk-store/-/immediate-chunk-store-2.2.0.tgz", - "integrity": "sha512-1bHBna0hCa6arRXicu91IiL9RvvkbNYLVq+mzWdaLGZC3hXvX4doh8e1dLhMKez5siu63CYgO5NrGJbRX5lbPA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.3" - } - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -3071,12 +2335,6 @@ "node": ">=0.8.19" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", @@ -3084,39 +2342,6 @@ "dev": true, "license": "ISC" }, - "node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", - "license": "MIT" - }, - "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/ip-set": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ip-set/-/ip-set-2.2.0.tgz", - "integrity": "sha512-NmmY3BfY4pejh6GOqNcNWRsBNdR+I7pUVtXRgZlkZdcnLtlG4X6HNtu2FZoCGyvGRzyroP1fJ+SJZBZ65JJl/Q==", - "license": "MIT", - "dependencies": { - "ip": "^2.0.1" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3124,12 +2349,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-ascii": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-ascii/-/is-ascii-1.0.0.tgz", - "integrity": "sha512-CXMaB/+EWCSGlLPs7ZlXRBpaPRRSRnrOfq0N3+RGeCZfqQaHQtiDLlkPCn63+LCkRUc1iRE0AXiI+sm2/Hi3qQ==", - "license": "MIT" - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3169,12 +2388,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", - "integrity": "sha512-ZGMuc+xA8mRnrXtmtf2l/EkIW2zaD2LSBWlaOVEF6yH4RTndHob65V4SwWWdtGKVthQfXPVKsXqw4TDUjbVxVQ==", - "license": "MIT" - }, "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", @@ -3258,12 +2471,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/join-async-iterator": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/join-async-iterator/-/join-async-iterator-1.1.1.tgz", - "integrity": "sha512-ATse+nuNeKZ9K1y27LKdvPe/GCe9R/u9dw9vI248e+vILeRK3IcJP4JUPAlSmKRCDK0cKhEwfmiw4Skqx7UnGQ==", - "license": "MIT" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3339,47 +2546,6 @@ "dev": true, "license": "MIT" }, - "node_modules/junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/k-bucket": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", - "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", - "license": "MIT", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/k-rpc": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-rpc/-/k-rpc-5.1.0.tgz", - "integrity": "sha512-FGc+n70Hcjoa/X2JTwP+jMIOpBz+pkRffHnSl9yrYiwUxg3FIgD50+u1ePfJUOnRCnx6pbjmVk5aAeB1wIijuQ==", - "license": "MIT", - "dependencies": { - "k-bucket": "^5.0.0", - "k-rpc-socket": "^1.7.2", - "randombytes": "^2.0.5" - } - }, - "node_modules/k-rpc-socket": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz", - "integrity": "sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==", - "license": "MIT", - "dependencies": { - "bencode": "^2.0.0", - "chrome-dgram": "^3.0.2", - "chrome-dns": "^1.0.0", - "chrome-net": "^3.3.2" - } - }, "node_modules/keyv": { "version": "5.5.5", "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz", @@ -3408,12 +2574,6 @@ "dev": true, "license": "MIT" }, - "node_modules/last-one-wins": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", - "integrity": "sha512-t+KLJFkHPQk8lfN6WBOiGkiUXoub+gnb2XTYI2P3aiISL+94xgZ1vgz1SXN/N4hthuOoLXarXfBZPUruyjQtfA==", - "license": "MIT" - }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -3427,11 +2587,6 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -3439,33 +2594,6 @@ "dev": true, "license": "MIT" }, - "node_modules/load-ip-set": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/load-ip-set/-/load-ip-set-2.2.1.tgz", - "integrity": "sha512-G3hQXehU2LTOp52e+lPffpK4EvidfjwbvHaGqmFcp4ptiZagR4xFdL+D08kMX906dxeqZyWhfonEjdUxrWcldg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "ip-set": "^2.1.0", - "netmask": "^2.0.1", - "once": "^1.4.0", - "simple-get": "^4.0.0", - "split": "^1.0.1" - } - }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -3473,18 +2601,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lru": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz", - "integrity": "sha512-5OUtoiVIGU4VXBOshidmtOsvBIvcQR6FD/RzWSvaeHyxCGB+PCUCu+52lqMfdc0h/2CLvHhZS4TwUmMQrrMbBQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -3492,54 +2608,6 @@ "dev": true, "license": "ISC" }, - "node_modules/lt_donthave": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lt_donthave/-/lt_donthave-1.0.1.tgz", - "integrity": "sha512-PfOXfDN9GnUjlNHjjxKQuMxPC8s12iSrnmg+Ff1BU1uLn7S1BFAKzpZCu6Gwg3WsCUvTZrZoDSHvy6B/j+N4/Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "debug": "^4.2.0", - "unordered-array-remove": "^1.0.2" - } - }, - "node_modules/magnet-uri": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/magnet-uri/-/magnet-uri-6.2.0.tgz", - "integrity": "sha512-O9AgdDwT771fnUj0giPYu/rACpz8173y8UXCSOdLITjOVfBenZ9H9q3FqQmveK+ORUMuD+BkKNSZP8C3+IMAKQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bep53-range": "^1.1.0", - "thirty-two": "^1.0.2" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -3568,40 +2636,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/mediasource": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mediasource/-/mediasource-2.4.0.tgz", - "integrity": "sha512-SKUMrbFMHgiCUZFOWZcL0aiF/KgHx9SPIKzxrl6+7nMUMDK/ZnOmJdY/9wKzYeM0g3mybt3ueg+W+/mrYfmeFQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "to-arraybuffer": "^1.0.1" - } - }, - "node_modules/memory-chunk-store": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/memory-chunk-store/-/memory-chunk-store-1.3.5.tgz", - "integrity": "sha512-E1Xc1U4ifk/FkC2ZsWhCaW1xg9HbE/OBmQTLe2Tr9c27YPSLbW7kw1cnb3kQWD1rDtErFJHa7mB9EVrs7aTx9g==", - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.3" - } - }, "node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -3639,18 +2673,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -3674,18 +2696,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -3702,15 +2712,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -3721,37 +2722,11 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/mp4-box-encoding": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mp4-box-encoding/-/mp4-box-encoding-1.4.1.tgz", - "integrity": "sha512-2/PRtGGiqPc/VEhbm7xAQ+gbb7yzHjjMAv6MpAifr5pCpbh3fQUdj93uNgwPiTppAGu8HFKe3PeU+OdRyAxStA==", - "license": "MIT", - "dependencies": { - "uint64be": "^2.0.2" - } - }, - "node_modules/mp4-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mp4-stream/-/mp4-stream-3.1.3.tgz", - "integrity": "sha512-DUT8f0x2jHbZjNMdqe9h6lZdt6RENWTTdGn8z3TXa4uEsoltuNY9lCCij84mdm0q7xcV0E2W25WRxlKBMo4hSw==", - "license": "MIT", - "dependencies": { - "mp4-box-encoding": "^1.3.0", - "next-event": "^1.0.0", - "queue-microtask": "^1.2.2", - "readable-stream": "^3.0.6" - } - }, "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/mz": { @@ -3785,40 +2760,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-macros": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", - "license": "MIT", - "optional": true - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/next-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-event/-/next-event-1.0.0.tgz", - "integrity": "sha512-IXGPhl/yAiUU597gz+k5OYxYZkmLSWTcPPcpQjWABud9OK6m/ZNLrVdcEu4e7NgmOObFIhgZVg1jecPYT/6AoA==", - "license": "MIT" - }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -3894,15 +2835,6 @@ "node": ">= 6" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -3910,15 +2842,6 @@ "dev": true, "license": "BlueOak-1.0.0" }, - "node_modules/package-json-versionify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/package-json-versionify/-/package-json-versionify-1.0.4.tgz", - "integrity": "sha512-mtKKtCeSZMtWcc5hHJS6OlEGP7J9g7WN6vWCCZi2hCXFag/Zmjokh6WFFTQb9TuMnBcZpRjhhMQyOyglPCAahw==", - "license": "Apache-2.0", - "dependencies": { - "browserify-package-json": "^1.0.0" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3951,38 +2874,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-torrent": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/parse-torrent/-/parse-torrent-9.1.5.tgz", - "integrity": "sha512-K8FXRwTOaZMI0/xuv0dpng1MVHZRtMJ0jRWBJ3qZWVNTrC1MzWUxm9QwaXDz/2qPhV2XC4UIHI92IGHwseAwaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bencode": "^2.0.2", - "blob-to-buffer": "^1.2.9", - "get-stdin": "^8.0.0", - "magnet-uri": "^6.2.0", - "queue-microtask": "^1.2.3", - "simple-get": "^4.0.1", - "simple-sha1": "^3.1.0" - }, - "bin": { - "parse-torrent": "bin/cmd.js" - } - }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -3996,16 +2887,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "license": "MIT", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4070,12 +2951,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/piece-length": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/piece-length/-/piece-length-2.0.1.tgz", - "integrity": "sha512-dBILiDmm43y0JPISWEmVGKBETQjwJe6mSU9GND+P9KW0SJGUwoU/odyH1nbalOP9i8WSYuqf1lQnaj92Bhw+Ug==", - "license": "MIT" - }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -4471,15 +3346,6 @@ } } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/psl": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", @@ -4493,16 +3359,6 @@ "url": "https://github.com/sponsors/lupomontero" } }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4537,6 +3393,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -4553,75 +3410,6 @@ ], "license": "MIT" }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "license": "MIT" - }, - "node_modules/random-access-file": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/random-access-file/-/random-access-file-2.2.1.tgz", - "integrity": "sha512-RGU0xmDqdOyEiynob1KYSeh8+9c9Td1MJ74GT1viMEYAn8SJ9oBtWCXLsYZukCF46yududHOdM449uRYbzBrZQ==", - "license": "MIT", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "random-access-storage": "^1.1.1" - } - }, - "node_modules/random-access-storage": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/random-access-storage/-/random-access-storage-1.4.3.tgz", - "integrity": "sha512-D5e2iIC5dNENWyBxsjhEnNOMCwZZ64TARK6dyMN+3g4OTC4MJxyjh9hKLjTGoNhDOPrgjI+YlFEHFnrp/cSnzQ==", - "license": "MIT", - "dependencies": { - "events": "^3.3.0", - "inherits": "^2.0.3", - "queue-tick": "^1.0.0" - } - }, - "node_modules/random-iterate": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/random-iterate/-/random-iterate-1.0.1.tgz", - "integrity": "sha512-Jdsdnezu913Ot8qgKgSgs63XkAjEsnMcS1z+cC6D6TNXsUXsMxy0RpclF2pzGZTEiTXL9BiArdGTEexcv4nqcA==", - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/range-slice-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/range-slice-stream/-/range-slice-stream-2.0.0.tgz", - "integrity": "sha512-PPYLwZ63lXi6Tv2EZ8w3M4FzC0rVqvxivaOVS8pXSp5FMIHFnvi4MWHL3UdFLhwSy50aNtJsgjY0mBC6oFL26Q==", - "license": "MIT", - "dependencies": { - "readable-stream": "^3.0.2" - } - }, - "node_modules/rc4": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/rc4/-/rc4-0.1.5.tgz", - "integrity": "sha512-xdDTNV90z5x5u25Oc871Xnvu7yAr4tV7Eluh0VSvrhUkry39q1k+zkz7xroqHbRq+8PiazySHJPArqifUvz9VA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -4632,20 +3420,6 @@ "pify": "^2.3.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4659,42 +3433,6 @@ "node": ">=8.10.0" } }, - "node_modules/record-cache": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/record-cache/-/record-cache-1.2.0.tgz", - "integrity": "sha512-kyy3HWCez2WrotaL3O4fTn0rsIdfRKOdQQcEJ9KpvmKmbffKVvwsloX063EgRUlpJIXHiDQFhJcTbZequ2uTZw==", - "license": "MIT", - "dependencies": { - "b4a": "^1.3.1" - } - }, - "node_modules/render-media": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/render-media/-/render-media-4.1.0.tgz", - "integrity": "sha512-F5BMWDmgATEoyPCtKjmGNTGN1ghoZlfRQ3MJh8dS/MrvIUIxupiof/Y9uahChipXcqQ57twVbgMmyQmuO1vokw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "debug": "^4.2.0", - "is-ascii": "^1.0.0", - "mediasource": "^2.4.0", - "stream-to-blob-url": "^3.0.2", - "videostream": "^3.2.2" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -4765,6 +3503,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -4784,75 +3523,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-series": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/rusha": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.14.tgz", - "integrity": "sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==", - "license": "MIT" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -4909,138 +3579,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-peer": { - "version": "9.11.1", - "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz", - "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "debug": "^4.3.2", - "err-code": "^3.0.1", - "get-browser-rtc": "^1.1.0", - "queue-microtask": "^1.2.3", - "randombytes": "^2.1.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/simple-sha1": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-sha1/-/simple-sha1-3.1.0.tgz", - "integrity": "sha512-ArTptMRC1v08H8ihPD6l0wesKvMfF9e8XL5rIHPanI7kGOsSsbY514MwVu6X1PITHCTB2F08zB7cyEbfc4wQjg==", - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2", - "rusha": "^0.8.13" - } - }, - "node_modules/simple-websocket": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/simple-websocket/-/simple-websocket-9.1.0.tgz", - "integrity": "sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "debug": "^4.3.1", - "queue-microtask": "^1.2.2", - "randombytes": "^2.1.0", - "readable-stream": "^3.6.0", - "ws": "^7.4.2" - } - }, - "node_modules/simple-websocket/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -5085,30 +3623,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", - "license": "MIT", - "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5119,123 +3633,6 @@ "node": ">=0.10.0" } }, - "node_modules/speed-limiter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/speed-limiter/-/speed-limiter-1.0.2.tgz", - "integrity": "sha512-Ax+TbUOho84bWUc3AKqWtkIvAIVws7d6QI4oJkgH4yQ5Yil+lR3vjd/7qd51dHKGzS5bFxg0++QwyNRN7s6rZA==", - "license": "MIT", - "dependencies": { - "limiter": "^1.1.5", - "streamx": "^2.10.3" - } - }, - "node_modules/speedometer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.1.0.tgz", - "integrity": "sha512-z/wAiTESw2XVPssY2XRcme4niTc4S5FkkJ4gknudtVoc33Zil8TdTxHy5torRcgqMqksJV2Yz8HQcvtbsnw0mQ==", - "license": "MIT" - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/stream-to-blob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-to-blob/-/stream-to-blob-2.0.1.tgz", - "integrity": "sha512-GXlqXt3svqwIVWoICenix5Poxi4KbCF0BdXXUbpU1X4vq1V8wmjiEIU3aFJzCGNFpKxfbnG0uoowS3nKUgSPYg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stream-to-blob-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-to-blob-url/-/stream-to-blob-url-3.0.2.tgz", - "integrity": "sha512-PS6wT2ZyyR38Cy+lE6PBEI1ZmO2HdzZoLeDGG0zZbYikCZd0dh8FUoSeFzgWLItpBYw1WJmPVRLpykRV+lAWLQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "stream-to-blob": "^2.0.0" - } - }, - "node_modules/stream-with-known-length-to-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-with-known-length-to-buffer/-/stream-with-known-length-to-buffer-1.0.4.tgz", - "integrity": "sha512-ztP79ug6S+I7td0Nd2GBeIKCm+vA54c+e60FY87metz5n/l6ydPELd2lxsljz8OpIhsRM9HkIiAwz85+S5G5/A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", - "license": "MIT", - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -5300,16 +3697,6 @@ "node": ">=8" } }, - "node_modules/string2compact": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/string2compact/-/string2compact-1.3.2.tgz", - "integrity": "sha512-3XUxUgwhj7Eqh2djae35QHZZT4mN3fsO7kagZhSGmhhlrQagVvWSFuuFIWnpxFS0CdTB2PlQcaL16RDi14I8uw==", - "license": "MIT", - "dependencies": { - "addr-to-ip-port": "^1.0.1", - "ipaddr.js": "^2.0.0" - } - }, "node_modules/strip-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", @@ -5733,15 +4120,6 @@ "node": ">=14.0.0" } }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -5765,45 +4143,6 @@ "node": ">=0.8" } }, - "node_modules/thirty-two": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", - "integrity": "sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==", - "engines": { - "node": ">=0.2.6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" - }, - "node_modules/throughput": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/throughput/-/throughput-1.0.2.tgz", - "integrity": "sha512-jvK1ZXuhsggjb3qYQjMiU/AVYYiTeqT5thWvYR2yuy2LGM84P5MSSyAinwHahGsdBYKR9m9HncVR/3f3nFKkxg==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/timeout-refresh": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/timeout-refresh/-/timeout-refresh-1.0.3.tgz", - "integrity": "sha512-Mz0CX4vBGM5lj8ttbIFt7o4ZMxk/9rgudJRh76EvB7xXZMur7T/cjRiH2w4Fmkq0zxf2QpM8IFvOSRn8FEu3gA==", - "license": "MIT", - "optional": true - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "license": "MIT" - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5817,53 +4156,6 @@ "node": ">=8.0" } }, - "node_modules/torrent-discovery": { - "version": "9.4.15", - "resolved": "https://registry.npmjs.org/torrent-discovery/-/torrent-discovery-9.4.15.tgz", - "integrity": "sha512-71nx+TpLaF27mbsSj/tZTr588Dfk7XVzx+Rf1+nrxfXqe8qn5dIlRhgA+yY4cg8Ib69vWwkKFhAzbRqg8z42aw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bittorrent-dht": "^10.0.7", - "bittorrent-lsd": "^1.1.1", - "bittorrent-tracker": "^9.19.0", - "debug": "^4.3.4", - "run-parallel": "^1.2.0" - } - }, - "node_modules/torrent-piece": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/torrent-piece/-/torrent-piece-2.0.1.tgz", - "integrity": "sha512-JLSOyvQVLI6JTWqioY4vFL0JkEUKQcaHQsU3loxkCvPTSttw8ePs2tFwsP4XIjw99Fz8EdOzt/4faykcbnPbCQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -5900,15 +4192,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/uint64be": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uint64be/-/uint64be-2.0.2.tgz", - "integrity": "sha512-9QqdvpGQTXgxthP+lY4e/gIBy+RuqcBaC6JVwT5I3bDLgT/btL6twZMR0pI3/Fgah9G/pdwzIprE5gL6v9UvyQ==", - "license": "MIT", - "dependencies": { - "buffer-alloc": "^1.1.0" - } - }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -5919,19 +4202,6 @@ "node": ">= 4.0.0" } }, - "node_modules/unordered-array-remove": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", - "integrity": "sha512-45YsfD6svkgaCBNyvD+dFHm4qFX9g3wRSIVgWVPtm2OCnphvPxzJoe20ATsiNpNJrmzHifnxm+BN5F7gFT/4gw==", - "license": "MIT" - }, - "node_modules/unordered-set": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unordered-set/-/unordered-set-2.0.1.tgz", - "integrity": "sha512-eUmNTPzdx+q/WvOHW0bgGYLWvWHNT3PTKEQLg0MAQhc0AHASHVHoP/9YytYd4RBVariqno/mEUhVZN98CmD7bg==", - "license": "MIT", - "optional": true - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -5974,127 +4244,13 @@ "requires-port": "^1.0.0" } }, - "node_modules/ut_metadata": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ut_metadata/-/ut_metadata-3.5.2.tgz", - "integrity": "sha512-3XZZuJSeoIUyMYSuDbTbVtP4KAVGHPfU8nmHFkr8LJc+THCaUXwnu/2AV+LCSLarET/hL9IlbNfYTGrt6fOVuQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bencode": "^2.0.1", - "bitfield": "^4.0.0", - "debug": "^4.2.0", - "simple-sha1": "^3.0.1" - } - }, - "node_modules/ut_pex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ut_pex/-/ut_pex-3.0.2.tgz", - "integrity": "sha512-3xM88t+AVU5GR0sIY3tmRMLUS+YKiwStc7U7+ZFQ+UHQpX7BjVJOomhmtm0Bs+8R2n812Dt2ymXm01EqDrOOpQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "bencode": "^2.0.2", - "compact2string": "^1.4.1", - "string2compact": "^1.3.2" - } - }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/utp-native": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/utp-native/-/utp-native-2.5.3.tgz", - "integrity": "sha512-sWTrWYXPhhWJh+cS2baPzhaZc89zwlWCfwSthUjGhLkZztyPhcQllo+XVVCbNGi7dhyRlxkWxN4NKU6FbA9Y8w==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "napi-macros": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.0.2", - "timeout-refresh": "^1.0.0", - "unordered-set": "^2.0.1" - }, - "bin": { - "ucat": "ucat.js" - }, - "engines": { - "node": ">=8.12" - } - }, - "node_modules/videostream": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/videostream/-/videostream-3.2.2.tgz", - "integrity": "sha512-4tz23yGGeATmbzj/ZnUm6wgQ4E1lzmMXu2mUA/c0G6adtWKxm1Di5YejdZdRsK6SdkLjKjhplFFYT7r+UUDKvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "binary-search": "^1.3.4", - "mediasource": "^2.2.2", - "mp4-box-encoding": "^1.3.0", - "mp4-stream": "^3.0.0", - "pump": "^3.0.0", - "range-slice-stream": "^2.0.0" - } - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -6118,78 +4274,6 @@ "node": ">=12" } }, - "node_modules/webtorrent": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/webtorrent/-/webtorrent-1.9.7.tgz", - "integrity": "sha512-N+hRuVctWviTAYem/sI6tuFP2J/Rn3/ETEh++7GnJv6Oro49kDjcPuz1W6s+vfS65xKr3Eh4HMuxf3hH82LGfg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "@webtorrent/http-node": "^1.3.0", - "addr-to-ip-port": "^1.5.4", - "bitfield": "^4.1.0", - "bittorrent-dht": "^10.0.7", - "bittorrent-protocol": "^3.5.5", - "cache-chunk-store": "^3.2.2", - "chrome-net": "^3.3.4", - "chunk-store-stream": "^4.3.0", - "cpus": "^1.0.3", - "create-torrent": "^5.0.9", - "debug": "^4.3.4", - "end-of-stream": "^1.4.4", - "escape-html": "^1.0.3", - "fast-blob-stream": "^1.1.1", - "fs-chunk-store": "^3.0.1", - "immediate-chunk-store": "^2.2.0", - "join-async-iterator": "^1.1.1", - "load-ip-set": "^2.2.1", - "lt_donthave": "^1.0.1", - "memory-chunk-store": "^1.3.5", - "mime": "^3.0.0", - "package-json-versionify": "^1.0.4", - "parse-torrent": "^9.1.5", - "pump": "^3.0.0", - "queue-microtask": "^1.2.3", - "random-iterate": "^1.0.1", - "randombytes": "^2.1.0", - "range-parser": "^1.2.1", - "render-media": "^4.1.0", - "run-parallel": "^1.2.0", - "run-parallel-limit": "^1.1.0", - "simple-concat": "^1.0.1", - "simple-get": "^4.0.1", - "simple-peer": "^9.11.1", - "simple-sha1": "^3.1.0", - "speed-limiter": "^1.0.2", - "stream-with-known-length-to-buffer": "^1.0.4", - "streamx": "^2.12.5", - "throughput": "^1.0.1", - "torrent-discovery": "^9.4.15", - "torrent-piece": "^2.0.1", - "unordered-array-remove": "^1.0.2", - "ut_metadata": "^3.5.2", - "ut_pex": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "utp-native": "^2.5.3" - } - }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -6341,12 +4425,6 @@ "node": ">=8" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", diff --git a/scripts/agent/simple-relay.mjs b/scripts/agent/simple-relay.mjs index 30eeefea..26c0b3e0 100644 --- a/scripts/agent/simple-relay.mjs +++ b/scripts/agent/simple-relay.mjs @@ -5,7 +5,10 @@ const wss = new WebSocketServer({ port: PORT }); // Simple in-memory store for REQ matching const events = []; -const subscriptions = new Map(); // subId -> ws +// In a real relay we would handle subscription updates, but for smoke tests +// we mostly do one-off queries or expect immediate results. +// We won't implement persistent subscription matching for new events here +// to keep it simple, unless needed (smoke test waits 500ms then fetches, so one-off is fine). console.log(`Simple relay running on ws://localhost:${PORT}`); @@ -28,7 +31,7 @@ wss.on('connection', (ws) => { // Simulate storage events.push(event); - if (events.length > 1000) events.shift(); // Keep memory low + if (events.length > 2000) events.shift(); // Keep memory low // Simulate relay processing time (random 5-50ms) setTimeout(() => { @@ -38,10 +41,38 @@ wss.on('connection', (ws) => { }, Math.random() * 45 + 5); } else if (type === 'REQ') { - const [subId, filter] = payload; - // Store subscription (simplified) - // In a real relay we would match existing events here - // For load test, we mostly care about the ACK of EVENTs + const subId = payload[0]; + const filters = payload.slice(1); + console.log(`REQ ${subId}`, JSON.stringify(filters)); + + // Simple match against stored events + const matched = events.filter(event => { + // Event matches if it matches ANY of the filters + return filters.some(filter => { + if (filter.ids && !filter.ids.includes(event.id)) return false; + if (filter.kinds && !filter.kinds.includes(event.kind)) return false; + if (filter.authors && !filter.authors.includes(event.pubkey)) return false; + + // Tag matching (e.g. #p, #d, #t) + for (const key in filter) { + if (key.startsWith('#')) { + const tagName = key.slice(1); + const tagValues = filter[key]; + // Check if event has a tag [tagName, value] where value is in tagValues + const hasTag = event.tags && event.tags.some(t => t[0] === tagName && tagValues.includes(t[1])); + if (!hasTag) return false; + } + } + return true; + }); + }); + + console.log(`Matched ${matched.length} events for REQ ${subId}`); + + matched.forEach(event => { + ws.send(JSON.stringify(['EVENT', subId, event])); + }); + ws.send(JSON.stringify(['EOSE', subId])); } else if (type === 'CLOSE') { @@ -49,6 +80,7 @@ wss.on('connection', (ws) => { } } catch (e) { // ignore invalid JSON + console.error(e); } }); }); diff --git a/scripts/agent/smoke-test.mjs b/scripts/agent/smoke-test.mjs index dc18f798..83cff00f 100644 --- a/scripts/agent/smoke-test.mjs +++ b/scripts/agent/smoke-test.mjs @@ -1,81 +1,31 @@ -import { JSDOM } from 'jsdom'; -import * as crypto from 'node:crypto'; -import { WebSocket } from 'ws'; +import { chromium } from '@playwright/test'; +import { spawn } from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; -import { spawn } from 'node:child_process'; -import * as NostrTools from 'nostr-tools'; -import 'fake-indexeddb/auto'; +import { fileURLToPath } from 'node:url'; -// Polyfills for Node.js environment -const dom = new JSDOM('', { url: 'http://localhost' }); -global.window = dom.window; -global.document = dom.window.document; -// Node 21+ has global.navigator which is read-only -if (!global.navigator) { - global.navigator = dom.window.navigator; -} -global.self = global.window; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const REPO_ROOT = path.resolve(__dirname, '../../'); -// localStorage Mock -global.localStorage = { - _data: {}, - getItem: function(k) { return this._data[k] || null; }, - setItem: function(k, v) { this._data[k] = String(v); }, - removeItem: function(k) { delete this._data[k]; }, - clear: function() { this._data = {}; } -}; - -// WebSocket -global.WebSocket = WebSocket; - -// Crypto -// Node.js crypto matches Web Crypto API in recent versions (v19+) via globalThis.crypto -// But we explicitly set it to ensure compatibility -if (!global.crypto) { - global.crypto = crypto.webcrypto || crypto; -} - -// TextEncoder/Decoder -global.TextEncoder = TextEncoder; -global.TextDecoder = TextDecoder; - -// NostrTools -// The application expects NostrTools in the global scope for some operations -global.NostrTools = NostrTools; -global.window.NostrTools = NostrTools; - -// Inject NostrTools into window for ensureNostrTools to find -dom.window.NostrTools = NostrTools; - - -// Import Application Modules -// Dynamic import to ensure globals are set before modules load -const { NostrClient } = await import('../../js/nostr/client.js'); -const { decryptDM } = await import('../../js/dmDecryptor.js'); - -// Configuration -const RELAY_PORT = 3334; // Use a different port than default to avoid conflicts -const RELAY_URL = `ws://127.0.0.1:${RELAY_PORT}`; -const ARTIFACTS_DIR = 'artifacts'; +const ARTIFACTS_DIR = path.join(REPO_ROOT, 'artifacts'); const TIMESTAMP = new Date().toISOString().replace(/[:.]/g, '-'); const LOG_FILE = path.join(ARTIFACTS_DIR, `smoke-${TIMESTAMP}.log`); const REPORT_FILE = path.join(ARTIFACTS_DIR, `smoke-report-${TIMESTAMP}.json`); +const RELAY_PORT = 8008; +const HTTP_PORT = 8001; + +// Ensure artifacts dir exists +if (!fs.existsSync(ARTIFACTS_DIR)) { + fs.mkdirSync(ARTIFACTS_DIR, { recursive: true }); +} -// Logger function log(message, type = 'INFO') { const msg = `[${new Date().toISOString()}] [${type}] ${message}`; console.log(msg); fs.appendFileSync(LOG_FILE, msg + '\n'); } -// Ensure artifacts dir exists -if (!fs.existsSync(ARTIFACTS_DIR)) { - fs.mkdirSync(ARTIFACTS_DIR); -} - -// Test State -let relayProcess = null; const stats = { steps: 0, failures: 0, @@ -98,186 +48,254 @@ function recordStep(name, success, error = null) { stats.details.push(detail); } -async function startRelay() { - log('Starting local relay...'); - const relayScript = path.resolve('scripts/agent/simple-relay.mjs'); - +async function startProcess(command, args, cwd, readyCheck) { return new Promise((resolve, reject) => { - relayProcess = spawn('node', [relayScript], { - env: { ...process.env, PORT: String(RELAY_PORT) }, - stdio: 'pipe' // Capture output - }); + const proc = spawn(command, args, { cwd, stdio: 'pipe' }); + let started = false; + const label = args.some(a => a.includes('relay')) ? 'RELAY' : command; - relayProcess.stdout.on('data', (data) => { - // log(`Relay: ${data.toString().trim()}`, 'DEBUG'); - if (data.toString().includes(`running on port ${RELAY_PORT}`)) { - resolve(); + const checkData = (data) => { + const output = data.toString(); + if (started) { + if (label === 'RELAY') log(`[RELAY] ${output.trim()}`, 'DEBUG'); + return; } + if (readyCheck(output)) { + started = true; + resolve(proc); + } + }; + + proc.stdout.on('data', (data) => { + checkData(data); + }); + proc.stderr.on('data', (data) => { + checkData(data); }); - relayProcess.stderr.on('data', (data) => { - log(`Relay Error: ${data.toString()}`, 'ERROR'); - }); - - relayProcess.on('error', (err) => { - reject(err); + proc.on('error', (err) => reject(err)); + proc.on('exit', (code) => { + if (!started) reject(new Error(`${command} exited early with code ${code}`)); }); // Timeout fallback setTimeout(() => { - if (relayProcess.exitCode === null) { - // Assume started if not exited after 2s and no output confirmed yet (fallback) - resolve(); - } else { - reject(new Error(`Relay process exited with code ${relayProcess.exitCode}`)); + if (!started) { + // For http server, sometimes it doesn't output much + if (command.includes('python') || command.includes('http.server')) { + started = true; + resolve(proc); + } else { + reject(new Error(`${command} timed out waiting for ready signal`)); + } } }, 3000); }); } -async function runTest() { +async function runSmokeTest() { + let relayProc, serverProc, browser; + try { - await startRelay(); - log(`Relay started at ${RELAY_URL}`); + log('Starting smoke test...'); - // --- 1. Client Initialization & Connection --- - log('Initializing NostrClient...'); - const client = new NostrClient(); + // 1. Start Relay + log('Starting local relay...'); + relayProc = await startProcess( + 'node', + ['scripts/agent/simple-relay.mjs'], + REPO_ROOT, + (output) => output.includes(`running on ws://localhost:${RELAY_PORT}`) || output.includes(`running on port ${RELAY_PORT}`) + ); + // Relay script in repo uses hardcoded port 8008 or env var PORT. + // I need to check if simple-relay.mjs respects PORT env var. + // Checking existing simple-relay.mjs content... it uses const PORT = 8008; + // Wait, I saw "const PORT = 8008;" in the file content. + // I should probably edit simple-relay.mjs to accept PORT env or just use 8008. + // Let's assume 8008 for now if I can't change it easily, but wait, I can pass it via env? + // The script I read: "const PORT = 8008;" -> It does NOT use process.env.PORT. + // So I must use 8008. + // Let's restart relayProc with correct expectation if needed, or just modify the script temporarily? + // Ah, the user prompt said "Start a local relay instance". + // I'll stick to 8008. - // Override relays - client.relays = [RELAY_URL]; - client.readRelays = [RELAY_URL]; - client.writeRelays = [RELAY_URL]; + } catch (e) { + log('Failed to start relay: ' + e.message, 'FATAL'); + // We can try to proceed if relay is already running? + // But let's fix the port logic. + } - // Init connection - try { - await client.init(); - recordStep('Client Init & Relay Connection', true); - } catch (e) { - recordStep('Client Init & Relay Connection', false, e); - throw e; // Critical failure - } + try { + // 2. Start HTTP Server + log('Starting HTTP server...'); + serverProc = await startProcess( + 'python3', + ['-m', 'http.server', String(HTTP_PORT)], + REPO_ROOT, + (output) => output.includes(`Serving HTTP on 0.0.0.0 port ${HTTP_PORT}`) + ); - // --- 2. Identity Setup (Ephemeral) --- - log('Generating ephemeral keys...'); - const sk1 = NostrTools.generateSecretKey(); - const pk1 = NostrTools.getPublicKey(sk1); - const hexSk1 = NostrTools.utils.bytesToHex(sk1); + // 3. Launch Browser + log('Launching browser...'); + browser = await chromium.launch({ headless: true }); // headless: true for CI + const context = await browser.newContext(); + const page = await context.newPage(); - const sk2 = NostrTools.generateSecretKey(); - const pk2 = NostrTools.getPublicKey(sk2); - const hexSk2 = NostrTools.utils.bytesToHex(sk2); + // 4. Navigate to app + log(`Navigating to http://localhost:${HTTP_PORT}...`); + await page.goto(`http://localhost:${HTTP_PORT}`, { waitUntil: 'networkidle' }); - log(`Alice: ${pk1}`); - log(`Bob: ${pk2}`); + // 5. Inject Test Logic + // We will do everything inside page.evaluate to access the window context and modules + log('Executing test logic in browser...'); - try { - // Login as Alice - await client.registerPrivateKeySigner({ privateKey: hexSk1, pubkey: pk1 }); - // For nsec login, client.pubkey is not set, but sessionActor is. - if (client.sessionActor.pubkey !== pk1) throw new Error('Session actor pubkey mismatch'); - recordStep('Login (Alice)', true); - } catch (e) { - recordStep('Login (Alice)', false, e); - throw e; - } + const testResult = await page.evaluate(async ({ relayUrl }) => { + const logs = []; + const steps = []; - // --- 3. Publish Video --- - log('Alice publishing video...'); - const videoPayload = { - title: 'Smoke Test Video', - description: 'This is a test video', - url: 'https://example.com/video.mp4', - thumbnail: 'https://example.com/thumb.jpg', - mode: 'live' - }; + function log(msg) { console.log(msg); logs.push(msg); } - let publishedEventId = null; - try { - const event = await client.publishVideo(videoPayload, pk1); - if (!event || !event.id) throw new Error('Publish returned invalid event'); - publishedEventId = event.id; - recordStep('Publish Video', true); - log(`Published Video ID: ${publishedEventId}`); - } catch (e) { - recordStep('Publish Video', false, e); - throw e; - } + try { + // Dynamic import of the client + // Note: The path must be relative to the URL being served + const { nostrClient } = await import('./js/nostr/defaultClient.js'); - // --- 4. Verify Publish (Read back) --- - log('Verifying published video...'); - // Wait a bit for relay to index/propagate - await new Promise(r => setTimeout(r, 500)); + // Wait for NostrTools + if (!window.NostrTools) { + await new Promise(r => setTimeout(r, 1000)); + if (!window.NostrTools) throw new Error("NostrTools not available on window"); + } + const NostrTools = window.NostrTools; - try { - // Fetch by ID - const fetched = await client.getEventById(publishedEventId); - if (!fetched) throw new Error('Event not found on relay'); - if (fetched.title !== videoPayload.title) throw new Error('Fetched event content mismatch'); - recordStep('Verify Video Publish', true); - } catch (e) { - recordStep('Verify Video Publish', false, e); - } + // --- Step 1: Init --- + // Reset relays to our local relay only + nostrClient.relays = [relayUrl]; + nostrClient.readRelays = [relayUrl]; + nostrClient.writeRelays = [relayUrl]; - // --- 5. Send DM --- - log('Alice sending DM to Bob...'); - const message = "Hello Bob, this is a smoke test."; - try { - // Bob's npub - const bobNpub = NostrTools.nip19.npubEncode(pk2); - const result = await client.sendDirectMessage(bobNpub, message); - if (!result.ok) throw new Error(`DM send failed: ${result.error}`); - recordStep('Send DM', true); - } catch (e) { - recordStep('Send DM', false, e); - throw e; - } + // Re-init or connect + await nostrClient.init(); + // Force connection again just in case init was already called by the app with defaults + await nostrClient.connectToRelays(); - // --- 6. Decrypt DM (Bob) --- - log('Bob receiving and decrypting DM...'); + steps.push({ name: 'Init & Connect', success: true }); - // We need to simulate Bob receiving the message. - // We can query DMs for Bob. - // But current client is logged in as Alice. - // We can either logout and login as Bob, or just query DMs and manually decrypt using Bob's key. - // Let's logout and login as Bob to verify the full flow in client. + // --- Step 2: Login (Alice) --- + const sk1 = NostrTools.generateSecretKey(); + const pk1 = NostrTools.getPublicKey(sk1); + const hexSk1 = NostrTools.utils.bytesToHex(sk1); - try { - client.logout(); - await client.registerPrivateKeySigner({ privateKey: hexSk2, pubkey: pk2 }); - log('Logged in as Bob'); + await nostrClient.registerPrivateKeySigner({ privateKey: hexSk1, pubkey: pk1 }); + if (nostrClient.sessionActor?.pubkey !== pk1) throw new Error(`Login failed: sessionActor.pubkey (${nostrClient.sessionActor?.pubkey}) !== ${pk1}`); - // Wait for DM to arrive - await new Promise(r => setTimeout(r, 500)); + steps.push({ name: 'Login (Alice)', success: true }); - // List DMs - const messages = await client.listDirectMessages(pk2); - // messages should be decrypted objects + // --- Step 3: Publish Video --- + const videoPayload = { + title: 'Smoke Test Video ' + Date.now(), + description: 'Test Description', + url: 'https://example.com/video.mp4', + thumbnail: 'https://example.com/thumb.jpg', + mode: 'live' + }; - const found = messages.find(m => m.plaintext === message); + const event = await nostrClient.publishVideo(videoPayload, pk1); + if (!event || !event.id) throw new Error("Publish failed"); - if (found) { - recordStep('Decrypt DM', true); - log(`Decrypted message: ${found.plaintext}`); - } else { - // Debug info - log(`Found ${messages.length} messages for Bob.`); - messages.forEach(m => log(`Msg: ${m.plaintext}, Error: ${JSON.stringify(m.errors)}`)); - throw new Error('Target DM not found or not decrypted'); + steps.push({ name: 'Publish Video', success: true }); + + // --- Step 4: Verify Video --- + // Wait a bit + await new Promise(r => setTimeout(r, 1500)); + + // Fetch directly + const fetched = await nostrClient.getEventById(event.id); + if (!fetched) { + // Try debugging + const raw = await nostrClient.fetchRawEventById(event.id); + throw new Error(`Could not fetch published video ${event.id}. Raw result: ${raw ? 'found' : 'null'}`); + } + if (fetched.title !== videoPayload.title) throw new Error("Video content mismatch"); + + steps.push({ name: 'Verify Video', success: true }); + + // --- Step 5: DM (Alice -> Bob) --- + const sk2 = NostrTools.generateSecretKey(); + const pk2 = NostrTools.getPublicKey(sk2); + const hexSk2 = NostrTools.utils.bytesToHex(sk2); + const npub2 = NostrTools.nip19.npubEncode(pk2); + + const msg = "Secret Message " + Date.now(); + const dmResult = await nostrClient.sendDirectMessage(npub2, msg); + if (!dmResult.ok) throw new Error("DM send failed: " + dmResult.error); + + steps.push({ name: 'Send DM', success: true }); + + // --- Step 6: Decrypt DM (Bob) --- + // Switch to Bob + nostrClient.logout(); + await nostrClient.registerPrivateKeySigner({ privateKey: hexSk2, pubkey: pk2 }); + + await new Promise(r => setTimeout(r, 500)); + + const dms = await nostrClient.listDirectMessages(pk2); + const found = dms.find(m => m.plaintext === msg); + + if (!found) { + // Log details + return { + success: false, + steps, + logs, + error: "DM not found. Found: " + dms.map(d => d.plaintext).join(', ') + }; + } + + steps.push({ name: 'Decrypt DM', success: true }); + + return { success: true, steps, logs }; + + } catch (e) { + return { success: false, steps, logs, error: e.message, stack: e.stack }; } + }, { relayUrl: `ws://localhost:${RELAY_PORT}` }); - } catch (e) { - recordStep('Decrypt DM', false, e); + // Process results + if (testResult.logs) { + testResult.logs.forEach(l => log(`[Browser] ${l}`)); + } + + if (testResult.steps) { + testResult.steps.forEach(s => recordStep(s.name, s.success)); + } + + if (!testResult.success) { + throw new Error(testResult.error || "Unknown browser test failure"); } } catch (err) { - log(`Test suite failed: ${err.message}`, 'FATAL'); - if (err.stack) log(err.stack, 'FATAL'); + log(`Test failed: ${err.message}`, 'FATAL'); + recordStep('Smoke Test Suite', false, err); + // Take screenshot if browser is active + if (browser) { + try { + const page = browser.contexts()[0].pages()[0]; + if (page) { + await page.screenshot({ path: path.join(ARTIFACTS_DIR, `failure-${TIMESTAMP}.png`) }); + log(`Screenshot saved to failure-${TIMESTAMP}.png`); + } + } catch (e) { + log('Failed to capture screenshot: ' + e.message); + } + } } finally { // Cleanup - if (relayProcess) { - log('Stopping relay...'); - relayProcess.kill(); + if (browser) await browser.close(); + if (serverProc) { + try { process.kill(serverProc.pid); } catch (e) { /* ignore */ } + } + if (relayProc) { + try { process.kill(relayProc.pid); } catch (e) { /* ignore */ } } // Report @@ -287,17 +305,9 @@ async function runTest() { logFile: LOG_FILE }, null, 2)); - console.log(`\nTest Finished.`); - console.log(`Pass: ${stats.steps - stats.failures}/${stats.steps}`); - console.log(`Log: ${LOG_FILE}`); - console.log(`Report: ${REPORT_FILE}`); - - if (stats.failures > 0) { - process.exit(1); - } else { - process.exit(0); - } + console.log(`Report saved to ${REPORT_FILE}`); + if (stats.failures > 0) process.exit(1); } } -runTest(); +runSmokeTest();