From 0c514a37b8c9b7d934b16e57865879c0a6785d16 Mon Sep 17 00:00:00 2001 From: shinya Date: Mon, 25 Aug 2025 00:01:20 +0800 Subject: [PATCH] feat: add obfuscation --- next.config.js | 17 +- obfuscation.config.js | 300 +++++++++++++++ package.json | 3 +- pnpm-lock.yaml | 350 ++++++++++++++++++ src/app/api/admin/config_file/route.ts | 2 + .../admin/config_subscription/fetch/route.ts | 2 + .../api/admin/data_migration/export/route.ts | 2 + .../api/admin/data_migration/import/route.ts | 2 + src/app/api/admin/live/refresh/route.ts | 2 + src/app/api/admin/live/route.ts | 2 + src/app/api/live/channels/route.ts | 2 + src/app/api/live/epg/route.ts | 2 + src/app/api/live/sources/route.ts | 2 + 13 files changed, 685 insertions(+), 3 deletions(-) create mode 100644 obfuscation.config.js diff --git a/next.config.js b/next.config.js index c7d7653..93c3b13 100644 --- a/next.config.js +++ b/next.config.js @@ -1,5 +1,8 @@ /** @type {import('next').NextConfig} */ /* eslint-disable @typescript-eslint/no-var-requires */ +const WebpackObfuscator = require('webpack-obfuscator'); +const obfuscationConfig = require('./obfuscation.config.js'); + const nextConfig = { output: 'standalone', eslint: { @@ -7,7 +10,7 @@ const nextConfig = { }, reactStrictMode: false, - swcMinify: true, + swcMinify: false, experimental: { instrumentationHook: process.env.NODE_ENV === 'production', @@ -28,7 +31,17 @@ const nextConfig = { ], }, - webpack(config) { + webpack(config, { dev, isServer }) { + // 只在生产环境启用混淆 + if (!dev && process.env.NODE_ENV === 'production') { + // 服务端代码混淆配置 + if (isServer) { + config.plugins.push( + new WebpackObfuscator(obfuscationConfig.obfuscator) + ); + } + } + // Grab the existing rule that handles SVG imports const fileLoaderRule = config.module.rules.find((rule) => rule.test?.test?.('.svg') diff --git a/obfuscation.config.js b/obfuscation.config.js new file mode 100644 index 0000000..720819a --- /dev/null +++ b/obfuscation.config.js @@ -0,0 +1,300 @@ +// 代码混淆配置文件 - 专门针对 Next.js 项目优化 +module.exports = { + // Webpack Obfuscator 配置(包含压缩功能) + obfuscator: { + // ========== 基础压缩选项 ========== + compact: true, // 压缩代码(移除空格、换行等) + simplify: true, // 简化代码(合并变量、优化表达式) + + // ========== 字符串混淆选项(保守配置) ========== + splitStrings: true, // 分割字符串 + splitStringsChunkLength: 8, // 减少字符串分割块长度 + stringArray: true, // 字符串数组 + stringArrayEncoding: ['base64'], // 字符串数组编码 + stringArrayThreshold: 0.3, // 大幅降低字符串数组阈值,只混淆长字符串 + stringArrayWrappersCount: 1, // 减少字符串数组包装器数量 + stringArrayWrappersType: 'function', // 使用函数包装器 + stringArrayWrappersParameters: ['index'], // 包装器参数 + + // ========== 标识符混淆选项(保守配置) ========== + identifierNamesGenerator: 'hexadecimal', // 标识符名称生成器 + renameGlobals: false, // 不重命名全局变量 + identifiersPrefix: '_0x', // 标识符前缀 + identifiersDictionary: [], // 空字典,使用默认生成 + + // ========== 完全禁用复杂混淆 ========== + controlFlowFlattening: false, // 禁用控制流扁平化 + deadCodeInjection: false, // 禁用死代码注入 + debugProtection: false, // 调试保护(生产环境建议关闭) + debugProtectionInterval: 0, // 调试保护间隔 + numbersToExpressions: false, // 禁用数字转表达式 + selfDefending: false, // 禁用自我保护 + transformObjectKeys: false, // 禁用转换对象键 + unicodeEscapeSequence: false, // Unicode 转义序列 + + // ========== 日志和调试选项 ========== + disableConsoleOutput: false, // 保留控制台输出 + log: false, // 不输出混淆日志 + + // ========== 高级选项 ========== + sourceMap: false, // 不生成 source map + target: 'node', // 目标环境为 Node.js + seed: 0, // 随机种子 + + // ========== 保留重要标识符(扩展版) ========== + reservedNames: [ + "require", + "module", + "exports", + "__dirname", + "__filename", + "global", + "process", + "Buffer", + "setTimeout", + "setInterval", + "clearTimeout", + "clearInterval", + "getStaticProps", + "getStaticPaths", + "getServerSideProps", + "getInitialProps", + "reportWebVitals", + "db", + "client", + "query", + "execute", + "connect", + "disconnect", + "redis", + "kvrocks", + "upstash", + "mongo", + "postgres", + "mysql", + "GET", + "POST", + "PUT", + "DELETE", + "PATCH", + "OPTIONS", + "HEAD", + "Request", + "Response", + "NextRequest", + "NextResponse", + "Error", + "TypeError", + "ReferenceError", + "SyntaxError", + "RangeError", + "EvalError", + "URIError", + "AggregateError", + "init", + "setup", + "config", + "start", + "stop", + "run", + "main", + "handler", + "middleware", + "auth", + "validate", + "parse", + "serialize", + "console", + "log", + "error", + "warn", + "info", + "debug", + "trace", + "assert", + "clear", + "count", + "countReset", + "group", + "groupCollapsed", + "groupEnd", + "table", + "time", + "timeEnd", + "timeLog", + "profile", + "profileEnd", + "logger", + "logging", + "logLevel", + "logInfo", + "logError", + "logWarn", + "logDebug", + "logTrace", + "logFatal", + "logCritical", + "next", + "react", + "react-dom", + "next-pwa", + "next-themes", + "import", + "export", + "from", + "as", + "webpack", + "webpackChunk", + "webpackChunkName", + "chunk", + "chunks", + "chunkName", + "chunkFilename", + "entry", + "entries", + "entrypoint", + "entrypoints", + "modules", + "moduleId", + "moduleIds", + "resolve", + "resolver", + "resolveLoader", + "resolveModules", + "externals", + "externalsType", + "externalsPresets", + "output", + "outputPath", + "outputFilename", + "outputChunkFilename", + "optimization", + "minimize", + "minimizer", + "splitChunks", + "plugins", + "plugin", + "apply", + "compiler", + "compilation", + "loader", + "loaders", + "use", + "test", + "include", + "exclude", + "rules", + "rule", + "oneOf", + "resource", + "resourceQuery", + "issuer", + "issuerLayer", + "sideEffects", + "parser", + "generator", + "define", + "defined", + "definition", + "definitions", + "factory", + "factories", + "getter", + "getters", + "setter", + "setters", + "amd", + "umd", + "commonjs", + "esm", + "es6", + "es2015", + "es2020", + "babel", + "babelrc", + "tsconfig", + "jest", + "eslint", + "prettier", + "rollup", + "vite", + "parcel", + "gulp", + "grunt" + ], + + // ========== 保留重要字符串(扩展版) ========== + reservedStrings: [ + "api", + "admin", + "user", + "auth", + "login", + "logout", + "register", + "search", + "live", + "douban", + "favorites", + "playrecords", + "proxy", + "database", + "connection", + "result", + "success", + "setting", + "option", + "parameter", + "environment", + "file", + "path", + "directory", + "folder", + "extension", + "logger", + "logging", + "fatal", + "critical", + "output", + "message", + "next", + "react", + "react-dom", + "next-pwa", + "next-themes", + "webpack", + "chunk", + "module", + "entry", + "loader", + "plugin", + "compiler", + "compilation", + "require", + "import", + "export", + "default", + "from", + "as", + "use", + "test", + "include", + "define", + "factory", + "amd", + "umd", + "commonjs", + "esm", + "babel", + "typescript", + "jest", + "eslint", + "prettier", + "rollup", + "vite", + "parcel", + "gulp", + "grunt" + ] + } +}; diff --git a/package.json b/package.json index 8b6db56..e5be487 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,8 @@ "prettier": "^2.8.8", "prettier-plugin-tailwindcss": "^0.5.0", "tailwindcss": "^3.4.17", - "typescript": "^4.9.5" + "typescript": "^4.9.5", + "webpack-obfuscator": "^3.5.1" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f97cab..cdc5c6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -183,6 +183,9 @@ importers: typescript: specifier: ^4.9.5 version: 4.9.5 + webpack-obfuscator: + specifier: ^3.5.1 + version: 3.5.1(javascript-obfuscator@4.1.1)(webpack@5.99.9) packages: @@ -1010,6 +1013,14 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@javascript-obfuscator/escodegen@2.3.0': + resolution: {integrity: sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==} + engines: {node: '>=6.0'} + + '@javascript-obfuscator/estraverse@5.4.0': + resolution: {integrity: sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==} + engines: {node: '>=4.0'} + '@jest/console@27.5.1': resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -1511,6 +1522,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -1560,6 +1574,9 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/validator@13.15.2': + resolution: {integrity: sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -1820,6 +1837,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -1852,6 +1874,10 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + amdefine@1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1906,6 +1932,10 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} + array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} @@ -1953,9 +1983,16 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} + arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + artplayer@5.2.5: resolution: {integrity: sha512-Ogym5rvkAJ4VLncM4Apl3TJ/a/ozM3csvY4IKuuMR++hUmEZgj/HaGsNonwx8r56nsqiZYE7O4vS1HFZl+NBSg==} + assert@2.0.0: + resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -2145,10 +2182,16 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chance@1.1.9: + resolution: {integrity: sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2168,6 +2211,9 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + class-validator@0.14.1: + resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -2229,6 +2275,10 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@10.0.0: + resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} + engines: {node: '>=14'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -2307,6 +2357,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} @@ -2571,6 +2624,9 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es6-object-assign@1.1.0: + resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2691,10 +2747,18 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} + eslint-scope@7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3084,6 +3148,13 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + inversify@6.0.1: + resolution: {integrity: sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -3107,6 +3178,9 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-bun-module@2.0.0: resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} @@ -3161,6 +3235,10 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -3297,6 +3375,11 @@ packages: engines: {node: '>=10'} hasBin: true + javascript-obfuscator@4.1.1: + resolution: {integrity: sha512-gt+KZpIIrrxXHEQGD8xZrL8mTRwRY0U76/xz/YX0gZdPrSqQhT/c7dYLASlLlecT3r+FxE7je/+C0oLnTDCx4A==} + engines: {node: '>=12.22.0'} + hasBin: true + jest-changed-files@27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3467,6 +3550,10 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3561,10 +3648,17 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libphonenumber-js@1.12.13: + resolution: {integrity: sha512-QZXnR/OGiDcBjF4hGk0wwVrPcZvbSSyzlvkjXv5LFfktj7O2VZDrt4Xs8SgR/vOFco+qk1i8J43ikMXZoTrtPw==} + lilconfig@2.0.5: resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} engines: {node: '>=10'} @@ -3681,6 +3775,9 @@ packages: resolution: {integrity: sha512-1Dk/9rienLiihlktVvH04ADC2UJTMflC1fOMVQCCaQAaz7hgzDI5i0p/arFbDM52hFFiIcq4RdXtYz47SgsLgw==} engines: {node: '>=16'} + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -3756,6 +3853,11 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mkdirp@2.1.3: + resolution: {integrity: sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==} + engines: {node: '>=10'} + hasBin: true + motion-dom@12.18.1: resolution: {integrity: sha512-dR/4EYT23Snd+eUSLrde63Ws3oXQtJNw/krgautvTfwrN/2cHfCZMdu6CeTxVfRRWREW3Fy1f5vobRDiBb/q+w==} @@ -3765,6 +3867,13 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multi-stage-sourcemap@0.3.1: + resolution: {integrity: sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==} + + multimatch@5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3868,6 +3977,10 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -3899,9 +4012,17 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + opencollective-postinstall@2.0.3: + resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} + hasBin: true + option-validator@2.0.6: resolution: {integrity: sha512-tmZDan2LRIRQyhUGvkff68/O0R8UmF+Btmiiz0SmSw2ng3CfPZB9wJlIjHpe/MKUZqyIZkVIXCrwr1tIN+0Dzg==} + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4067,6 +4188,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4140,6 +4265,10 @@ packages: resolution: {integrity: sha512-18NAOUr4ZOQiIR+BgI5NhQE7uREdx4ZyV0dyay5izh4yfQ+1T7BSvggxvRGoXocrRyevqW5OhScUjbi9GB8R8Q==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -4224,6 +4353,9 @@ packages: redis@4.7.1: resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==} + reflect-metadata@0.1.13: + resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -4463,6 +4595,10 @@ packages: source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.1.43: + resolution: {integrity: sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==} + engines: {node: '>=0.8.0'} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4520,6 +4656,9 @@ packages: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} + string-template@1.0.0: + resolution: {integrity: sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4558,6 +4697,9 @@ packages: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} + stringz@2.1.0: + resolution: {integrity: sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4767,6 +4909,9 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -4776,6 +4921,10 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4901,6 +5050,9 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -4911,6 +5063,10 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validator@13.15.15: + resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} + engines: {node: '>= 0.10'} + vidstack@0.6.15: resolution: {integrity: sha512-pI2aixBuOpu/LSnRgNJ40tU/KFW+x1X+O2bW1hz946ZZShDM5oqRXF9pavDOuckHAHPgUN9HYUr9vUNTBUPF1Q==} engines: {node: '>=16'} @@ -4941,9 +5097,19 @@ packages: resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} engines: {node: '>=10.4'} + webpack-obfuscator@3.5.1: + resolution: {integrity: sha512-vztsD8oNdkX9FY/K4GTuylNWLGlc0n07vt7sCa+SlixKe/8iGejlxb/ZiKARmaZ2c8AbiBZcB/5hYqeNPydVZA==} + peerDependencies: + javascript-obfuscator: ^2.8.0 || ^3.0.0 || ^4.0.0 + webpack: ^5.1.0 + webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + webpack-sources@2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + webpack-sources@3.3.3: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} @@ -6192,6 +6358,17 @@ snapshots: '@istanbuljs/schema@0.1.3': {} + '@javascript-obfuscator/escodegen@2.3.0': + dependencies: + '@javascript-obfuscator/estraverse': 5.4.0 + esprima: 4.0.1 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + + '@javascript-obfuscator/estraverse@5.4.0': {} + '@jest/console@27.5.1': dependencies: '@jest/types': 27.5.1 @@ -6819,6 +6996,8 @@ snapshots: '@types/json5@0.0.29': {} + '@types/minimatch@3.0.5': {} + '@types/minimatch@5.1.2': {} '@types/minimist@1.2.5': {} @@ -6862,6 +7041,8 @@ snapshots: '@types/trusted-types@2.0.7': {} + '@types/validator@13.15.2': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@16.0.9': @@ -7134,6 +7315,8 @@ snapshots: acorn@8.15.0: {} + acorn@8.8.2: {} + agent-base@6.0.2: dependencies: debug: 4.4.1(supports-color@9.4.0) @@ -7172,6 +7355,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + amdefine@1.0.1: {} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -7216,6 +7401,8 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 + array-differ@3.0.0: {} + array-ify@1.0.0: {} array-includes@3.1.9: @@ -7290,10 +7477,19 @@ snapshots: arrify@1.0.1: {} + arrify@2.0.1: {} + artplayer@5.2.5: dependencies: option-validator: 2.0.6 + assert@2.0.0: + dependencies: + es6-object-assign: 1.1.0 + is-nan: 1.3.2 + object-is: 1.1.6 + util: 0.12.5 + ast-types-flow@0.0.8: {} astral-regex@2.0.0: {} @@ -7513,8 +7709,12 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chance@1.1.9: {} + char-regex@1.0.2: {} + charenc@0.0.2: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -7535,6 +7735,12 @@ snapshots: cjs-module-lexer@1.4.3: {} + class-validator@0.14.1: + dependencies: + '@types/validator': 13.15.2 + libphonenumber-js: 1.12.13 + validator: 13.15.15 + clean-stack@2.2.0: {} clean-webpack-plugin@4.0.0(webpack@5.99.9): @@ -7590,6 +7796,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + commander@10.0.0: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -7672,6 +7880,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crypt@0.0.2: {} + crypto-js@4.2.0: {} crypto-random-string@2.0.0: {} @@ -7986,6 +8196,8 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es6-object-assign@1.1.0: {} + escalade@3.2.0: {} escape-string-regexp@2.0.0: {} @@ -8150,11 +8362,18 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 + eslint-scope@7.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-visitor-keys@3.3.0: {} + eslint-visitor-keys@3.4.3: {} eslint@8.57.1: @@ -8596,6 +8815,13 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + inversify@6.0.1: {} + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -8625,6 +8851,8 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-buffer@1.1.6: {} + is-bun-module@2.0.0: dependencies: semver: 7.7.2 @@ -8673,6 +8901,11 @@ snapshots: is-module@1.0.0: {} + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + is-negative-zero@2.0.3: {} is-number-object@1.1.1: @@ -8814,6 +9047,32 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + javascript-obfuscator@4.1.1: + dependencies: + '@javascript-obfuscator/escodegen': 2.3.0 + '@javascript-obfuscator/estraverse': 5.4.0 + acorn: 8.8.2 + assert: 2.0.0 + chalk: 4.1.2 + chance: 1.1.9 + class-validator: 0.14.1 + commander: 10.0.0 + eslint-scope: 7.1.1 + eslint-visitor-keys: 3.3.0 + fast-deep-equal: 3.1.3 + inversify: 6.0.1 + js-string-escape: 1.0.1 + md5: 2.3.0 + mkdirp: 2.1.3 + multimatch: 5.0.0 + opencollective-postinstall: 2.0.3 + process: 0.11.10 + reflect-metadata: 0.1.13 + source-map-support: 0.5.21 + string-template: 1.0.0 + stringz: 2.1.0 + tslib: 2.5.0 + jest-changed-files@27.5.1: dependencies: '@jest/types': 27.5.1 @@ -9224,6 +9483,8 @@ snapshots: jiti@1.21.7: {} + js-string-escape@1.0.1: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -9324,11 +9585,18 @@ snapshots: leven@3.1.0: {} + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + libphonenumber-js@1.12.13: {} + lilconfig@2.0.5: {} lilconfig@3.1.3: {} @@ -9449,6 +9717,12 @@ snapshots: '@maverick-js/signals': 5.11.5 type-fest: 3.13.1 + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + mdn-data@2.0.28: {} mdn-data@2.0.30: {} @@ -9516,6 +9790,8 @@ snapshots: minipass@7.1.2: {} + mkdirp@2.1.3: {} + motion-dom@12.18.1: dependencies: motion-utils: 12.18.1 @@ -9524,6 +9800,18 @@ snapshots: ms@2.1.3: {} + multi-stage-sourcemap@0.3.1: + dependencies: + source-map: 0.1.43 + + multimatch@5.0.0: + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 3.0.0 + array-union: 2.1.0 + arrify: 2.0.1 + minimatch: 3.1.2 + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -9636,6 +9924,11 @@ snapshots: object-inspect@1.13.4: {} + object-is@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + object-keys@1.1.1: {} object.assign@4.1.7: @@ -9682,10 +9975,21 @@ snapshots: dependencies: mimic-fn: 2.1.0 + opencollective-postinstall@2.0.3: {} + option-validator@2.0.6: dependencies: kind-of: 6.0.3 + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -9827,6 +10131,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prelude-ls@1.1.2: {} + prelude-ls@1.2.1: {} prettier-plugin-tailwindcss@0.5.14(prettier@2.8.8): @@ -9849,6 +10155,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + process@0.11.10: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -9939,6 +10247,8 @@ snapshots: '@redis/search': 1.2.0(@redis/client@1.6.1) '@redis/time-series': 1.1.0(@redis/client@1.6.1) + reflect-metadata@0.1.13: {} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -10208,6 +10518,10 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 + source-map@0.1.43: + dependencies: + amdefine: 1.0.1 + source-map@0.6.1: {} source-map@0.7.4: {} @@ -10258,6 +10572,8 @@ snapshots: char-regex: 1.0.2 strip-ansi: 6.0.1 + string-template@1.0.0: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -10330,6 +10646,10 @@ snapshots: is-obj: 1.0.1 is-regexp: 1.0.0 + stringz@2.1.0: + dependencies: + char-regex: 1.0.2 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -10548,6 +10868,8 @@ snapshots: tslib@1.14.1: {} + tslib@2.5.0: {} + tslib@2.8.1: {} tsutils@3.21.0(typescript@4.9.5): @@ -10555,6 +10877,10 @@ snapshots: tslib: 1.14.1 typescript: 4.9.5 + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -10697,6 +11023,14 @@ snapshots: util-deprecate@1.0.2: {} + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@8.1.1: @@ -10710,6 +11044,8 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + validator@13.15.15: {} + vidstack@0.6.15: dependencies: maverick.js: 0.37.0 @@ -10739,11 +11075,25 @@ snapshots: webidl-conversions@6.1.0: {} + webpack-obfuscator@3.5.1(javascript-obfuscator@4.1.1)(webpack@5.99.9): + dependencies: + javascript-obfuscator: 4.1.1 + loader-utils: 2.0.4 + multi-stage-sourcemap: 0.3.1 + multimatch: 5.0.0 + webpack: 5.99.9 + webpack-sources: 2.3.1 + webpack-sources@1.4.3: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 + webpack-sources@2.3.1: + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + webpack-sources@3.3.3: {} webpack@5.99.9: diff --git a/src/app/api/admin/config_file/route.ts b/src/app/api/admin/config_file/route.ts index 42514d3..26e6c35 100644 --- a/src/app/api/admin/config_file/route.ts +++ b/src/app/api/admin/config_file/route.ts @@ -6,6 +6,8 @@ import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig, refineConfig } from '@/lib/config'; import { db } from '@/lib/db'; +export const runtime = 'nodejs'; + export async function POST(request: NextRequest) { const storageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage'; if (storageType === 'localstorage') { diff --git a/src/app/api/admin/config_subscription/fetch/route.ts b/src/app/api/admin/config_subscription/fetch/route.ts index ebe5c20..1480691 100644 --- a/src/app/api/admin/config_subscription/fetch/route.ts +++ b/src/app/api/admin/config_subscription/fetch/route.ts @@ -4,6 +4,8 @@ import { NextRequest, NextResponse } from 'next/server'; import { getAuthInfoFromCookie } from '@/lib/auth'; +export const runtime = 'nodejs'; + export async function POST(request: NextRequest) { try { // 权限检查:仅站长可以拉取配置订阅 diff --git a/src/app/api/admin/data_migration/export/route.ts b/src/app/api/admin/data_migration/export/route.ts index 7fdf1f8..1ccb281 100644 --- a/src/app/api/admin/data_migration/export/route.ts +++ b/src/app/api/admin/data_migration/export/route.ts @@ -9,6 +9,8 @@ import { SimpleCrypto } from '@/lib/crypto'; import { db } from '@/lib/db'; import { CURRENT_VERSION } from '@/lib/version'; +export const runtime = 'nodejs'; + const gzipAsync = promisify(gzip); export async function POST(req: NextRequest) { diff --git a/src/app/api/admin/data_migration/import/route.ts b/src/app/api/admin/data_migration/import/route.ts index f3b0c28..e6b19bb 100644 --- a/src/app/api/admin/data_migration/import/route.ts +++ b/src/app/api/admin/data_migration/import/route.ts @@ -9,6 +9,8 @@ import { configSelfCheck, setCachedConfig } from '@/lib/config'; import { SimpleCrypto } from '@/lib/crypto'; import { db } from '@/lib/db'; +export const runtime = 'nodejs'; + const gunzipAsync = promisify(gunzip); export async function POST(req: NextRequest) { diff --git a/src/app/api/admin/live/refresh/route.ts b/src/app/api/admin/live/refresh/route.ts index 2766426..82497fb 100644 --- a/src/app/api/admin/live/refresh/route.ts +++ b/src/app/api/admin/live/refresh/route.ts @@ -7,6 +7,8 @@ import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; import { refreshLiveChannels } from '@/lib/live'; +export const runtime = 'nodejs'; + export async function POST(request: NextRequest) { try { // 权限检查 diff --git a/src/app/api/admin/live/route.ts b/src/app/api/admin/live/route.ts index 9c06e03..23bb054 100644 --- a/src/app/api/admin/live/route.ts +++ b/src/app/api/admin/live/route.ts @@ -7,6 +7,8 @@ import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; import { deleteCachedLiveChannels, refreshLiveChannels } from '@/lib/live'; +export const runtime = 'nodejs'; + export async function POST(request: NextRequest) { try { // 权限检查 diff --git a/src/app/api/live/channels/route.ts b/src/app/api/live/channels/route.ts index 9dd3c7b..fc2b20f 100644 --- a/src/app/api/live/channels/route.ts +++ b/src/app/api/live/channels/route.ts @@ -2,6 +2,8 @@ import { NextRequest, NextResponse } from 'next/server'; import { getCachedLiveChannels } from '@/lib/live'; +export const runtime = 'nodejs'; + export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); diff --git a/src/app/api/live/epg/route.ts b/src/app/api/live/epg/route.ts index 4d6e3bc..62c6560 100644 --- a/src/app/api/live/epg/route.ts +++ b/src/app/api/live/epg/route.ts @@ -2,6 +2,8 @@ import { NextRequest, NextResponse } from 'next/server'; import { getCachedLiveChannels } from '@/lib/live'; +export const runtime = 'nodejs'; + export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); diff --git a/src/app/api/live/sources/route.ts b/src/app/api/live/sources/route.ts index 399eb23..1bd17b8 100644 --- a/src/app/api/live/sources/route.ts +++ b/src/app/api/live/sources/route.ts @@ -4,6 +4,8 @@ import { NextRequest, NextResponse } from 'next/server'; import { getConfig } from '@/lib/config'; +export const runtime = 'nodejs'; + export async function GET(request: NextRequest) { console.log(request.url) try {