commit 264abf002ebb67a23ab1d7148248bec076a0c79d Author: tangxinyue <524779910@qq.com> Date: Wed Jul 22 13:41:12 2026 +0800 feat:initial commit diff --git a/.env b/.env new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f75d482 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# 依赖包 +node_modules/ + +# 构建产物 +dist/ +dist-ssr/ +*.local + +# 系统自动生成的无用文件 +.DS_Store +.DS_Store? +ehthumbs.db +Thumbs.db + +# 日志文件 +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# 编辑器配置 +.vscode/* +!.vscode/extensions.json diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..1d84456 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@batiao:registry=https://maven.batiao8.com/repository/npm-releases/ \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..fe1675f --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + 装样大师 + + + +
+ + + + \ No newline at end of file diff --git a/log/server.log b/log/server.log new file mode 100644 index 0000000..d234f78 --- /dev/null +++ b/log/server.log @@ -0,0 +1,69 @@ +[2026-07-22 11:40:20,637] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\main.cjs:13] server start at http://127.0.0.1:9270 +[2026-07-22 11:40:52,948] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\main.cjs:13] server start at http://127.0.0.1:9270 +[2026-07-22 11:40:53,151] [INFO] [unknow:0] GET 200 / +[2026-07-22 11:40:53,179] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-22 11:40:53,230] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-22 11:41:09,737] [INFO] [unknow:0] GET 200 / +[2026-07-22 11:41:09,788] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-22 11:41:09,850] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-22 11:44:37,840] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\main.cjs:13] server start at http://127.0.0.1:9270 +[2026-07-22 11:44:39,868] [INFO] [unknow:0] GET 200 / +[2026-07-22 11:44:39,906] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-22 11:44:40,032] [INFO] [unknow:0] GET 200 /src/public/header/chat-icon.png +[2026-07-22 11:44:40,033] [INFO] [unknow:0] GET 200 /src/public/header/money-icon.png +[2026-07-22 11:44:40,036] [INFO] [unknow:0] GET 200 /src/public/header/zhengjianmoni.png +[2026-07-22 11:44:40,038] [INFO] [unknow:0] GET 200 /src/public/header/feijipiao.png +[2026-07-22 11:44:40,056] [INFO] [unknow:0] GET 200 /src/public/header/huochepiao.png +[2026-07-22 11:44:40,058] [INFO] [unknow:0] GET 200 /src/public/header/gouwuxiangqing.png +[2026-07-22 11:44:40,059] [INFO] [unknow:0] GET 200 /src/public/header/qinglvzheng.png +[2026-07-22 11:44:40,060] [INFO] [unknow:0] GET 200 /src/public/header/shipinliaotian.png +[2026-07-22 11:44:40,093] [INFO] [unknow:0] GET 200 /src/public/index/liaotianmoni.png +[2026-07-22 11:44:40,094] [INFO] [unknow:0] GET 200 /src/public/index/yuemoni.png +[2026-07-22 11:44:40,095] [INFO] [unknow:0] GET 200 /src/public/index/gongzidan.png +[2026-07-22 11:44:40,095] [INFO] [unknow:0] GET 200 /src/public/index/huochepiao.png +[2026-07-22 11:44:40,097] [INFO] [unknow:0] GET 200 /src/public/index/feijipiao.png +[2026-07-22 11:44:40,099] [INFO] [unknow:0] GET 200 /src/public/index/zhengjian.png +[2026-07-22 11:44:40,106] [INFO] [unknow:0] GET 200 /src/public/index/gouwumoni.png +[2026-07-22 11:44:40,110] [INFO] [unknow:0] GET 200 /src/public/index/service2.png +[2026-07-22 11:44:40,111] [INFO] [unknow:0] GET 200 /src/public/index/service1.png +[2026-07-22 11:44:40,112] [INFO] [unknow:0] GET 200 /src/public/index/service4.png +[2026-07-22 11:44:40,113] [INFO] [unknow:0] GET 200 /src/public/index/service3.png +[2026-07-22 11:44:40,148] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-22 11:44:40,249] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\core\router\index.cjs:115] GET 400 /api/user/config?nonce=0a7749351dc3464e80f434725e2f62f7&signature=34558c5c41e567ed8c8f698a80493987×tamp=1784691880 +[2026-07-22 11:45:45,061] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\main.cjs:13] server start at http://127.0.0.1:9270 +[2026-07-22 11:45:49,496] [INFO] [unknow:0] GET 200 / +[2026-07-22 11:45:49,550] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-22 11:45:49,654] [INFO] [unknow:0] GET 200 /src/public/header/money-icon.png +[2026-07-22 11:45:49,656] [INFO] [unknow:0] GET 200 /src/public/header/chat-icon.png +[2026-07-22 11:45:49,658] [INFO] [unknow:0] GET 200 /src/public/header/zhengjianmoni.png +[2026-07-22 11:45:49,661] [INFO] [unknow:0] GET 200 /src/public/header/feijipiao.png +[2026-07-22 11:45:49,663] [INFO] [unknow:0] GET 200 /src/public/header/huochepiao.png +[2026-07-22 11:45:49,669] [INFO] [unknow:0] GET 200 /src/public/header/gouwuxiangqing.png +[2026-07-22 11:45:49,695] [INFO] [unknow:0] GET 200 /src/public/header/qinglvzheng.png +[2026-07-22 11:45:49,696] [INFO] [unknow:0] GET 200 /src/public/header/shipinliaotian.png +[2026-07-22 11:45:49,735] [INFO] [unknow:0] GET 200 /src/public/index/huochepiao.png +[2026-07-22 11:45:49,736] [INFO] [unknow:0] GET 200 /src/public/index/yuemoni.png +[2026-07-22 11:45:49,741] [INFO] [unknow:0] GET 200 /src/public/index/gongzidan.png +[2026-07-22 11:45:49,743] [INFO] [unknow:0] GET 200 /src/public/index/liaotianmoni.png +[2026-07-22 11:45:49,745] [INFO] [unknow:0] GET 200 /src/public/index/feijipiao.png +[2026-07-22 11:45:49,755] [INFO] [unknow:0] GET 200 /src/public/index/gouwumoni.png +[2026-07-22 11:45:49,757] [INFO] [unknow:0] GET 200 /src/public/index/zhengjian.png +[2026-07-22 11:45:49,759] [INFO] [unknow:0] GET 200 /src/public/index/service1.png +[2026-07-22 11:45:49,762] [INFO] [unknow:0] GET 200 /src/public/index/service2.png +[2026-07-22 11:45:49,765] [INFO] [unknow:0] GET 200 /src/public/index/service3.png +[2026-07-22 11:45:49,768] [INFO] [unknow:0] GET 200 /src/public/index/service4.png +[2026-07-22 11:45:49,780] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-22 11:45:49,926] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=a64235de6ea7ffebad418f9c2811cf65&signature=4c0d5aea657628fea8eb614c30bbc072×tamp=1784691949 +[2026-07-22 11:53:07,083] [INFO] [unknow:0] GET 200 / +[2026-07-22 11:53:07,194] [INFO] [unknow:0] GET 200 /src/public/header/money-icon.png +[2026-07-22 11:53:07,195] [INFO] [unknow:0] GET 200 /src/public/header/chat-icon.png +[2026-07-22 11:53:07,195] [INFO] [unknow:0] GET 200 /src/public/header/gouwuxiangqing.png +[2026-07-22 11:53:07,196] [INFO] [unknow:0] GET 200 /src/public/header/zhengjianmoni.png +[2026-07-22 11:53:07,197] [INFO] [unknow:0] GET 200 /src/public/header/feijipiao.png +[2026-07-22 11:53:07,197] [INFO] [unknow:0] GET 200 /src/public/header/huochepiao.png +[2026-07-22 11:53:07,215] [INFO] [unknow:0] GET 200 /src/public/header/qinglvzheng.png +[2026-07-22 11:53:07,216] [INFO] [unknow:0] GET 200 /src/public/header/shipinliaotian.png +[2026-07-22 11:53:07,226] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-22 11:53:07,318] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\core\router\index.cjs:28] GET 200 /api/user?nonce=fddaedee3575963db77e91737a2348ef&signature=8088d7e0f2529b98895a16838cf5a5be×tamp=1784692387 +[2026-07-22 11:53:07,321] [INFO] [D:\AAA-Code\模拟器pc端\frontend\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=08ef64bc62ffad421fe79bee1cbba2c5&signature=d13b6ce366e861bbce4924bd500e68c3×tamp=1784692387 +[2026-07-22 11:53:11,132] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e65b54c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3705 @@ +{ + "name": "wechat-pc-frontend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "wechat-pc-frontend", + "version": "1.0.0", + "dependencies": { + "@batiao/batiao-sdk-vue-vite": "^1.0.357", + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.6.8", + "body-parser": "^2.3.0", + "crypto-js": "^4.2.0", + "dotenv": "^17.4.2", + "element-plus": "^2.6.1", + "express": "^5.2.1", + "html2canvas": "^1.4.1", + "http-proxy": "^1.18.1", + "mime": "^4.1.0", + "nprogress": "^0.2.0", + "pinia": "^2.1.7", + "request": "^2.88.2", + "vue": "^3.4.21", + "vue-router": "^4.3.0", + "winston": "^3.19.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.4", + "sass": "^1.71.1", + "vite": "^5.2.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@batiao/batiao-sdk-vue-vite": { + "version": "1.0.357", + "resolved": "http://maven.batiao8.com/repository/npm-releases/@batiao/batiao-sdk-vue-vite/-/batiao-sdk-vue-vite-1.0.357.tgz", + "integrity": "sha512-CGp16f+z7kLJSZocrj8wuttwUI4LuhAM3F9EE8+LManpsaGG5GPeDCfIfmYI9am97vnn4Fl1J0JGSSZiafjZyg==", + "license": "UNLICENSED", + "dependencies": { + "quickjs-emscripten": "^0.32.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "dependencies": { + "@so-ric/colorspace": "^1.1.6", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@jitl/quickjs-ffi-types": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-ffi-types/-/quickjs-ffi-types-0.32.0.tgz", + "integrity": "sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg==" + }, + "node_modules/@jitl/quickjs-wasmfile-debug-asyncify": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-debug-asyncify/-/quickjs-wasmfile-debug-asyncify-0.32.0.tgz", + "integrity": "sha512-EX8zbXwGqCgAE764M+qvkHtyXDi/FUoMBea0JnES7vCM3P7a2+EOZOjGv85wtZ2sJhI1oJ+nekmqpOODFDY+hw==", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jitl/quickjs-wasmfile-debug-sync": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-debug-sync/-/quickjs-wasmfile-debug-sync-0.32.0.tgz", + "integrity": "sha512-LeYWrPGC1uNCTBWvibo3ZLJj0CSVNYUXvJpXMCmuQ5Sap2cCACc3uvGvYV4homHHBAzfw5akoTqMMS4YFRtw+Q==", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jitl/quickjs-wasmfile-release-asyncify": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-release-asyncify/-/quickjs-wasmfile-release-asyncify-0.32.0.tgz", + "integrity": "sha512-3oSwPfja12ICz4aIblB58cuY8JlEq5Txt8Cut4VLo+LH47QN+mzCnSgnbB03hWzg1LBcc+VyyI9UOag7a1NF+Q==", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jitl/quickjs-wasmfile-release-sync": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@jitl/quickjs-wasmfile-release-sync/-/quickjs-wasmfile-release-sync-0.32.0.tgz", + "integrity": "sha512-BKNDI/TPBfGlLNGYpLrhcDGXmIk4xHm4MRAisOBnOzpXVn9HZWsfmMAc9WMBrAHjvvds6HOikKeaOBKdPdpVrg==", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", + "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz", + "integrity": "sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.0.tgz", + "integrity": "sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.0.tgz", + "integrity": "sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.0.tgz", + "integrity": "sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.0.tgz", + "integrity": "sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.0.tgz", + "integrity": "sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.0.tgz", + "integrity": "sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.0.tgz", + "integrity": "sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.0.tgz", + "integrity": "sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.0.tgz", + "integrity": "sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.0.tgz", + "integrity": "sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.0.tgz", + "integrity": "sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.0.tgz", + "integrity": "sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.0.tgz", + "integrity": "sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.0.tgz", + "integrity": "sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.0.tgz", + "integrity": "sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.0.tgz", + "integrity": "sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.0.tgz", + "integrity": "sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.0.tgz", + "integrity": "sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.0.tgz", + "integrity": "sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.0.tgz", + "integrity": "sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.0.tgz", + "integrity": "sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.0.tgz", + "integrity": "sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.0.tgz", + "integrity": "sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.0.tgz", + "integrity": "sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.38.tgz", + "integrity": "sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/shared": "3.5.38", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.38.tgz", + "integrity": "sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.38.tgz", + "integrity": "sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/compiler-core": "3.5.38", + "@vue/compiler-dom": "3.5.38", + "@vue/compiler-ssr": "3.5.38", + "@vue/shared": "3.5.38", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.38.tgz", + "integrity": "sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.38.tgz", + "integrity": "sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.38.tgz", + "integrity": "sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.38.tgz", + "integrity": "sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.38", + "@vue/runtime-core": "3.5.38", + "@vue/shared": "3.5.38", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.38.tgz", + "integrity": "sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.38", + "@vue/shared": "3.5.38" + }, + "peerDependencies": { + "vue": "3.5.38" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.38.tgz", + "integrity": "sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.3.0.tgz", + "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.3.0", + "@vueuse/shared": "14.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.3.0.tgz", + "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.3.0.tgz", + "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "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==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" + }, + "node_modules/axios": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "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==", + "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/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/color": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "dependencies": { + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-convert": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color-string": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "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==", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "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/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "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==" + }, + "node_modules/element-plus": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.14.2.tgz", + "integrity": "sha512-eNH9uP3wQoNqieEIHXiNvIVv+zO5sZDU0CAZq5b0zqSN06DD0/V9xIq1R/qm3rw5k3nBTM1JvpxhCfRbaFLzDQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.2.0", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.7.6", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8", + "@types/lodash": "^4.17.24", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "14.3.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.20", + "lodash": "^4.18.1", + "lodash-es": "^4.18.1", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0", + "vue-component-type-helpers": "^3.3.3" + }, + "peerDependencies": { + "vue": "^3.3.7" + } + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.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==" + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.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/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "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": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "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==", + "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==", + "dev": true, + "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/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "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/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/immutable": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz", + "integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "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==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.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/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quickjs-emscripten": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/quickjs-emscripten/-/quickjs-emscripten-0.32.0.tgz", + "integrity": "sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA==", + "dependencies": { + "@jitl/quickjs-wasmfile-debug-asyncify": "0.32.0", + "@jitl/quickjs-wasmfile-debug-sync": "0.32.0", + "@jitl/quickjs-wasmfile-release-asyncify": "0.32.0", + "@jitl/quickjs-wasmfile-release-sync": "0.32.0", + "quickjs-emscripten-core": "0.32.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/quickjs-emscripten-core": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/quickjs-emscripten-core/-/quickjs-emscripten-core-0.32.0.tgz", + "integrity": "sha512-QFnPfjFey8EqknSrSxe1hZrf1/8z7/6s1QzGOmKo6++02r7QRRX7ZoyNaZh7JuVjWsVW87KnQrbZqnHkOAzUyg==", + "dependencies": { + "@jitl/quickjs-ffi-types": "0.32.0" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/rollup": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.0.tgz", + "integrity": "sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.0", + "@rollup/rollup-android-arm64": "4.62.0", + "@rollup/rollup-darwin-arm64": "4.62.0", + "@rollup/rollup-darwin-x64": "4.62.0", + "@rollup/rollup-freebsd-arm64": "4.62.0", + "@rollup/rollup-freebsd-x64": "4.62.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.0", + "@rollup/rollup-linux-arm-musleabihf": "4.62.0", + "@rollup/rollup-linux-arm64-gnu": "4.62.0", + "@rollup/rollup-linux-arm64-musl": "4.62.0", + "@rollup/rollup-linux-loong64-gnu": "4.62.0", + "@rollup/rollup-linux-loong64-musl": "4.62.0", + "@rollup/rollup-linux-ppc64-gnu": "4.62.0", + "@rollup/rollup-linux-ppc64-musl": "4.62.0", + "@rollup/rollup-linux-riscv64-gnu": "4.62.0", + "@rollup/rollup-linux-riscv64-musl": "4.62.0", + "@rollup/rollup-linux-s390x-gnu": "4.62.0", + "@rollup/rollup-linux-x64-gnu": "4.62.0", + "@rollup/rollup-linux-x64-musl": "4.62.0", + "@rollup/rollup-openbsd-x64": "4.62.0", + "@rollup/rollup-openharmony-arm64": "4.62.0", + "@rollup/rollup-win32-arm64-msvc": "4.62.0", + "@rollup/rollup-win32-ia32-msvc": "4.62.0", + "@rollup/rollup-win32-x64-gnu": "4.62.0", + "@rollup/rollup-win32-x64-msvc": "4.62.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "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" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.101.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.101.0.tgz", + "integrity": "sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "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.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "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==", + "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==", + "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/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "bin": { + "uuid": "bin/uuid" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.38", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.38.tgz", + "integrity": "sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.38", + "@vue/compiler-sfc": "3.5.38", + "@vue/runtime-dom": "3.5.38", + "@vue/server-renderer": "3.5.38", + "@vue/shared": "3.5.38" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.3.5.tgz", + "integrity": "sha512-Fe1jyPJoUGpJOYKOri44jduR7My4yYINOMJISuMAbmrs+L5LbIDUc8NTWZYY3EJLK0yPLuCmcd5zoCsE4k2/KA==", + "license": "MIT" + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/winston": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.8", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "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==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e92b2f9 --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "name": "wechat-pc-frontend", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "start": "node --stack-size=12800 --stack-trace-limit=20 ./service/main.cjs" + }, + "dependencies": { + "@batiao/batiao-sdk-vue-vite": "^1.0.357", + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.6.8", + "body-parser": "^2.3.0", + "crypto-js": "^4.2.0", + "dotenv": "^17.4.2", + "element-plus": "^2.6.1", + "express": "^5.2.1", + "html2canvas": "^1.4.1", + "http-proxy": "^1.18.1", + "mime": "^4.1.0", + "nprogress": "^0.2.0", + "pinia": "^2.1.7", + "request": "^2.88.2", + "vue": "^3.4.21", + "vue-router": "^4.3.0", + "winston": "^3.19.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.4", + "sass": "^1.71.1", + "vite": "^5.2.0" + }, + "auth": { + "sign": "xn08hYoizXhZ1zHP8DVqfCm2yHxPmhil", + "decode": "e4rOtnF8tJjtHO7ecZeJHN1rapED5ImB" + }, + "authExpire": 5, + "debug": false, + "debug_build": false, + "dat_only_main": true +} \ No newline at end of file diff --git a/service/core/router/index.cjs b/service/core/router/index.cjs new file mode 100644 index 0000000..3cb812f --- /dev/null +++ b/service/core/router/index.cjs @@ -0,0 +1,127 @@ +const logger = require('../utils/log.cjs') +const routes = require('./routes.cjs') +const httpProxy = require('http-proxy') +const proxy = httpProxy.createProxyServer({}) +const fs = require('fs') +const dist = 'dist' +let mime +import('mime').then((res) => { + mime = res.default +}) +let proxys = require('../../../src/proxy.cjs') +const { Exception } = require("sass"); +const httpOk = 200 +const httpBadRequest = 400 +const matchProxy = (request, response) => { + const match = request.url.split('/')[1] + const proxyInfo = proxys['/' + match] + if (proxyInfo) { + const host = request.headers.host; + delete request.headers.host + if (typeof proxyInfo.rewrite === 'function') { + request.url = proxyInfo.rewrite(request.url) + } + proxy.web(request, response, { + target: proxyInfo.target || ("http://" + host), + changeOrigin: proxyInfo.changeOrigin + }) + logger.info(`${request.method} ${httpOk} ${request.url}`) + return true + } else { + return null + } +} +const matchRouter = async (request, response) => { + let [url] = request.url.split('?') + let route = routes + let url_sp = url.split('/') + for (let p of url_sp) { + if (!p) { + continue + } + if (route[p]) { + route = route[p] + } else { + return false + } + } + if (typeof route === 'function') { + await route(request, response) + // response.writeHead(httpOk, { 'Content-Type': 'application/json' }) + // response.end(JSON.stringify(res)) + logger.info(`${request.method} ${httpOk} ${request.url}`) + return true + } else { + return false + } +} +const matchFile = async (request, response) => { + return new Promise((resolve) => { + const path = request.url.split('?')[0] + fs.readFile(dist + decodeURIComponent(path), (err, file) => { + if (!err) { + const mimetype = mime.getType(request.url) + const responseHdeaders = { 'Content-Type': mimetype } + if (path.endsWith("-sw.js")) { + responseHdeaders["Service-Worker-Allowed"] = '/' + } + response.writeHead(httpOk, responseHdeaders) + response.end(file) + // logger.info(`${request.method} ${httpOk} ${request.url}`) + resolve(true) + } else { + resolve(false) + } + }) + }) +} + +const endIndex = async (request, response) => { + console.log(dist + '/index.html') + fs.readFile(dist + '/index.html', (err, html) => { + if (!err) { + response.writeHead(httpOk, { 'Content-type': 'text/html;charset=utf-8' }) + response.end(html) + logger.info(`${request.method} ${httpOk} ${request.url}`) + } + }) +} + +const matchType = async (request, response) => { + const isRouter = await matchRouter(request, response) + if (isRouter) { + return + } + let isProxy = matchProxy(request, response) + if (isProxy) { + return + } + let isFile = await matchFile(request, response) + if (isFile) { + return + } + await endIndex(request, response) +} + +const httpService = async (request, response) => { + try { + await matchType(request, response) + } catch (e) { + response.writeHead(httpBadRequest, { 'Content-Type': 'application/json' }) + response.end( + JSON.stringify({ + code: -1, + message: String(e) + }) + ) + logger.info(`${request.method} ${httpBadRequest} ${request.url}`) + } +} +module.exports = { + httpService, + matchType, + matchRouter, + matchFile, + endIndex, + matchProxy, +} diff --git a/service/core/router/routes.cjs b/service/core/router/routes.cjs new file mode 100644 index 0000000..d4749ba --- /dev/null +++ b/service/core/router/routes.cjs @@ -0,0 +1,96 @@ +// const logger = require("../utils/log.cjs") +const config = require("../utils/config.cjs"); +const request = require("request"); +const CryptoJS = require("crypto-js"); + +module.exports = { + config: async () => { + return config; + }, + getEnvByKey:async (req,res)=>{ + const query = req.query; + const key = query.key; + res.writeHead(200, {"Content-Type": "text/plain"}); + res.end(process.env[key]) + }, + downloadWithFileName: async (req, res) => { + const query = req.query; + const response = request(decodeURIComponent(query.url), { + headers: query.headers, + }); + response.on("response", (resp) => { + ["content-length", "content-type"].forEach( + (key) => { + if (resp.headers[key]) { + res.setHeader(key, resp.headers[key]); + } + } + ); + let disposition; + if(query.filename){ + const filename = encodeURIComponent(query.filename); + disposition = `attachment; filename="${filename}"`; + }else { + disposition = resp.headers["content-dispositions"] || "" + } + res.setHeader("content-disposition", disposition); + res.setHeader("access-control-allow-origin", "*") + }); + + response.on("error", (e) => { + res.status(500).send(String(e)); + }); + response.on("end", () => { + res.end(); + }); + response.on("data", (chunk) => { + res.write(chunk); + }); + }, + download: async (req, res) => { + const query = req.query; + query.url = CryptoJS.enc.Utf8.stringify( + CryptoJS.enc.Base64.parse(query.url) + ).toString(); + query.headers = { + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0", + Accept: "*/*", + "Accept-Language": + "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", + Connection: "keep-alive", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + ...JSON.parse( + CryptoJS.enc.Utf8.stringify( + CryptoJS.enc.Base64.parse(query.headers) + ).toString() + ), + }; + const response = request(query.url, { + headers: query.headers, + }); + response.on("response", (resp) => { + ["content-length", "content-type", "content-disposition"].forEach( + (key) => { + if (resp.headers[key]) { + res.setHeader(key, resp.headers[key]); + } + } + ); + res.setHeader("access-control-allow-origin", "*") + }); + + response.on("error", (e) => { + res.status(500).send(String(e)); + }); + response.on("end", () => { + res.end(); + }); + response.on("data", (chunk) => { + res.write(chunk); + }); + // response.pipe(res); + }, +}; diff --git a/service/core/utils/config.cjs b/service/core/utils/config.cjs new file mode 100644 index 0000000..f45efe4 --- /dev/null +++ b/service/core/utils/config.cjs @@ -0,0 +1,2 @@ +const config = require("../../../src/config.json") +module.exports = config \ No newline at end of file diff --git a/service/core/utils/log.cjs b/service/core/utils/log.cjs new file mode 100644 index 0000000..c74559c --- /dev/null +++ b/service/core/utils/log.cjs @@ -0,0 +1,53 @@ +const winston = require('winston'); +function thisLine() { + try { + const e = new Error(); + const regex = /\((.*):(\d+):(\d+)\)$/ + const stacks = e.stack.split("\n") + const temp = [] + stacks.forEach(stack => { + if (!stack.includes("node_modules")) { + temp.push(stack) + } + }) + const match = regex.exec(temp[3]); + return { + filepath: match[1], + line: match[2], + column: match[3] + }; + } catch (e) { + return { + filepath: "unknow", + line: "0", + column: "0" + }; + } +} +const logger = winston.createLogger({ + level: 'info', + transports: [ + new winston.transports.Console(), + new winston.transports.File({ + dirname: 'log', filename: 'server.log' + }), + ], + datePattern: 'YYYY-MM-DD', + zippedArchive: true, + format: winston.format.combine( + winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss,SSS" }), + winston.format.align(), + winston.format.splat(), + winston.format.printf( + (info) => { + const { timestamp, level, message } = info; + const { filepath, line } = thisLine() + return `[${timestamp}] [${level.toUpperCase()}] [${filepath}:${line}] ${message}`; // 包括文件名和行号 + } + ) + ), + maxSize: '500m', // 每个日志文件最大尺寸 + maxFiles: '1d' // 保留的日志文件天数 +}); + +module.exports = logger \ No newline at end of file diff --git a/service/main.cjs b/service/main.cjs new file mode 100644 index 0000000..23eccfb --- /dev/null +++ b/service/main.cjs @@ -0,0 +1,20 @@ +/* eslint-disable no-undef */ +// 这里是生产环境的反向代理逻辑 +const initService = () => { + const express = require("express"); + const router = require("./core/router/index.cjs"); + // const logger = console + const config = require("./core/utils/config.cjs"); + const logger = require("./core/utils/log.cjs"); + const server = express(); + const PORT = config.port; + server.use(router.httpService); + server.listen(PORT, function () { + logger.info(`server start at http://127.0.0.1:${PORT}`); + }); +}; +try { + initService(); +} catch (e) { + console.error(e); +} diff --git a/service/mock.cjs b/service/mock.cjs new file mode 100644 index 0000000..3ddef52 --- /dev/null +++ b/service/mock.cjs @@ -0,0 +1,13 @@ +// 这里是开发环境的反向代理逻辑 +const routes = require("./core/router/routes.cjs"); +const router = require("./core/router/index.cjs"); + +module.exports = async function mock(req, res, next) { + if (await router.matchRouter(req,res)) { + return; + } + if (router.matchProxy(req, res)){ + return; + } + next(); +}; diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..7ae1872 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/api/authService.js b/src/api/authService.js new file mode 100644 index 0000000..e7443ff --- /dev/null +++ b/src/api/authService.js @@ -0,0 +1,72 @@ +import { get, postJson } from "@/utils/requestService"; +import appConfig from "@/utils/appConfig"; + +export default { + /** + * 0. 获取系统与用户初始化配置 (user-config) + * 文档参考: https://gs.batiao8.com/doc/#api-User-user-config + */ + async getUserConfig(data = {}) { + return await get(appConfig.baseURL, "/user/config", data); + }, + + /** + * 1. 发送手机验证码 (send-user-code) + * 文档参考: https://gs.batiao8.com/doc/#api-User-send-user-code + * @param {Object} data - { phone: '13800138000' } + */ + async sendCode(data) { + return await postJson(appConfig.baseURL, "/user/code", data); + }, + + /** + * 2. 手机验证码登录 (user-login) + * 文档参考: https://gs.batiao8.com/doc/#api-User-user-login + * @param {Object} data - { login_type: 'phone', phone: { phone, code, timestamp } } + */ + async login(data) { + return await postJson(appConfig.baseURL, "/user/login", data); + }, + + /** + * 3. 获取微信扫码登录二维码 + */ + async getLoginCode(data = {}) { + return await postJson(appConfig.baseURL, "/weixin/qrcode", data); + }, + + /** + * 4. 轮询微信扫码状态 + * @param {Object} data - { key: 'xxx' } + */ + async askLoginCode(data) { + return await get(appConfig.baseURL, "/weixin/qrcode", data); + }, + + /** + * 5. 获取当前登录用户信息 + */ + async getUserInfo(data = {}) { + return await get(appConfig.baseURL, "/user", data); + }, + + /** + * 获取商品列表 + * @param {*} data + * @returns + */ + async getGoods(data = { type: "member" }) { + return await get(appConfig.baseURL, "/order/goods", data); + }, + + /** + * 创建订单 + * @param {*} data + * @returns + */ + async createOrder(data = {}) { + return await postJson(appConfig.baseURL, "/order", data); + }, + + +}; diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..e4e7889 --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,85 @@ +import axios from 'axios' +import { ElMessage } from 'element-plus' +import router from '@/router' +import { useUserStore } from '@/stores/user' + +const http = axios.create({ + baseURL: '/api', + timeout: 15000, +}) + +http.interceptors.request.use(config => { + const token = localStorage.getItem('token') + if (token) config.headers.Authorization = `Bearer ${token}` + return config +}) + +http.interceptors.response.use( + res => res.data, + err => { + if (err.response?.status === 401) { + localStorage.removeItem('token') + const userStore = useUserStore() + userStore.reset() + // _noRedirect 标记:静默验证时不跳转(避免注册/登录页被重定向) + if (!err.config?._noRedirect) { + router.push('/login') + } + return Promise.reject(err) + } + // 支持静默模式:config._silent=true 时不弹出错误提示 + if (!err.config?._silent) { + const msg = err.response?.data?.error || '请求失败' + ElMessage.error(msg) + } + return Promise.reject(err) + } +) + +// Auth +export const auth = { + register: data => http.post('/auth/register', data), + login: data => http.post('/auth/login', data), + logout: () => http.post('/auth/logout'), + profile: () => http.get('/auth/profile'), + profileSilent: () => http.get('/auth/profile', { _silent: true, _noRedirect: true }), + captcha: () => http.get('/auth/captcha'), + wechatLoginUrl: () => http.get('/auth/wechat/login'), +} + +// Works +export const works = { + list: params => http.get('/works', { params }), + create: data => http.post('/works', data), + get: id => http.get(`/works/${id}`), + update: (id, data) => http.put(`/works/${id}`, data), + delete: id => http.delete(`/works/${id}`), +} + +// Payment +export const payment = { + createOrder: planType => http.post('/payment/create-order', { plan_type: planType }), + getOrder: orderNo => http.get(`/payment/order/${orderNo}`), + orders: () => http.get('/payment/my-orders'), + checkResult: orderNo => http.get(`/payment/result/${orderNo}`, { _silent: true }), +} + +// Product (商品管理) +export const product = { + list: () => http.get('/product/list'), // 前端公开:启用商品列表 + buy: (productId, data) => http.post(`/product/${productId}/buy`, data), // 购买商品 + // 管理端接口(需登录token) + adminList: params => http.get('/product', { params }), // 分页列表 + get: id => http.get(`/product/${id}`), + create: data => http.post('/product', data), + update: (id, data) => http.put(`/product/${id}`, data), + delete: id => http.delete(`/product/${id}`), + toggle: id => http.post(`/product/${id}/toggle`), +} + +// Public +export const publicApi = { + banners: () => http.get('/public/banners'), +} + +export default { auth, works, payment, product, public: publicApi } diff --git a/src/components/AppFooter.vue b/src/components/AppFooter.vue new file mode 100644 index 0000000..1026768 --- /dev/null +++ b/src/components/AppFooter.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue new file mode 100644 index 0000000..347c977 --- /dev/null +++ b/src/components/AppHeader.vue @@ -0,0 +1,529 @@ + + + + + diff --git a/src/components/BaseDialog.vue b/src/components/BaseDialog.vue new file mode 100644 index 0000000..ba162de --- /dev/null +++ b/src/components/BaseDialog.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/components/LoginDialog.vue b/src/components/LoginDialog.vue new file mode 100644 index 0000000..6b13ee6 --- /dev/null +++ b/src/components/LoginDialog.vue @@ -0,0 +1,594 @@ + + + + + + + diff --git a/src/components/PaymentDialog.vue b/src/components/PaymentDialog.vue new file mode 100644 index 0000000..61132fc --- /dev/null +++ b/src/components/PaymentDialog.vue @@ -0,0 +1,739 @@ + + + + + diff --git a/src/components/ToolCard.vue b/src/components/ToolCard.vue new file mode 100644 index 0000000..e670b0e --- /dev/null +++ b/src/components/ToolCard.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/components/WarningFooter.vue b/src/components/WarningFooter.vue new file mode 100644 index 0000000..c363040 --- /dev/null +++ b/src/components/WarningFooter.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/components/balance/BalancePreview.vue b/src/components/balance/BalancePreview.vue new file mode 100644 index 0000000..e36843f --- /dev/null +++ b/src/components/balance/BalancePreview.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/src/components/chat/ChatPreview.vue b/src/components/chat/ChatPreview.vue new file mode 100644 index 0000000..61753a7 --- /dev/null +++ b/src/components/chat/ChatPreview.vue @@ -0,0 +1,931 @@ + + + + + + diff --git a/src/components/simulator/PhoneMockup.vue b/src/components/simulator/PhoneMockup.vue new file mode 100644 index 0000000..f546c8c --- /dev/null +++ b/src/components/simulator/PhoneMockup.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/src/components/simulator/SimulatorLayout.vue b/src/components/simulator/SimulatorLayout.vue new file mode 100644 index 0000000..feaadf2 --- /dev/null +++ b/src/components/simulator/SimulatorLayout.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/components/simulator/StatusBar.vue b/src/components/simulator/StatusBar.vue new file mode 100644 index 0000000..33feda2 --- /dev/null +++ b/src/components/simulator/StatusBar.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/components/simulator/homeBar.vue b/src/components/simulator/homeBar.vue new file mode 100644 index 0000000..8263133 --- /dev/null +++ b/src/components/simulator/homeBar.vue @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/src/config.json b/src/config.json new file mode 100644 index 0000000..02b17a2 --- /dev/null +++ b/src/config.json @@ -0,0 +1,28 @@ +{ + "title": "快存图", + "baseUrl": "/kct", + "messageDuration": 3000, + "requestTimeout": 60000, + "successCode": [ + 200, + 0 + ], + "invalidCode": [ + 1001106, + 1001003 + ], + "port": 9270 , + "rbBuldInfo": { + "api": "http://rb2.batiao8.com/console/custom/deploy/f5b5219cce4a7d47a60416ef4d3fa891", + "key": "bNJXlzwc" + }, + + "policyUrl": "kct/static/policy", + "policyUrl2": "kct/static/policy2_web", + + "goodsType":"member", + "ignoreCodeErrorList": ["GET&/api/weixin/qrcode","GET&/api/app/code", "GET&/api/order"], + "hideConsole": true, + "downloadSuccessCode":[200,201,202,203,204,205,206], + "configIgnoreParams": ["inputvalue"] +} \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..c77fe4e --- /dev/null +++ b/src/main.js @@ -0,0 +1,39 @@ +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import zhCn from 'element-plus/es/locale/lang/zh-cn' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import router from './router' +import { createPinia } from 'pinia' +import App from './App.vue' +import './styles/global.scss' + +import authService from '@/api/authService' + +const app = createApp(App) + +// Register all Element Plus icons +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} + +app.use(ElementPlus, { locale: zhCn }) +app.use(createPinia()) +app.use(router) +app.mount('#app') + +// 后台异步获取配置与游客 Token,不阻塞首屏渲染 +authService.getUserConfig().then(res => { + if (res && res.data) { + console.log("用户配置", res.data) + // 只有在本地没有 token 时,才写入游客 token + if (res.data.token && !localStorage.getItem('token')) { + localStorage.setItem('token', res.data.token) + } + if (res.data.config) { + window.__USER_CONFIG__ = res.data.config + } + } +}).catch(err => { + console.error('获取用户配置失败:', err) +}) diff --git a/src/proxy.cjs b/src/proxy.cjs new file mode 100644 index 0000000..2a4349c --- /dev/null +++ b/src/proxy.cjs @@ -0,0 +1,12 @@ +module.exports = { + '/api': { + target: 'https://flaunt.batiao8.com', + changeOrigin: true, + rewrite: (path) => path + }, + '/static': { + target: 'http://wechat.wenyitu.com', + changeOrigin: true, + rewrite: (path) => path + } +} diff --git a/src/public/about-bg.jpg b/src/public/about-bg.jpg new file mode 100644 index 0000000..546d59b Binary files /dev/null and b/src/public/about-bg.jpg differ diff --git a/src/public/balance/lingtong-logo.png b/src/public/balance/lingtong-logo.png new file mode 100644 index 0000000..419e6ba Binary files /dev/null and b/src/public/balance/lingtong-logo.png differ diff --git a/src/public/balance/money.png b/src/public/balance/money.png new file mode 100644 index 0000000..9eb5cc7 Binary files /dev/null and b/src/public/balance/money.png differ diff --git a/src/public/balance/warning.png b/src/public/balance/warning.png new file mode 100644 index 0000000..dad30cf Binary files /dev/null and b/src/public/balance/warning.png differ diff --git a/src/public/common/back-dark.png b/src/public/common/back-dark.png new file mode 100644 index 0000000..3e40cd3 Binary files /dev/null and b/src/public/common/back-dark.png differ diff --git a/src/public/common/back-light.png b/src/public/common/back-light.png new file mode 100644 index 0000000..5a4dbae Binary files /dev/null and b/src/public/common/back-light.png differ diff --git a/src/public/common/default-avatar.png b/src/public/common/default-avatar.png new file mode 100644 index 0000000..653645f Binary files /dev/null and b/src/public/common/default-avatar.png differ diff --git a/src/public/common/more-dark.png b/src/public/common/more-dark.png new file mode 100644 index 0000000..6294288 Binary files /dev/null and b/src/public/common/more-dark.png differ diff --git a/src/public/common/more-light.png b/src/public/common/more-light.png new file mode 100644 index 0000000..d4c0e69 Binary files /dev/null and b/src/public/common/more-light.png differ diff --git a/src/public/common/stay-tuned.png b/src/public/common/stay-tuned.png new file mode 100644 index 0000000..b50b340 Binary files /dev/null and b/src/public/common/stay-tuned.png differ diff --git a/src/public/common/touzi.png b/src/public/common/touzi.png new file mode 100644 index 0000000..6a0c723 Binary files /dev/null and b/src/public/common/touzi.png differ diff --git a/src/public/common/watermaker.png b/src/public/common/watermaker.png new file mode 100644 index 0000000..d8ee6c4 Binary files /dev/null and b/src/public/common/watermaker.png differ diff --git a/src/public/direct-inbox.png b/src/public/direct-inbox.png new file mode 100644 index 0000000..5aca7db Binary files /dev/null and b/src/public/direct-inbox.png differ diff --git a/src/public/edit.png b/src/public/edit.png new file mode 100644 index 0000000..cbb0f13 Binary files /dev/null and b/src/public/edit.png differ diff --git a/src/public/font/wxfont/font/WeChatSansStd-Bold.otf b/src/public/font/wxfont/font/WeChatSansStd-Bold.otf new file mode 100644 index 0000000..474fb5c Binary files /dev/null and b/src/public/font/wxfont/font/WeChatSansStd-Bold.otf differ diff --git a/src/public/font/wxfont/font/WeChatSansStd-Light.otf b/src/public/font/wxfont/font/WeChatSansStd-Light.otf new file mode 100644 index 0000000..3d4adf3 Binary files /dev/null and b/src/public/font/wxfont/font/WeChatSansStd-Light.otf differ diff --git a/src/public/font/wxfont/font/WeChatSansStd-Medium.otf b/src/public/font/wxfont/font/WeChatSansStd-Medium.otf new file mode 100644 index 0000000..6819caf Binary files /dev/null and b/src/public/font/wxfont/font/WeChatSansStd-Medium.otf differ diff --git a/src/public/font/wxfont/font/WeChatSansStd-Regular.otf b/src/public/font/wxfont/font/WeChatSansStd-Regular.otf new file mode 100644 index 0000000..57fba55 Binary files /dev/null and b/src/public/font/wxfont/font/WeChatSansStd-Regular.otf differ diff --git a/src/public/header/chat-icon.png b/src/public/header/chat-icon.png new file mode 100644 index 0000000..d151cbd Binary files /dev/null and b/src/public/header/chat-icon.png differ diff --git a/src/public/header/close.png b/src/public/header/close.png new file mode 100644 index 0000000..f95b430 Binary files /dev/null and b/src/public/header/close.png differ diff --git a/src/public/header/down-app-banner-bg.png b/src/public/header/down-app-banner-bg.png new file mode 100644 index 0000000..550f208 Binary files /dev/null and b/src/public/header/down-app-banner-bg.png differ diff --git a/src/public/header/down-app-btn.png b/src/public/header/down-app-btn.png new file mode 100644 index 0000000..ad72e73 Binary files /dev/null and b/src/public/header/down-app-btn.png differ diff --git a/src/public/header/feijipiao.png b/src/public/header/feijipiao.png new file mode 100644 index 0000000..3b43d8c Binary files /dev/null and b/src/public/header/feijipiao.png differ diff --git a/src/public/header/gerenzhongxin.png b/src/public/header/gerenzhongxin.png new file mode 100644 index 0000000..c28098c Binary files /dev/null and b/src/public/header/gerenzhongxin.png differ diff --git a/src/public/header/gouwuxiangqing.png b/src/public/header/gouwuxiangqing.png new file mode 100644 index 0000000..49b3156 Binary files /dev/null and b/src/public/header/gouwuxiangqing.png differ diff --git a/src/public/header/huochepiao.png b/src/public/header/huochepiao.png new file mode 100644 index 0000000..1c9a96a Binary files /dev/null and b/src/public/header/huochepiao.png differ diff --git a/src/public/header/kaitonghuiyuan.png b/src/public/header/kaitonghuiyuan.png new file mode 100644 index 0000000..9500996 Binary files /dev/null and b/src/public/header/kaitonghuiyuan.png differ diff --git a/src/public/header/kaitonghuiyuanmenu.png b/src/public/header/kaitonghuiyuanmenu.png new file mode 100644 index 0000000..98f9c14 Binary files /dev/null and b/src/public/header/kaitonghuiyuanmenu.png differ diff --git a/src/public/header/login-btn.png b/src/public/header/login-btn.png new file mode 100644 index 0000000..c701ce3 Binary files /dev/null and b/src/public/header/login-btn.png differ diff --git a/src/public/header/logo-img.png b/src/public/header/logo-img.png new file mode 100644 index 0000000..ef395bc Binary files /dev/null and b/src/public/header/logo-img.png differ diff --git a/src/public/header/logo-name.png b/src/public/header/logo-name.png new file mode 100644 index 0000000..33b0c53 Binary files /dev/null and b/src/public/header/logo-name.png differ diff --git a/src/public/header/money-icon.png b/src/public/header/money-icon.png new file mode 100644 index 0000000..10f12e4 Binary files /dev/null and b/src/public/header/money-icon.png differ diff --git a/src/public/header/qinglvzheng.png b/src/public/header/qinglvzheng.png new file mode 100644 index 0000000..cc8bd18 Binary files /dev/null and b/src/public/header/qinglvzheng.png differ diff --git a/src/public/header/shipinliaotian.png b/src/public/header/shipinliaotian.png new file mode 100644 index 0000000..b9ad86c Binary files /dev/null and b/src/public/header/shipinliaotian.png differ diff --git a/src/public/header/tuichudenglu.png b/src/public/header/tuichudenglu.png new file mode 100644 index 0000000..a043d0c Binary files /dev/null and b/src/public/header/tuichudenglu.png differ diff --git a/src/public/header/wodezuoping.png b/src/public/header/wodezuoping.png new file mode 100644 index 0000000..c872d07 Binary files /dev/null and b/src/public/header/wodezuoping.png differ diff --git a/src/public/header/zhengjianmoni.png b/src/public/header/zhengjianmoni.png new file mode 100644 index 0000000..edf13e6 Binary files /dev/null and b/src/public/header/zhengjianmoni.png differ diff --git a/src/public/index.html b/src/public/index.html new file mode 100644 index 0000000..2a4c52b --- /dev/null +++ b/src/public/index.html @@ -0,0 +1,13 @@ + + + + + + 关于我们 + + + +
+ + + \ No newline at end of file diff --git a/src/public/index/banner-1.jpg b/src/public/index/banner-1.jpg new file mode 100644 index 0000000..58d4d1c Binary files /dev/null and b/src/public/index/banner-1.jpg differ diff --git a/src/public/index/decoration1.png b/src/public/index/decoration1.png new file mode 100644 index 0000000..04835ea Binary files /dev/null and b/src/public/index/decoration1.png differ diff --git a/src/public/index/decoration2.png b/src/public/index/decoration2.png new file mode 100644 index 0000000..4d47eb1 Binary files /dev/null and b/src/public/index/decoration2.png differ diff --git a/src/public/index/feijipiao.png b/src/public/index/feijipiao.png new file mode 100644 index 0000000..a721df4 Binary files /dev/null and b/src/public/index/feijipiao.png differ diff --git a/src/public/index/gongzidan.png b/src/public/index/gongzidan.png new file mode 100644 index 0000000..f49d794 Binary files /dev/null and b/src/public/index/gongzidan.png differ diff --git a/src/public/index/gouwumoni.png b/src/public/index/gouwumoni.png new file mode 100644 index 0000000..8ffe985 Binary files /dev/null and b/src/public/index/gouwumoni.png differ diff --git a/src/public/index/huochepiao.png b/src/public/index/huochepiao.png new file mode 100644 index 0000000..497d670 Binary files /dev/null and b/src/public/index/huochepiao.png differ diff --git a/src/public/index/left.png b/src/public/index/left.png new file mode 100644 index 0000000..0acf372 Binary files /dev/null and b/src/public/index/left.png differ diff --git a/src/public/index/liaotianmoni.png b/src/public/index/liaotianmoni.png new file mode 100644 index 0000000..c84fcf1 Binary files /dev/null and b/src/public/index/liaotianmoni.png differ diff --git a/src/public/index/right.png b/src/public/index/right.png new file mode 100644 index 0000000..315f9a9 Binary files /dev/null and b/src/public/index/right.png differ diff --git a/src/public/index/service1.png b/src/public/index/service1.png new file mode 100644 index 0000000..bb06df5 Binary files /dev/null and b/src/public/index/service1.png differ diff --git a/src/public/index/service2.png b/src/public/index/service2.png new file mode 100644 index 0000000..eea94c3 Binary files /dev/null and b/src/public/index/service2.png differ diff --git a/src/public/index/service3.png b/src/public/index/service3.png new file mode 100644 index 0000000..ea45328 Binary files /dev/null and b/src/public/index/service3.png differ diff --git a/src/public/index/service4.png b/src/public/index/service4.png new file mode 100644 index 0000000..510f97a Binary files /dev/null and b/src/public/index/service4.png differ diff --git a/src/public/index/shipliaotian.png b/src/public/index/shipliaotian.png new file mode 100644 index 0000000..a995455 Binary files /dev/null and b/src/public/index/shipliaotian.png differ diff --git a/src/public/index/yuemoni.png b/src/public/index/yuemoni.png new file mode 100644 index 0000000..730abd3 Binary files /dev/null and b/src/public/index/yuemoni.png differ diff --git a/src/public/index/zhengjian.png b/src/public/index/zhengjian.png new file mode 100644 index 0000000..320b005 Binary files /dev/null and b/src/public/index/zhengjian.png differ diff --git a/src/public/login/agreement.png b/src/public/login/agreement.png new file mode 100644 index 0000000..051f3c4 Binary files /dev/null and b/src/public/login/agreement.png differ diff --git a/src/public/login/phone-login.png b/src/public/login/phone-login.png new file mode 100644 index 0000000..1f11619 Binary files /dev/null and b/src/public/login/phone-login.png differ diff --git a/src/public/login/unAgreement.png b/src/public/login/unAgreement.png new file mode 100644 index 0000000..8f4ed69 Binary files /dev/null and b/src/public/login/unAgreement.png differ diff --git a/src/public/login/wechat-login.png b/src/public/login/wechat-login.png new file mode 100644 index 0000000..e0c65b4 Binary files /dev/null and b/src/public/login/wechat-login.png differ diff --git a/src/public/other/gongzidan/gongzidan.png b/src/public/other/gongzidan/gongzidan.png new file mode 100644 index 0000000..678846e Binary files /dev/null and b/src/public/other/gongzidan/gongzidan.png differ diff --git a/src/public/other/gongzidan/icon.png b/src/public/other/gongzidan/icon.png new file mode 100644 index 0000000..31b880d Binary files /dev/null and b/src/public/other/gongzidan/icon.png differ diff --git a/src/public/profile/empty.png b/src/public/profile/empty.png new file mode 100644 index 0000000..1e21500 Binary files /dev/null and b/src/public/profile/empty.png differ diff --git a/src/public/profile/folder.png b/src/public/profile/folder.png new file mode 100644 index 0000000..50ace2a Binary files /dev/null and b/src/public/profile/folder.png differ diff --git a/src/public/profile/hasworks.png b/src/public/profile/hasworks.png new file mode 100644 index 0000000..b90b83b Binary files /dev/null and b/src/public/profile/hasworks.png differ diff --git a/src/public/rechargeDialog/active-product-bg.png b/src/public/rechargeDialog/active-product-bg.png new file mode 100644 index 0000000..459f7a1 Binary files /dev/null and b/src/public/rechargeDialog/active-product-bg.png differ diff --git a/src/public/rechargeDialog/alipay.png b/src/public/rechargeDialog/alipay.png new file mode 100644 index 0000000..4c168a8 Binary files /dev/null and b/src/public/rechargeDialog/alipay.png differ diff --git a/src/public/rechargeDialog/bg.png b/src/public/rechargeDialog/bg.png new file mode 100644 index 0000000..7d1739b Binary files /dev/null and b/src/public/rechargeDialog/bg.png differ diff --git a/src/public/rechargeDialog/discount-tag-bg.png b/src/public/rechargeDialog/discount-tag-bg.png new file mode 100644 index 0000000..c960500 Binary files /dev/null and b/src/public/rechargeDialog/discount-tag-bg.png differ diff --git a/src/public/rechargeDialog/huiyuanquanyi.png b/src/public/rechargeDialog/huiyuanquanyi.png new file mode 100644 index 0000000..f1bd53c Binary files /dev/null and b/src/public/rechargeDialog/huiyuanquanyi.png differ diff --git a/src/public/rechargeDialog/icon1.png b/src/public/rechargeDialog/icon1.png new file mode 100644 index 0000000..ef4f740 Binary files /dev/null and b/src/public/rechargeDialog/icon1.png differ diff --git a/src/public/rechargeDialog/icon2.png b/src/public/rechargeDialog/icon2.png new file mode 100644 index 0000000..84c0bb1 Binary files /dev/null and b/src/public/rechargeDialog/icon2.png differ diff --git a/src/public/rechargeDialog/icon3.png b/src/public/rechargeDialog/icon3.png new file mode 100644 index 0000000..6634dd7 Binary files /dev/null and b/src/public/rechargeDialog/icon3.png differ diff --git a/src/public/rechargeDialog/icon4.png b/src/public/rechargeDialog/icon4.png new file mode 100644 index 0000000..cb7680a Binary files /dev/null and b/src/public/rechargeDialog/icon4.png differ diff --git a/src/public/rechargeDialog/icon5.png b/src/public/rechargeDialog/icon5.png new file mode 100644 index 0000000..ec4f9df Binary files /dev/null and b/src/public/rechargeDialog/icon5.png differ diff --git a/src/public/rechargeDialog/icon6.png b/src/public/rechargeDialog/icon6.png new file mode 100644 index 0000000..7c6e491 Binary files /dev/null and b/src/public/rechargeDialog/icon6.png differ diff --git a/src/public/rechargeDialog/icon7.png b/src/public/rechargeDialog/icon7.png new file mode 100644 index 0000000..39bd497 Binary files /dev/null and b/src/public/rechargeDialog/icon7.png differ diff --git a/src/public/rechargeDialog/icon8.png b/src/public/rechargeDialog/icon8.png new file mode 100644 index 0000000..3a7cbcc Binary files /dev/null and b/src/public/rechargeDialog/icon8.png differ diff --git a/src/public/rechargeDialog/wxpay.png b/src/public/rechargeDialog/wxpay.png new file mode 100644 index 0000000..b0ea466 Binary files /dev/null and b/src/public/rechargeDialog/wxpay.png differ diff --git a/src/public/simulator/export-btn.png b/src/public/simulator/export-btn.png new file mode 100644 index 0000000..868b562 Binary files /dev/null and b/src/public/simulator/export-btn.png differ diff --git a/src/public/simulator/ios-phone.png b/src/public/simulator/ios-phone.png new file mode 100644 index 0000000..f7af04d Binary files /dev/null and b/src/public/simulator/ios-phone.png differ diff --git a/src/public/simulator/save-btn.png b/src/public/simulator/save-btn.png new file mode 100644 index 0000000..1797d1e Binary files /dev/null and b/src/public/simulator/save-btn.png differ diff --git a/src/public/status/battery.png b/src/public/status/battery.png new file mode 100644 index 0000000..aa5884d Binary files /dev/null and b/src/public/status/battery.png differ diff --git a/src/public/status/charging.png b/src/public/status/charging.png new file mode 100644 index 0000000..31b1978 Binary files /dev/null and b/src/public/status/charging.png differ diff --git a/src/public/status/signal-1.png b/src/public/status/signal-1.png new file mode 100644 index 0000000..4d63660 Binary files /dev/null and b/src/public/status/signal-1.png differ diff --git a/src/public/status/signal-2.png b/src/public/status/signal-2.png new file mode 100644 index 0000000..667ebb7 Binary files /dev/null and b/src/public/status/signal-2.png differ diff --git a/src/public/status/signal-3.png b/src/public/status/signal-3.png new file mode 100644 index 0000000..d2d225f Binary files /dev/null and b/src/public/status/signal-3.png differ diff --git a/src/public/status/signal-4.png b/src/public/status/signal-4.png new file mode 100644 index 0000000..97ec099 Binary files /dev/null and b/src/public/status/signal-4.png differ diff --git a/src/public/status/signal-dark-1.png b/src/public/status/signal-dark-1.png new file mode 100644 index 0000000..e271898 Binary files /dev/null and b/src/public/status/signal-dark-1.png differ diff --git a/src/public/status/signal-dark-2.png b/src/public/status/signal-dark-2.png new file mode 100644 index 0000000..e7b50ea Binary files /dev/null and b/src/public/status/signal-dark-2.png differ diff --git a/src/public/status/signal-dark-3.png b/src/public/status/signal-dark-3.png new file mode 100644 index 0000000..a4c2169 Binary files /dev/null and b/src/public/status/signal-dark-3.png differ diff --git a/src/public/status/signal-dark-4.png b/src/public/status/signal-dark-4.png new file mode 100644 index 0000000..0384eae Binary files /dev/null and b/src/public/status/signal-dark-4.png differ diff --git a/src/public/status/wifi-1.png b/src/public/status/wifi-1.png new file mode 100644 index 0000000..c5e2a12 Binary files /dev/null and b/src/public/status/wifi-1.png differ diff --git a/src/public/status/wifi-2.png b/src/public/status/wifi-2.png new file mode 100644 index 0000000..b2de630 Binary files /dev/null and b/src/public/status/wifi-2.png differ diff --git a/src/public/status/wifi-3.png b/src/public/status/wifi-3.png new file mode 100644 index 0000000..f4f4be2 Binary files /dev/null and b/src/public/status/wifi-3.png differ diff --git a/src/public/status/wifi-dark-1.png b/src/public/status/wifi-dark-1.png new file mode 100644 index 0000000..c5140d6 Binary files /dev/null and b/src/public/status/wifi-dark-1.png differ diff --git a/src/public/status/wifi-dark-2.png b/src/public/status/wifi-dark-2.png new file mode 100644 index 0000000..a0ce94b Binary files /dev/null and b/src/public/status/wifi-dark-2.png differ diff --git a/src/public/status/wifi-dark-3.png b/src/public/status/wifi-dark-3.png new file mode 100644 index 0000000..64589d6 Binary files /dev/null and b/src/public/status/wifi-dark-3.png differ diff --git a/src/public/warning.png b/src/public/warning.png new file mode 100644 index 0000000..434b6dd Binary files /dev/null and b/src/public/warning.png differ diff --git a/src/public/wx-chat/add-dark.png b/src/public/wx-chat/add-dark.png new file mode 100644 index 0000000..907228c Binary files /dev/null and b/src/public/wx-chat/add-dark.png differ diff --git a/src/public/wx-chat/add-light.png b/src/public/wx-chat/add-light.png new file mode 100644 index 0000000..570a74c Binary files /dev/null and b/src/public/wx-chat/add-light.png differ diff --git a/src/public/wx-chat/keyboard-dark.png b/src/public/wx-chat/keyboard-dark.png new file mode 100644 index 0000000..028d180 Binary files /dev/null and b/src/public/wx-chat/keyboard-dark.png differ diff --git a/src/public/wx-chat/keyboard-light.png b/src/public/wx-chat/keyboard-light.png new file mode 100644 index 0000000..aa67f2f Binary files /dev/null and b/src/public/wx-chat/keyboard-light.png differ diff --git a/src/public/wx-chat/miandarao.png b/src/public/wx-chat/miandarao.png new file mode 100644 index 0000000..01dc87b Binary files /dev/null and b/src/public/wx-chat/miandarao.png differ diff --git a/src/public/wx-chat/mic.png b/src/public/wx-chat/mic.png new file mode 100644 index 0000000..ec4421c Binary files /dev/null and b/src/public/wx-chat/mic.png differ diff --git a/src/public/wx-chat/open-red-bag-dark.png b/src/public/wx-chat/open-red-bag-dark.png new file mode 100644 index 0000000..11ad09a Binary files /dev/null and b/src/public/wx-chat/open-red-bag-dark.png differ diff --git a/src/public/wx-chat/open-red-bag.png b/src/public/wx-chat/open-red-bag.png new file mode 100644 index 0000000..1da42b0 Binary files /dev/null and b/src/public/wx-chat/open-red-bag.png differ diff --git a/src/public/wx-chat/receive-tip.png b/src/public/wx-chat/receive-tip.png new file mode 100644 index 0000000..8b24908 Binary files /dev/null and b/src/public/wx-chat/receive-tip.png differ diff --git a/src/public/wx-chat/red-bag-dark.png b/src/public/wx-chat/red-bag-dark.png new file mode 100644 index 0000000..f401d88 Binary files /dev/null and b/src/public/wx-chat/red-bag-dark.png differ diff --git a/src/public/wx-chat/red-bag.png b/src/public/wx-chat/red-bag.png new file mode 100644 index 0000000..be71123 Binary files /dev/null and b/src/public/wx-chat/red-bag.png differ diff --git a/src/public/wx-chat/send-filled.png b/src/public/wx-chat/send-filled.png new file mode 100644 index 0000000..a24f28f Binary files /dev/null and b/src/public/wx-chat/send-filled.png differ diff --git a/src/public/wx-chat/sticker-dark.png b/src/public/wx-chat/sticker-dark.png new file mode 100644 index 0000000..4415f32 Binary files /dev/null and b/src/public/wx-chat/sticker-dark.png differ diff --git a/src/public/wx-chat/sticker-light.png b/src/public/wx-chat/sticker-light.png new file mode 100644 index 0000000..b73ff4b Binary files /dev/null and b/src/public/wx-chat/sticker-light.png differ diff --git a/src/public/wx-chat/tingtong.png b/src/public/wx-chat/tingtong.png new file mode 100644 index 0000000..eef454d Binary files /dev/null and b/src/public/wx-chat/tingtong.png differ diff --git a/src/public/wx-chat/video-dark.png b/src/public/wx-chat/video-dark.png new file mode 100644 index 0000000..bd463e9 Binary files /dev/null and b/src/public/wx-chat/video-dark.png differ diff --git a/src/public/wx-chat/video-light.png b/src/public/wx-chat/video-light.png new file mode 100644 index 0000000..57227b4 Binary files /dev/null and b/src/public/wx-chat/video-light.png differ diff --git a/src/public/wx-chat/voice-dark.png b/src/public/wx-chat/voice-dark.png new file mode 100644 index 0000000..16ad81f Binary files /dev/null and b/src/public/wx-chat/voice-dark.png differ diff --git a/src/public/wx-chat/voice-light.png b/src/public/wx-chat/voice-light.png new file mode 100644 index 0000000..f614cca Binary files /dev/null and b/src/public/wx-chat/voice-light.png differ diff --git a/src/public/wx-chat/voice-msg-dark.png b/src/public/wx-chat/voice-msg-dark.png new file mode 100644 index 0000000..47a0996 Binary files /dev/null and b/src/public/wx-chat/voice-msg-dark.png differ diff --git a/src/public/wx-chat/voice-msg-light.png b/src/public/wx-chat/voice-msg-light.png new file mode 100644 index 0000000..1532c85 Binary files /dev/null and b/src/public/wx-chat/voice-msg-light.png differ diff --git a/src/public/wx-chat/zhuanzhang-weijieshou-dark.png b/src/public/wx-chat/zhuanzhang-weijieshou-dark.png new file mode 100644 index 0000000..67089f0 Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-weijieshou-dark.png differ diff --git a/src/public/wx-chat/zhuanzhang-weijieshou.png b/src/public/wx-chat/zhuanzhang-weijieshou.png new file mode 100644 index 0000000..8be102f Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-weijieshou.png differ diff --git a/src/public/wx-chat/zhuanzhang-yiguoqi-dark.png b/src/public/wx-chat/zhuanzhang-yiguoqi-dark.png new file mode 100644 index 0000000..7d52c4c Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-yiguoqi-dark.png differ diff --git a/src/public/wx-chat/zhuanzhang-yiguoqi.png b/src/public/wx-chat/zhuanzhang-yiguoqi.png new file mode 100644 index 0000000..174200c Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-yiguoqi.png differ diff --git a/src/public/wx-chat/zhuanzhang-yijieshou-dark.png b/src/public/wx-chat/zhuanzhang-yijieshou-dark.png new file mode 100644 index 0000000..5996106 Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-yijieshou-dark.png differ diff --git a/src/public/wx-chat/zhuanzhang-yijieshou.png b/src/public/wx-chat/zhuanzhang-yijieshou.png new file mode 100644 index 0000000..b5fe45a Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-yijieshou.png differ diff --git a/src/public/wx-chat/zhuanzhang-yituihuan-dark.png b/src/public/wx-chat/zhuanzhang-yituihuan-dark.png new file mode 100644 index 0000000..981bcde Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-yituihuan-dark.png differ diff --git a/src/public/wx-chat/zhuanzhang-yituihuan.png b/src/public/wx-chat/zhuanzhang-yituihuan.png new file mode 100644 index 0000000..3e3cd19 Binary files /dev/null and b/src/public/wx-chat/zhuanzhang-yituihuan.png differ diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..659682f --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,51 @@ +import { createRouter, createWebHistory } from 'vue-router' +import { useUserStore } from '@/stores/user' + +const routes = [ + { path: '/', name: 'index', component: () => import('@/views/index/index.vue') }, + // { path: '/', name: 'Home', component: () => import('@/views/Home.vue') }, + { path: '/chat', name: 'Chat', component: () => import('@/views/ChatEdit.vue'), meta: { requiresAuth: false } }, + { path: '/balance', name: 'Balance', component: () => import('@/views/BalanceEdit.vue'), meta: { requiresAuth: false } }, + { path: '/works', name: 'Works', component: () => import('@/views/work/works.vue'), meta: { requiresAuth: true } }, + { path: '/login', name: 'Login', component: () => import('@/views/Login.vue') }, + { path: '/register', name: 'Register', component: () => import('@/views/Register.vue') }, + { path: '/about', name: 'About', component: () => import('@/views/About.vue') }, + { path: '/profile', name: 'Profile', component: () => import('@/views/Profile.vue'), meta: { requiresAuth: true } }, + { path: '/payment/result', name: 'PaymentResult', component: () => import('@/views/PaymentResult.vue') }, + { path: '/gongzidan', name: 'GongZiDan', component: () => import('@/views/other/gongzidan.vue') }, +] + +const router = createRouter({ + history: createWebHistory(), + routes, +}) + +router.beforeEach(async (to, from, next) => { + const token = localStorage.getItem('token') + const userStore = useUserStore() + + // 如果有 token 但还没验证过,无论是进哪个页面,都静默验证一下以恢复全局状态 + if (token && !userStore.tokenChecked) { + try { + await userStore.fetchProfile() + if (!userStore.tokenValid) { + localStorage.removeItem('token') + } + } catch { + localStorage.removeItem('token') + userStore.reset() + } + } + + // 不需要认证的页面,直接放行 + if (!to.meta.requiresAuth) return next() + + // 需要认证的页面:如果没有 token 或者 token 已失效,跳回首页并唤起登录框 + if (!token || !userStore.tokenValid) { + return next({ path: '/', query: { showLogin: 1 } }) + } + + next() +}) + +export default router diff --git a/src/stores/user.js b/src/stores/user.js new file mode 100644 index 0000000..a7d3809 --- /dev/null +++ b/src/stores/user.js @@ -0,0 +1,101 @@ +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' +import authService from '@/api/authService' +import { checkUserVip } from '@/utils/appUtils' + +export const useUserStore = defineStore('user', () => { + const username = ref('') + const isVip = ref(false) + const avatarUrl = ref('') + const membershipExpireAt = ref(null) + const tokenChecked = ref(false) // 是否已完成 Token 校验 + const tokenValid = ref(false) // Token 是否真实有效 + + // 严谨的全局登录状态判定:必须 Token 有效、用户名存在且本地有 token 凭证 + const isLoggedIn = computed(() => { + return tokenValid.value && !!username.value && !!localStorage.getItem('token') + }) + + // 设置/保存用户信息 + function setUser(data, fallbackPhone = '') { + if (!data) return + const userObj = data.user || data + + // 游客账号特征判断:temp 为 true,或角色 role 为 '8',或名称包含 '游客' + const isGuest = userObj.temp === true || userObj.role === '8' || userObj.name === '游客' || userObj.nickname === '游客' + + if (isGuest) { + username.value = '' + isVip.value = false + avatarUrl.value = '' + tokenChecked.value = true + tokenValid.value = false + return + } + + username.value = userObj.name || '已登录用户' + isVip.value = checkUserVip(userObj) + avatarUrl.value = userObj.avater || userObj.avatar || '' + tokenChecked.value = true + tokenValid.value = true + } + + let fetchPromise = null + + async function fetchProfile() { + const token = localStorage.getItem('token') + if (!token) { + reset() + return + } + + // 1. 本地快照秒开:瞬间解析 user_info 填充响应式数据,0毫秒延迟 + const localUserInfo = localStorage.getItem('user_info') + if (localUserInfo) { + try { + const parsed = JSON.parse(localUserInfo) + setUser(parsed) + } catch (e) { } + } + + // 2. 防并发防阻塞:如果后台已有进行中的网络校验,直接复用 Promise + if (fetchPromise) { + return fetchPromise + } + + // 3. 后台非阻塞异步校验:将真实 API 鉴权放入后台处理 + fetchPromise = (async () => { + try { + const res = await authService.getUserInfo() + if (res && (res.code === 0 || res.data)) { + if (res.data) setUser(res.data) + console.log("用户信息", res.data) + return res.data + } else { + // 如果后端明确返回 Token 过期/无效,清空登录态 + reset() + } + } catch (e) { + // Token 过期或鉴权失败,强制清空缓存并置为未登录 + reset() + } finally { + fetchPromise = null + } + })() + + return fetchPromise + } + + function reset() { + username.value = '' + isVip.value = false + avatarUrl.value = '' + membershipExpireAt.value = null + tokenChecked.value = true + tokenValid.value = false + localStorage.removeItem('token') + localStorage.removeItem('user_info') + } + + return { username, isVip, avatarUrl, membershipExpireAt, tokenChecked, tokenValid, isLoggedIn, setUser, fetchProfile, reset, checkVip: checkUserVip } +}) diff --git a/src/styles/global.scss b/src/styles/global.scss new file mode 100644 index 0000000..1629923 --- /dev/null +++ b/src/styles/global.scss @@ -0,0 +1,69 @@ +@use './theme.scss'; + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Hiragino Sans GB', + 'Microsoft YaHei', sans-serif; + background: #f5f6fa; + color: #333; +} + +a { + text-decoration: none; + color: inherit; +} + +@font-face { + font-family: 'WeChatSansStd'; + src: url('@/public/font/wxfont/font/WeChatSansStd-Light.otf') format('opentype'); + font-weight: 300; + font-style: normal; +} + +@font-face { + font-family: 'WeChatSansStd'; + src: url('@/public/font/wxfont/font/WeChatSansStd-Regular.otf') format('opentype'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'WeChatSansStd'; + src: url('@/public/font/wxfont/font/WeChatSansStd-Medium.otf') format('opentype'); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: 'WeChatSansStd'; + src: url('@/public/font/wxfont/font/WeChatSansStd-Bold.otf') format('opentype'); + font-weight: 700; + font-style: normal; +} + +/* 全局微信字体字重公共类 */ +.wx-font-light { + font-family: 'WeChatSansStd', sans-serif; + font-weight: 300; +} + +.wx-font-regular { + font-family: 'WeChatSansStd', sans-serif; + font-weight: 400; +} + +.wx-font-medium { + font-family: 'WeChatSansStd', sans-serif; + font-weight: 500; +} + +.wx-font-bold { + font-family: 'WeChatSansStd', sans-serif; + font-weight: 700; +} \ No newline at end of file diff --git a/src/styles/theme.scss b/src/styles/theme.scss new file mode 100644 index 0000000..fc94629 --- /dev/null +++ b/src/styles/theme.scss @@ -0,0 +1,119 @@ +/* 微信模拟器全局主题颜色变量字典 (Design Tokens) */ + +/* 1. 默认浅色模式 (Light Theme) */ +:root { + /* 基础背景色 */ + --wx-bg-primary: #ffffff; + --wx-bg-secondary: #ECECEC; + + /* 文本颜色 */ + --wx-text-primary: #1A1A1A; + --wx-text-secondary: #999999; + + /* 分割线与边框 */ + --wx-border-color: #eeeeee; + --wx-line-color: #E4E4E4; + --wx-chat-line-color: #D2D2D2; + + /* 状态栏/图标颜色 */ + --wx-icon-color: #000000; + --battery-bg: #020202; + --battery-color: #FFFFFF; + + // 按钮颜色 + --wx-btn-primary: #07C160; + --wx-btn-secondary: #F2F2F2; + + //底部文字 + --wx-desc-text-blue: #4D5A7C; + --wx-desc-text-gray: #AAAAAA; + + //零钱限额警告 + --wx-limit-text-red: #E75E63; + --wx-limit-bg-red: #FFEDEC; + + // 苹果底部返回条 + --ipone-bottom-bar: #000000; + + // 微信聊天 + --wx-chat-bubble-other: #FFFFFF; + --wx-chat-bubble-me: #95EC69; + --wx-chat-unread-bg: #D5D5D5; + + //聊天输入框背景 + --wx-chat-input-bg-color: #F7F7F7; + + //聊天时间 + --wx-chat-time-bg: rgba(255, 255, 255, 0.8); + --wx-chat-time: #767676; + + // 微信红包 + --wx-redpacket-bg: #FA9E3B; + --wx-redpacket-text: #FFFFFF; + --wx-redpacket-desc-text: #FFDA9E; + --wx-redpacket-received-bg: #FCE1C3; + --wx-redpacket-redpacket-text: #FFFFFF; + --wx-transfer-received-bg: #FFE1BF; + --wx-transfer-received-text: #FFFFFF; + --wx-transfer-expired-bg: #E8CEB3; + --wx-transfer-expired-text: #FFFFFF; +} + +/* 2. 深色模式 (Dark Theme) 覆盖层 */ +.dark { + /* 基础背景色 */ + --wx-bg-primary: #191919; + --wx-bg-secondary: #111111; + + /* 文本颜色 */ + --wx-text-primary: #D8D8D8; + --wx-text-secondary: #888888; + + /* 分割线与边框 */ + --wx-border-color: #2b2b2b; + --wx-line-color: #333333; + --wx-chat-line-color: #363636; + + /* 状态栏/图标颜色 */ + --wx-icon-color: #ffffff; + --battery-bg: #FEFEFE; + --battery-color: #111111; + + // 按钮颜色 + --wx-btn-primary: #07C160; + --wx-btn-secondary: #2B2B2B; + + //底部文字 + --wx-desc-text-blue: #728DA8; + --wx-desc-text-gray: #767676; + + //零钱限额警告 + --wx-limit-text-red: #E75E63; + --wx-limit-bg-red: #301E1D; + + // 苹果底部返回条 + --ipone-bottom-bar: #FFFFFF; + + // 微信聊天 + --wx-chat-bubble-other: #2C2C2C; + --wx-chat-bubble-me: #27B561; + --wx-chat-unread-bg: #2C2C2C; + + //聊天输入框背景 + --wx-chat-input-bg-color: #1C1C1C; + + //聊天时间 + --wx-chat-time-bg: #2C2C2C; + --wx-chat-time: #AAAAAA; + + // 微信红包 + --wx-redpacket-bg: #E18D35; + --wx-redpacket-text: #FAECD2; + --wx-redpacket-desc-text: #FFBA78; + --wx-redpacket-received-bg: #AF6E2C; + --wx-redpacket-redpacket-text: #CD9A63; + --wx-transfer-received-bg: #AF6E2C; + --wx-transfer-received-text: #CD9A63; + --wx-transfer-expired-bg: #7C4D1F; + --wx-transfer-expired-text: #A58765; +} \ No newline at end of file diff --git a/src/utils/appConfig.js b/src/utils/appConfig.js new file mode 100644 index 0000000..830f569 --- /dev/null +++ b/src/utils/appConfig.js @@ -0,0 +1,9 @@ +export default { + baseURL: "/api", // 接口Base URL,结合Vite proxy转发,避免使用特定项目代号 + policyUrl: "/static/policy", + goodsType: "member", + ignoreCodeErrorList: ["GET&/weixin/qrcode", "GET&/order"], // 忽略自动告警提示的接口 + hideConsole: true, + downloadSuccessCode: [200, 201, 202, 203, 204, 205, 206], + configIgnoreParams: ["inputvalue"], +}; diff --git a/src/utils/appUtils.js b/src/utils/appUtils.js new file mode 100644 index 0000000..031632d --- /dev/null +++ b/src/utils/appUtils.js @@ -0,0 +1,51 @@ +/** + * 公共方法:根据用户信息判断用户是否为 VIP 会员 + * @param {Object} userObj - 用户信息对象 + * @returns {Boolean} - 是否为有效 VIP 会员 + */ +export function checkUserVip(userObj) { + if (!userObj || typeof userObj !== 'object') return false; + + // 1. 过滤游客/临时账号 + if (userObj.temp === true || userObj.role === '8' || userObj.name === '游客' || userObj.nickname === '游客') { + return false; + } + + // 2. VIP 标记判定 (兼容 vip > 1、vip 为 true、is_vip 为 true 等字段结构) + const isVipFlag = (typeof userObj.vip === 'number' ? userObj.vip > 1 : !!userObj.vip) || + !!userObj.is_vip || + userObj.role === 'vip' || + userObj.role === '1'; + + if (!isVipFlag) return false; + + // 3. 校验过期时间 (如果包含 vip_expire) + if (userObj.vip_expire) { + const expireTime = new Date(userObj.vip_expire).getTime(); + if (!isNaN(expireTime) && expireTime < Date.now()) { + return false; // 已过期 + } + } + + return true; +} + +export default { + deepClone(obj) { + if (!obj) return obj; + return JSON.parse(JSON.stringify(obj)); + }, + generateUUID() { + var d = new Date().getTime(); + var uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace( + /[xy]/g, + function (c) { + var r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === "x" ? r : (r & 0x3) | 0x8).toString(16); + } + ); + return uuid; + }, + checkUserVip +}; diff --git a/src/utils/editorParams.js b/src/utils/editorParams.js new file mode 100644 index 0000000..31db255 --- /dev/null +++ b/src/utils/editorParams.js @@ -0,0 +1,54 @@ +import appUtils from "./appUtils"; +import Url from "./urlendecode"; + +function decodeParam(route) { + if (!route) { + route = typeof window !== 'undefined' ? window.location.href : ''; + } + route = Url.decode(route); + let data = route.split('?'); + let params = {}; + let data2; + try { + if (data.length >= 2) { + data2 = data[1].split('&'); + } else if (data.length == 1) { + data2 = data[0].split('&'); + } else { + return {}; + } + } catch (e) { + return {}; + } + data2.forEach(res => { + res = res.split('='); + if (res.length >= 2) { + params[res[0]] = res[1]; + } + }); + return params; +} + +function encodeParam(data) { + let params = appUtils.deepClone(data); + let url = ''; + let keys = Object.keys(params); + keys.forEach(res => { + if ((params[res] && params[res] !== "") || params[res] === 0) { + if (typeof (params[res]) !== 'string' && typeof (params[res]) !== 'number') { + params[res] = 'Object'; + } + url += "&"; + url += res.toLowerCase(); + url += "="; + url += encodeURIComponent(params[res]); + } + }); + url = url ? url.substring(1) : ''; + return url; +} + +export { + encodeParam, + decodeParam +}; diff --git a/src/utils/requestService.js b/src/utils/requestService.js new file mode 100644 index 0000000..6262823 --- /dev/null +++ b/src/utils/requestService.js @@ -0,0 +1,214 @@ +import axios from "axios"; +import CryptoJS from "crypto-js"; +import NProgress from "nprogress"; +import "nprogress/nprogress.css"; +import { ElMessage } from "element-plus"; +import { encodeParam, decodeParam } from "./editorParams"; +import appUtils from "./appUtils"; +import appConfig from "./appConfig"; + +const service = axios.create({ + baseURL: "/", + timeout: 15000, +}); + +service.interceptors.response.use( + (response) => response, + (error) => { + const res = { + code: error.response?.status || 500, + message: error.message || "网络请求异常", + data: {}, + }; + return res; + } +); + +const domainUrl = (serveUrl, path) => { + let url = serveUrl + path; + return url; +}; + +const setheader = (dataType) => { + let header = {}; + if (dataType === "json") { + header["Content-Type"] = "application/json;charset=UTF-8"; + } else { + header["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"; + } + + header["x-channel"] = "official"; + header["x-version"] = "1.0.0"; + header["x-platform"] = "pc"; + + let deviceId = localStorage.getItem("device_id"); + if (!deviceId) { + deviceId = appUtils.generateUUID(); + localStorage.setItem("device_id", deviceId); + } + header["x-device-id"] = deviceId; + + header["x-mobile-brand"] = "pc"; + header["x-mobile-model"] = "pc"; + header["x-package"] = "com.devcon.flaunt"; + + const token = localStorage.getItem("token"); + if (token) { + header["x-token"] = token; + } + return header; +}; + +const ENCRYPT_KEY = "xn08hYoizXhZ1zHP8DVqfCm2yHxPmhil"; +const DECRYPT_KEY = "e4rOtnF8tJjtHO7ecZeJHN1rapED5ImB"; + +const deCode = (str) => { + if (!str) return str; + const keys = [ + DECRYPT_KEY, + ENCRYPT_KEY, + "0b0d7962d67a76f00cf9fe0eec0061c2" + ]; + for (let kStr of keys) { + try { + let key = CryptoJS.enc.Utf8.parse(kStr); + let iv = key.clone(); + iv.sigBytes = 16; + iv.clamp(); + let decrypted = CryptoJS.AES.decrypt(str, key, { + iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }).toString(CryptoJS.enc.Utf8); + if (decrypted) { + let res = JSON.parse(decrypted); + return res; + } + } catch (e) { + // 捕获单个 key 解密失败异常,继续尝试下一个候选 Key + } + } + console.error("AES 解密异常: 无法完成响应数据解密", str); + return null; +}; + +const parseResp = (data) => { + if (typeof data === "string") { + try { + return JSON.parse(data) + } catch { + return data + } + } + return data +} + +const request = (method = "GET", serverUrl, pathUrl, params = {}, dataType) => { + NProgress.start(); + params = appUtils.deepClone(params) || {}; + let keyStr = ENCRYPT_KEY; + let url = domainUrl(serverUrl, pathUrl); + let data = { + ...{ + url, + method, + headers: setheader(dataType) + }, + ...method === "GET" || method === "DELETE" ? { params } : { data: params } + }; + + // if (method === "GET" || method === "DELETE") { + // params.timestamp = Math.floor(new Date().getTime() / 1000); + // params.nonce = appUtils.generateUUID(); + // let keys = Object.keys(params); + // keys.sort(); + // for (let i in keys) { + // keys[i] = keys[i] + "=" + encodeURIComponent(params[keys[i]]); + // } + // let temp = keys.join("&") + "&" + CryptoJS.MD5(keyStr).toString(); + // params.signature = CryptoJS.MD5(temp).toString(); + // data = { + // url, + // method, + // headers: setheader(dataType), + // params: params, + // }; + // } else if (method === "POST" || method === "PUT") { + // let temp = decodeParam(url); + // temp.timestamp = Math.floor(new Date().getTime() / 1000); + // temp.nonce = appUtils.generateUUID(); + // let keys = Object.keys(temp); + // keys.sort(); + // for (let i in keys) { + // keys[i] = keys[i] + "=" + encodeURIComponent(temp[keys[i]]); + // } + // let s = keys.join("&"); + // s += "&" + JSON.stringify(params); + // s += "&" + CryptoJS.MD5(keyStr).toString(); + // temp.signature = CryptoJS.MD5(s).toString(); + // url = url.split("?")[0] + "?" + encodeParam(temp); + // data = { + // url, + // method, + // headers: setheader(dataType), + // data: params, + // }; + // } + + return new Promise((resolve, reject) => { + service(data) + .then((res) => { + NProgress.done(); + if (res.status === 200) { + let resData = parseResp(res.data); + + // if (resData && resData.encrypt) { + // const decoded = deCode(resData.data); + // if (decoded) { + // resData = decoded; + // } else { + // resData = { code: -1, message: "数据解密失败" }; + // } + // } + if (resData.code !== 0) { + if (resData.code === 1001003 || resData.code === 1001004) { + localStorage.removeItem("token"); + // window.location.reload(); + reject(resData); + } else if (!appConfig.ignoreCodeErrorList.includes(`${method}&${pathUrl}`)) { + const errMsg = resData.message ? resData.message.split(",")[0] : "请求失败"; + ElMessage.error(errMsg); + reject(resData); + } + return; + } + resolve(resData); + } else { + resolve(res); + } + }) + .catch((err) => { + NProgress.done(); + ElMessage.error("网络错误"); + reject(err); + }); + }); +}; + +export const get = (serverUrl, url, params = {}) => request("GET", serverUrl, url, params); +export const post = (serverUrl, url, params = {}) => request("POST", serverUrl, url, params); +export const postJson = (serverUrl, url, params = {}) => request("POST", serverUrl, url, params, "json"); +export const put = (serverUrl, url, params = {}) => request("PUT", serverUrl, url, params); +export const putJson = (serverUrl, url, params = {}) => request("PUT", serverUrl, url, params, "json"); +export const del = (serverUrl, url, params = {}) => request("DELETE", serverUrl, url, params); +export const delJson = (serverUrl, url, params = {}) => request("DELETE", serverUrl, url, params, "json"); + +export default { + get, + post, + postJson, + put, + putJson, + del, + delJson, +}; diff --git a/src/utils/urlendecode.js b/src/utils/urlendecode.js new file mode 100644 index 0000000..96c958f --- /dev/null +++ b/src/utils/urlendecode.js @@ -0,0 +1,33 @@ +function StringToAscii(str) { + return str.charCodeAt(0).toString(16); +} + +function AsciiToString(asccode) { + return String.fromCharCode(asccode); +} + +var Url = { + decode: function (zipStr) { + var uzipStr = ''; + for (var i = 0; i < zipStr.length; i += 1) { + var chr = zipStr.charAt(i); + if (chr === '+') { + uzipStr += ' '; + } else if (chr === '%') { + var asc = zipStr.substring(i + 1, i + 3); + if (parseInt('0x' + asc) > 0x7f) { + uzipStr += decodeURI('%' + asc.toString() + zipStr.substring(i + 3, i + 9).toString()); + i += 8; + } else { + uzipStr += AsciiToString(parseInt('0x' + asc)); + i += 2; + } + } else { + uzipStr += chr; + } + } + return uzipStr; + } +}; + +export default Url; diff --git a/src/utils/useWatermark.js b/src/utils/useWatermark.js new file mode 100644 index 0000000..b0f344f --- /dev/null +++ b/src/utils/useWatermark.js @@ -0,0 +1,94 @@ +import { onMounted, onBeforeUnmount, ref } from 'vue'; + +export function useWatermark(containerRef, text = '开通VIP去水印') { + let observer = null; + let watermarkEl = null; + + // 使用 SVG 生成高清 Base64 水印背景,不依赖外部图片 + const createSvgUrl = () => { + const svgStr = ` + + ${text} + + `; + return `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgStr)))}`; + }; + + const createWatermark = () => { + const parent = containerRef.value; + if (!parent) return; + + // 清理可能存在的残骸 + if (watermarkEl && watermarkEl.parentNode) { + watermarkEl.remove(); + } + if (observer) observer.disconnect(); + + // 重新创建极其霸道的内联样式节点 + watermarkEl = document.createElement('div'); + // 使用 !important 和巨大 z-index 护体 + watermarkEl.style.cssText = ` + position: absolute !important; top: -50% !important; left: -50% !important; + width: 200% !important; height: 200% !important; + z-index: 2147483647 !important; pointer-events: none !important; + background-repeat: repeat !important; + background-image: url(${createSvgUrl()}) !important; + `; + + // 如果父元素没有定位,强行给一个 + const parentStyle = window.getComputedStyle(parent); + if (parentStyle.position === 'static') { + parent.style.position = 'relative'; + } + // 防止水印溢出 + parent.style.overflow = 'hidden'; + + parent.appendChild(watermarkEl); + + // 开启高频天眼守护 + observer = new MutationObserver((mutations) => { + for (let m of mutations) { + // 1. 监测:节点是否被暴力 Delete 删除 + const removed = Array.from(m.removedNodes); + if (removed.includes(watermarkEl) || removed.includes(parent)) { + createWatermark(); // 立刻复活 + return; + } + // 2. 监测:是否有人试图用控制台修改它的隐藏属性 + if (m.target === watermarkEl && m.type === 'attributes') { + createWatermark(); // 立刻复活 + return; + } + } + }); + + // 监视父容器的子节点变化,以及水印自身的属性变化 + observer.observe(parent, { childList: true, subtree: true }); + observer.observe(watermarkEl, { attributes: true }); + }; + + const removeWatermark = () => { + if (observer) observer.disconnect(); + if (watermarkEl) { + watermarkEl.remove(); + watermarkEl = null; + } + }; + + // 暴露重新挂载方法供外部使用(例如从非VIP变成VIP后可能需要手动移除,或者反之) + const init = () => { + createWatermark(); + } + + onMounted(() => { + // 组件挂载时暂不立刻创建,由调用方控制或者用 watch 控制 + }); + + onBeforeUnmount(() => { + // 路由离开时清理,防止内存泄漏 + removeWatermark(); + }); + + return { createWatermark, removeWatermark, init }; +} diff --git a/src/views/About.vue b/src/views/About.vue new file mode 100644 index 0000000..4ca0bcb --- /dev/null +++ b/src/views/About.vue @@ -0,0 +1,64 @@ + + + + \ No newline at end of file diff --git a/src/views/BalanceEdit.vue b/src/views/BalanceEdit.vue new file mode 100644 index 0000000..8fa532e --- /dev/null +++ b/src/views/BalanceEdit.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/src/views/ChatEdit.vue b/src/views/ChatEdit.vue new file mode 100644 index 0000000..614cbb1 --- /dev/null +++ b/src/views/ChatEdit.vue @@ -0,0 +1,1047 @@ + + + + + + + diff --git a/src/views/Home.vue b/src/views/Home.vue new file mode 100644 index 0000000..7ee9bba --- /dev/null +++ b/src/views/Home.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/views/Login.vue b/src/views/Login.vue new file mode 100644 index 0000000..ff13312 --- /dev/null +++ b/src/views/Login.vue @@ -0,0 +1,174 @@ + + + + + diff --git a/src/views/PaymentResult.vue b/src/views/PaymentResult.vue new file mode 100644 index 0000000..2192784 --- /dev/null +++ b/src/views/PaymentResult.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/src/views/Profile.vue b/src/views/Profile.vue new file mode 100644 index 0000000..00c368d --- /dev/null +++ b/src/views/Profile.vue @@ -0,0 +1,661 @@ + + + + + diff --git a/src/views/Register.vue b/src/views/Register.vue new file mode 100644 index 0000000..8620f00 --- /dev/null +++ b/src/views/Register.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/views/Works.vue b/src/views/Works.vue new file mode 100644 index 0000000..e6b6eed --- /dev/null +++ b/src/views/Works.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/views/index/index.vue b/src/views/index/index.vue new file mode 100644 index 0000000..09784c0 --- /dev/null +++ b/src/views/index/index.vue @@ -0,0 +1,543 @@ + + + + + diff --git a/src/views/other/gongzidan.vue b/src/views/other/gongzidan.vue new file mode 100644 index 0000000..bfe5362 --- /dev/null +++ b/src/views/other/gongzidan.vue @@ -0,0 +1,509 @@ + + + \ No newline at end of file diff --git a/src/views/work/works.vue b/src/views/work/works.vue new file mode 100644 index 0000000..6d247ae --- /dev/null +++ b/src/views/work/works.vue @@ -0,0 +1,294 @@ + + + + + \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..c32391d --- /dev/null +++ b/vite.config.js @@ -0,0 +1,26 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { resolve } from 'path' +import { batiaoPlugin } from '@batiao/batiao-sdk-vue-vite/onBuild' +import proxy from './src/proxy.cjs' +export default defineConfig({ + plugins: [vue(), batiaoPlugin()], + css: { + preprocessorOptions: { + scss: { + api: 'modern-compiler' + } + } + }, + resolve: { + alias: { + '@': resolve(__dirname, 'src') + } + }, + server: { + //通过电脑ip访问设置 + host: '0.0.0.0', + port: 3000, + proxy + } +})