From 990b3c1736a1fc2cbde92625e49b6632b1bde5b0 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Thu, 29 May 2025 22:36:44 +0500 Subject: [PATCH 1/8] feat: rewrite player parsing to js and add it them to repo --- .env.sample | 8 +- app/components/ReleasePlayer/PlayerParsing.ts | 16 +- package-lock.json | 1034 ++++++++++++++++- package.json | 2 + player-parsers/index.ts | 45 + player-parsers/kodik.ts | 95 ++ player-parsers/libria.ts | 17 + player-parsers/shared.ts | 33 + player-parsers/sibnet.ts | 59 + 9 files changed, 1275 insertions(+), 34 deletions(-) create mode 100644 player-parsers/index.ts create mode 100644 player-parsers/kodik.ts create mode 100644 player-parsers/libria.ts create mode 100644 player-parsers/shared.ts create mode 100644 player-parsers/sibnet.ts diff --git a/.env.sample b/.env.sample index c2f5243..dcb7e8b 100644 --- a/.env.sample +++ b/.env.sample @@ -1,5 +1,5 @@ -# пример заполнения: example.com -NEXT_PUBLIC_KODIK_PARSER_DOMAIN= # Домен парсера кодика, требуется для просмотра с данного источника -NEXT_PUBLIC_ANILIBRIA_PARSER_DOMAIN= # Домен парсера анилибрии, если не заполнено, используется официальное апи -NEXT_PUBLIC_SIBNET_PARSER_DOMAIN= # Домен парсера сибнет, требуется для просмотра с данного источника +# пример заполнения: https://example.com, http://0.0.0.0:80 +NEXT_PUBLIC_KODIK_PARSER_URL= # Домен парсера кодика, требуется для просмотра с данного источника +NEXT_PUBLIC_ANILIBRIA_PARSER_URL= # Домен парсера анилибрии, если не заполнено, используется официальное апи +NEXT_PUBLIC_SIBNET_PARSER_URL= # Домен парсера сибнет, требуется для просмотра с данного источника # --- \ No newline at end of file diff --git a/app/components/ReleasePlayer/PlayerParsing.ts b/app/components/ReleasePlayer/PlayerParsing.ts index 3d40092..a9e711e 100644 --- a/app/components/ReleasePlayer/PlayerParsing.ts +++ b/app/components/ReleasePlayer/PlayerParsing.ts @@ -75,16 +75,16 @@ export const _fetchKodikManifest = async ( setPlayerError: (state) => void ) => { // Fetch episode links via edge function - if (!process.env.NEXT_PUBLIC_KODIK_PARSER_DOMAIN) { + if (!process.env.NEXT_PUBLIC_KODIK_PARSER_URL) { setPlayerError({ message: "Источник не настроен", - detail: "переменная 'NEXT_PUBLIC_KODIK_PARSER_DOMAIN' не обнаружена", + detail: "переменная 'NEXT_PUBLIC_KODIK_PARSER_URL' не обнаружена", }); return { manifest: null, poster: null }; } const data = await _fetchPlayer( - `https://${process.env.NEXT_PUBLIC_KODIK_PARSER_DOMAIN}/?url=${url}&player=kodik`, + `${process.env.NEXT_PUBLIC_KODIK_PARSER_URL}/?url=${url}&player=kodik`, setPlayerError ); if (data) { @@ -213,9 +213,9 @@ export const _fetchAnilibriaManifest = async ( const epid = url.split("?id=")[1].split("&ep=")[1]; const _url = `https://api.anilibria.tv/v3/title?id=${id}`; let data = null; - if (process.env.NEXT_PUBLIC_ANILIBRIA_PARSER_DOMAIN) { + if (process.env.NEXT_PUBLIC_ANILIBRIA_PARSER_URL) { data = await _fetchPlayer( - `https://${process.env.NEXT_PUBLIC_ANILIBRIA_PARSER_DOMAIN}/?url=${_url}&player=libria`, + `${process.env.NEXT_PUBLIC_ANILIBRIA_PARSER_URL}/?url=${_url}&player=libria`, setPlayerError ); } else { @@ -243,15 +243,15 @@ export const _fetchSibnetManifest = async ( setPlayerError: (state) => void ) => { // Fetch data via cloud endpoint - if (!process.env.NEXT_PUBLIC_SIBNET_PARSER_DOMAIN) { + if (!process.env.NEXT_PUBLIC_SIBNET_PARSER_URL) { setPlayerError({ message: "Источник не настроен", - detail: "переменная 'NEXT_PUBLIC_SIBNET_PARSER_DOMAIN' не обнаружена", + detail: "переменная 'NEXT_PUBLIC_SIBNET_PARSER_URL' не обнаружена", }); return { manifest: null, poster: null }; } const data = await _fetchPlayer( - `https://${process.env.NEXT_PUBLIC_SIBNET_PARSER_DOMAIN}/?url=${url}`, + `${process.env.NEXT_PUBLIC_SIBNET_PARSER_URL}/?url=${url}&player=sibnet`, setPlayerError ); if (data) { diff --git a/package-lock.json b/package-lock.json index 1e17799..97dc195 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "apexcharts": "^3.52.0", "deepmerge-ts": "^7.1.0", + "express": "^5.1.0", "flowbite": "^2.4.1", "flowbite-react": "^0.11.7", "hls-video-element": "^1.5.0", @@ -24,6 +25,7 @@ "react-toastify": "^11.0.5", "swiper": "^11.1.4", "swr": "^2.2.5", + "tsx": "^4.19.4", "videojs-video-element": "^1.4.1", "zustand": "^4.5.4" }, @@ -91,6 +93,406 @@ "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", @@ -1424,6 +1826,40 @@ "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", "license": "MIT" }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -1856,6 +2292,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1932,6 +2388,15 @@ "node": ">=10.16.0" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -1955,7 +2420,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -1969,7 +2433,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -2144,6 +2607,45 @@ "dev": true, "license": "MIT" }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, "node_modules/copy-webpack-plugin": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", @@ -2371,6 +2873,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -2432,7 +2943,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -2449,6 +2959,12 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, "node_modules/electron-to-chromium": { "version": "1.5.131", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.131.tgz", @@ -2463,6 +2979,15 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/enhanced-resolve": { "version": "5.18.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", @@ -2548,7 +3073,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2558,7 +3082,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2604,7 +3127,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -2660,6 +3182,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2671,6 +3233,12 @@ "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/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3160,6 +3728,15 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -3171,6 +3748,69 @@ "node": ">=0.8.x" } }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3286,6 +3926,23 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3521,6 +4178,24 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3586,7 +4261,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -3611,7 +4285,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -3643,7 +4316,6 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dev": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -3786,7 +4458,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3873,7 +4544,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3927,6 +4597,34 @@ "integrity": "sha512-AlW8ymcDKZuKtzXCUmEy4nOcHRkebnShH6t6hC2+QJQP0WXlTUSSO9Kp22uSEYdCgpwkXEJsfOhqxrgO2tDctQ==", "license": "Apache-2.0" }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3980,7 +4678,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/internal-slot": { @@ -3998,6 +4695,15 @@ "node": ">= 0.4" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4274,6 +4980,12 @@ "node": ">=8" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -4726,7 +5438,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4747,6 +5458,27 @@ "integrity": "sha512-9P2FuUHnZZ3iji+2RQk7Zkh5AmZTnOG5fODACnjhCVveX1McY3jmCRHofIEI+yTBqplz7LXy48c7fQ3Uigp88w==", "license": "MIT" }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4897,6 +5629,15 @@ "dev": true, "license": "MIT" }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5022,7 +5763,6 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5131,11 +5871,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -5228,6 +5979,15 @@ "node": ">=6" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5279,6 +6039,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/path-type": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", @@ -5518,6 +6287,19 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5528,6 +6310,21 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5558,6 +6355,30 @@ "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/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -5750,7 +6571,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -5805,6 +6625,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5852,7 +6688,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -5904,6 +6739,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -5982,6 +6823,49 @@ "node": ">=10" } }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -5992,6 +6876,21 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -6041,6 +6940,12 @@ "node": ">= 0.4" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6066,7 +6971,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6086,7 +6990,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6103,7 +7006,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -6122,7 +7024,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -6200,6 +7101,15 @@ "dev": true, "license": "MIT" }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -6909,6 +7819,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -6947,6 +7866,25 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6973,6 +7911,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -7104,6 +8077,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unrs-resolver": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.3.3.tgz", @@ -7188,6 +8170,15 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/videojs-video-element": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/videojs-video-element/-/videojs-video-element-1.4.1.tgz", @@ -7510,7 +8501,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/yaml": { diff --git a/package.json b/package.json index 786c656..9532e1d 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "apexcharts": "^3.52.0", "deepmerge-ts": "^7.1.0", + "express": "^5.1.0", "flowbite": "^2.4.1", "flowbite-react": "^0.11.7", "hls-video-element": "^1.5.0", @@ -25,6 +26,7 @@ "react-toastify": "^11.0.5", "swiper": "^11.1.4", "swr": "^2.2.5", + "tsx": "^4.19.4", "videojs-video-element": "^1.4.1", "zustand": "^4.5.4" }, diff --git a/player-parsers/index.ts b/player-parsers/index.ts new file mode 100644 index 0000000..d66c34a --- /dev/null +++ b/player-parsers/index.ts @@ -0,0 +1,45 @@ +import { asJSON } from "./shared"; +import { getAnilibriaURL } from "./libria"; +import { getSibnetURL } from "./sibnet"; +import { getKodikURL } from "./kodik"; + +import express from "express"; +const app = express(); + +const host = "0.0.0.0"; +const port = 7000; +const allowedPlayers = ["kodik", "libria", "sibnet"]; + +app.get("/", (req, res) => { + const url = req.query.url; + const player = req.query.player; + + if (!url) { + asJSON(res, { message: "no 'url' query provided" }, 400) + return + } + + if (!player) { + asJSON(res, { message: "no 'player' query provided" }, 400) + return + } + + switch (player) { + case "libria": + getAnilibriaURL(res, url) + return + case "sibnet": + getSibnetURL(res, url) + return + case "kodik": + getKodikURL(res, url) + return + default: + asJSON(res, { message: `player '${player}' is not supported. choose one of: ${allowedPlayers.join(", ")}` }, 400) + return + } +}); + +app.listen(port, host, function () { + console.log(`Server listens http://${host}:${port}`); +}); diff --git a/player-parsers/kodik.ts b/player-parsers/kodik.ts new file mode 100644 index 0000000..19b0ebd --- /dev/null +++ b/player-parsers/kodik.ts @@ -0,0 +1,95 @@ +import { asJSON, randomUA } from "./shared"; +const altDomains = ["kodik.info", "aniqit.com", "kodik.cc", "kodik.biz"]; + +export async function getKodikURL(res, url: string) { + const origDomain = url.replace("https://", "").split("/")[0]; + let domain = url.replace("https://", "").split("/")[0]; + + if (!altDomains.includes(domain)) { + asJSON(res, { message: "Wrong url provided for player kodik" }, 400); + return; + } + + let user_agent = randomUA(); + + let pageRes = await fetch(url, { + headers: { + "User-Agent": user_agent, + }, + }); + + if (!pageRes.ok) { + for (let i = 0; i < altDomains.length - 1; i++) { + if (url.includes(altDomains[i])) { + continue; + } + + user_agent = randomUA(); + const altDomain = altDomains[i]; + const altUrl = url.replace( + `https://${origDomain}/`, + `https://${altDomain}/` + ); + + domain = altDomain; + pageRes = await fetch(altUrl, { + headers: { + "User-Agent": user_agent, + }, + }); + + if (pageRes.ok) { + break; + } + } + } + + if (!pageRes.ok) { + asJSON(res, { message: "KODIK: failed to load page" }, 500); + return; + } + + const pageData = await pageRes.text(); + const urlParamsRe = /var urlParams = .*;$/m; + const urlParamsMatch = urlParamsRe.exec(pageData); + + if (!urlParamsMatch || urlParamsMatch.length == 0) { + asJSON(res, { message: `KODIK: failed to find data to parse` }, 500); + return; + } + + const urlParamsStr = urlParamsMatch[0] + .replace("var urlParams = '", "") + .replace("';", ""); + + const urlStr = url.replace(`https://${origDomain}/`, ""); + const type = urlStr.split("/")[0]; + const id = urlStr.split("/")[1]; + const hash = urlStr.split("/")[2]; + + const urlParams = JSON.parse(urlParamsStr); + urlParams["type"] = type; + urlParams["id"] = id; + urlParams["hash"] = hash; + + const formData = new FormData(); + for (const [key, value] of Object.entries(urlParams)) { + formData.append(key, value as any); + } + + const linksRes = await fetch(`https://${domain}/ftor`, { + method: "POST", + body: formData, + headers: { + "User-Agent": user_agent, + }, + }); + + if (!linksRes.ok) { + asJSON(res, { message: `KODIK: failed to get links` }, 500); + return; + } + + asJSON(res, await linksRes.json(), 200); + return; +} diff --git a/player-parsers/libria.ts b/player-parsers/libria.ts new file mode 100644 index 0000000..a907074 --- /dev/null +++ b/player-parsers/libria.ts @@ -0,0 +1,17 @@ +import { asJSON } from "./shared"; + +export async function getAnilibriaURL(res, url: string) { + + if (!url.includes("anilibria")) { + asJSON(res, { message: "Wrong url provided for player libria" }, 400); + return + } + + let apiRes = await fetch(url); + if (!apiRes.ok) { + asJSON(res, { message: "LIBRIA: failed to get api response" }, 500); + return + } + asJSON(res, await apiRes.json(), 200); + return +} diff --git a/player-parsers/shared.ts b/player-parsers/shared.ts new file mode 100644 index 0000000..3ce9203 --- /dev/null +++ b/player-parsers/shared.ts @@ -0,0 +1,33 @@ +export const corsHeaders = { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET,HEAD,POST,OPTIONS", + "Cache-Control": "no-cache", +}; + +export const resHeaders = { + ...corsHeaders, + "Content-Type": "application/json", +}; + +export const USERAGENTS = [ + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Windows; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8", + "Mozilla/5.0 (Windows NT 10.0; Windows; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15", + "Mozilla/5.0 (Windows NT 10.0; Windows; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36", +]; + +export function asJSON(res, object: any, status: number) { + res.status(status).type('application/json'); + res.set(corsHeaders) + res.send(JSON.stringify(object)); +} + +export function randomUA() { + return USERAGENTS[Math.floor(Math.random() * USERAGENTS.length - 1)] +} \ No newline at end of file diff --git a/player-parsers/sibnet.ts b/player-parsers/sibnet.ts new file mode 100644 index 0000000..5df85b8 --- /dev/null +++ b/player-parsers/sibnet.ts @@ -0,0 +1,59 @@ +import { asJSON, randomUA } from "./shared"; + +export async function getSibnetURL(res, url: string) { + + if (!url.includes("sibnet")) { + asJSON(res, { message: "Wrong url provided for player sibnet" }, 400); + return + } + + const user_agent = randomUA(); + + let pageRes = await fetch(url, { + headers: { + "User-Agent": user_agent, + }, + }); + if (!pageRes.ok) { + asJSON(res, { message: `SIBNET:${pageRes.status}: failed to load page` }, 500) + return + } + const pageData = await pageRes.text(); + const videoRe = /\/v\/.*?\.mp4/; + const videoMatch = videoRe.exec(pageData); + + if (!videoMatch || videoMatch.length == 0) { + asJSON(res, { message: `SIBNET: failed to find data to parse` }, 500) + return + } + + const posterRe = /\/upload\/cover\/.*?\.jpg/; + const posterMatch = posterRe.exec(pageData); + + const actualVideoRes = await fetch( + `https://video.sibnet.ru${videoMatch[0]}`, + { + headers: { + "User-Agent": user_agent, + Referer: url, + }, + redirect: "manual", + } + ); + + if (!actualVideoRes.headers.get("location")) { + asJSON(res, { message: `SIBNET: failed to get video link` }, 500) + return + } + + const video = actualVideoRes.headers.get("location"); + const poster = + posterMatch ? + posterMatch.length > 0 ? + `https://st.sibnet.ru${posterMatch[0]}` + : null + : null; + + asJSON(res, { video, poster }, 200) + return +} From 51a919e2b292bfeda454d54d5c0dcff0673abadf Mon Sep 17 00:00:00 2001 From: Radiquum Date: Thu, 29 May 2025 22:42:13 +0500 Subject: [PATCH 2/8] chore: move player-parsing deps to subfolder --- package-lock.json | 1034 +---------------------- package.json | 2 - player-parsers/package-lock.json | 1311 ++++++++++++++++++++++++++++++ player-parsers/package.json | 14 + 4 files changed, 1347 insertions(+), 1014 deletions(-) create mode 100644 player-parsers/package-lock.json create mode 100644 player-parsers/package.json diff --git a/package-lock.json b/package-lock.json index 97dc195..1e17799 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "apexcharts": "^3.52.0", "deepmerge-ts": "^7.1.0", - "express": "^5.1.0", "flowbite": "^2.4.1", "flowbite-react": "^0.11.7", "hls-video-element": "^1.5.0", @@ -25,7 +24,6 @@ "react-toastify": "^11.0.5", "swiper": "^11.1.4", "swr": "^2.2.5", - "tsx": "^4.19.4", "videojs-video-element": "^1.4.1", "zustand": "^4.5.4" }, @@ -93,406 +91,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", @@ -1826,40 +1424,6 @@ "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", "license": "MIT" }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -2292,26 +1856,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2388,15 +1932,6 @@ "node": ">=10.16.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2420,6 +1955,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -2433,6 +1969,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -2607,45 +2144,6 @@ "dev": true, "license": "MIT" }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "node_modules/copy-webpack-plugin": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", @@ -2873,15 +2371,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -2943,6 +2432,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -2959,12 +2449,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.131", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.131.tgz", @@ -2979,15 +2463,6 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/enhanced-resolve": { "version": "5.18.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", @@ -3073,6 +2548,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3082,6 +2558,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3127,6 +2604,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -3182,46 +2660,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3233,12 +2671,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/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3728,15 +3160,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -3748,69 +3171,6 @@ "node": ">=0.8.x" } }, - "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3926,23 +3286,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4178,24 +3521,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4261,6 +3586,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -4285,6 +3611,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -4316,6 +3643,7 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -4458,6 +3786,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4544,6 +3873,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4597,34 +3927,6 @@ "integrity": "sha512-AlW8ymcDKZuKtzXCUmEy4nOcHRkebnShH6t6hC2+QJQP0WXlTUSSO9Kp22uSEYdCgpwkXEJsfOhqxrgO2tDctQ==", "license": "Apache-2.0" }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4678,6 +3980,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, "node_modules/internal-slot": { @@ -4695,15 +3998,6 @@ "node": ">= 0.4" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4980,12 +4274,6 @@ "node": ">=8" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -5438,6 +4726,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5458,27 +4747,6 @@ "integrity": "sha512-9P2FuUHnZZ3iji+2RQk7Zkh5AmZTnOG5fODACnjhCVveX1McY3jmCRHofIEI+yTBqplz7LXy48c7fQ3Uigp88w==", "license": "MIT" }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5629,15 +4897,6 @@ "dev": true, "license": "MIT" }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5763,6 +5022,7 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5871,22 +5131,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -5979,15 +5228,6 @@ "node": ">=6" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6039,15 +5279,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/path-type": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", @@ -6287,19 +5518,6 @@ "react-is": "^16.13.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6310,21 +5528,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6355,30 +5558,6 @@ "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/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -6571,6 +5750,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -6625,22 +5805,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6688,6 +5852,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -6739,12 +5904,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -6823,49 +5982,6 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -6876,21 +5992,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -6940,12 +6041,6 @@ "node": ">= 0.4" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6971,6 +6066,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6990,6 +6086,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -7006,6 +6103,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -7024,6 +6122,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -7101,15 +6200,6 @@ "dev": true, "license": "MIT" }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -7819,15 +6909,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -7866,25 +6947,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tsx": { - "version": "4.19.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", - "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.25.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7911,41 +6973,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -8077,15 +7104,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/unrs-resolver": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.3.3.tgz", @@ -8170,15 +7188,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/videojs-video-element": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/videojs-video-element/-/videojs-video-element-1.4.1.tgz", @@ -8501,6 +7510,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, "license": "ISC" }, "node_modules/yaml": { diff --git a/package.json b/package.json index 9532e1d..786c656 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "dependencies": { "apexcharts": "^3.52.0", "deepmerge-ts": "^7.1.0", - "express": "^5.1.0", "flowbite": "^2.4.1", "flowbite-react": "^0.11.7", "hls-video-element": "^1.5.0", @@ -26,7 +25,6 @@ "react-toastify": "^11.0.5", "swiper": "^11.1.4", "swr": "^2.2.5", - "tsx": "^4.19.4", "videojs-video-element": "^1.4.1", "zustand": "^4.5.4" }, diff --git a/player-parsers/package-lock.json b/player-parsers/package-lock.json new file mode 100644 index 0000000..d628dca --- /dev/null +++ b/player-parsers/package-lock.json @@ -0,0 +1,1311 @@ +{ + "name": "player-parsers", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "player-parsers", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "express": "^5.1.0", + "tsx": "^4.19.4" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "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/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 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==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "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", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.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" + } + } +} diff --git a/player-parsers/package.json b/player-parsers/package.json new file mode 100644 index 0000000..d0fb9e2 --- /dev/null +++ b/player-parsers/package.json @@ -0,0 +1,14 @@ +{ + "name": "player-parsers", + "version": "1.0.0", + "description": "Player Parsing for AniX", + "scripts": { + "serve": "npx tsx ./index.ts" + }, + "author": "", + "license": "MIT", + "dependencies": { + "express": "^5.1.0", + "tsx": "^4.19.4" + } +} From 9a2a5472177456b3bc7500d8bbc5de79c7814c72 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Thu, 29 May 2025 23:03:35 +0500 Subject: [PATCH 3/8] feat: add docker files for player-parsers --- player-parsers/.dockerignore | 2 ++ player-parsers/Dockerfile | 10 ++++++++++ 2 files changed, 12 insertions(+) create mode 100644 player-parsers/.dockerignore create mode 100644 player-parsers/Dockerfile diff --git a/player-parsers/.dockerignore b/player-parsers/.dockerignore new file mode 100644 index 0000000..4400aea --- /dev/null +++ b/player-parsers/.dockerignore @@ -0,0 +1,2 @@ +node_modules +README.md \ No newline at end of file diff --git a/player-parsers/Dockerfile b/player-parsers/Dockerfile new file mode 100644 index 0000000..0466a41 --- /dev/null +++ b/player-parsers/Dockerfile @@ -0,0 +1,10 @@ +FROM node:23-alpine + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY *.ts ./ + +CMD ["npm", "run", "serve"] \ No newline at end of file From 8486e9eb82e5bf04c7021e4924ce1d3ffc7a2fc0 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Thu, 29 May 2025 23:23:14 +0500 Subject: [PATCH 4/8] chore/player-parsers: Label docker image to github repo --- player-parsers/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/player-parsers/Dockerfile b/player-parsers/Dockerfile index 0466a41..871f0b2 100644 --- a/player-parsers/Dockerfile +++ b/player-parsers/Dockerfile @@ -1,5 +1,7 @@ FROM node:23-alpine +LABEL org.opencontainers.image.source=https://github.com/radiquum/anix + WORKDIR /app COPY package.json package-lock.json ./ From a55a6c93dc9983a99ea1afdfe786613d49c4d9d4 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Fri, 30 May 2025 01:15:37 +0500 Subject: [PATCH 5/8] feat/player-parsers: add README --- player-parsers/README.RU.md | 115 ++++++++++++++++++++++++++++++++++++ player-parsers/README.md | 115 ++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 player-parsers/README.RU.md create mode 100644 player-parsers/README.md diff --git a/player-parsers/README.RU.md b/player-parsers/README.RU.md new file mode 100644 index 0000000..e107277 --- /dev/null +++ b/player-parsers/README.RU.md @@ -0,0 +1,115 @@ +# AniX - Player Parsers + +Данный под-проект позволяет получить прямые ссылки на видеофайлы с источников Sibnet, Kodik, Libria + +Он может использоваться как для основного проекта AniX, так и как отдельный сервис. + +В основном проекте, парсеры используются для работы своего плеере, если вам не важна данная функция, вы можете не развёртывать данный суб-сервис. + +Лицензия: [MIT](../LICENSE) + +## Использование + +В строке веб-браузера необходимо ввести: + +`://<:port>/?url=&player=` + +где: + +- http|https - схема по которой будет осуществляться подключение к сервису +- ip|domain - IP адрес или домен на котором находится сервис +- :port - порт сервиса, опционально +- VIDEO_URL - ссылка на видео от источника +- PLAYER_SOURCE - источник, один из: kodik, sibnet, libria + +Ответ: + +- 500|400: произошла ошибка, подробнее в строке `message` в теле ответа +- 200: запрос прошёл успешно + +## Развёртывание + +> В связи с спецификой источников, рекомендуется использовать виртуальный сервер в россии или нидерландах, т.к. они могут быть недоступны из других стран. +> +> Из-за данной специфики, парсеры невозможно развернуть на edge сервисах, таких как CloudFlare Workers или Deno, а только на отдельном сервере. + +
+С помощью docker + +Требования: + +- [docker](https://docs.docker.com/engine/install/) + +### Пре-билд + +1. выполните комманду: + +`docker run -d --name anix-player -p 7000:7000 ghcr.io/radiquum/anix-player-parser:29-05-2025` + +### Ручной билд + +Доп. Требования: + +- [git](https://git-scm.com/) + +1. Клонируйте репозиторий `git clone https://github.com/Radiquum/AniX` +2. Переместитесь в директорию репозитория `cd AniX` +3. Переместитесь в директорию парсеров `cd player-parsers` +4. Выполните команду `docker build -t anix-player-parser .` +5. После окончания, выполните команду: `docker run -d --restart always --name anix-player -p 7000:7000 anix-player-parser` + +### Обозначения + +- -d - запустить контейнер в фоне +- --restart always - всегда запускать после перезагрузки сервера +- --name - название контейнера +- -p - порт контейнера который будет доступен из вне. ПОРТ:7000 + +### После развёртывания + +Сервис будет доступен по адресу: `http://<ВАШ IP><:ВАШ ПОРТ>/` + +### Примечание + +Для использования своего домена и поддержки протокола https, вы можете использовать traefik или другой reverse-proxy, с сертификатом SSL. + +Полезные ссылки: + +- [Конвертер из команды docker run в синтакс для docker compose](https://it-tools.tech/docker-run-to-docker-compose-converter) +- [Как настроить traefik + свой домен + SSL](https://letmegooglethat.com/?q=how+to+setup+traefik+with+custom+domain+and+ssl+certificate+from+lets+encrypt%3F) + +
+ +
+С помощью pm2 + +Требования: + +- [git](https://git-scm.com/) +- [nodejs 23+ с npm](http://nodejs.org/) +- [pm2](https://pm2.keymetrics.io/) + +Инструкция: + +1. Клонируйте репозиторий `git clone https://github.com/Radiquum/AniX` +2. Переместитесь в директорию репозитория `cd AniX` +3. Переместитесь в директорию парсеров `cd player-parsers` +4. Выполните команду `pm2 start index.ts -n anix-player-parser` + +### Обозначения + +- -n - название сервиса в pm2 + +### После развёртывания + +Сервис будет доступен по адресу: `http://<ВАШ IP>:7000/` + +### Примечание + +Для автоматического запуска приложения, рекомендуется настроить pm2 на автозапуск, с помощью команды: `pm2 startup` + +Полезные ссылки: + +- [PM2: подходим к вопросу процесс-менеджмента с умом @ Habr](https://habr.com/ru/articles/480670/) + +
\ No newline at end of file diff --git a/player-parsers/README.md b/player-parsers/README.md new file mode 100644 index 0000000..16b78d1 --- /dev/null +++ b/player-parsers/README.md @@ -0,0 +1,115 @@ +# AniX - Player Parsers + +This sub-project allows obtaining direct video file links from sources Sibnet, Kodik, Libria + +It can be used both for the main AniX project and as a standalone service. + +In the main project, the parsers are used to operate the internal player. If this function is not important to you, you may choose not to deploy this sub-service. + +License: [MIT](../LICENSE) + +## Usage + +In the web browser address bar, enter: + +`://<:port>/?url=&player=` + +where: + +- http|https - the scheme used to connect to the service +- ip|domain - IP address or domain where the service is hosted +- :port - service port, optional +- VIDEO_URL - the link to the video from the source +- PLAYER_SOURCE - the source, one of: kodik, sibnet, libria + +Response: + +- 500|400: an error occurred, see the `message` field in the response body for details +- 200: request was successful + +## Deployment + +> Due to the nature of the sources, it is recommended to use a virtual server in Russia or the Netherlands, as they may be inaccessible from other countries. +> +> Because of this specificity, the parsers cannot be deployed on edge services like CloudFlare Workers or Deno, only on a dedicated server. + +
+Using docker + +Requirements: + +- [docker](https://docs.docker.com/engine/install/) + +### Pre-built + +1. Run the command: + +`docker run -d --name anix-player -p 7000:7000 ghcr.io/radiquum/anix-player-parser:29-05-2025` + +### Manual build + +Additional Requirements: + +- [git](https://git-scm.com/) + +1. Clone the repository `git clone https://github.com/Radiquum/AniX` +2. Navigate to the repository directory `cd AniX` +3. Navigate to the parsers directory `cd player-parsers` +4. Run the command `docker build -t anix-player-parser .` +5. Once finished, run the command: `docker run -d --restart always --name anix-player -p 7000:7000 anix-player-parser` + +### Legend + +- -d - run the container in background +- --restart always - always restart after server reboot +- --name - container name +- -p - container port accessible externally. PORT:7000 + +### After deployment + +The service will be available at: `http://<:YOUR PORT>/` + +### Note + +To use your own domain and support the https protocol, you can use traefik or another reverse-proxy with an SSL certificate. + +Useful links: + +- [Docker run to docker compose syntax converter](https://it-tools.tech/docker-run-to-docker-compose-converter) +- [How to setup traefik + custom domain + SSL](https://letmegooglethat.com/?q=how+to+setup+traefik+with+custom+domain+and+ssl+certificate+from+lets+encrypt%3F) + +
+ +
+Using pm2 + +Requirements: + +- [git](https://git-scm.com/) +- [nodejs 23+ with npm](http://nodejs.org/) +- [pm2](https://pm2.keymetrics.io/) + +Instructions: + +1. Clone the repository `git clone https://github.com/Radiquum/AniX` +2. Navigate to the repository directory `cd AniX` +3. Navigate to the parsers directory `cd player-parsers` +4. Run the command `pm2 start index.ts -n anix-player-parser` + +### Legend + +- -n - service name in pm2 + +### After deployment + +The service will be available at: `http://:7000/` + +### Note + +To enable automatic application start, it is recommended to configure pm2 to start on boot with the command: `pm2 startup` + +Useful links: + +- [PM2: smart approach to process management @ Habr](https://habr.com/ru/articles/480670/) + +
From 631936b02206ac2f94aa4f1cae78d7614e941149 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Fri, 30 May 2025 01:23:26 +0500 Subject: [PATCH 6/8] fix: build - exclude player-parsers directory from next build --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index f8a929b..8fdb696 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -33,5 +33,5 @@ "**/*.tsx", "next.config.js" ], - "exclude": ["node_modules"] + "exclude": ["node_modules", "player-parsers"] } From 23da153e65564d9b976dbb0a96d173102cfc6303 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Fri, 30 May 2025 01:25:12 +0500 Subject: [PATCH 7/8] chore/player-parsers: add missing step for pm2 --- player-parsers/README.RU.md | 3 ++- player-parsers/README.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/player-parsers/README.RU.md b/player-parsers/README.RU.md index e107277..0ee08cf 100644 --- a/player-parsers/README.RU.md +++ b/player-parsers/README.RU.md @@ -94,7 +94,8 @@ 1. Клонируйте репозиторий `git clone https://github.com/Radiquum/AniX` 2. Переместитесь в директорию репозитория `cd AniX` 3. Переместитесь в директорию парсеров `cd player-parsers` -4. Выполните команду `pm2 start index.ts -n anix-player-parser` +4. Выполните команду `npm install` +5. После окончания, Выполните команду `pm2 start index.ts -n anix-player-parser` ### Обозначения diff --git a/player-parsers/README.md b/player-parsers/README.md index 16b78d1..e78d539 100644 --- a/player-parsers/README.md +++ b/player-parsers/README.md @@ -94,7 +94,8 @@ Instructions: 1. Clone the repository `git clone https://github.com/Radiquum/AniX` 2. Navigate to the repository directory `cd AniX` 3. Navigate to the parsers directory `cd player-parsers` -4. Run the command `pm2 start index.ts -n anix-player-parser` +4. Run the command `npm install` +5. Once finished, Run the command `pm2 start index.ts -n anix-player-parser` ### Legend From 767121c77be657eb22296dedb06a34a1de38c779 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Fri, 30 May 2025 01:32:57 +0500 Subject: [PATCH 8/8] delete/extension: extension is no longer compatible with self-hosted version --- extension/README.md | 20 ---- extension/chrome/icon-16x16.png | Bin 875 -> 0 bytes extension/chrome/icon-32x32.png | Bin 2628 -> 0 bytes extension/chrome/icon-48x48.png | Bin 5287 -> 0 bytes extension/chrome/icon-72x72.png | Bin 10291 -> 0 bytes extension/chrome/icon-96x96.png | Bin 16225 -> 0 bytes extension/chrome/main.js | 116 -------------------- extension/chrome/manifest.json | 27 ----- extension/chrome/watch-on-anix-chrome.zip | Bin 40519 -> 0 bytes extension/firefox/icon-16x16.png | Bin 875 -> 0 bytes extension/firefox/icon-32x32.png | Bin 2628 -> 0 bytes extension/firefox/icon-48x48.png | Bin 5287 -> 0 bytes extension/firefox/icon-72x72.png | Bin 10291 -> 0 bytes extension/firefox/icon-96x96.png | Bin 16225 -> 0 bytes extension/firefox/main.js | 116 -------------------- extension/firefox/manifest.json | 32 ------ extension/firefox/watch-on-anix-firefox.zip | Bin 40636 -> 0 bytes 17 files changed, 311 deletions(-) delete mode 100644 extension/README.md delete mode 100644 extension/chrome/icon-16x16.png delete mode 100644 extension/chrome/icon-32x32.png delete mode 100644 extension/chrome/icon-48x48.png delete mode 100644 extension/chrome/icon-72x72.png delete mode 100644 extension/chrome/icon-96x96.png delete mode 100644 extension/chrome/main.js delete mode 100644 extension/chrome/manifest.json delete mode 100644 extension/chrome/watch-on-anix-chrome.zip delete mode 100644 extension/firefox/icon-16x16.png delete mode 100644 extension/firefox/icon-32x32.png delete mode 100644 extension/firefox/icon-48x48.png delete mode 100644 extension/firefox/icon-72x72.png delete mode 100644 extension/firefox/icon-96x96.png delete mode 100644 extension/firefox/main.js delete mode 100644 extension/firefox/manifest.json delete mode 100644 extension/firefox/watch-on-anix-firefox.zip diff --git a/extension/README.md b/extension/README.md deleted file mode 100644 index e016101..0000000 --- a/extension/README.md +++ /dev/null @@ -1,20 +0,0 @@ -Это расширение для firefox и chrome для добавления кнопки Смотреть в Anix на сайт anixart.tv, а так-же найти в Anix на сайт кинопоиск, если обнаружен жанр аниме - -## Скачать - -Firefox: https://addons.mozilla.org/en-US/firefox/addon/watch-on-anix/ - -Chrome: https://github.com/Radiquum/anix/raw/V3/extension/chrome/watch-on-anix-chrome.zip - -## Установка - -Firefox: - -- Загрузите расширение из AMO - -Chrome: - -1. скачайте и распакуйте архив -2. зайдите в расширения браузера chrome://extensions/ -3. включите режим разработчика -4. нажмите "загрузить распакованное расширение" и выберите директорию куда вы распаковали архив diff --git a/extension/chrome/icon-16x16.png b/extension/chrome/icon-16x16.png deleted file mode 100644 index 7f26af42845d9a6e701b5d1c0f92336a5fb26a99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 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 FV1g`!(Juf1 diff --git a/extension/chrome/icon-96x96.png b/extension/chrome/icon-96x96.png deleted file mode 100644 index 6d16c650e5b8ef80f08e0c7ae95dfb677ab17236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16225 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 LNkvXXu0mjfVT1KW diff --git a/extension/chrome/main.js b/extension/chrome/main.js deleted file mode 100644 index 8929809..0000000 --- a/extension/chrome/main.js +++ /dev/null @@ -1,116 +0,0 @@ -function determineHost() { - const url = new URL(window.location.href); - return { - host: url.host, - pathname: url.pathname, - }; -} - -function addButtonToAnixart(pathname) { - // find a container and an open in app link with button - const container = document.querySelector('div[style="text-align: center;"]'); - const openInAppLink = document.querySelector('a[href^="anixart"'); - const openInAppLinkButton = openInAppLink.querySelector("button"); - openInAppLinkButton.style = "margin-top: 0px !important;"; // disable default button margin - openInAppLinkButton.classList = "btn btn-secondary"; // change default button from primary to secondary - - // create a custom footer - const footer = document.createElement("div"); - footer.style = - "display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; align-items: center; margin-top: 20px;"; - - // create and set custom link - const link = document.createElement("a"); - const button = document.createElement("button"); - button.style = "margin-top: 0px !important;"; - button.classList = "btn btn-primary"; - button.textContent = "Открыть в Anix"; - - const url = new URL(window.location.href); - link.href = `https://anix.wah.su${pathname}?ref=anixart.tv&source=extension`; - link.appendChild(button); - - // append link and open in app link to footer - footer.appendChild(link); - footer.appendChild(openInAppLink); - - // append footer to container - container.appendChild(footer); -} - -function kinopoiskIsAnimeGenrePresent() { - const genre = document.querySelector('a[href^="/lists/movies/genre--anime"]'); - - if (genre) { - return true; - } - return false; -} - -function addButtonToKinopoisk() { - let isAnime = kinopoiskIsAnimeGenrePresent(); - if (!isAnime) { - console.log("genre not found"); - return; - } - let title = document.querySelector('h1[itemprop="name"]'); - if (!title) { - console.log("title not found"); - return; - } - title = title.textContent.split(" (")[0]; - - const buttonStyle = ` - display: inline-block; - font-weight: 400; - text-align: center; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - font-size: 1.5rem; - line-height: 1.5; - border-radius: .25rem; - transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; - padding: 1rem 2rem; - color: #fff; - background-color: #F04E4E; - border-color: #F04E4E; - `; - - const buttonHoverStyle = ` - color: #fff !important; - background-color: #E23D3D !important; - border-color: #E23D3D !important; - ` - - const link = document.createElement("a"); - const button = document.createElement("button"); - - link.style = - "text-decoration: none; position: fixed; bottom: 0; right: 0; margin: 1.5rem; z-index: 1000;"; - link.href = "https://anix.wah.su/search?q=" + title + "&ref=kinopoisk.ru&source=extension"; - link.appendChild(button); - button.style = buttonStyle; - button.onmouseover = function () { - button.style = buttonStyle + buttonHoverStyle - } - button.onmouseout = function () { - button.style = buttonStyle; - } - button.textContent = "Найти в Anix"; - - document.body.appendChild(link); -} - -const { host, pathname } = determineHost(); - -if (host == "anixart.tv") { - addButtonToAnixart(pathname); -} else if (host == "www.kinopoisk.ru") { - addButtonToKinopoisk(); -} diff --git a/extension/chrome/manifest.json b/extension/chrome/manifest.json deleted file mode 100644 index 9c33721..0000000 --- a/extension/chrome/manifest.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "manifest_version": 3, - "version": "1.2", - "name": "Watch on Anix", - "description": "Adds a button to watch on Anix.", - "content_scripts": [ - { - "matches": [ - "https://anixart.tv/release/*", - "https://anixart.tv/collection/*", - "https://anixart.tv/profile/*", - "https://www.kinopoisk.ru/film/*", - "https://www.kinopoisk.ru/series/*" - ], - "js": [ - "main.js" - ] - } - ], - "icons": { - "16": "icon-16x16.png", - "32": "icon-32x32.png", - "48": "icon-48x48.png", - "72": "icon-72x72.png", - "96": "icon-96x96.png" - } -} \ No newline at end of file diff --git a/extension/chrome/watch-on-anix-chrome.zip b/extension/chrome/watch-on-anix-chrome.zip deleted file mode 100644 index 72a3f70d3a5d0a7bdfab5176081f93fee77abdd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40519 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%0A?hKAf8FV``>J6lX&tE>L{ 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 diff --git a/extension/firefox/icon-16x16.png b/extension/firefox/icon-16x16.png deleted file mode 100644 index 7f26af42845d9a6e701b5d1c0f92336a5fb26a99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 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 FV1g`!(Juf1 diff --git a/extension/firefox/icon-96x96.png b/extension/firefox/icon-96x96.png deleted file mode 100644 index 6d16c650e5b8ef80f08e0c7ae95dfb677ab17236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16225 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 LNkvXXu0mjfVT1KW diff --git a/extension/firefox/main.js b/extension/firefox/main.js deleted file mode 100644 index 8929809..0000000 --- a/extension/firefox/main.js +++ /dev/null @@ -1,116 +0,0 @@ -function determineHost() { - const url = new URL(window.location.href); - return { - host: url.host, - pathname: url.pathname, - }; -} - -function addButtonToAnixart(pathname) { - // find a container and an open in app link with button - const container = document.querySelector('div[style="text-align: center;"]'); - const openInAppLink = document.querySelector('a[href^="anixart"'); - const openInAppLinkButton = openInAppLink.querySelector("button"); - openInAppLinkButton.style = "margin-top: 0px !important;"; // disable default button margin - openInAppLinkButton.classList = "btn btn-secondary"; // change default button from primary to secondary - - // create a custom footer - const footer = document.createElement("div"); - footer.style = - "display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; align-items: center; margin-top: 20px;"; - - // create and set custom link - const link = document.createElement("a"); - const button = document.createElement("button"); - button.style = "margin-top: 0px !important;"; - button.classList = "btn btn-primary"; - button.textContent = "Открыть в Anix"; - - const url = new URL(window.location.href); - link.href = `https://anix.wah.su${pathname}?ref=anixart.tv&source=extension`; - link.appendChild(button); - - // append link and open in app link to footer - footer.appendChild(link); - footer.appendChild(openInAppLink); - - // append footer to container - container.appendChild(footer); -} - -function kinopoiskIsAnimeGenrePresent() { - const genre = document.querySelector('a[href^="/lists/movies/genre--anime"]'); - - if (genre) { - return true; - } - return false; -} - -function addButtonToKinopoisk() { - let isAnime = kinopoiskIsAnimeGenrePresent(); - if (!isAnime) { - console.log("genre not found"); - return; - } - let title = document.querySelector('h1[itemprop="name"]'); - if (!title) { - console.log("title not found"); - return; - } - title = title.textContent.split(" (")[0]; - - const buttonStyle = ` - display: inline-block; - font-weight: 400; - text-align: center; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - font-size: 1.5rem; - line-height: 1.5; - border-radius: .25rem; - transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; - padding: 1rem 2rem; - color: #fff; - background-color: #F04E4E; - border-color: #F04E4E; - `; - - const buttonHoverStyle = ` - color: #fff !important; - background-color: #E23D3D !important; - border-color: #E23D3D !important; - ` - - const link = document.createElement("a"); - const button = document.createElement("button"); - - link.style = - "text-decoration: none; position: fixed; bottom: 0; right: 0; margin: 1.5rem; z-index: 1000;"; - link.href = "https://anix.wah.su/search?q=" + title + "&ref=kinopoisk.ru&source=extension"; - link.appendChild(button); - button.style = buttonStyle; - button.onmouseover = function () { - button.style = buttonStyle + buttonHoverStyle - } - button.onmouseout = function () { - button.style = buttonStyle; - } - button.textContent = "Найти в Anix"; - - document.body.appendChild(link); -} - -const { host, pathname } = determineHost(); - -if (host == "anixart.tv") { - addButtonToAnixart(pathname); -} else if (host == "www.kinopoisk.ru") { - addButtonToKinopoisk(); -} diff --git a/extension/firefox/manifest.json b/extension/firefox/manifest.json deleted file mode 100644 index 5a7cbb3..0000000 --- a/extension/firefox/manifest.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "manifest_version": 2, - "version": "1.2", - "name": "Watch on Anix", - "description": "Adds a button to watch on Anix.", - "browser_specific_settings": { - "gecko": { - "id": "{8c53d0c2-43ad-4498-b700-290bd2e1030f}" - } - }, - "content_scripts": [ - { - "matches": [ - "https://anixart.tv/release/*", - "https://anixart.tv/collection/*", - "https://anixart.tv/profile/*", - "https://www.kinopoisk.ru/film/*", - "https://www.kinopoisk.ru/series/*" - ], - "js": [ - "main.js" - ] - } - ], - "icons": { - "16": "icon-16x16.png", - "32": "icon-32x32.png", - "48": "icon-48x48.png", - "72": "icon-72x72.png", - "96": "icon-96x96.png" - } -} \ No newline at end of file diff --git a/extension/firefox/watch-on-anix-firefox.zip b/extension/firefox/watch-on-anix-firefox.zip deleted file mode 100644 index 1f286a2c0a141f1e269b5e01652eded12777ec0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40636 zcmZ^}V~i(%(>**pwr9uocWm3XXUDc}+qP}nwryKG=Ci;1#XosoT%A;Rs?(`XDmhi> zbE@Q}KtQ2^{<{v7P&5k5Stu<*fPnrp_Zg#IC`xK9N(F57fNXE8GQ76_q9OyaF{b8RRm$)4f21+<-1V<)mHg3? z_aJD>n7E1@B2xrG@1-x~A1mQ6Muxh#$3Q;{9o_&vV`ALDJ_bu{hf%FW>wKhiQ{DBe z=m6)p`wf)>kL$09GQDEqlsqoJG2$GS&IyG>J~%Wc?sat~=q*Ln=}4VBx|o4JS0;3K z;f#Hep-F*8pWR0{#Sb~}>EXsdS>j2tMZaf9V5x>xz?{F}lsO%e)d)UzjN?J=T~^^u zi9A3-7!3L=!!;-&>|jxB--+}7Y14Hoixq5i2GjoZ!QK2JBFUQFhaMzLJLGQeo}%3z zyCaG^KGFr5+qlJhr%GKGn-Aq0*CdM>)$qE3q$~hrf1lQ7aBy`L-9iQE`8cb8L71k& zwUp3(6mN-@6(Me{E%>@UZ5$8yw@=c`q{p6ry<#z&4#Uh@8{-tR8ez1XIRO zUBt<~`^aKA%^kM^N$d^q)erwY#cKJ=URY zfes|IK$+XJw>(vPj1i-{hEdQk+f63!$j`Q`QgQ|MlK9DymImhoU>N)5aZ#DhMEJ$V z$8Lu2@}QC7nCH34{hi4S9H%BXTL2a$8225@U`#Or+P-`xurV46cb^u5bSjL_iWEvcffjdI9qPKUk)Z!P*J`gWZ4j|6s|)=*GnOKVV7l zFBHN5!P3#g;}Hl58s*L&R9^y=eqmE)A_ z_AmGC-ygo8Qx0HWm*#rgVw(_qMr9%6zUUU`B;$4#0)9k!xG^**6^ihub;M;%H_hiO zLur`ar-XcWu2T;I6q?ErYW#v7EB~$%6mG1*D~g zq7tY8o9$LZ%|BRGsSNBD;(2&ipJMGzce9f033-PZ_{LD#P7}a?s>?t;S3Pu?|EEFtT#Q32cd7PJ~c0e$ykGa_4>43W&<&_ki%5Z)Y$*=kleoVDux#3eThk_BZ~Q8 zsPM>tu~t(eTEWe(GS3{*7D7+|mZU7mk>E7R1-A&8lZ%7E*pgdy$X4{c+F^(`I~HnD z2=gl`^~^XJ*kksVJoAT^e^WY%JHzBa1}LbV0PB>}+|*RxJZZeeZ*4dp5`zyb25*po z?UiYW7CKbvXWva-11y%8$BwtRY@TKFa;+cUFa)8Wt^C~WAu7Tj_~>)*UShbRqog(m zCHhy{)b;8lfH0t!xGaxB-Z0`;y$I*?7n?(D|H=ZaN%n_PiehG@R;kRZTn$!m>7H(7_2tC!AhsJimW-8)2ovO9aK$hHh^F195*E3 zvwEHC;F>LF{sD&&^R7+!ipZ?}jlQ;JDt+%kzWJ4rOrq{^2X9@94=A4|)BVL!AVaY< z7_4SMUSbIQvo9saduQQ^W!2T>>|J{oS3x`w3-;d*gsu{EWc#NJ>A>Rqc}RGQ=NOmf zOY8Z>uyC3Abw^~wB>BbVl%j6%!eft=^bCxGy*WHie$W(cno*T(wuEE0+>(;E`{qwd zL$*?aGwoho73KS+l=Vv8<={Q3?5csB^P+yqi>1nq{7limfXQY0#BclQEtip7 ze;gq?dt?TW3o6ySy$DadSY=Wrb)K|=(!P3Yw}Vu4ZBF~ar62vXo6!K36?R8%@I5?U zs09?P3GwlnssvzrZGp6bXpv5qHX)CHpzIu-=a*{*b<=~4w^xLzwHl#3TdIc1NyItV z^L0r{NJxnpO=wzbV)~tYb%!-k%#CpF5Yj_U>2xmK`>x2K>s+SLjq=&Va@TUx6F@_s zS;IE7{Dejw?ut4x4$--tkpn%Bi0G*$6~svgCSieTIBX|BJrS-#hyM!J^SJXt*Y5BKlH?!E z@Ze=OdP6)qT!sYe6Q1!b#G3Z+nv%38)=`1Y+hfbypQCD~V-b=VFgzFGl~}b5Pk`-1 zz8ew6s}D0RTfPdTrtYZb1!|L)S!ZFH$UdoIV`Cal$;+i>WbA>*kI%H=ayB)FRJJ0l zdKnTKE3D{?2fg5%1oiV*pVVPsn3a*}4h{?elRw{*xJ*Jq=|)M3ke(eG#Xe3^Kc1gN zcyF@C$ynlWxB!>Z{m#n(wRmwgFUT`LU8r+$Z|Z0dN80jq5<)kHu-a}$Z%>7m7aNF| z1wL4>Wdq#s2;cN~*R@!|%!d1y`Fz8ayvg~k5fIty0y^5AL^T)4d?qw<>H6i4(S{P| z)$46gmQaskDZ}kI38|wvmXV7H9LBv01SlJu?YLDqKsSE}a(nm!%{eC+(;%nIfQ;DW^4*KjJE)F(T zA&h`i8zC=wx#KdesGu0GF;RNk^q{981tEzqR=Wjl@`j|{?nt~p+H*4-Sg`;q$}gq; zi-Uk$l-9Z5CpsE~pQVoK4G3OBQ?~i?Rq;QJ7UASqkL~VD(e6lfu#n*a89`wO5;nG` zAWA4G+T<#KvG!tEq|o!k)Jnh@_o)?>IHJWD+?z!Qv)9zq@)awCHz9Sk$Hb3`4tXfU zxMFpY;A~@km<1?--FSNu6{yq*eKUG9__t8Ev^%0Zo)dT!N{rDC z6Gcl#-EMEdU!(8Db`K<5`TWQ)rOQh1Ww@#58w{T78}>Z?xJVD@Mi&;wXN!YqmMJuI z>H0FEK*vo6BkO(TnE}|P^tjhp>!Y-5P1J{UFewN9hBVZh8TP>>^%0}9G7!ioA)<`p zWbUXzl{>R3YsZj;U#6lvk7$_1#?0t8TOkjgFYeqes;cVz9eXRqiHul{{t3ZSsk$Ur zeFbfFZmMexWAY43bi4TDukcus<=m zK#&xQa{6~{g@z0Ti!O7IxWltXseVxwmnM_WgUF2hec5j+uGdC2qfVWED*bkxL#-lX zkAl^BIa~~ePiW0s*&bsK>k>SAP`@g|6nt~q6Dn8zZBD)Vy`f&yI?9-@SUfMPX3VuO zSooIGhIVInTka{fA5c@tBI@w&g*WiKdPt_inbqlx*D8WA+($;PX7^5C@RB{>f<8Py zXr>s&Qk@k8&U+Mg6!_wAcZaLF(+uDcIDERJ)QIO|)of@<2{fBpYN0M4* zYRR)uqU8J#b!3Wj(gNM0Ij1NsfrRMvN@R<=camwimz-dA?)(LbL$zM<15v&=+uzld zVc4n!PwXaCk#=iLLd;=RldxM}<^|13qbwwjW+fc|%l%td`;sEkxozm+fAdYhpW)O} zR3M=L?EmpiW_CAb_W!{*>Ho!||3AK|2K*NK&-vx3C?*J0GlO&f&jB?RkP!d^s*i>F z)Cc?LL)nRII06B|p!{dQfHJZ$fPhfB|6{0TLdBX8dMd*U-!tu`Xo51o65>SR0>Yd` zI2A!rp`ZaoilEAM1n-aNB32ZV?gV3rWRmirQ~{9U3LOLl;)uu|29UoJwziIPzIxXk zZ6Tp~pQ5igOkGV)O-)L#qrtz~;-27LrM(=?%L{`Y(x&wYRVdL+F#w9c^8F-8D*a-u zD2)2)pRrPGOO4%I315`KS3j7GeIb98fl!hQ3}w{puwX~!C+QF1z{t}NrBGNXKsyO$ z!G97J;2!$PP*f>LnWQJ#X3rgI{~qCT?C1Vy-MNC%2T+X;rLbouQZFu}hhPG>AjejW zI}_c{&-H1dd8Etpr1f=LmIFTzFqTL|gAxAplg^^!^7(Mmzp3@@`~J9=Wnt`>$=_4v z4tA@j*O*MuZ{e_5pP+SYEn$r^HjW{&&`M7VAqJs+C<(uJk1&&IA!;e*9%I}9 zf%Qfuj#a48*X>%H%|Cj8LbQ*EN<$fD82Us)g|AF9$jx;-2(gk0G$Jep5HFjiWo|E{ zyn~h0fccX74Qg~hqZHHcG$tX{gj*V~$^3@LPYQ`D6q_#@exd*X{3eeD&BWm@;Or(Zi;#Ao2B8sMd!MR+h4qq?s$T=?r!0 zL2NM(X(w!_ShXK`8!~(kt*@WPY07(Gxh!bWZRBL_ivm!qB0zR*4_{d=9yo7Y@22j# z8y`EP5^*7r@eFP$w-LFXY*2aONGou4{wvQdeoUX?Kzj0ghCB^?&k0CV`j4D@341=HcC+51Lx;p-m*O*`?j@f9gyQe+Pj=47`To4>Y(hDv;NJv$e{x z6JLUIZuua<<8eg%eM^n&`IMT{>Oe-PMFVwPm8nW7;EPThQpZGtgw(?-9+7I|;J}-1 z=4-nb+Sff4C1zqmNiUTx^c-~&7nju=bFyrJGk;N`QVm*ExS?-fL@5j{0FxmnJtA}PM=C59)VUd;LOGCoKqGAT$4apRDZp=N1r4E1h zC?y1aPTcnw`JaZ!$F8WDe`yiGhkqZt`~L7UTf;>1y#W_{1+oN3Dp0Tjpm8@_hxa-^ z3N@Pn>IpqKD0rB~&P8%^$+ZA&Bn|uR;WP2a6NaQvx9^*0I-^nUH9Og%>TJNZxbdP#;7iy8Q&>Y?YJ$LS-I(r~DZ!baJU^#H4{6S}Hev z_3~ujUtv(6vm*KWLr4NC$Jn*)>`A9ws|jaQin6nSoHaf(;=3a^+Qb2~M@b{{)gkdp z=1mwJHfPzq^2o~#m672m&uw>y?j+TTziz}>A!&^3?%{G7R-qgdIN+9sA$PZQLaiR) z`ny;O@i&vPB$~$q>aixea`-y`)G6;E^S98$ahLoDgC>i0kVxZ>pv;J`2EfpG>fAP1 zC<^BbA7>CUA^5ipmVwGUaE@x-$b3YB5LGWw>5NgKb*vBjlNPT>lWm~;qK=rbTU&`n zPL1EA>&8x=ULP)A{Xej)J3E`_}Sa?kg-XBha?Ebb8Mfbk#08>HYs)C#<_0u7G%*H9h&PG0Np)js=+9NpRVmi*>y9`2sS za*l=Cq8YN&mop6IbjEOM5oP|Sh1qJOXR$Y6YYq$4#x!}8fFmCJ@-DBr)|?9MlzyPH zYe-;6^f9W&UB}CUdc~_#fXfp7w<$MNm1axa$v%i&hzX$z;^Vwr_9KqV4Ts-W*RGv+ zp|V%K32tH*N;SrZ>t|amyt^n2pZP_v{f!{+4q4A1rTQp}XM>e3FbX4P7{hhDt4B;~ z{V6^t_Q2+4XJ!RTXfUPyf#68>pFx-InUz*?({@;5&UIJI&X$ugh#RC|=8>`+W=bKv z_yL&y;PCE{u8)_IJ*_SS@w!a&uPHZ6MWAv7YuBPbH-8vDrpND4(GUCRFwHzSflOr4 z(X8^<$bGa0@5jpLtR(RBv>i7`7gO;;*|lY&5(WF+-Mq5>218I$TY$Y8pQ z-Mlxfs0%f?Kc|E#rn~%&OePQ+J>sRqXay;)*c%0A?hKAf8FV``>J6lX&tE>L{ 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