From 562d77991ea5a595b4e2fe0f1c398c7cf81035e9 Mon Sep 17 00:00:00 2001 From: ZHANGFU <3079975645@qq.com> Date: Sun, 8 Dec 2024 23:56:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9D=8E=E6=98=8A=E9=98=B3=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E4=BB=A3=E7=A0=81=E8=BF=9B=E8=A1=8C=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo_module/index.html | 28 +- demo_module/src/view/Mine/Yes.jsx | 2 +- demo_server/alipay.js | 12 + demo_server/db/model.js | 20 + demo_server/package-lock.json | 1964 ++++++++++++++++++++++++++++- demo_server/package.json | 11 +- demo_server/routes/index.js | 328 ++++- 7 files changed, 2346 insertions(+), 19 deletions(-) create mode 100644 demo_server/alipay.js diff --git a/demo_module/index.html b/demo_module/index.html index 27f1519..1aaa759 100644 --- a/demo_module/index.html +++ b/demo_module/index.html @@ -1,14 +1,18 @@ - - - - - Vite + React - - -
- - - - + + + + + + Vite + React + + + +
+ + + + + + \ No newline at end of file diff --git a/demo_module/src/view/Mine/Yes.jsx b/demo_module/src/view/Mine/Yes.jsx index 84a4841..4652e7e 100644 --- a/demo_module/src/view/Mine/Yes.jsx +++ b/demo_module/src/view/Mine/Yes.jsx @@ -28,7 +28,7 @@ export default function Yes() { useEffect(() => { setTimeout(() => { setStopmusic(1) - }, 6000) + }, 5500) }) diff --git a/demo_server/alipay.js b/demo_server/alipay.js new file mode 100644 index 0000000..b524279 --- /dev/null +++ b/demo_server/alipay.js @@ -0,0 +1,12 @@ +const AlipaySdk = require('alipay-sdk').default +const alipaySdk = new AlipaySdk({ + appId: '9021000141677944', //appID   + signType: "RSA2", + gateway: "https://openapi-sandbox.dl.alipaydev.com/gateway.do",//支付宝网关地址 + alipayPublicKey: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxBhzVOBJuci/c08/wV4TlasGyAvd4UmgKTrw8XSycu4YOgsYpRZzBIbkrqXdxpyApUJUdetjgJjVlCcG6YHdF/cd0uvVe6KI0Ku3T/AjpLAON6hTywQvlfltd3RvsXDxBY7viim498RUi5rR3WEJ4gioZ+SRA5bheArIz3O7fg82Uo+NeKXt0/xG0bfh+S5cQEYrDN+CMuzqS/06Ei0bUTUZIXV28pJ434/m+iG/Dr505/kcfqyp2oQPzae2LrhC97JJy8sK+b2sbMPclQfAMWax782YTRBL5pkke8u3Mz0t0iEspoDE1A4zUJd0oQ8tUgWcjTNwgJ+4SJ7Z8QVMEwIDAQAB', + //支付宝公钥 + privateKey: 'MIIEowIBAAKCAQEAxBhzVOBJuci/c08/wV4TlasGyAvd4UmgKTrw8XSycu4YOgsYpRZzBIbkrqXdxpyApUJUdetjgJjVlCcG6YHdF/cd0uvVe6KI0Ku3T/AjpLAON6hTywQvlfltd3RvsXDxBY7viim498RUi5rR3WEJ4gioZ+SRA5bheArIz3O7fg82Uo+NeKXt0/xG0bfh+S5cQEYrDN+CMuzqS/06Ei0bUTUZIXV28pJ434/m+iG/Dr505/kcfqyp2oQPzae2LrhC97JJy8sK+b2sbMPclQfAMWax782YTRBL5pkke8u3Mz0t0iEspoDE1A4zUJd0oQ8tUgWcjTNwgJ+4SJ7Z8QVMEwIDAQABAoIBAE29F7O1OuURBXz0FOVWo1L5OzYBJlQSuRC/UheW2MuhQi94iKuhy7UmuO/Xx6TeFE3vjsY0q/ymGj2ifyYBGqJOkB826SobVDvNZ12kaKz4Mpqz+4wHO8or2M67dTAWAybd9G6EfdSTm6TAmqQ1vRJDtmeBgE+49+d79wHu8oxVTuqw6iKGZho3tpx6ueGY+RG4SkwntOjpxfMsIxCdGPL71rIiiqSRysGMvjbe04ujEqqckAgYH08506yxe3pVyhmY1Xl91mfCyRZ8vWUDGBXoYoiPVKMkUnVwNUuZQAjdpyhK1yDCZLBNGRvgE+JAl5k0mqZByJGUObJJJa96IBkCgYEA+J3Zn2+92RaqS2EF1z3nuikcU8QEvgo9frFwGu7dS3AvGqEvV2TikJ5PHK54tHMpRa2qXlGCBplQFO5+KigJPksAF9w2NmXkLtfZzmXNxPRKPUewSoRXd76395CMA1RH5RqAwVHfgp2Ce3NYAoUhAepYId5rnU7IkiO5vnHB7EcCgYEAyetMxstd+uXg4xc2vku/SnAlQkwnx4hTNEIJp+UlNd7J7makm/h+Q0ljFQwB2wBqd5qQEHSP/D8sAnQkuhyu/og6vfz9HASwNNx7G5jrKdhWFWelMwmTwSapOxH8omtkJ1096UAjwIa2+vI2xG49lsx3MtLW7pBRALJDN5KyI9UCgYEAyFn83J2iMuYvClv/5vt+WOl0aJTY9YUvFYBMxYelUnvvmdg3XIhyhPTu8EAyCcmcgwh2+VdaH5NBk/y2M6bb/BVY1+Gg1qm5/333intEHep4QXYaPZL1IgzSGHGmQ7CR17FJ/YDLTGk+k9naHP3IIdEGgRTLSJQK0qpzr2PhUVUCgYAG1J/nRa/rMeWWqQ1gCJ3y/bI0+PCLjnAKH4XGGTlWBjBckTpWUGStEAl7B8n0R6JSY3cmJ1tLlDN/7b/kT94XnDIohStmzD3Nu/uqJlUmODxJQxVSkate6FjnN6eNMwbTUhMrFdFfzO7ZtGHn6TbKKCaMIJfGwDkNRfqCIcNG9QKBgHVUS6myIsfNAdD8LRtwWO38y+39cjmaZWMQeFrT9rA9TOd3Jaau6DG9QtgxcI+dwtY/6+dnS/5Rq8Xzq+vufn4G+KpfO/oLkzHq8Ys4zujvlRe/l3sMJ8GfIzbVOzGr2F0CXXTSAcOv7SSRyg8lu1gld5VaqKvbrX1LuPhzgHbu' + //应用私钥 + +}) +module.exports = alipaySdk \ No newline at end of file diff --git a/demo_server/db/model.js b/demo_server/db/model.js index 9b71b70..1d9890f 100644 --- a/demo_server/db/model.js +++ b/demo_server/db/model.js @@ -1,13 +1,30 @@ const mongoose = require('./index.js'); +// lhy +let UsersSchema = new mongoose.Schema({ + phone: String, + pass: String +}) +let UserModel = mongoose.model('user', UsersSchema, 'user') + +// wzy const UserSchema = new mongoose.Schema({ avatar: String, nickname: String, phone: Number, signa: String, + // phone: String, //手机号 + // pass: String, }) const User = mongoose.model('User', UserSchema); + + + + + + + const AddressSchema = new mongoose.Schema({ id: Number, name: String, @@ -76,6 +93,9 @@ const QuestionModel = mongoose.model('Question', QuestionSchema, 'question'); module.exports = { + // lhy + UserModel, + // wzy User, Address, // tsl diff --git a/demo_server/package-lock.json b/demo_server/package-lock.json index ad23564..4dc4979 100644 --- a/demo_server/package-lock.json +++ b/demo_server/package-lock.json @@ -8,15 +8,129 @@ "name": "demo-server", "version": "0.0.0", "dependencies": { + "@alicloud/sms-sdk": "^1.1.6", + "alipay-sdk": "^3.6.1", "cookie-parser": "~1.4.4", "cors": "^2.8.5", "debug": "~2.6.9", "express": "~4.16.1", + "express-jwt": "^8.4.1", "http-errors": "~1.6.3", "jade": "~1.11.0", + "jsonwebtoken": "^9.0.2", "mongoose": "^8.8.4", "morgan": "~1.9.1", - "multer": "^1.4.5-lts.1" + "multer": "^1.4.5-lts.1", + "p-queue": "^8.0.1", + "tencentcloud-sdk-nodejs-iai": "^4.0.918" + } + }, + "node_modules/@alicloud/dybaseapi": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@alicloud/dybaseapi/-/dybaseapi-1.0.0.tgz", + "integrity": "sha512-4KEDgqES7IL60T/TWGSkLQkN6BYeHEw8smnPgac2J2MTES5v1ieCWvbLSuUUWi5SAXi7cydKoD4HUOmX7xwM+A==", + "license": "MIT", + "dependencies": { + "@alicloud/pop-core": "^1.3.3" + } + }, + "node_modules/@alicloud/dysmsapi-2017-05-25": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@alicloud/dysmsapi-2017-05-25/-/dysmsapi-2017-05-25-1.0.1.tgz", + "integrity": "sha512-CVX/Yl9ntwkAOHAZa3j2Y/Io+SlbETw/ILv4UPIDCEIQm/N0EEcN2OXF8cWCUvHeu7OgnFWZKhdJY5GsbjWHDA==", + "license": "MIT", + "dependencies": { + "@alicloud/pop-core": "^1.5.1" + } + }, + "node_modules/@alicloud/mns": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@alicloud/mns/-/mns-1.0.0.tgz", + "integrity": "sha512-SUJYM8+x3iPy6thIy5Wa/5lw7+RodeDDIPcI3QQ3bZPNCSq+yEC3jMtfVlS3vxGPq+dGjAysI9RGeM7NByeHlw==", + "license": "MIT", + "dependencies": { + "debug": "^2.6.3", + "httpx": "^2.1.1", + "kitx": "^1.2.0", + "xml2js": "^0.4.17" + } + }, + "node_modules/@alicloud/pop-core": { + "version": "1.7.13", + "resolved": "https://registry.npmmirror.com/@alicloud/pop-core/-/pop-core-1.7.13.tgz", + "integrity": "sha512-agzr4DU+aAGW7/2mp2hP1JcNJkn/zBS0jUGQt5etIASN0MVq1tMdudVqvWbExUG0mUouo/n2VgdnjOHjswvrlA==", + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "httpx": "^2.1.2", + "json-bigint": "^1.0.0", + "kitx": "^1.2.1", + "xml2js": "^0.5.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@alicloud/pop-core/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@alicloud/pop-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@alicloud/pop-core/node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@alicloud/sms-sdk": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/@alicloud/sms-sdk/-/sms-sdk-1.1.6.tgz", + "integrity": "sha512-jW5ROjpAtOrNFkZSXb8geJWzkgJ9ggnPx+ve+72eatu78/vad2emdZjRx43/xPqqhA9djRoU3xHQt2xFODiaMQ==", + "license": "ISC", + "dependencies": { + "@alicloud/dybaseapi": "^1.0.0", + "@alicloud/dysmsapi-2017-05-25": "^1.0.1", + "@alicloud/mns": "^1.0.0-beta6", + "babel-runtime": "^6.26.0" + } + }, + "node_modules/@fidm/asn1": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@fidm/asn1/-/asn1-1.0.4.tgz", + "integrity": "sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@fidm/x509": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@fidm/x509/-/x509-1.2.1.tgz", + "integrity": "sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==", + "license": "MIT", + "dependencies": { + "@fidm/asn1": "^1.0.4", + "tweetnacl": "^1.0.1" + }, + "engines": { + "node": ">= 8" } }, "node_modules/@mongodb-js/saslprep": { @@ -27,6 +141,24 @@ "sparse-bitfield": "^3.0.3" } }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.7", + "resolved": "https://registry.npmmirror.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -71,6 +203,41 @@ "acorn": "^2.1.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/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/agent-base/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/align-text": { "version": "0.1.4", "resolved": "https://registry.npmmirror.com/align-text/-/align-text-0.1.4.tgz", @@ -84,6 +251,53 @@ "node": ">=0.10.0" } }, + "node_modules/alipay-sdk": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/alipay-sdk/-/alipay-sdk-3.6.2.tgz", + "integrity": "sha512-YJyBszWMEjfoLUVJT5kXDQhqOOo8xQ+/Mc4l5TUSAJ1sc2ewHf4oRLtXpuOJFnxBfTAsvPqjZ1bGVxLacX+uxw==", + "license": "ISC", + "dependencies": { + "@fidm/x509": "^1.2.1", + "bignumber.js": "^9.0.0", + "camelcase-keys": "^4.2.0", + "crypto-js": "^4.0.0", + "decamelize": "^2.0.0", + "iconv-lite": "^0.4.24", + "is": "^3.2.1", + "is-json": "^2.0.1", + "lodash": "^4.17.20", + "moment": "^2.16.0", + "snakecase-keys": "^1.1.1", + "urllib": "^2.17.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/alipay-sdk/node_modules/decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "license": "MIT", + "dependencies": { + "xregexp": "4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/alipay-sdk/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/amdefine/-/amdefine-1.0.1.tgz", @@ -92,6 +306,12 @@ "node": ">=0.4.2" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/append-field/-/append-field-1.0.0.tgz", @@ -108,6 +328,22 @@ "resolved": "https://registry.npmmirror.com/asap/-/asap-1.0.0.tgz", "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz", @@ -119,6 +355,15 @@ "node": ">= 0.8" } }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/body-parser": { "version": "1.18.3", "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.18.3.tgz", @@ -147,6 +392,12 @@ "node": ">=16.20.1" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", @@ -180,6 +431,29 @@ "node": ">=0.10.0" } }, + "node_modules/camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", + "license": "MIT", + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/center-align": { "version": "0.1.3", "resolved": "https://registry.npmmirror.com/center-align/-/center-align-0.1.3.tgz", @@ -233,6 +507,18 @@ "wordwrap": "0.0.2" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/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/commander": { "version": "2.6.0", "resolved": "https://registry.npmmirror.com/commander/-/commander-2.6.0.tgz", @@ -306,6 +592,20 @@ "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", @@ -325,6 +625,12 @@ "node": ">= 0.10" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, "node_modules/css": { "version": "1.0.8", "resolved": "https://registry.npmmirror.com/css/-/css-1.0.8.tgz", @@ -360,6 +666,27 @@ "node": ">=0.10.0" } }, + "node_modules/default-user-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/default-user-agent/-/default-user-agent-1.0.0.tgz", + "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", + "license": "MIT", + "dependencies": { + "os-name": "~1.0.3" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", @@ -373,6 +700,24 @@ "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.0.4.tgz", "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" }, + "node_modules/digest-header": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/digest-header/-/digest-header-1.1.0.tgz", + "integrity": "sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==", + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", @@ -386,6 +731,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", @@ -399,6 +753,12 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, "node_modules/express": { "version": "4.16.4", "resolved": "https://registry.npmmirror.com/express/-/express-4.16.4.tgz", @@ -439,6 +799,26 @@ "node": ">= 0.10.0" } }, + "node_modules/express-jwt": { + "version": "8.4.1", + "resolved": "https://registry.npmmirror.com/express-jwt/-/express-jwt-8.4.1.tgz", + "integrity": "sha512-IZoZiDv2yZJAb3QrbaSATVtTCYT11OcqgFGoTN4iKVyN6NBkBkhtVIixww5fmakF0Upt5HfOxJuS6ZmJVeOtTQ==", + "license": "MIT", + "dependencies": { + "@types/jsonwebtoken": "^9", + "express-unless": "^2.1.3", + "jsonwebtoken": "^9.0.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/express-unless": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/express-unless/-/express-unless-2.1.3.tgz", + "integrity": "sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ==", + "license": "MIT" + }, "node_modules/express/node_modules/cookie": { "version": "0.3.1", "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.3.1.tgz", @@ -447,6 +827,18 @@ "node": ">= 0.6" } }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.1.tgz", @@ -464,6 +856,44 @@ "node": ">= 0.8" } }, + "node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formstream": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/formstream/-/formstream-1.5.1.tgz", + "integrity": "sha512-q7ORzFqotpwn3Y/GBK2lK7PjtZZwJHz9QE9Phv8zb5IrL9ftGLyi2zjGURON3voK8TaZ+mqJKERYN4lrHYTkUQ==", + "license": "MIT", + "dependencies": { + "destroy": "^1.0.4", + "mime": "^2.5.2", + "node-hex": "^1.0.1", + "pause-stream": "~0.0.11" + } + }, + "node_modules/formstream/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", @@ -480,6 +910,18 @@ "node": ">= 0.6" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz", @@ -499,6 +941,99 @@ "node": ">= 0.6" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/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/https-proxy-agent/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/httpx": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/httpx/-/httpx-2.3.3.tgz", + "integrity": "sha512-k1qv94u1b6e+XKCxVbLgYlOypVP9MPGpnN5G/vxFf6tDO4V3xpz3d6FUOY/s8NtPgaq5RBVVgSB+7IHpVxMYzw==", + "license": "MIT", + "dependencies": { + "@types/node": "^20", + "debug": "^4.1.1" + } + }, + "node_modules/httpx/node_modules/@types/node": { + "version": "20.17.9", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.17.9.tgz", + "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/httpx/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/httpx/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/httpx/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -523,16 +1058,52 @@ "node": ">= 0.10" } }, + "node_modules/is": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/is/-/is-3.3.0.tgz", + "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "license": "ISC" + }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", @@ -560,6 +1131,43 @@ "jade": "bin/jade.js" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/jstransformer": { "version": "0.0.2", "resolved": "https://registry.npmmirror.com/jstransformer/-/jstransformer-0.0.2.tgz", @@ -569,6 +1177,27 @@ "promise": "^6.0.1" } }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kareem": { "version": "2.6.3", "resolved": "https://registry.npmmirror.com/kareem/-/kareem-2.6.3.tgz", @@ -588,6 +1217,12 @@ "node": ">=0.10.0" } }, + "node_modules/kitx": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/kitx/-/kitx-1.3.0.tgz", + "integrity": "sha512-fhBqFlXd0GkKTB+8ayLfpzPUw+LHxZlPAukPNBD1Om7JMeInT+/PxCAf1yLagvD+VKoyWhXtJR68xQkX/a0wOQ==", + "license": "MIT" + }, "node_modules/lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -596,6 +1231,54 @@ "node": ">=0.10.0" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, "node_modules/longest": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/longest/-/longest-1.0.1.tgz", @@ -604,6 +1287,15 @@ "node": ">=0.10.0" } }, + "node_modules/map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", @@ -676,6 +1368,15 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/mongodb": { "version": "6.10.0", "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-6.10.0.tgz", @@ -835,6 +1536,17 @@ "node": ">= 6.0.0" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", @@ -843,6 +1555,57 @@ "node": ">= 0.6" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-hex": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/node-hex/-/node-hex-1.0.1.tgz", + "integrity": "sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", @@ -870,6 +1633,15 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/optimist": { "version": "0.3.7", "resolved": "https://registry.npmmirror.com/optimist/-/optimist-0.3.7.tgz", @@ -878,6 +1650,65 @@ "wordwrap": "~0.0.2" } }, + "node_modules/os-name": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/os-name/-/os-name-1.0.3.tgz", + "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", + "license": "MIT", + "dependencies": { + "osx-release": "^1.0.0", + "win-release": "^1.0.0" + }, + "bin": { + "os-name": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osx-release": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/osx-release/-/osx-release-1.1.0.tgz", + "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", + "license": "MIT", + "dependencies": { + "minimist": "^1.1.0" + }, + "bin": { + "osx-release": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-queue": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-8.0.1.tgz", + "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.3", + "resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.3.tgz", + "integrity": "sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", @@ -891,6 +1722,18 @@ "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -917,6 +1760,16 @@ "node": ">= 0.10" } }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", @@ -933,6 +1786,15 @@ "node": ">=0.6" } }, + "node_modules/quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", @@ -970,6 +1832,12 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "license": "MIT" + }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", @@ -999,6 +1867,24 @@ "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.16.2", "resolved": "https://registry.npmmirror.com/send/-/send-0.16.2.tgz", @@ -1046,6 +1932,16 @@ "resolved": "https://registry.npmmirror.com/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, + "node_modules/snakecase-keys": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/snakecase-keys/-/snakecase-keys-1.2.0.tgz", + "integrity": "sha512-G5Faa3wQevGXcD5e4JKfmgofO+Fu4Jg4/nLyeZqWmBqVV0/3ORgervt3EjBi6PEFKhztPQWegZspteWnycx5dg==", + "license": "MIT", + "dependencies": { + "map-obj": "~2.0.0", + "to-snake-case": "~0.1.2" + } + }, "node_modules/source-map": { "version": "0.4.4", "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.4.4.tgz", @@ -1090,6 +1986,89 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/tencentcloud-sdk-nodejs-common": { + "version": "4.0.987", + "resolved": "https://registry.npmmirror.com/tencentcloud-sdk-nodejs-common/-/tencentcloud-sdk-nodejs-common-4.0.987.tgz", + "integrity": "sha512-wWasXTvUkAUDb/6X3kp9cDC38SM0a5wRj10U72abVp0ZzljpwFC71kxMR8nSWW8cgYfx91aJhWLMneIBW8ksqw==", + "license": "Apache-2.0", + "dependencies": { + "form-data": "^3.0.0", + "get-stream": "^6.0.0", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "json-bigint": "^1.0.0", + "node-fetch": "^2.2.0", + "tslib": "1.13.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tencentcloud-sdk-nodejs-iai": { + "version": "4.0.978", + "resolved": "https://registry.npmmirror.com/tencentcloud-sdk-nodejs-iai/-/tencentcloud-sdk-nodejs-iai-4.0.978.tgz", + "integrity": "sha512-j2Vvfm/Ig8AVaaEMXu2UeL5+YPZ9kbLlSwumfdZ4v/suuEjmIxWG4xMFEu/CZLJfHQNLGfFfmu80/LYhBJoVOA==", + "license": "Apache-2.0", + "dependencies": { + "tencentcloud-sdk-nodejs-common": "^4.0.488", + "tslib": "1.13.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/to-no-case": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/to-no-case/-/to-no-case-0.1.1.tgz", + "integrity": "sha512-XNChsa36ssNQibYbv/kBSLb0jEfPuePdnbX1tBpHypUbtjBSR8ihaDRRYPZLMstjSpPM+onSgxeDjg+lgfIzZQ==", + "license": "MIT" + }, + "node_modules/to-snake-case": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/to-snake-case/-/to-snake-case-0.1.2.tgz", + "integrity": "sha512-0h2qEd1GZjWTbUqKRVo7D6ZdhM5H/2hUlA4g1+kQE4C27709WEVmbtAE+PQbYQ8iLgcyoHWMIN7fx6t8kg4Zkg==", + "license": "MIT", + "dependencies": { + "to-space-case": "0.1.2" + } + }, + "node_modules/to-space-case": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/to-space-case/-/to-space-case-0.1.2.tgz", + "integrity": "sha512-DtF9QZwx8W6WMhrCuvUZJYX9sT74/VOdVxi68EkEu3gt0SUQHhJG+UYbQI0559XcchsX7gziPlWuV4dEGC59dA==", + "license": "MIT", + "dependencies": { + "to-no-case": "0.1.1" + } + }, "node_modules/tr46": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/tr46/-/tr46-4.1.1.tgz", @@ -1151,6 +2130,18 @@ "node": ">=0.4.0" } }, + "node_modules/tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", @@ -1201,6 +2192,24 @@ "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", "optional": true }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unescape": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/unescape/-/unescape-1.0.1.tgz", + "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", @@ -1209,12 +2218,71 @@ "node": ">= 0.8" } }, + "node_modules/urllib": { + "version": "2.44.0", + "resolved": "https://registry.npmmirror.com/urllib/-/urllib-2.44.0.tgz", + "integrity": "sha512-zRCJqdfYllRDA9bXUtx+vccyRqtJPKsw85f44zH7zPD28PIvjMqIgw9VwoTLV7xTBWZsbebUFVHU5ghQcWku2A==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.3.0", + "content-type": "^1.0.2", + "default-user-agent": "^1.0.0", + "digest-header": "^1.0.0", + "ee-first": "~1.1.1", + "formstream": "^1.1.0", + "humanize-ms": "^1.2.0", + "iconv-lite": "^0.6.3", + "pump": "^3.0.0", + "qs": "^6.4.0", + "statuses": "^1.3.1", + "utility": "^1.16.1" + }, + "engines": { + "node": ">= 0.10.0" + }, + "peerDependencies": { + "proxy-agent": "^5.0.0" + }, + "peerDependenciesMeta": { + "proxy-agent": { + "optional": true + } + } + }, + "node_modules/urllib/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/utility": { + "version": "1.18.0", + "resolved": "https://registry.npmmirror.com/utility/-/utility-1.18.0.tgz", + "integrity": "sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==", + "license": "MIT", + "dependencies": { + "copy-to": "^2.0.1", + "escape-html": "^1.0.3", + "mkdirp": "^0.5.1", + "mz": "^2.7.0", + "unescape": "^1.0.1" + }, + "engines": { + "node": ">= 0.12.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1223,6 +2291,19 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", @@ -1259,6 +2340,27 @@ "node": ">=16" } }, + "node_modules/win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==", + "license": "MIT", + "dependencies": { + "semver": "^5.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/win-release/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/window-size": { "version": "0.1.0", "resolved": "https://registry.npmmirror.com/window-size/-/window-size-0.1.0.tgz", @@ -1295,6 +2397,40 @@ "node": ">=0.4.0" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "license": "MIT" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", @@ -1317,6 +2453,94 @@ } }, "dependencies": { + "@alicloud/dybaseapi": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@alicloud/dybaseapi/-/dybaseapi-1.0.0.tgz", + "integrity": "sha512-4KEDgqES7IL60T/TWGSkLQkN6BYeHEw8smnPgac2J2MTES5v1ieCWvbLSuUUWi5SAXi7cydKoD4HUOmX7xwM+A==", + "requires": { + "@alicloud/pop-core": "^1.3.3" + } + }, + "@alicloud/dysmsapi-2017-05-25": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@alicloud/dysmsapi-2017-05-25/-/dysmsapi-2017-05-25-1.0.1.tgz", + "integrity": "sha512-CVX/Yl9ntwkAOHAZa3j2Y/Io+SlbETw/ILv4UPIDCEIQm/N0EEcN2OXF8cWCUvHeu7OgnFWZKhdJY5GsbjWHDA==", + "requires": { + "@alicloud/pop-core": "^1.5.1" + } + }, + "@alicloud/mns": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@alicloud/mns/-/mns-1.0.0.tgz", + "integrity": "sha512-SUJYM8+x3iPy6thIy5Wa/5lw7+RodeDDIPcI3QQ3bZPNCSq+yEC3jMtfVlS3vxGPq+dGjAysI9RGeM7NByeHlw==", + "requires": { + "debug": "^2.6.3", + "httpx": "^2.1.1", + "kitx": "^1.2.0", + "xml2js": "^0.4.17" + } + }, + "@alicloud/pop-core": { + "version": "1.7.13", + "resolved": "https://registry.npmmirror.com/@alicloud/pop-core/-/pop-core-1.7.13.tgz", + "integrity": "sha512-agzr4DU+aAGW7/2mp2hP1JcNJkn/zBS0jUGQt5etIASN0MVq1tMdudVqvWbExUG0mUouo/n2VgdnjOHjswvrlA==", + "requires": { + "debug": "^3.1.0", + "httpx": "^2.1.2", + "json-bigint": "^1.0.0", + "kitx": "^1.2.1", + "xml2js": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + } + } + }, + "@alicloud/sms-sdk": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/@alicloud/sms-sdk/-/sms-sdk-1.1.6.tgz", + "integrity": "sha512-jW5ROjpAtOrNFkZSXb8geJWzkgJ9ggnPx+ve+72eatu78/vad2emdZjRx43/xPqqhA9djRoU3xHQt2xFODiaMQ==", + "requires": { + "@alicloud/dybaseapi": "^1.0.0", + "@alicloud/dysmsapi-2017-05-25": "^1.0.1", + "@alicloud/mns": "^1.0.0-beta6", + "babel-runtime": "^6.26.0" + } + }, + "@fidm/asn1": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@fidm/asn1/-/asn1-1.0.4.tgz", + "integrity": "sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==" + }, + "@fidm/x509": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@fidm/x509/-/x509-1.2.1.tgz", + "integrity": "sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==", + "requires": { + "@fidm/asn1": "^1.0.4", + "tweetnacl": "^1.0.1" + } + }, "@mongodb-js/saslprep": { "version": "1.1.9", "resolved": "https://registry.npmmirror.com/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", @@ -1325,6 +2549,22 @@ "sparse-bitfield": "^3.0.3" } }, + "@types/jsonwebtoken": { + "version": "9.0.7", + "resolved": "https://registry.npmmirror.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "requires": { + "undici-types": "~6.20.0" + } + }, "@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -1360,6 +2600,29 @@ "acorn": "^2.1.0" } }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmmirror.com/align-text/-/align-text-0.1.4.tgz", @@ -1370,11 +2633,53 @@ "repeat-string": "^1.5.2" } }, + "alipay-sdk": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/alipay-sdk/-/alipay-sdk-3.6.2.tgz", + "integrity": "sha512-YJyBszWMEjfoLUVJT5kXDQhqOOo8xQ+/Mc4l5TUSAJ1sc2ewHf4oRLtXpuOJFnxBfTAsvPqjZ1bGVxLacX+uxw==", + "requires": { + "@fidm/x509": "^1.2.1", + "bignumber.js": "^9.0.0", + "camelcase-keys": "^4.2.0", + "crypto-js": "^4.0.0", + "decamelize": "^2.0.0", + "iconv-lite": "^0.4.24", + "is": "^3.2.1", + "is-json": "^2.0.1", + "lodash": "^4.17.20", + "moment": "^2.16.0", + "snakecase-keys": "^1.1.1", + "urllib": "^2.17.0" + }, + "dependencies": { + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "requires": { + "xregexp": "4.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "append-field": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/append-field/-/append-field-1.0.0.tgz", @@ -1390,6 +2695,20 @@ "resolved": "https://registry.npmmirror.com/asap/-/asap-1.0.0.tgz", "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz", @@ -1398,6 +2717,11 @@ "safe-buffer": "5.1.2" } }, + "bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" + }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.18.3.tgz", @@ -1420,6 +2744,11 @@ "resolved": "https://registry.npmmirror.com/bson/-/bson-6.10.0.tgz", "integrity": "sha512-ROchNosXMJD2cbQGm84KoP7vOGPO6/bOAW0veMMbzhXLqoZptcaYRVLitwvuhwhjjpU1qP4YZRWLhgETdgqUQw==" }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1443,6 +2772,23 @@ "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==" }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==" + } + } + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmmirror.com/center-align/-/center-align-0.1.3.tgz", @@ -1486,6 +2832,14 @@ "wordwrap": "0.0.2" } }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.6.0", "resolved": "https://registry.npmmirror.com/commander/-/commander-2.6.0.tgz", @@ -1539,6 +2893,16 @@ "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", @@ -1553,6 +2917,11 @@ "vary": "^1" } }, + "crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "css": { "version": "1.0.8", "resolved": "https://registry.npmmirror.com/css/-/css-1.0.8.tgz", @@ -1585,6 +2954,19 @@ "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, + "default-user-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/default-user-agent/-/default-user-agent-1.0.0.tgz", + "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==", + "requires": { + "os-name": "~1.0.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", @@ -1595,6 +2977,19 @@ "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.0.4.tgz", "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" }, + "digest-header": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/digest-header/-/digest-header-1.1.0.tgz", + "integrity": "sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", @@ -1605,6 +3000,14 @@ "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", @@ -1615,6 +3018,11 @@ "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, "express": { "version": "4.16.4", "resolved": "https://registry.npmmirror.com/express/-/express-4.16.4.tgz", @@ -1659,6 +3067,29 @@ } } }, + "express-jwt": { + "version": "8.4.1", + "resolved": "https://registry.npmmirror.com/express-jwt/-/express-jwt-8.4.1.tgz", + "integrity": "sha512-IZoZiDv2yZJAb3QrbaSATVtTCYT11OcqgFGoTN4iKVyN6NBkBkhtVIixww5fmakF0Upt5HfOxJuS6ZmJVeOtTQ==", + "requires": { + "@types/jsonwebtoken": "^9", + "express-unless": "^2.1.3", + "jsonwebtoken": "^9.0.0" + } + }, + "express-unless": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/express-unless/-/express-unless-2.1.3.tgz", + "integrity": "sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, "finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.1.tgz", @@ -1673,6 +3104,34 @@ "unpipe": "~1.0.0" } }, + "form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formstream": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/formstream/-/formstream-1.5.1.tgz", + "integrity": "sha512-q7ORzFqotpwn3Y/GBK2lK7PjtZZwJHz9QE9Phv8zb5IrL9ftGLyi2zjGURON3voK8TaZ+mqJKERYN4lrHYTkUQ==", + "requires": { + "destroy": "^1.0.4", + "mime": "^2.5.2", + "node-hex": "^1.0.1", + "pause-stream": "~0.0.11" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + } + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", @@ -1683,6 +3142,11 @@ "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz", @@ -1699,6 +3163,75 @@ "statuses": ">= 1.4.0 < 2" } }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "httpx": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/httpx/-/httpx-2.3.3.tgz", + "integrity": "sha512-k1qv94u1b6e+XKCxVbLgYlOypVP9MPGpnN5G/vxFf6tDO4V3xpz3d6FUOY/s8NtPgaq5RBVVgSB+7IHpVxMYzw==", + "requires": { + "@types/node": "^20", + "debug": "^4.1.1" + }, + "dependencies": { + "@types/node": { + "version": "20.17.9", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.17.9.tgz", + "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", + "requires": { + "undici-types": "~6.19.2" + } + }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -1717,16 +3250,36 @@ "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/is/-/is-3.3.0.tgz", + "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==" + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" + }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", @@ -1749,6 +3302,38 @@ "with": "~4.0.0" } }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "jstransformer": { "version": "0.0.2", "resolved": "https://registry.npmmirror.com/jstransformer/-/jstransformer-0.0.2.tgz", @@ -1758,6 +3343,25 @@ "promise": "^6.0.1" } }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "kareem": { "version": "2.6.3", "resolved": "https://registry.npmmirror.com/kareem/-/kareem-2.6.3.tgz", @@ -1771,16 +3375,66 @@ "is-buffer": "^1.1.5" } }, + "kitx": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/kitx/-/kitx-1.3.0.tgz", + "integrity": "sha512-fhBqFlXd0GkKTB+8ayLfpzPUw+LHxZlPAukPNBD1Om7JMeInT+/PxCAf1yLagvD+VKoyWhXtJR68xQkX/a0wOQ==" + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==" }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/longest/-/longest-1.0.1.tgz", "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==" }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", @@ -1832,6 +3486,11 @@ "minimist": "^1.2.6" } }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, "mongodb": { "version": "6.10.0", "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-6.10.0.tgz", @@ -1931,11 +3590,55 @@ "xtend": "^4.0.0" } }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-hex": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/node-hex/-/node-hex-1.0.1.tgz", + "integrity": "sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", @@ -1954,6 +3657,14 @@ "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, "optimist": { "version": "0.3.7", "resolved": "https://registry.npmmirror.com/optimist/-/optimist-0.3.7.tgz", @@ -1962,6 +3673,37 @@ "wordwrap": "~0.0.2" } }, + "os-name": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/os-name/-/os-name-1.0.3.tgz", + "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==", + "requires": { + "osx-release": "^1.0.0", + "win-release": "^1.0.0" + } + }, + "osx-release": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/osx-release/-/osx-release-1.1.0.tgz", + "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==", + "requires": { + "minimist": "^1.1.0" + } + }, + "p-queue": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-8.0.1.tgz", + "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", + "requires": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + } + }, + "p-timeout": { + "version": "6.1.3", + "resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.3.tgz", + "integrity": "sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==" + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", @@ -1972,6 +3714,14 @@ "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "requires": { + "through": "~2.3" + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1994,6 +3744,15 @@ "ipaddr.js": "1.9.1" } }, + "pump": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", @@ -2004,6 +3763,11 @@ "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", @@ -2034,6 +3798,11 @@ "util-deprecate": "~1.0.1" } }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", @@ -2057,6 +3826,16 @@ "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmmirror.com/send/-/send-0.16.2.tgz", @@ -2098,6 +3877,15 @@ "resolved": "https://registry.npmmirror.com/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, + "snakecase-keys": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/snakecase-keys/-/snakecase-keys-1.2.0.tgz", + "integrity": "sha512-G5Faa3wQevGXcD5e4JKfmgofO+Fu4Jg4/nLyeZqWmBqVV0/3ORgervt3EjBi6PEFKhztPQWegZspteWnycx5dg==", + "requires": { + "map-obj": "~2.0.0", + "to-snake-case": "~0.1.2" + } + }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.4.4.tgz", @@ -2132,6 +3920,72 @@ "safe-buffer": "~5.1.0" } }, + "tencentcloud-sdk-nodejs-common": { + "version": "4.0.987", + "resolved": "https://registry.npmmirror.com/tencentcloud-sdk-nodejs-common/-/tencentcloud-sdk-nodejs-common-4.0.987.tgz", + "integrity": "sha512-wWasXTvUkAUDb/6X3kp9cDC38SM0a5wRj10U72abVp0ZzljpwFC71kxMR8nSWW8cgYfx91aJhWLMneIBW8ksqw==", + "requires": { + "form-data": "^3.0.0", + "get-stream": "^6.0.0", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "json-bigint": "^1.0.0", + "node-fetch": "^2.2.0", + "tslib": "1.13.0", + "uuid": "^9.0.1" + } + }, + "tencentcloud-sdk-nodejs-iai": { + "version": "4.0.978", + "resolved": "https://registry.npmmirror.com/tencentcloud-sdk-nodejs-iai/-/tencentcloud-sdk-nodejs-iai-4.0.978.tgz", + "integrity": "sha512-j2Vvfm/Ig8AVaaEMXu2UeL5+YPZ9kbLlSwumfdZ4v/suuEjmIxWG4xMFEu/CZLJfHQNLGfFfmu80/LYhBJoVOA==", + "requires": { + "tencentcloud-sdk-nodejs-common": "^4.0.488", + "tslib": "1.13.0" + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "to-no-case": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/to-no-case/-/to-no-case-0.1.1.tgz", + "integrity": "sha512-XNChsa36ssNQibYbv/kBSLb0jEfPuePdnbX1tBpHypUbtjBSR8ihaDRRYPZLMstjSpPM+onSgxeDjg+lgfIzZQ==" + }, + "to-snake-case": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/to-snake-case/-/to-snake-case-0.1.2.tgz", + "integrity": "sha512-0h2qEd1GZjWTbUqKRVo7D6ZdhM5H/2hUlA4g1+kQE4C27709WEVmbtAE+PQbYQ8iLgcyoHWMIN7fx6t8kg4Zkg==", + "requires": { + "to-space-case": "0.1.2" + } + }, + "to-space-case": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/to-space-case/-/to-space-case-0.1.2.tgz", + "integrity": "sha512-DtF9QZwx8W6WMhrCuvUZJYX9sT74/VOdVxi68EkEu3gt0SUQHhJG+UYbQI0559XcchsX7gziPlWuV4dEGC59dA==", + "requires": { + "to-no-case": "0.1.1" + } + }, "tr46": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/tr46/-/tr46-4.1.1.tgz", @@ -2182,6 +4036,16 @@ } } }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", @@ -2219,21 +4083,80 @@ "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", "optional": true }, + "undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "unescape": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/unescape/-/unescape-1.0.1.tgz", + "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", + "requires": { + "extend-shallow": "^2.0.1" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "urllib": { + "version": "2.44.0", + "resolved": "https://registry.npmmirror.com/urllib/-/urllib-2.44.0.tgz", + "integrity": "sha512-zRCJqdfYllRDA9bXUtx+vccyRqtJPKsw85f44zH7zPD28PIvjMqIgw9VwoTLV7xTBWZsbebUFVHU5ghQcWku2A==", + "requires": { + "any-promise": "^1.3.0", + "content-type": "^1.0.2", + "default-user-agent": "^1.0.0", + "digest-header": "^1.0.0", + "ee-first": "~1.1.1", + "formstream": "^1.1.0", + "humanize-ms": "^1.2.0", + "iconv-lite": "^0.6.3", + "pump": "^3.0.0", + "qs": "^6.4.0", + "statuses": "^1.3.1", + "utility": "^1.16.1" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "utility": { + "version": "1.18.0", + "resolved": "https://registry.npmmirror.com/utility/-/utility-1.18.0.tgz", + "integrity": "sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==", + "requires": { + "copy-to": "^2.0.1", + "escape-html": "^1.0.3", + "mkdirp": "^0.5.1", + "mz": "^2.7.0", + "unescape": "^1.0.1" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", @@ -2258,6 +4181,21 @@ "webidl-conversions": "^7.0.0" } }, + "win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==", + "requires": { + "semver": "^5.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmmirror.com/window-size/-/window-size-0.1.0.tgz", @@ -2284,6 +4222,30 @@ "resolved": "https://registry.npmmirror.com/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==" }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", diff --git a/demo_server/package.json b/demo_server/package.json index b297226..db8d448 100644 --- a/demo_server/package.json +++ b/demo_server/package.json @@ -14,6 +14,13 @@ "jade": "~1.11.0", "mongoose": "^8.8.4", "morgan": "~1.9.1", - "multer": "^1.4.5-lts.1" + "multer": "^1.4.5-lts.1", + + "@alicloud/sms-sdk": "^1.1.6", + "alipay-sdk": "^3.6.1", + "express-jwt": "^8.4.1", + "jsonwebtoken": "^9.0.2", + "p-queue": "^8.0.1", + "tencentcloud-sdk-nodejs-iai": "^4.0.918" } -} +} \ No newline at end of file diff --git a/demo_server/routes/index.js b/demo_server/routes/index.js index ac6b1c8..458f37d 100644 --- a/demo_server/routes/index.js +++ b/demo_server/routes/index.js @@ -2,9 +2,7 @@ var express = require('express'); var router = express.Router(); const multer = require('multer'); const path = require('path'); -const { User, Address, areaModel, areaCateModel, QuestionModel } = require('../db/model'); - - +const { UserModel, User, Address, areaModel, areaCateModel, QuestionModel, } = require('../db/model'); const bodyParser = require('body-parser'); @@ -14,6 +12,330 @@ app.use(bodyParser.urlencoded({ extended: true })); +// lhy 依赖 +const SMSClient = require('@alicloud/sms-sdk'); +const jwt = require('jsonwebtoken'); +const tencentcloud = require("tencentcloud-sdk-nodejs-iai"); +const axios = require('axios'); + +const BAIDU_API_KEY = 'RV2HxwyPvSpM8teGLirxJ0L6'; +const BAIDU_SECRET_KEY = 'ihEFaKAikcVjkJ0FAlZvSmvDpcn7SPCz'; + +// lhy 接口 + +// 获取百度 API 的 access token +async function getBaiduToken() { + try { + const res = await axios.post( + 'https://aip.baidubce.com/oauth/2.0/token', + null, + { + params: { + grant_type: 'client_credentials', + client_id: BAIDU_API_KEY, + client_secret: BAIDU_SECRET_KEY, + }, + } + ); + console.log('百度Token:', res.data.access_token); // 输出 Token,调试用 + return res.data.access_token; + } catch (err) { + console.error('获取百度Token失败:', err); + throw new Error('无法获取Token'); + } +} + +// 实时人脸验证接口 +router.post('/faceyanzhen', async (req, res) => { + const { name, certNumber, imageBase64 } = req.body; + try { + const token = await getBaiduToken(); + console.log('Token:', token); // 输出 Token,调试用 + + // 人脸验证接口请求 + // 人脸验证接口请求 + const response = await axios.post( + 'https://aip.baidubce.com/rest/2.0/face/v3/faceverify', + JSON.stringify([ + { + image: imageBase64, + image_type: 'BASE64', + face_field: 'liveness', + liveness_control: 'HIGH' + } + ]), + { + headers: { 'Content-Type': 'application/json' }, // 确保设置为 JSON + params: { access_token: token } + } + ); + + + + console.log('人脸验证结果:', response.data); // 输出验证结果,调试用 + + // 检查返回的活体检测值是否满足通过条件 + if (response.data.result && response.data.result.face_liveness > 0.5) { // 将阈值从 0.8 调整为 0.4 + res.status(200).json({ success: true, message: '认证通过!' }); + } else { + res.status(200).json({ success: false, message: '认证失败,请重试!' }); + } + + } catch (error) { + console.error('人脸认证失败:', error); + res.status(500).json({ success: false, message: '服务错误,请稍后再试!' }); + } +}); + + + + +const AlipayFormData = require('alipay-sdk/lib/form').default +const alipaySdk = require('../alipay') + + + +//六位验证码 +function getCode() { + let str = ""; + for (let i = 0; i < 6; i++) { + str += parseInt(Math.random() * 10) + } + return str; +} +//手机号验证码 +let msm = '' +router.post('/url1', function (req, res, next) { + let phoneNum = req.body.phone; + //初始化sms_client + let smsClient = new SMSClient({ + accessKeyId: 'LTAI5tRB3emUsuAA5mV6zg9G', //accessKeyId 前面提到要准备的 + secretAccessKey: '31caLOagHgddJN0QeeXRRNUpzBUdAe' //secretAccessKey 前面提到要准备的 + }); + let str = getCode(); + msm = str; + // 开始发送短信 + smsClient.sendSMS({ + PhoneNumbers: phoneNum, + SignName: "WYK123WYK456", //签名名称 前面提到要准备的 + TemplateCode: "SMS_474670083", //模版CODE 前面提到要准备的 + TemplateParam: `{"code":'${str}'}`, // 短信模板变量对应的实际值,JSON格式 + }).then(result => { + console.log("result", result) + let { Code } = result; + if (Code == 'OK') { + res.json({ + code: 0, + msg: 'success', + sms: str + }) + console.log(result) + } + }).catch(err => { + console.log(err); + res.json({ + code: 1, + msg: 'fail: ' + err.data.Message + }) + }) +}); + +//手机号验证码登录 +router.post('/login', async (req, res) => { + try { + let phone = req.body.phone + let yan = req.query.yan + const user = await UserModel.findOne({ phone }) + if (user && yan === msm) { + const userInfo = { phone } + const accessToken = jwt.sign(userInfo, 'abcdefg', { expiresIn: '0.5h' }) + const refreshToken = jwt.sign(userInfo, 'abcdefg', { expiresIn: '1d' }) + return res.send({ code: 200, msg: '登陆成功', accessToken, refreshToken }) + } + if (!user) { + await UserModel.create(req.body) + return res.send({ code: 200, msg: '添加成功' }) + } + res.send({ code: 400, msg: '登陆失败' }) + } catch (err) { + res.status(500).send({ code: 500, msg: '服务器错误' }) + } +}) + +//手机号密码登录 +router.post('/login2', async (req, res) => { + let { phone, pass } = req.body + let user = await UserModel.find() + user.forEach(item => { + if (item.phone != phone) { + return res.send({ code: 400, msg: '用户不存在' }) + } + if (item.pass != pass) { + return res.send({ code: 400, msg: '密码错误' }) + } + }) + const userInfo = { phone } + const accessToken = jwt.sign(userInfo, 'abcdefg', { expiresIn: '0.5h' }) + const refreshToken = jwt.sign(userInfo, 'abcdefg', { expiresIn: '1d' }) + res.send({ code: 200, msg: '登陆成功', userInfo, accessToken, refreshToken }) +}) + +// 用户注册接口 +router.post('/addUser', async (req, res) => { + const { phone, pass } = req.body; + + // 检查手机号和密码是否有效 + if (!phone || !pass) { + return res.send({ code: 400, msg: '手机号和密码不能为空' }); + } + + // 检查用户是否已存在 + const existingUser = await UserModel.findOne({ phone }); + if (existingUser) { + return res.send({ code: 409, msg: '该手机号已注册' }); + } + + // 创建新用户 + const newUser = new UserModel({ phone, pass }); + try { + await newUser.save(); + res.send({ code: 200, msg: '用户注册成功' }); + } catch (error) { + res.send({ code: 500, msg: '用户注册失败', error }); + } +}); + + +//忘记密码 +router.post('/wang', async (req, res) => { + let { phone, yan, pass } = req.body + if (yan != msm) { + return res.send({ code: 400, msg: '验证码错误' }) + } + let user = await UserModel.findOne({ phone: phone }) + if (!user) { + return res.send({ code: 400, msg: '用户不存在' }) + } + let result = await UserModel.updateOne({ phone: phone }, { $set: { pass: pass } }) + if (!result.nModified) { + return res.send({ code: 200, msg: '修改成功' }) + } else { + return res.send({ code: 400, msg: '修改失败' }) + } +}) + +//人脸识别登录 +router.post('/faceLogin', async (req, res) => { + let b64 = req.body.b64 + const IaiClient = tencentcloud.iai.v20200303.Client; + try { + const clientConfig = { + credential: { secretId: "AKIDsFOK4cx43whIhuAQVNTWM3Y5Zv9A5nHX", secretKey: "HRO7byBetxugGhvzqZAXhdQ00qZBOTLF", }, + region: "ap-beijing", + profile: { httpProfile: { endpoint: "iai.tencentcloudapi.com", }, }, + }; + const client = new IaiClient(clientConfig); + const params = { + "GroupIds": ["WYK123Wyk123"], + "Image": b64, + "NeedPersonInfo": 1, + "QualityControl": 0, + "FaceMatchThreshold": 85, + }; + let doc = await client.SearchFaces(params) + if (doc.Results[0].Candidates.length != 0) { + let token = jwt.sign({ name: doc.Results[0].Candidates[0].PersonName }, 'secret', { expiresIn: '1h' }) + let personName = doc.Results[0].Candidates[0].PersonName + res.send({ code: 200, msg: "登录成功!", token }) + let user = await UserModel.find({ facename: personName }) + if (user.length != 0) { + const accessToken = jwt.sign({ name: personName }, 'abcdefg', { expiresIn: '0.5h' }) + const refreshToken = jwt.sign({ name: personName }, 'abcdefg', { expiresIn: '1d' }) + res.send({ code: 200, msg: "登录成功!", accessToken, refreshToken, _id: user[0]._id }) + } + } else { + res.send({ code: 401, msg: '人脸库无此人!' }) + return false + } + } catch (err) { + console.log(err); + } +}) + + + + + + +router.post("/pcpay", async (req, res) => { + let { data } = req.body + console.log(data) + const formData = new AlipayFormData() + + formData.setMethod('get'); + // 通过addField增加参数 + // 在用户支付完成之后,支付宝服务器会根据传入的notify_url,以post请求的形式将支付结果作为参数通知到商户系统 + // 支付成功或失败都返回 + formData.addField('returnUrl', "http://127.0.0.1:3001/pingjia");//支付成功后返回的页面 + formData.addField('bizContent', { + out_trade_no: 'e4b0c44278fc1c149afbf4c5396fb92424ae41e4649b834ca495999b7952b854',//订单号 64个字符以内 可包含字母、数字、下划线、且不能重复 + product_code: "FAST_INSTANT_TRADE_PAY",//销售产品码,与支付宝签约的产品码名称,仅支持FAST_INSTANT_TRADE_PAY + total_amount: 8,// 订单总金额 + subject: '1229',// 订单描述 + body: '34234',// 商品描述 + }) + // 返回promise + const result = await alipaySdk.exec( + 'alipay.trade.wap.pay',//统一收单下单并支付页面接口, + {},//api请求的参数(包含 “公共请求参数”和“业务参数”) + { formData: formData }// result为可以跳转支付链接的url + ) + // res.json({ url: result }) + res.send({ + code: 200, + result + }) +}) + + + + + +router.post("/pcfy", async (req, res) => { + let { data } = req.body + console.log(data) + const formData = new AlipayFormData() + + formData.setMethod('get'); + // 通过addField增加参数 + // 在用户支付完成之后,支付宝服务器会根据传入的notify_url,以post请求的形式将支付结果作为参数通知到商户系统 + // 支付成功或失败都返回 + formData.addField('returnUrl', "http://127.0.0.1:3001/qvxiaodingdan");//支付成功后返回的页面 + formData.addField('bizContent', { + out_trade_no: 'e4b0c44278fc1c149afbf4c8996fb92427ae41e4649b934ca496459b7952b854',//订单号 64个字符以内 可包含字母、数字、下划线、且不能重复 + product_code: "FAST_INSTANT_TRADE_PAY",//销售产品码,与支付宝签约的产品码名称,仅支持FAST_INSTANT_TRADE_PAY + total_amount: 5,// 订单总金额 + subject: '1234',// 订单描述 + body: '34234',// 商品描述 + }) + // 返回promise + const result = await alipaySdk.exec( + 'alipay.trade.wap.pay',//统一收单下单并支付页面接口, + {},//api请求的参数(包含 “公共请求参数”和“业务参数”) + { formData: formData }// result为可以跳转支付链接的url + ) + // res.json({ url: result }) + res.send({ + code: 200, + result + }) +}) + + + + +// wzy 接口 + // 设置 multer 存储配置 const storage = multer.diskStorage({ destination: (req, file, cb) => { -- Gitee From b0b56b9ed41bc5357015cf7326b756950352385e Mon Sep 17 00:00:00 2001 From: ZHANGFU <3079975645@qq.com> Date: Mon, 9 Dec 2024 00:37:17 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9D=8E=E6=98=8A=E9=98=B3=E7=9A=84?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E5=92=8C=E4=BB=A3=E7=A0=81=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo_module/package-lock.json | 79 ++++++++++++ demo_module/package.json | 5 +- demo_module/src/Login/A-1.jpg | Bin 0 -> 42580 bytes demo_module/src/Login/Login.css | 128 +++++++++++++++++++ demo_module/src/Login/Mm.jsx | 162 ++++++++++++++++++++++++ demo_module/src/Login/Ren.jsx | 66 ++++++++++ demo_module/src/Login/Wang.jsx | 118 +++++++++++++++++ demo_module/src/Login/Yzm.jsx | 188 ++++++++++++++++++++++++++++ demo_module/src/Login/Zc.jsx | 188 ++++++++++++++++++++++++++++ demo_module/src/router/index.jsx | 72 ++++------- demo_module/src/view/home.jsx | 12 ++ demo_module/src/view/login.jsx | 64 ++++++++++ demo_module/src/zf/Zhifudingdan.jsx | 6 + 13 files changed, 1040 insertions(+), 48 deletions(-) create mode 100644 demo_module/src/Login/A-1.jpg create mode 100644 demo_module/src/Login/Login.css create mode 100644 demo_module/src/Login/Mm.jsx create mode 100644 demo_module/src/Login/Ren.jsx create mode 100644 demo_module/src/Login/Wang.jsx create mode 100644 demo_module/src/Login/Yzm.jsx create mode 100644 demo_module/src/Login/Zc.jsx create mode 100644 demo_module/src/view/home.jsx create mode 100644 demo_module/src/view/login.jsx create mode 100644 demo_module/src/zf/Zhifudingdan.jsx diff --git a/demo_module/package-lock.json b/demo_module/package-lock.json index 3e1c9b0..0fc088d 100644 --- a/demo_module/package-lock.json +++ b/demo_module/package-lock.json @@ -14,8 +14,10 @@ "antd-mobile": "^5.38.1", "antd-mobile-icons": "^0.3.0", "axios": "^1.7.7", + "create-puzzle": "^3.0.2", "qrcode": "^1.5.4", "qrcode.react": "^4.1.0", + "rc-slider-captcha": "^1.7.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-redux": "^9.1.2", @@ -2213,6 +2215,16 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/cache2": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/cache2/-/cache2-3.1.2.tgz", + "integrity": "sha512-y714OEbC+xC2bzP8bFjzsDpqHSCsNRtMm4gKxmdYq1fqQnhCgWkGhO9OVHZr973zCJAJSfenigGDpRDxtN+dQQ==", + "license": "MIT", + "dependencies": { + "emitter-pro": "^1.2.2", + "tslib": "^2.7.0" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz", @@ -2363,6 +2375,16 @@ "toggle-selection": "^1.0.6" } }, + "node_modules/create-puzzle": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/create-puzzle/-/create-puzzle-3.0.2.tgz", + "integrity": "sha512-XliUr6Di/ba4mRGa2Mjq59KwES+3gECCqbaVewKiK/l3p0UCgUqhIKRjmgyULkM1JeAmZTJCyuyVuSx3NCUDZg==", + "license": "MIT", + "dependencies": { + "ut2": "^1.10.0", + "util-helpers": "^5.0.4" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2556,6 +2578,12 @@ "integrity": "sha512-NxnmFBHDl5Sachd2P46O7UJiMaMHMLSofoIWVJq3mj8NJgG0umiSeljAVP9lGzjI0UDLJJ5jjoGjcrB8RSbjLQ==", "dev": true }, + "node_modules/emitter-pro": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/emitter-pro/-/emitter-pro-1.2.2.tgz", + "integrity": "sha512-wmkoEzKYArkMPl7hxSwHvFDnXvmTaCZo6FdgiRQV87iCBuS+ugjopDkLQWOPMDhvV2hiyn9brGTSBCr6wunSLw==", + "license": "MIT" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -4492,6 +4520,20 @@ "react-dom": ">=16.9.0" } }, + "node_modules/rc-hooks": { + "version": "3.0.16", + "resolved": "https://registry.npmmirror.com/rc-hooks/-/rc-hooks-3.0.16.tgz", + "integrity": "sha512-d5SBXrSD0u4mEt+AXVLyI76TQJgzf2PvRSHhQiETAhYnqQrkAJOckmZgbfIZ5PTjGqrM3ovsD+2dD8ZBENx0mQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1", + "ut2": "^1.14.0", + "util-helpers": "^5.3.1" + }, + "peerDependencies": { + "react": ">= 16.8.6" + } + }, "node_modules/rc-image": { "version": "7.11.0", "resolved": "https://registry.npmmirror.com/rc-image/-/rc-image-7.11.0.tgz", @@ -4788,6 +4830,20 @@ "react-dom": ">=16.9.0" } }, + "node_modules/rc-slider-captcha": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/rc-slider-captcha/-/rc-slider-captcha-1.7.0.tgz", + "integrity": "sha512-/cja5nCEIs/cmDnCHYNct7D3O3P9ydsLB7IkeaCl0ah0y/Xp6HBK3spqZgG8PF6uKg/9ENqVtO4Ioi/V6mF+tg==", + "license": "MIT", + "dependencies": { + "classnames": "^2.5.1", + "rc-hooks": "^3.0.15", + "tslib": "^2.8.1" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, "node_modules/rc-steps": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz", @@ -5807,6 +5863,29 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/ut2": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/ut2/-/ut2-1.15.0.tgz", + "integrity": "sha512-Lv1toC6voRSRHDn9dG+5Z7sjqyB+1aPWhdB4SvIBeX8rsgT7aIc4FBjIDUL11gEoei2bhvO7odBfdD0EJ0AfEw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/util-helpers": { + "version": "5.4.0", + "resolved": "https://registry.npmmirror.com/util-helpers/-/util-helpers-5.4.0.tgz", + "integrity": "sha512-ot9Ac7d/IxUE1fS2GpRTFEz3bcW3eAmzx/7rOsM+6m358jHUOqRuhJ/2Tsy52yalfxI16w9jirZJ0ZhWkv9BHQ==", + "license": "MIT", + "dependencies": { + "cache2": "^3.1.2", + "tslib": "^2.8.1", + "ut2": "^1.15.0" + } + }, "node_modules/vite": { "version": "5.4.10", "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.10.tgz", diff --git a/demo_module/package.json b/demo_module/package.json index 962f164..2340e8c 100644 --- a/demo_module/package.json +++ b/demo_module/package.json @@ -24,7 +24,10 @@ "react-router-dom": "^6.28.0", "react-vant": "^3.3.5", "redux": "^5.0.1", - "redux-persist": "^6.0.0" + "redux-persist": "^6.0.0", + + "create-puzzle": "^3.0.2", + "rc-slider-captcha": "^1.7.0" }, "devDependencies": { "@eslint/js": "^9.11.1", diff --git a/demo_module/src/Login/A-1.jpg b/demo_module/src/Login/A-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..787de75efbc54571395000649e45ca08d9bd9ddb GIT binary patch literal 42580 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 M83U@V!-4<+0R29MYybcN literal 0 HcmV?d00001 diff --git a/demo_module/src/Login/Login.css b/demo_module/src/Login/Login.css new file mode 100644 index 0000000..40232b9 --- /dev/null +++ b/demo_module/src/Login/Login.css @@ -0,0 +1,128 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: Arial, sans-serif; +} + +body { + background-color: #f5f5f5; + color: #333; +} + +.box1 { + width: 100%; + height: 50px; + background-color: #fff; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.span1 { + font-size: 18px; + font-weight: bold; + margin: 30px; + color: red; + border-bottom: 2px solid red; +} +.span2 { + font-size: 18px; + font-weight: bold; + margin: 30px; + color: black; + border-bottom: 2px solid black; +} + +.btn1 { + margin-top: 50px; + display: block; + width: 100%; + padding: 10px; + background-color: #ff0000; + color: #fff; + text-align: center; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s ease; +} + +.btn1:hover { + background-color: #ff3333; +} + +.box2 { + display: flex; + justify-content: space-between; + margin-top: 20px; +} + +.box2 p { + font-size: 17px; + color: #ff002d; + cursor: pointer; + transition: color 0.3s ease; +} + +.box2 p:hover { + color: #f44336; +} + +.box3 { + position: absolute; + left: 60px; + bottom: 30px; + font-size: 14px; + color: #999; +} + +.box4, .box5 { + width: 100%; + display: flex; + justify-content: center; + margin-top: 20px; +} + +.box4, .box5 { + width: 100%; + display: flex; + justify-content: center; + margin-top: 20px; +} + +.box4 img, .box5 img { + width: 50px; + height: 50px; + margin: 0 10px; + cursor: pointer; + transition: transform 0.3s ease; +} + +.box4 img:hover, .box5 img:hover { + transform: scale(1.1); +} + +.p1, .p2 { + font-size: 18px; + color: #333; + margin-top: 20px; + text-align: center; +} + +.content { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + display: flex; + align-items: center; + justify-content: center; + width: 150px; + height: 150px; + background: #fff; + border-radius: 16px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + + diff --git a/demo_module/src/Login/Mm.jsx b/demo_module/src/Login/Mm.jsx new file mode 100644 index 0000000..8765634 --- /dev/null +++ b/demo_module/src/Login/Mm.jsx @@ -0,0 +1,162 @@ +import React, { useEffect, useState, useRef } from 'react' +import axios from 'axios' +import './Login.css' +import { NavBar, Form, Input, Button, Mask } from 'antd-mobile' +import { EyeInvisibleOutline, EyeOutline } from 'antd-mobile-icons' +// import { usenavigate } from 'react-router-dom' +import { Toast } from 'react-vant'; +import SliderCaptcha from 'rc-slider-captcha'; // 导入滑动验证码组件 +import { sleep } from 'ut2'; // 导入sleep函数 +import createPuzzle from 'create-puzzle'; // 导入createPuzzle函数 +import { RubyOutlined, MehOutlined, SmileOutlined, RedoOutlined, LoadingOutlined } from '@ant-design/icons' // 导入Ant Design图标 +import pic from './A-1.jpg' // 导入登录页面的背景图片 +import { useNavigate } from 'react-router-dom' + +export default function Mm() { + const navigate = useNavigate() + const [phone, setphone] = useState('') + const [visible, setVisible] = useState(false) + const [pass, setpass] = useState('') + const offsetXRef = useRef(0); // x 轴偏移值 + const [flag1, setflag1] = useState(false) + + + const handlerPhone = (e) => { + setphone(e.target.value) + } + + const handlerPass = (e) => { + setpass(e.target.value) + } + + const back = () => { + navigate('/') + } + + const handlerDenglu = async () => { + if (phone.length !== 11) { + Toast('请输入正确的手机号码') + return + } + let data = await axios.post('http://localhost:3000/login2', { phone: phone, pass: pass }) + if (data.data.code === 200) { + setflag1(true) + localStorage.setItem('accessToken', data.data.accessToken) + localStorage.setItem('refreshToken', data.data.refreshToken) + console.log(data.data.accessToken) + } else { + Toast('账号或密码错误') + } + } + + // 查看是否在安全距离 + const verifyCaptcha = async (data) => { + await sleep(); + if (data.x >= offsetXRef.current - 5 && data.x < offsetXRef.current + 5) { + Toast('登录成功') + navigate('/homepage') + return Promise.resolve(); + } + alert('验证失败') + return Promise.reject(); + }; + + useEffect(() => { + + }, []) + + return ( +
+ 恩师教育 + +
+ 密码登录 + { navigate('/yzm') }}>验证码登录 +
+ +
+ + + { handlerPhone(event) }} placeholder='请输入手机号码' clearable /> + + + + {!visible ? ( + setVisible(true)} /> + ) : ( + setVisible(false)} /> + )} +
+ } + > + { handlerPass(event) }} + type={visible ? 'text' : 'password'} + /> + + setflag1(false)}> +
+ + createPuzzle(pic, { + format: 'blob' + }).then((res) => { + offsetXRef.current = res.x + return { + // 背景图片 + bgUrl: res.bgUrl, + // 核验区域 + puzzleUrl: res.puzzleUrl + }; + }) + } + onVerify={(data) => { + return verifyCaptcha(data); + }} + //bgSize必须和原图片的尺寸一样 + bgSize={{ width: 569, height: 427 }} + tipIcon={{ + default: , + loading: , + success: , + error: , + refresh: + }} + tipText={{ + default: '向右👉拖动完成拼图', + loading: '👩🏻‍💻🧑‍💻努力中...', + moving: '向右拖动至拼图位置', + verifying: '验证中...', + error: '验证失败' + }} + /> +
+
+ + + { + phone == '' && pass == '' ? + : + + } +
+ +

{ navigate('/wang') }}>忘记密码?

+

还没有账号?来注册

+
+

其他方式登录

+
+
+ { navigate('/ren') }} src={'./ren.jpg'} alt=''> +

人脸识别登录

+
+
+ + ) +} + diff --git a/demo_module/src/Login/Ren.jsx b/demo_module/src/Login/Ren.jsx new file mode 100644 index 0000000..c412f0f --- /dev/null +++ b/demo_module/src/Login/Ren.jsx @@ -0,0 +1,66 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { Toast, NavBar, Button } from 'react-vant'; +import { useNavigate } from 'react-router-dom'; +import axios from 'axios'; + +export default function Ren() { + const navigate = useNavigate() + useEffect(() => { + startCamera(); + }, []); + const videoRef = useRef(null); + const canvasRef = useRef(null); + const [capturedImages, setCapturedImages] = useState([]); + const startCamera = async () => { + const stream = await navigator.mediaDevices.getUserMedia({ video: true }); + videoRef.current.srcObject = stream; + }; + const capture = () => { + const canvas = canvasRef.current; + const context = canvas.getContext('2d'); + context.drawImage(videoRef.current, 0, 0, canvas.width, canvas.height); + const imageSrc = canvas.toDataURL('image/jpeg'); + setCapturedImages([...capturedImages, imageSrc]) + submitImages(imageSrc) + }; + let submitImages = async (img) => { + let data = await axios.post('http://localhost:3000/faceLogin', { b64: img }) + if (data.data.code === 200) { + Toast('登录成功') + localStorage.setItem('accessToken',data.data.accessToken) + localStorage.setItem('refreshToken',data.data.refreshToken) + navigate('/map3') + } else { + Toast(data.data.msg) + } + }; + + // 导航头回退 + let headgo = () => { + navigate('/yzm') + } + return ( +
+ {/* 导航头 */} +
+ { headgo() }} + onClickRight={() => Toast('按钮')} + /> +
+
+
+ +
+ +
+ {/* fotter */} +
+ {/* */} +
+
+ ) +} diff --git a/demo_module/src/Login/Wang.jsx b/demo_module/src/Login/Wang.jsx new file mode 100644 index 0000000..6917b38 --- /dev/null +++ b/demo_module/src/Login/Wang.jsx @@ -0,0 +1,118 @@ +import React, { useEffect, useState } from 'react' +import axios from 'axios' +import './Login.css' +import { NavBar, Form, Input, Button } from 'antd-mobile' +import { EyeInvisibleOutline, EyeOutline } from 'antd-mobile-icons' +import { useNavigate } from 'react-router-dom' +import { Toast } from 'react-vant' + +export default function Wang() { + const Navigate = useNavigate() + const [visible, setVisible] = useState(false) + const [phone, setphone] = useState('') + const [yan, setyan] = useState('') + const [pass, setpass] = useState('') + const [countDown, setCountDown] = useState(60); + const [isSending, setIsSending] = useState(false); + + const handlerPhone = (e) => { + setphone(e.target.value) + } + + const handlerMa = (e) => { + setyan(e.target.value) + } + + const handlerPass = (e) => { + setpass(e.target.value) + } + + const handlerYan = async () => { + await axios.post('http://localhost:3000/url1', { phone: phone }) + setIsSending(true) + } + + const back = () => { + Navigate('/map3') + } + + const handlerXiugai = async () => { + const data = await axios.post('http://localhost:3000/wang', { phone: phone, yan: yan, pass: pass }) + if (data.data.code === 200) { + Toast('修改成功,请重新登录') + Navigate('/mm') + } else { + Toast(data.data.msg) + } + } + + useEffect(() => { + let intervalID; + if (countDown > 0 && isSending) { + intervalID = setInterval(() => { + setCountDown((prevCountDown) => prevCountDown - 1) + }, 1000) + } else if (countDown == 0) { + setIsSending(false) + } + return () => { + clearInterval(intervalID) + } + }, [countDown, isSending]) + + return ( +
+ 恩师教育 + +
+ 忘记密码 +
+ +
+ + + { handlerPhone(event) }} placeholder='请输入手机号码' clearable /> + + + + {isSending ? + (<>{countDown}后重新获取) + : + ( { handlerYan() }}>获取验证码) + } +
+ } + > + { handlerMa(event) }} clearable /> + + + {!visible ? ( + setVisible(true)} /> + ) : ( + setVisible(false)} /> + )} + + } + > + { handlerPass(event) }} + type={visible ? 'text' : 'password'} + /> + + + { + phone == '' && pass == '' && yan == '' ? + : + + } + + ) +} + diff --git a/demo_module/src/Login/Yzm.jsx b/demo_module/src/Login/Yzm.jsx new file mode 100644 index 0000000..97f5d00 --- /dev/null +++ b/demo_module/src/Login/Yzm.jsx @@ -0,0 +1,188 @@ +import React, { useEffect, useState, useRef } from 'react' +import axios from 'axios' +import './Login.css' +import { NavBar, Form, Input, Button, Mask } from 'antd-mobile' +import { useNavigate } from 'react-router-dom' +import { EyeInvisibleOutline, EyeOutline } from 'antd-mobile-icons' +import { Toast } from 'react-vant'; +import SliderCaptcha from 'rc-slider-captcha'; // 导入滑动验证码组件 +import { sleep } from 'ut2'; // 导入sleep函数 +import createPuzzle from 'create-puzzle'; // 导入createPuzzle函数 +import { RubyOutlined, MehOutlined, SmileOutlined, RedoOutlined, LoadingOutlined } from '@ant-design/icons' // 导入Ant Design图标 +import pic from './A-1.jpg' // 导入登录页面的背景图片 + + +export default function Yzm() { + const Navigate = useNavigate() + const [visible, setVisible] = useState(false) + const [phone, setphone] = useState('') + const [yan, setyan] = useState('') + const [pass, setpass] = useState('') + const [countDown, setCountDown] = useState(60); + const [isSending, setIsSending] = useState(false); + const offsetXRef = useRef(0); // x 轴偏移值 + const [flag1, setflag1] = useState(false) + + const handlerPhone = (e) => { + setphone(e.target.value) + } + + const handlerMa = (e) => { + setyan(e.target.value) + } + + const handlerPass = (e) => { + setpass(e.target.value) + } + + const handlerYan = async () => { + await axios.post('http://localhost:3000/url1', { phone: phone }) + setIsSending(true) + } + + const back = () => { + Navigate('/mm') + } + + const handlerDenglu = async () => { + if (phone.length !== 11) { + alert('请输入正确的手机号码') + return + } + if (yan.length !== 6) { + alert('请输入正确的验证码') + return + } + const data = await axios.post(`http://localhost:3000/login?yan=${yan}`, { phone: phone, pass: pass }) + if (data.data.code === 200) { + setflag1(true) + localStorage.setItem('accessToken', data.data.accessToken) + localStorage.setItem('refreshToken', data.data.refreshToken) + } + } + + // 查看是否在安全距离 + const verifyCaptcha = async (data) => { + await sleep(); + if (data.x >= offsetXRef.current - 5 && data.x < offsetXRef.current + 5) { + Toast('登录成功') + Navigate('/map3') + return Promise.resolve(); + } + Toast('验证失败') + return Promise.reject(); + }; + + + + useEffect(() => { + let intervalID; + if (countDown > 0 && isSending) { + intervalID = setInterval(() => { + setCountDown((prevCountDown) => prevCountDown - 1) + }, 1000) + } else if (countDown == 0) { + setIsSending(false) + } + return () => { + clearInterval(intervalID) + } + }, [countDown, isSending]) + + return ( +
+ + +
+ 验证码登录 +
+ +
+ + + { handlerPhone(event) }} placeholder='请输入手机号码' clearable /> + + + + {isSending ? + (<>{countDown}后重新获取) + : + ( { handlerYan() }}>获取验证码) + } +
+ } + > + { handlerMa(event) }} clearable /> + + + {!visible ? ( + setVisible(true)} /> + ) : ( + setVisible(false)} /> + )} + + } + > + { handlerPass(event) }} + type={visible ? 'text' : 'password'} + /> + + setflag1(false)}> +
+ + createPuzzle(pic, { + format: 'blob' + }).then((res) => { + offsetXRef.current = res.x + return { + // 背景图片 + bgUrl: res.bgUrl, + // 核验区域 + puzzleUrl: res.puzzleUrl + }; + }) + } + onVerify={(data) => { + return verifyCaptcha(data); + }} + //bgSize必须和原图片的尺寸一样 + bgSize={{ width: 569, height: 427 }} + tipIcon={{ + default: , + loading: , + success: , + error: , + refresh: + }} + tipText={{ + default: '向右👉拖动完成拼图', + loading: '👩🏻‍💻🧑‍💻努力中...', + moving: '向右拖动至拼图位置', + verifying: '验证中...', + error: '验证失败' + }} + /> +
+
+ + { + phone == '' && yan == '' && pass == '' ? + : + + } +
+

{ Navigate('/mm') }}>密码登录

+

{ Navigate('/wang') }}>忘记密码?

+
+ + ) +} diff --git a/demo_module/src/Login/Zc.jsx b/demo_module/src/Login/Zc.jsx new file mode 100644 index 0000000..95b1d3c --- /dev/null +++ b/demo_module/src/Login/Zc.jsx @@ -0,0 +1,188 @@ +import React, { useEffect, useState, useRef } from 'react' +import axios from 'axios' +import './Login.css' +import { NavBar, Form, Input, Button, Mask } from 'antd-mobile' +import { useNavigate } from 'react-router-dom' +import { EyeInvisibleOutline, EyeOutline } from 'antd-mobile-icons' +import { Toast } from 'react-vant'; +import SliderCaptcha from 'rc-slider-captcha'; // 导入滑动验证码组件 +import { sleep } from 'ut2'; // 导入sleep函数 +import createPuzzle from 'create-puzzle'; // 导入createPuzzle函数 +import { RubyOutlined, MehOutlined, SmileOutlined, RedoOutlined, LoadingOutlined } from '@ant-design/icons' // 导入Ant Design图标 +import pic from './A-1.jpg' // 导入登录页面的背景图片 + + +export default function Yzm() { + const Navigate = useNavigate() + const [visible, setVisible] = useState(false) + const [phone, setphone] = useState('') + const [yan, setyan] = useState('') + const [pass, setpass] = useState('') + const [countDown, setCountDown] = useState(60); + const [isSending, setIsSending] = useState(false); + const offsetXRef = useRef(0); // x 轴偏移值 + const [flag1, setflag1] = useState(false) + + const handlerPhone = (e) => { + setphone(e.target.value) + } + + const handlerMa = (e) => { + setyan(e.target.value) + } + + const handlerPass = (e) => { + setpass(e.target.value) + } + + const handlerYan = async () => { + await axios.post('http://localhost:3000/url1', { phone: phone }) + setIsSending(true) + } + + const back = () => { + Navigate('/map3') + } + + const handlerDenglu = async () => { + if (phone.length !== 11) { + alert('请输入正确的手机号码') + return + } + if (yan.length !== 6) { + alert('请输入正确的验证码') + return + } + const data = await axios.post(`http://localhost:3000/login?yan=${yan}`, { phone: phone, pass: pass }) + if (data.data.code === 200) { + setflag1(true) + localStorage.setItem('accessToken', data.data.accessToken) + localStorage.setItem('refreshToken', data.data.refreshToken) + } + } + + // 查看是否在安全距离 + const verifyCaptcha = async (data) => { + await sleep(); + if (data.x >= offsetXRef.current - 5 && data.x < offsetXRef.current + 5) { + Toast('登录成功') + Navigate('/map3') + return Promise.resolve(); + } + Toast('验证失败') + return Promise.reject(); + }; + + + + useEffect(() => { + let intervalID; + if (countDown > 0 && isSending) { + intervalID = setInterval(() => { + setCountDown((prevCountDown) => prevCountDown - 1) + }, 1000) + } else if (countDown == 0) { + setIsSending(false) + } + return () => { + clearInterval(intervalID) + } + }, [countDown, isSending]) + + return ( +
+ 恩师教育 + +
+ + + { handlerPhone(event) }} placeholder='请输入手机号码' clearable /> + + + + {isSending ? + (<>{countDown}后重新获取) + : + ( { handlerYan() }}>获取验证码) + } +
+ } + > + { handlerMa(event) }} clearable /> + + + {!visible ? ( + setVisible(true)} /> + ) : ( + setVisible(false)} /> + )} + + } + > + { handlerPass(event) }} + type={visible ? 'text' : 'password'} + /> + + + { handlerPass(event) }} + type={visible ? 'text' : 'password'} + /> + + setflag1(false)}> +
+ + createPuzzle(pic, { + format: 'blob' + }).then((res) => { + offsetXRef.current = res.x + return { + // 背景图片 + bgUrl: res.bgUrl, + // 核验区域 + puzzleUrl: res.puzzleUrl + }; + }) + } + onVerify={(data) => { + return verifyCaptcha(data); + }} + //bgSize必须和原图片的尺寸一样 + bgSize={{ width: 335, height: 188 }} + tipIcon={{ + default: , + loading: , + success: , + error: , + refresh: + }} + tipText={{ + default: '向右👉拖动完成拼图', + loading: '👩🏻‍💻🧑‍💻努力中...', + moving: '向右拖动至拼图位置', + verifying: '验证中...', + error: '验证失败' + }} + /> +
+
+ + { + phone == '' && yan == '' && pass == '' ? + : + + } + + ) +} diff --git a/demo_module/src/router/index.jsx b/demo_module/src/router/index.jsx index 6b38113..20f20ca 100644 --- a/demo_module/src/router/index.jsx +++ b/demo_module/src/router/index.jsx @@ -1,8 +1,19 @@ import { lazy } from "react" import { Navigate } from "react-router-dom" -//唐帅磊和康峰容负责的 项目首页 +// 李昊阳负责的登录注册页面 +const Home = lazy(() => import("../view/home.jsx")) +const Login = lazy(() => import("../view/login.jsx")) +const Mm = lazy(() => import("../Login/Mm")) +const Ren = lazy(() => import("../Login/Ren")) +const Wang = lazy(() => import("../Login/Wang")) +const Yzm = lazy(() => import("../Login/Yzm")) +const Zc = lazy(() => import("../Login/Zc")) +const Zf = lazy(() => import("../zf/Zhifudingdan")) + + +//唐帅磊和康峰容负责的 项目首页 //kfr首页 import Index from '../view/kfr/index.jsx' import Test from '../view/kfr/test.jsx' @@ -16,8 +27,6 @@ import Jiaojuan from '../view/kfr/jiaojuan.jsx' import Testreport from '../view/kfr/testreport.jsx' import Parse from '../view/kfr/parse.jsx' import Realexam from '../view/kfr/realexam.jsx' - - //tsl首页 const Index1 = lazy(() => import('../view/Shouye_tsl/Index')) const Shenlun = lazy(() => import('../view/Shouye_tsl/Shenlun')) @@ -48,7 +57,6 @@ const PersonalData = lazy(() => import("../view/Mine/Personal")) // Settings 设置 const Settings = lazy(() => import("../view/Mine/Settings")) - //我的学习 //我的课程 const Mycourse = lazy(() => import("../view/Mine/MyCourse")) @@ -69,20 +77,15 @@ const EarningsRecord = lazy(() => import("../view/Mine/EarningsRecord")) const WithdrawalRecord = lazy(() => import("../view/Mine/WithdrawalRecord")) const Yes = lazy(() => import("../view/Mine/Yes")) - //我的练习 const MyReal = lazy(() => import("../view/Mine/MyReal")) //我的批阅 const MyRead = lazy(() => import("../view/Mine/MyRead")) const MyResult = lazy(() => import("../view/Mine/MyResult")) - - //我的学习 //我的课程 - const MyExercise = lazy(() => import("../view/Mine/MyExercise")) - //收货地址MyResult const Address = lazy(() => import("../view/Mine/Address")) //我的面试 @@ -95,9 +98,20 @@ const Mylev = lazy(() => import("../view/Mine/Mylev")) // 路由设置 const routes = [ - { path: '/', element: }, - // 唐帅磊和康峰容负责的 首页路由 + { path: '/', element: }, + + // 李昊阳负责的登录和注册 + { path: '/login', element: }, + { path: '/home', element: }, + { path: '/mm', element: }, + { path: '/ren', element: }, + { path: '/wang', element: }, + { path: '/yzm', element: }, + { path: '/zc', element: }, + { path: '/zf', element: }, + + // 唐帅磊和康峰容负责的 首页路由 //KFR // 首页路由 { @@ -151,42 +165,6 @@ const routes = [ { path: 'zhaoxiang', element: }, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // 杨章富和王卓岩负责的 我的主页路由 { path: '/mine', element: < MineView />, }, // 用户资料包含的路由 diff --git a/demo_module/src/view/home.jsx b/demo_module/src/view/home.jsx new file mode 100644 index 0000000..5686371 --- /dev/null +++ b/demo_module/src/view/home.jsx @@ -0,0 +1,12 @@ +import { useState } from "react" + +function Home() { + + return ( + <> + + + ) +} + +export default Home diff --git a/demo_module/src/view/login.jsx b/demo_module/src/view/login.jsx new file mode 100644 index 0000000..14bf3fa --- /dev/null +++ b/demo_module/src/view/login.jsx @@ -0,0 +1,64 @@ +import { useState } from "react" +import { useSelector, useDispatch } from "react-redux" + + +function Login() { + const [email, setEmail] = useState("") + const [password, setPassword] = useState("") + const [error, setError] = useState("") + + const dispatch = useDispatch() + + const handleLogin = () => { + if (email === "" || password === "") { + setError("Please fill in all fields") + } else { + // dispatch login action + } + setError("") + } + return ( + <> +
+

Login

+ setEmail(e.target.value)} + /> + setPassword(e.target.value)} + /> + + {error &&

{error}

} +
+
+

Don't have an account?

+ +
+
+

Forgot Password?

+ +
+
+

Reset Password

+ +
+
+

Logout

+ +
+ + + ) +} + +export default Login diff --git a/demo_module/src/zf/Zhifudingdan.jsx b/demo_module/src/zf/Zhifudingdan.jsx new file mode 100644 index 0000000..ddfd4b1 --- /dev/null +++ b/demo_module/src/zf/Zhifudingdan.jsx @@ -0,0 +1,6 @@ + +const add = async () => { + const res = await axios.post('http://127.0.0.1:3000/pcfy', { data: 1 }) + console.log(res.data); + window.open(res.data.result) +} -- Gitee From 656ed401be6696d5fe6aa4e12ca9aebc8ba8468c Mon Sep 17 00:00:00 2001 From: ZHANGFU <3079975645@qq.com> Date: Mon, 9 Dec 2024 00:41:55 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=90=84=E5=A4=A7=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E5=9D=87=E6=9C=AA=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E6=98=8E=E5=A4=A9=E9=9C=80=E8=A6=81=E5=B0=86=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E8=BF=9B=E8=A1=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo_module/src/Login/Mm.jsx | 2 +- demo_module/src/Login/Zc.jsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/demo_module/src/Login/Mm.jsx b/demo_module/src/Login/Mm.jsx index 8765634..182971e 100644 --- a/demo_module/src/Login/Mm.jsx +++ b/demo_module/src/Login/Mm.jsx @@ -30,7 +30,7 @@ export default function Mm() { } const back = () => { - navigate('/') + navigate('/homepage') } const handlerDenglu = async () => { diff --git a/demo_module/src/Login/Zc.jsx b/demo_module/src/Login/Zc.jsx index 95b1d3c..3aef713 100644 --- a/demo_module/src/Login/Zc.jsx +++ b/demo_module/src/Login/Zc.jsx @@ -41,7 +41,7 @@ export default function Yzm() { } const back = () => { - Navigate('/map3') + Navigate(-1) } const handlerDenglu = async () => { @@ -91,7 +91,7 @@ export default function Yzm() { return (
- 恩师教育 + 恩师教育
@@ -132,7 +132,7 @@ export default function Yzm() { /> - { handlerPass(event) }} -- Gitee