From e45c367e154d17129a02aed3fcc2a09187d2625b Mon Sep 17 00:00:00 2001 From: pipipigua <396076883@qq.com> Date: Thu, 31 Oct 2024 20:50:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E3=80=81=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86=E5=92=8C=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=BF=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 +- data/teachers.xlsx | Bin 0 -> 34829 bytes package.json | 6 +- pnpm-lock.yaml | 2984 +++++++++++++++++++++---------------- public/index.html | 2 +- src/config/index.ts | 9 +- src/models/mysql/index.ts | 62 +- src/router/excel.ts | 139 ++ src/router/http.ts | 684 +++++++-- src/server.ts | 36 +- src/utils/mysql.ts | 2 +- src/utils/operationLog.ts | 51 + 12 files changed, 2559 insertions(+), 1418 deletions(-) create mode 100644 data/teachers.xlsx create mode 100644 src/router/excel.ts create mode 100644 src/utils/operationLog.ts diff --git a/.env b/.env index 7ad74d7..3daa03c 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ # Port -PORT=3000 +PORT=3001 # JWT_SECRET JWT_SECRET = '708DD1DC5BC5A169' diff --git a/data/teachers.xlsx b/data/teachers.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..55d259118c6d88e29dd0d082dbb841f94e115c3e GIT binary patch literal 34829 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 N-xDB=JMTh&`+o|5WaIz< literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 364eaa9..0a0d9ca 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,9 @@ "typescript": "^4.8.4", "winston": "^3.8.2" }, - "repository": "https://github.com/xiaoxian521/pure-admin-backend" + "repository": "https://github.com/xiaoxian521/pure-admin-backend", + "dependencies": { + "@types/xlsx": "^0.0.36", + "xlsx": "^0.18.5" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18f1bc9..2cd8b46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,817 +1,1660 @@ -lockfileVersion: 5.4 +lockfileVersion: '9.0' -specifiers: - '@pureadmin/utils': ^1.4.0 - '@types/body-parser': ^1.19.2 - '@types/express': ^4.17.14 - '@types/express-ws': ^3.0.1 - '@types/jsonwebtoken': ^8.5.9 - '@types/multer': ^1.4.7 - '@types/node': ^18.11.9 - '@types/ws': ^8.5.3 - body-parser: ^1.20.1 - dayjs: ^1.11.6 - dotenv: ^16.0.3 - esno: ^0.16.3 - express: ^4.18.2 - express-swagger-generator: ^1.1.17 - express-ws: ^5.0.2 - jsonwebtoken: ^8.5.1 - multer: 1.4.5-lts.1 - mysql2: ^2.3.3 - nodemon: ^2.0.20 - open: ^8.4.0 - svg-captcha: ^1.4.0 - ts-node: ^10.9.1 - typescript: ^4.8.4 - winston: ^3.8.2 +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false -devDependencies: - '@pureadmin/utils': 1.4.0_dayjs@1.11.6 - '@types/body-parser': 1.19.2 - '@types/express': 4.17.14 - '@types/express-ws': 3.0.1 - '@types/jsonwebtoken': 8.5.9 - '@types/multer': 1.4.7 - '@types/node': 18.11.9 - '@types/ws': 8.5.3 - body-parser: 1.20.1 - dayjs: 1.11.6 - dotenv: 16.0.3 - esno: 0.16.3 - express: 4.18.2 - express-swagger-generator: 1.1.17 - express-ws: 5.0.2_express@4.18.2 - jsonwebtoken: 8.5.1 - multer: 1.4.5-lts.1 - mysql2: 2.3.3 - nodemon: 2.0.20 - open: 8.4.0 - svg-captcha: 1.4.0 - ts-node: 10.9.1_cbe7ovvae6zqfnmtgctpgpys54 - typescript: 4.8.4 - winston: 3.8.2 +importers: + + .: + dependencies: + '@types/xlsx': + specifier: ^0.0.36 + version: 0.0.36 + xlsx: + specifier: ^0.18.5 + version: 0.18.5 + devDependencies: + '@pureadmin/utils': + specifier: ^1.4.0 + version: 1.18.0 + '@types/body-parser': + specifier: ^1.19.2 + version: 1.19.5 + '@types/express': + specifier: ^4.17.14 + version: 4.17.21 + '@types/express-ws': + specifier: ^3.0.1 + version: 3.0.5 + '@types/jsonwebtoken': + specifier: ^8.5.9 + version: 8.5.9 + '@types/multer': + specifier: ^1.4.7 + version: 1.4.12 + '@types/node': + specifier: ^18.11.9 + version: 18.19.61 + '@types/ws': + specifier: ^8.5.3 + version: 8.5.12 + body-parser: + specifier: ^1.20.1 + version: 1.20.3 + dayjs: + specifier: ^1.11.6 + version: 1.11.13 + dotenv: + specifier: ^16.0.3 + version: 16.4.5 + esno: + specifier: ^0.16.3 + version: 0.16.3 + express: + specifier: ^4.18.2 + version: 4.21.1 + express-swagger-generator: + specifier: ^1.1.17 + version: 1.1.17 + express-ws: + specifier: ^5.0.2 + version: 5.0.2(express@4.21.1) + jsonwebtoken: + specifier: ^8.5.1 + version: 8.5.1 + multer: + specifier: 1.4.5-lts.1 + version: 1.4.5-lts.1 + mysql2: + specifier: ^2.3.3 + version: 2.3.3 + nodemon: + specifier: ^2.0.20 + version: 2.0.22 + open: + specifier: ^8.4.0 + version: 8.4.2 + svg-captcha: + specifier: ^1.4.0 + version: 1.4.0 + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@18.19.61)(typescript@4.9.5) + typescript: + specifier: ^4.8.4 + version: 4.9.5 + winston: + specifier: ^3.8.2 + version: 3.15.0 packages: - /@colors/colors/1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - dev: true - /@cspotcode/source-map-support/0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@dabh/diagnostics/2.0.3: + '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - dev: true - /@esbuild-kit/cjs-loader/2.4.0: - resolution: {integrity: sha512-DBBCiHPgL2B/elUpvCDhNHXnlZQ9sfO2uyt1OJyAXKT41beQEFY4OxZ6gwS+ZesRCbZ6JV8M7GEyOPkjv8kdIw==} - dependencies: - '@esbuild-kit/core-utils': 3.0.0 - get-tsconfig: 4.2.0 - dev: true + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] - /@esbuild-kit/core-utils/3.0.0: - resolution: {integrity: sha512-TXmwH9EFS3DC2sI2YJWJBgHGhlteK0Xyu1VabwetMULfm3oYhbrsWV5yaSr2NTWZIgDGVLHbRf0inxbjXqAcmQ==} - dependencies: - esbuild: 0.15.13 - source-map-support: 0.5.21 - dev: true - - /@esbuild-kit/esm-loader/2.5.0: - resolution: {integrity: sha512-ySs0qOsiwj+hsgZM9/MniGdvfa9/WzqfFuIia8/5gSUPeIQIX2/tG91QakxPFOR35VFiwTB7wCiHtiS6dc6SkA==} - dependencies: - '@esbuild-kit/core-utils': 3.0.0 - get-tsconfig: 4.2.0 - dev: true - - /@esbuild/android-arm/0.15.13: - resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==} + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64/0.15.13: - resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==} + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/sourcemap-codec/1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - /@jridgewell/trace-mapping/0.3.9: + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@pureadmin/utils/1.4.0_dayjs@1.11.6: - resolution: {integrity: sha512-xuy4/gPXoyUuTxxJGmyriXl8n4QGl9ya9Hh+deZvfhixlKHWyAz+ByJfwTb//B7b9Lpj/3sa53wTMC/oYgXAjQ==} + '@pureadmin/utils@1.18.0': + resolution: {integrity: sha512-0/R6JQWAkDNfc4Ba/llNQoR1lUbJvNToq0gG74eKhwTY6Y8lCt7sAIy30NYAUtiVWqAjb6N5OFHQnb4cIfbBJw==} peerDependencies: - dayjs: '*' echarts: '*' vue: '*' peerDependenciesMeta: - dayjs: - optional: true echarts: optional: true vue: optional: true - dependencies: - dayjs: 1.11.6 - dev: true - /@tsconfig/node10/1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - /@tsconfig/node12/1.0.11: + '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - /@tsconfig/node14/1.0.3: + '@tsconfig/node14@1.0.3': resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - /@tsconfig/node16/1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - /@types/body-parser/1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} - dependencies: - '@types/connect': 3.4.35 - '@types/node': 18.11.9 - dev: true + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - /@types/connect/3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} - dependencies: - '@types/node': 18.11.9 - dev: true + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - /@types/express-serve-static-core/4.17.31: - resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} - dependencies: - '@types/node': 18.11.9 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - dev: true + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - /@types/express-ws/3.0.1: - resolution: {integrity: sha512-VguRXzcpPBF0IggIGpUoM65cZJDfMQxoc6dKoCz1yLzcwcXW7ft60yhq3ygKhyEhEIQFtLrWjyz4AJ1qjmzCFw==} - dependencies: - '@types/express': 4.17.14 - '@types/express-serve-static-core': 4.17.31 - '@types/ws': 8.5.3 - dev: true + '@types/express-serve-static-core@5.0.1': + resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==} - /@types/express/4.17.14: - resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.31 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 - dev: true + '@types/express-ws@3.0.5': + resolution: {integrity: sha512-lbWMjoHrm/v85j81UCmb/GNZFO3genxRYBW1Ob7rjRI+zxUBR+4tcFuOpKKsYQ1LYTYiy3356epLeYi/5zxUwA==} - /@types/jsonwebtoken/8.5.9: + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/jsonwebtoken@8.5.9': resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} - dependencies: - '@types/node': 18.11.9 - dev: true - /@types/mime/3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - dev: true + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - /@types/multer/1.4.7: - resolution: {integrity: sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==} - dependencies: - '@types/express': 4.17.14 - dev: true + '@types/multer@1.4.12': + resolution: {integrity: sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==} - /@types/node/18.11.9: - resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} - dev: true + '@types/node@18.19.61': + resolution: {integrity: sha512-z8fH66NcVkDzBItOao+Nyh0fiy7CYdxIyxnNCcZ60aY0I+EA/y4TSi/S/W9i8DIQvwVo7a0pgzAxmDeNnqrpkw==} - /@types/qs/6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} - /@types/range-parser/1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - /@types/serve-static/1.15.0: - resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} - dependencies: - '@types/mime': 3.0.1 - '@types/node': 18.11.9 - dev: true + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - /@types/ws/8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} - dependencies: - '@types/node': 18.11.9 - dev: true + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - /abbrev/1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - /accepts/1.3.8: + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + + '@types/xlsx@0.0.36': + resolution: {integrity: sha512-mvfrKiKKMErQzLMF8ElYEH21qxWCZtN59pHhWGmWCWFJStYdMWjkDSAy6mGowFxHXaXZWe5/TW7pBUiWclIVOw==} + deprecated: This is a stub types definition for xlsx (https://github.com/sheetjs/js-xlsx). xlsx provides its own type definitions, so you don't need @types/xlsx installed! + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: true - /acorn-walk/8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - dev: true - /acorn/8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true - dev: true - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + adler-32@1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - /append-field/1.0.0: + append-field@1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} - dev: true - /arg/4.1.3: + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /argparse/1.0.10: + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - /array-flatten/1.1.1: + array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true - /async/3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - /balanced-match/1.0.2: + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - /binary-extensions/2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - dev: true - /body-parser/1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /brace-expansion/1.1.11: + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - /braces/3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - /buffer-equal-constant-time/1.0.1: + buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: true - /buffer-from/1.1.2: + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - /busboy/1.6.0: + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: true - /bytes/3.1.2: + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - dev: true - /call-bind/1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.3 - dev: true + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} - /call-me-maybe/1.0.2: + call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - dev: true - /chokidar/3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + cfb@1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /color-convert/1.9.3: + codepage@1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - /color-name/1.1.3: + color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - /color-name/1.1.4: + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - /color-string/1.9.1: + color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - dev: true - /color/3.2.1: + color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - dev: true - /colorspace/1.1.4: + colorspace@1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - dev: true - /commander/2.20.3: + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - requiresBuild: true - dev: true - optional: true - /concat-map/0.0.1: + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - /concat-stream/1.6.2: + concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.7 - typedarray: 0.0.6 - dev: true - /content-disposition/0.5.4: + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - dev: true - /cookie-signature/1.0.6: + cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true - /cookie/0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} - dev: true - /core-js/2.6.12: + core-js@2.6.12: resolution: {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. - requiresBuild: true - dev: true - /core-util-is/1.0.3: + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true - /create-require/1.1.1: + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - /dayjs/1.11.6: - resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==} - dev: true + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - /debug/2.6.9: + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.0.0 - dev: true - /debug/3.2.7: + debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.3 - dev: true - /debug/3.2.7_supports-color@5.5.0: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - supports-color: 5.5.0 - dev: true + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} - /define-lazy-prop/2.0.0: + define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} - dev: true - /denque/2.1.0: + denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} - dev: true - /depd/2.0.0: + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dev: true - /destroy/1.2.0: + destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true - /diff/4.0.2: + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: true - /doctrine-file/1.0.3: + doctrine-file@1.0.3: resolution: {integrity: sha512-OK37HbZtNmIMn84riibVXRmcEGUIf6BNfYMcbXg20ejP+LEsf4tnk8QfYy3EmQs4KzZFhTl3zwoKqVwARxpBgA==} - dependencies: - doctrine: 2.1.0 - dev: true - /doctrine/2.1.0: + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - /dotenv/16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dev: true - /ecdsa-sig-formatter/1.0.11: + ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - /ee-first/1.1.1: + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true - /enabled/2.0.0: + enabled@2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - dev: true - /encodeurl/1.0.2: + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - dev: true - /esbuild-android-64/0.15.13: - resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} - /esbuild-android-arm64/0.15.13: - resolution: {integrity: sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} - /esbuild-darwin-64/0.15.13: - resolution: {integrity: sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - /esbuild-darwin-arm64/0.15.13: - resolution: {integrity: sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-64/0.15.13: - resolution: {integrity: sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-arm64/0.15.13: - resolution: {integrity: sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.15.13: - resolution: {integrity: sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-64/0.15.13: - resolution: {integrity: sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.15.13: - resolution: {integrity: sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.15.13: - resolution: {integrity: sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.15.13: - resolution: {integrity: sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.15.13: - resolution: {integrity: sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-riscv64/0.15.13: - resolution: {integrity: sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-s390x/0.15.13: - resolution: {integrity: sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-netbsd-64/0.15.13: - resolution: {integrity: sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-openbsd-64/0.15.13: - resolution: {integrity: sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-sunos-64/0.15.13: - resolution: {integrity: sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-32/0.15.13: - resolution: {integrity: sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64/0.15.13: - resolution: {integrity: sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-arm64/0.15.13: - resolution: {integrity: sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild/0.15.13: - resolution: {integrity: sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==} + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.15.13 - '@esbuild/linux-loong64': 0.15.13 - esbuild-android-64: 0.15.13 - esbuild-android-arm64: 0.15.13 - esbuild-darwin-64: 0.15.13 - esbuild-darwin-arm64: 0.15.13 - esbuild-freebsd-64: 0.15.13 - esbuild-freebsd-arm64: 0.15.13 - esbuild-linux-32: 0.15.13 - esbuild-linux-64: 0.15.13 - esbuild-linux-arm: 0.15.13 - esbuild-linux-arm64: 0.15.13 - esbuild-linux-mips64le: 0.15.13 - esbuild-linux-ppc64le: 0.15.13 - esbuild-linux-riscv64: 0.15.13 - esbuild-linux-s390x: 0.15.13 - esbuild-netbsd-64: 0.15.13 - esbuild-openbsd-64: 0.15.13 - esbuild-sunos-64: 0.15.13 - esbuild-windows-32: 0.15.13 - esbuild-windows-64: 0.15.13 - esbuild-windows-arm64: 0.15.13 - dev: true - /escape-html/1.0.3: + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - /esno/0.16.3: + esno@0.16.3: resolution: {integrity: sha512-6slSBEV1lMKcX13DBifvnDFpNno5WXhw4j/ff7RI0y51BZiDqEe5dNhhjhIQ3iCOQuzsm2MbVzmwqbN78BBhPg==} hasBin: true - dependencies: - tsx: 3.12.0 - dev: true - /esprima/4.0.1: + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - dev: true - /esutils/2.0.3: + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true - /etag/1.8.1: + etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - dev: true - /express-swagger-generator/1.1.17: + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + express-swagger-generator@1.1.17: resolution: {integrity: sha512-eKB2cR3TcvmSepkqjm9sFPqPAV7PQawyc3Df2p9/0vN4Q7LyBrLLpechH246YYJ1kIDPa8RresfhJeIHg5zS4A==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + express-swaggerize-ui@1.1.0: + resolution: {integrity: sha512-dDJuWV/GlISNYyKvFMa3EDr6sYzMgMrVRCt9o1kQxaIIKnmK1NJvaTzGbRIokIlGGHriIT6E2ztorRyRxLuOzA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + express-ws@5.0.2: + resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} + engines: {node: '>=4.5.0'} + peerDependencies: + express: ^4.0.0 || ^5.0.0-alpha.1 + + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} + engines: {node: '>= 0.10.0'} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + format-util@1.0.5: + resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + frac@1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + json-schema-ref-parser@5.1.3: + resolution: {integrity: sha512-CpDFlBwz/6la78hZxyB9FECVKGYjIIl3Ms3KLqFj99W7IIb7D00/RDgc++IGB4BBALl0QRhh5m4q5WNSopvLtQ==} + deprecated: Please switch to @apidevtools/json-schema-ref-parser + + jsonschema-draft4@1.0.0: + resolution: {integrity: sha512-sBV3UnQPRiyCTD6uzY/Oao2Yohv6KKgQq7zjPwjFHeR6scg/QSXnzDxdugsGaLQDmFUrUlTbMYdEE+72PizhGA==} + + jsonschema@1.2.4: + resolution: {integrity: sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==} + + jsonwebtoken@8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + logform@2.6.1: + resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==} + engines: {node: '>= 12.0.0'} + + long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multer@1.4.5-lts.1: + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} + + mysql2@2.3.3: + resolution: {integrity: sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==} + engines: {node: '>= 8.0'} + + named-placeholders@1.1.3: + resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} + engines: {node: '>=12.0.0'} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + nodemon@2.0.22: + resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} + engines: {node: '>=8.10.0'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + ono@4.0.11: + resolution: {integrity: sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + openapi-schema-validation@0.4.2: + resolution: {integrity: sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w==} + + opentype.js@0.7.3: + resolution: {integrity: sha512-Veui5vl2bLonFJ/SjX/WRWJT3SncgiZNnKUyahmXCc2sa1xXW15u3R/3TN5+JFiP7RsjK5ER4HA5eWaEmV9deA==} + hasBin: true + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + recursive-iterator@2.0.3: + resolution: {integrity: sha512-SqfNKjjTw7Lq3E2S6P8L5Ac7YFD91mbkzWRlxrWK4tWioJRKDhe1+PtWS0X0hkQNEzZDpSish0TTXAVM4cRUzQ==} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.0.0: + resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + simple-update-notifier@1.1.0: + resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} + engines: {node: '>=8.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + + ssf@0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + svg-captcha@1.4.0: + resolution: {integrity: sha512-/fkkhavXPE57zRRCjNqAP3txRCSncpMx3NnNZL7iEoyAtYwUjPhJxW6FQTQPG5UPEmCrbFoXS10C3YdJlW7PDg==} + engines: {node: '>=4.x'} + + swagger-methods@1.0.8: + resolution: {integrity: sha512-G6baCwuHA+C5jf4FNOrosE4XlmGsdjbOjdBK4yuiDDj/ro9uR4Srj3OR84oQMT8F3qKp00tYNv0YN730oTHPZA==} + deprecated: This package is no longer being maintained. + + swagger-parser@5.0.6: + resolution: {integrity: sha512-FdzCYFK11iGgrOpojlqUluU6SKThtzmu+5Get+6ValJR2TFwTnES1x4Fdfgy3C4/8VVXk4Va/WsqGlbyY/Os+A==} + + swagger-schema-official@2.0.0-bab6bed: + resolution: {integrity: sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA==} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsx@3.14.0: + resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} + hasBin: true + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validator@10.11.0: + resolution: {integrity: sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + winston-transport@4.8.0: + resolution: {integrity: sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA==} + engines: {node: '>= 12.0.0'} + + winston@3.15.0: + resolution: {integrity: sha512-RhruH2Cj0bV0WgNL+lOfoUBI4DVfdUNjVnJGVovWZmrcKtrFTTRzgXYK2O9cymSGjrERCtaAeHwMNnUWXlwZow==} + engines: {node: '>= 12.0.0'} + + wmf@1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + + word@0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xlsx@0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + z-schema@3.25.1: + resolution: {integrity: sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==} + hasBin: true + +snapshots: + + '@colors/colors@1.6.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@pureadmin/utils@1.18.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 18.19.61 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 18.19.61 + + '@types/express-serve-static-core@4.19.6': + dependencies: + '@types/node': 18.19.61 + '@types/qs': 6.9.16 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express-serve-static-core@5.0.1': + dependencies: + '@types/node': 18.19.61 + '@types/qs': 6.9.16 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express-ws@3.0.5': + dependencies: + '@types/express': 4.17.21 + '@types/express-serve-static-core': 5.0.1 + '@types/ws': 8.5.12 + + '@types/express@4.17.21': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.16 + '@types/serve-static': 1.15.7 + + '@types/http-errors@2.0.4': {} + + '@types/jsonwebtoken@8.5.9': + dependencies: + '@types/node': 18.19.61 + + '@types/mime@1.3.5': {} + + '@types/multer@1.4.12': + dependencies: + '@types/express': 4.17.21 + + '@types/node@18.19.61': + dependencies: + undici-types: 5.26.5 + + '@types/qs@6.9.16': {} + + '@types/range-parser@1.2.7': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 18.19.61 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 18.19.61 + '@types/send': 0.17.4 + + '@types/triple-beam@1.3.5': {} + + '@types/ws@8.5.12': + dependencies: + '@types/node': 18.19.61 + + '@types/xlsx@0.0.36': + dependencies: + xlsx: 0.18.5 + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + adler-32@1.3.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + append-field@1.0.0: {} + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + array-flatten@1.1.1: {} + + async@3.2.6: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-equal-constant-time@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytes@3.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + call-me-maybe@1.0.2: {} + + cfb@1.2.2: + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + codepage@1.15.0: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + commander@2.20.3: + optional: true + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + core-js@2.6.12: {} + + core-util-is@1.0.3: {} + + crc-32@1.2.2: {} + + create-require@1.1.1: {} + + dayjs@1.11.13: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-lazy-prop@2.0.0: {} + + denque@2.1.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + diff@4.0.2: {} + + doctrine-file@1.0.3: + dependencies: + doctrine: 2.1.0 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dotenv@16.4.5: {} + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + enabled@2.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + escape-html@1.0.3: {} + + esno@0.16.3: + dependencies: + tsx: 3.14.0 + + esprima@4.0.1: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + express-swagger-generator@1.1.17: dependencies: doctrine: 2.1.0 doctrine-file: 1.0.3 @@ -821,59 +1664,49 @@ packages: swagger-parser: 5.0.6 transitivePeerDependencies: - supports-color - dev: true - /express-swaggerize-ui/1.1.0: - resolution: {integrity: sha512-dDJuWV/GlISNYyKvFMa3EDr6sYzMgMrVRCt9o1kQxaIIKnmK1NJvaTzGbRIokIlGGHriIT6E2ztorRyRxLuOzA==} + express-swaggerize-ui@1.1.0: dependencies: - express: 4.18.2 + express: 4.21.1 transitivePeerDependencies: - supports-color - dev: true - /express-ws/5.0.2_express@4.18.2: - resolution: {integrity: sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==} - engines: {node: '>=4.5.0'} - peerDependencies: - express: ^4.0.0 || ^5.0.0-alpha.1 + express-ws@5.0.2(express@4.21.1): dependencies: - express: 4.18.2 - ws: 7.5.9 + express: 4.21.1 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /express/4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} + express@4.21.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.3 content-disposition: 0.5.4 - content-type: 1.0.4 - cookie: 0.5.0 + content-type: 1.0.5 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -881,25 +1714,17 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /fecha/4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - dev: true + fecha@4.2.3: {} - /fill-range/7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler/1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + finalhandler@1.3.1: dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -907,69 +1732,45 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /fn.name/1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - dev: true + fn.name@1.1.0: {} - /format-util/1.0.5: - resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} - dev: true + format-util@1.0.5: {} - /forwarded/0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /fresh/0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + frac@1.1.2: {} - /fs.realpath/1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fresh@0.5.2: {} - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fs.realpath@1.0.0: {} + + fsevents@2.3.3: optional: true - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + function-bind@1.1.2: {} - /generate-function/2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + generate-function@2.3.1: dependencies: is-property: 1.0.2 - dev: true - /get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + get-intrinsic@1.2.4: dependencies: - function-bind: 1.1.1 - has: 1.0.3 + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - dev: true + hasown: 2.0.2 - /get-tsconfig/4.2.0: - resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==} - dev: true + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 - /glob-parent/5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob/7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -977,154 +1778,99 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /has-flag/3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has-symbols/1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + gopd@1.0.1: dependencies: - function-bind: 1.1.1 - dev: true + get-intrinsic: 1.2.4 - /http-errors/2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + has-flag@3.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite/0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true - /ignore-by-default/1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - dev: true + ieee754@1.2.1: {} - /inflight/1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + ignore-by-default@1.0.1: {} + + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ipaddr.js/1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /is-arrayish/0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: true + is-arrayish@0.3.2: {} - /is-binary-path/2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: - binary-extensions: 2.2.0 - dev: true + binary-extensions: 2.3.0 - /is-docker/2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-extglob/2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-glob/4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-number/7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-property/1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - dev: true + is-property@1.0.2: {} - /is-stream/2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-wsl/2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /isarray/1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /js-yaml/3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /json-schema-ref-parser/5.1.3: - resolution: {integrity: sha512-CpDFlBwz/6la78hZxyB9FECVKGYjIIl3Ms3KLqFj99W7IIb7D00/RDgc++IGB4BBALl0QRhh5m4q5WNSopvLtQ==} + json-schema-ref-parser@5.1.3: dependencies: call-me-maybe: 1.0.2 - debug: 3.2.7 + debug: 3.2.7(supports-color@5.5.0) js-yaml: 3.14.1 ono: 4.0.11 transitivePeerDependencies: - supports-color - dev: true - /jsonschema-draft4/1.0.0: - resolution: {integrity: sha512-sBV3UnQPRiyCTD6uzY/Oao2Yohv6KKgQq7zjPwjFHeR6scg/QSXnzDxdugsGaLQDmFUrUlTbMYdEE+72PizhGA==} - dev: true + jsonschema-draft4@1.0.0: {} - /jsonschema/1.2.4: - resolution: {integrity: sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==} - dev: true + jsonschema@1.2.4: {} - /jsonwebtoken/8.5.1: - resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} - engines: {node: '>=4', npm: '>=1.4.28'} + jsonwebtoken@8.5.1: dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -1135,156 +1881,87 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 5.7.1 - dev: true + semver: 5.7.2 - /jwa/1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + jwa@1.4.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: true - /jws/3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.2: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - dev: true - /kuler/2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - dev: true + kuler@2.0.0: {} - /lodash.get/4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - dev: true + lodash.get@4.4.2: {} - /lodash.includes/4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - dev: true + lodash.includes@4.3.0: {} - /lodash.isboolean/3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - dev: true + lodash.isboolean@3.0.3: {} - /lodash.isequal/4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true + lodash.isequal@4.5.0: {} - /lodash.isinteger/4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - dev: true + lodash.isinteger@4.0.4: {} - /lodash.isnumber/3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - dev: true + lodash.isnumber@3.0.3: {} - /lodash.isplainobject/4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.isstring/4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: true + lodash.isstring@4.0.1: {} - /lodash.once/4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true + lodash.once@4.1.1: {} - /logform/2.4.2: - resolution: {integrity: sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==} + logform@2.6.1: dependencies: - '@colors/colors': 1.5.0 + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 fecha: 4.2.3 ms: 2.1.3 - safe-stable-stringify: 2.4.1 - triple-beam: 1.3.0 - dev: true + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 - /long/4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: true + long@4.0.0: {} - /lru-cache/4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: true - - /lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /make-error/1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + lru-cache@7.18.3: {} - /media-typer/0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + make-error@1.3.6: {} - /merge-descriptors/1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true + media-typer@0.3.0: {} - /methods/1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + merge-descriptors@1.0.3: {} - /mime-db/1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /mime-types/2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} + + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - /mime/1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true + mime@1.6.0: {} - /minimatch/3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimist/1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} - dev: true + minimist@1.2.8: {} - /mkdirp/0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: - minimist: 1.2.7 - dev: true + minimist: 1.2.8 - /ms/2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + ms@2.0.0: {} - /ms/2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /multer/1.4.5-lts.1: - resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} - engines: {node: '>= 6.0.0'} + multer@1.4.5-lts.1: dependencies: append-field: 1.0.0 busboy: 1.6.0 @@ -1293,184 +1970,108 @@ packages: object-assign: 4.1.1 type-is: 1.6.18 xtend: 4.0.2 - dev: true - /mysql2/2.3.3: - resolution: {integrity: sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==} - engines: {node: '>= 8.0'} + mysql2@2.3.3: dependencies: denque: 2.1.0 generate-function: 2.3.1 iconv-lite: 0.6.3 long: 4.0.0 lru-cache: 6.0.0 - named-placeholders: 1.1.2 + named-placeholders: 1.1.3 seq-queue: 0.0.5 sqlstring: 2.3.3 - dev: true - /named-placeholders/1.1.2: - resolution: {integrity: sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==} - engines: {node: '>=6.0.0'} + named-placeholders@1.1.3: dependencies: - lru-cache: 4.1.5 - dev: true + lru-cache: 7.18.3 - /negotiator/0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.3: {} - /nodemon/2.0.20: - resolution: {integrity: sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==} - engines: {node: '>=8.10.0'} - hasBin: true + nodemon@2.0.22: dependencies: - chokidar: 3.5.3 - debug: 3.2.7_supports-color@5.5.0 + chokidar: 3.6.0 + debug: 3.2.7(supports-color@5.5.0) ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 5.7.1 - simple-update-notifier: 1.0.7 + semver: 5.7.2 + simple-update-notifier: 1.1.0 supports-color: 5.5.0 - touch: 3.1.0 + touch: 3.1.1 undefsafe: 2.0.5 - dev: true - /nopt/1.0.10: - resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} - hasBin: true - dependencies: - abbrev: 1.1.1 - dev: true + normalize-path@3.0.0: {} - /normalize-path/3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-assign/4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-inspect@1.13.2: {} - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: true - - /on-finished/2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /once/1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /one-time/1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + one-time@1.0.0: dependencies: fn.name: 1.1.0 - dev: true - /ono/4.0.11: - resolution: {integrity: sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==} + ono@4.0.11: dependencies: format-util: 1.0.5 - dev: true - /open/8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /openapi-schema-validation/0.4.2: - resolution: {integrity: sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w==} + openapi-schema-validation@0.4.2: dependencies: jsonschema: 1.2.4 jsonschema-draft4: 1.0.0 swagger-schema-official: 2.0.0-bab6bed - dev: true - /opentype.js/0.7.3: - resolution: {integrity: sha512-Veui5vl2bLonFJ/SjX/WRWJT3SncgiZNnKUyahmXCc2sa1xXW15u3R/3TN5+JFiP7RsjK5ER4HA5eWaEmV9deA==} - hasBin: true + opentype.js@0.7.3: dependencies: tiny-inflate: 1.0.3 - dev: true - /parseurl/1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true + parseurl@1.3.3: {} - /path-is-absolute/1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-to-regexp/0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true + path-to-regexp@0.1.10: {} - /picomatch/2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /process-nextick-args/2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /proxy-addr/2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + process@0.11.10: {} + + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /pseudomap/1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true + pstree.remy@1.1.8: {} - /pstree.remy/1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - dev: true - - /qs/6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: - side-channel: 1.0.4 - dev: true + side-channel: 1.0.6 - /range-parser/1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body/2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -1479,58 +2080,42 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readdirp/3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /recursive-iterator/2.0.3: - resolution: {integrity: sha512-SqfNKjjTw7Lq3E2S6P8L5Ac7YFD91mbkzWRlxrWK4tWioJRKDhe1+PtWS0X0hkQNEzZDpSish0TTXAVM4cRUzQ==} - dev: true + recursive-iterator@2.0.3: {} - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + resolve-pkg-maps@1.0.0: {} - /safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.1.2: {} - /safe-stable-stringify/2.4.1: - resolution: {integrity: sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==} - engines: {node: '>=10'} - dev: true + safe-buffer@5.2.1: {} - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safe-stable-stringify@2.5.0: {} - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true + safer-buffer@2.1.2: {} - /semver/7.0.0: - resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} - hasBin: true - dev: true + semver@5.7.2: {} - /send/0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + semver@7.0.0: {} + + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -1547,119 +2132,87 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /seq-queue/0.0.5: - resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} - dev: true + seq-queue@0.0.5: {} - /serve-static/1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color - dev: true - /setprototypeof/1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true - - /side-channel/1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + set-function-length@1.2.2: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - object-inspect: 1.12.2 - dev: true + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 - /simple-swizzle/0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + setprototypeof@1.2.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 - dev: true - /simple-update-notifier/1.0.7: - resolution: {integrity: sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==} - engines: {node: '>=8.10.0'} + simple-update-notifier@1.1.0: dependencies: semver: 7.0.0 - dev: true - /source-map-support/0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /sprintf-js/1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sqlstring/2.3.3: - resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} - engines: {node: '>= 0.6'} - dev: true + sqlstring@2.3.3: {} - /stack-trace/0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - dev: true + ssf@0.11.2: + dependencies: + frac: 1.1.2 - /statuses/2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + stack-trace@0.0.10: {} - /streamsearch/1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: true + statuses@2.0.1: {} - /string_decoder/1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + streamsearch@1.1.0: {} + + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder/1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /svg-captcha/1.4.0: - resolution: {integrity: sha512-/fkkhavXPE57zRRCjNqAP3txRCSncpMx3NnNZL7iEoyAtYwUjPhJxW6FQTQPG5UPEmCrbFoXS10C3YdJlW7PDg==} - engines: {node: '>=4.x'} + svg-captcha@1.4.0: dependencies: opentype.js: 0.7.3 - dev: true - /swagger-methods/1.0.8: - resolution: {integrity: sha512-G6baCwuHA+C5jf4FNOrosE4XlmGsdjbOjdBK4yuiDDj/ro9uR4Srj3OR84oQMT8F3qKp00tYNv0YN730oTHPZA==} - dev: true + swagger-methods@1.0.8: {} - /swagger-parser/5.0.6: - resolution: {integrity: sha512-FdzCYFK11iGgrOpojlqUluU6SKThtzmu+5Get+6ValJR2TFwTnES1x4Fdfgy3C4/8VVXk4Va/WsqGlbyY/Os+A==} + swagger-parser@5.0.6: dependencies: call-me-maybe: 1.0.2 - debug: 3.2.7 + debug: 3.2.7(supports-color@5.5.0) json-schema-ref-parser: 5.1.3 ono: 4.0.11 openapi-schema-validation: 0.4.2 @@ -1668,199 +2221,119 @@ packages: z-schema: 3.25.1 transitivePeerDependencies: - supports-color - dev: true - /swagger-schema-official/2.0.0-bab6bed: - resolution: {integrity: sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA==} - dev: true + swagger-schema-official@2.0.0-bab6bed: {} - /text-hex/1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - dev: true + text-hex@1.0.0: {} - /tiny-inflate/1.0.3: - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - dev: true + tiny-inflate@1.0.3: {} - /to-regex-range/5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toidentifier/1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /touch/3.1.0: - resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} - hasBin: true - dependencies: - nopt: 1.0.10 - dev: true + touch@3.1.1: {} - /triple-beam/1.3.0: - resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} - dev: true + triple-beam@1.4.1: {} - /ts-node/10.9.1_cbe7ovvae6zqfnmtgctpgpys54: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@18.19.61)(typescript@4.9.5): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.11.9 - acorn: 8.8.1 - acorn-walk: 8.2.0 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.19.61 + acorn: 8.14.0 + acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.8.4 + typescript: 4.9.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsx/3.12.0: - resolution: {integrity: sha512-Z9drA8U1/jRJRWVTS2rOwdsCfkAShwfYBlE+6BVZsZChDsgYsEZZe44MGNNK6V6wQTTtu1kRNV57MsKRMJfdpg==} - hasBin: true + tsx@3.14.0: dependencies: - '@esbuild-kit/cjs-loader': 2.4.0 - '@esbuild-kit/core-utils': 3.0.0 - '@esbuild-kit/esm-loader': 2.5.0 + esbuild: 0.18.20 + get-tsconfig: 4.8.1 + source-map-support: 0.5.21 optionalDependencies: - fsevents: 2.3.2 - dev: true + fsevents: 2.3.3 - /type-is/1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typedarray/0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true + typedarray@0.0.6: {} - /typescript/4.8.4: - resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + typescript@4.9.5: {} - /undefsafe/2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - dev: true + undefsafe@2.0.5: {} - /unpipe/1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + undici-types@5.26.5: {} - /util-deprecate/1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + unpipe@1.0.0: {} - /utils-merge/1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + util-deprecate@1.0.2: {} - /v8-compile-cache-lib/3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + utils-merge@1.0.1: {} - /validator/10.11.0: - resolution: {integrity: sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==} - engines: {node: '>= 0.10'} - dev: true + v8-compile-cache-lib@3.0.1: {} - /vary/1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + validator@10.11.0: {} - /winston-transport/4.5.0: - resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} - engines: {node: '>= 6.4.0'} + vary@1.1.2: {} + + winston-transport@4.8.0: dependencies: - logform: 2.4.2 - readable-stream: 3.6.0 - triple-beam: 1.3.0 - dev: true + logform: 2.6.1 + readable-stream: 4.5.2 + triple-beam: 1.4.1 - /winston/3.8.2: - resolution: {integrity: sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==} - engines: {node: '>= 12.0.0'} + winston@3.15.0: dependencies: - '@colors/colors': 1.5.0 + '@colors/colors': 1.6.0 '@dabh/diagnostics': 2.0.3 - async: 3.2.4 + async: 3.2.6 is-stream: 2.0.1 - logform: 2.4.2 + logform: 2.6.1 one-time: 1.0.0 - readable-stream: 3.6.0 - safe-stable-stringify: 2.4.1 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 stack-trace: 0.0.10 - triple-beam: 1.3.0 - winston-transport: 4.5.0 - dev: true + triple-beam: 1.4.1 + winston-transport: 4.8.0 - /wrappy/1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wmf@1.0.2: {} - /ws/7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + word@0.3.0: {} - /xtend/4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + wrappy@1.0.2: {} - /yallist/2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true + ws@7.5.10: {} - /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + xlsx@0.18.5: + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 - /yn/3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + xtend@4.0.2: {} - /z-schema/3.25.1: - resolution: {integrity: sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==} - hasBin: true + yallist@4.0.0: {} + + yn@3.1.1: {} + + z-schema@3.25.1: dependencies: core-js: 2.6.12 lodash.get: 4.4.2 @@ -1868,4 +2341,3 @@ packages: validator: 10.11.0 optionalDependencies: commander: 2.20.3 - dev: true diff --git a/public/index.html b/public/index.html index c349003..a514997 100644 --- a/public/index.html +++ b/public/index.html @@ -37,7 +37,7 @@ window.onload = function () { // Begin Swagger UI call region const ui = SwaggerUIBundle({ - url: "http://localhost:3000/swagger.json", + url: "http://localhost:3001/swagger.json", dom_id: '#swagger-ui', deepLinking: true, presets: [ diff --git a/src/config/index.ts b/src/config/index.ts index 2b20412..e123f7a 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -15,7 +15,7 @@ export default { options: { swaggerDefinition: { info: { - description: "pure-admin官方后端", + description: "HOUKONG", title: "Swagger", version: require("../../package.json").version, }, @@ -51,10 +51,11 @@ export default { concurrency: parseInt(process.env.AGENDA_CONCURRENCY, 10), }, mysql: { - host: "localhost", + host: "43.156.106.134", charset: "utf8_general_ci", - user: "root", - password: "123456789", + user: "houkong", + password: "P@55w0rd", + database: "houkong", }, mongodb: {}, sqlite: {}, diff --git a/src/models/mysql/index.ts b/src/models/mysql/index.ts index f9edf79..91eeed2 100644 --- a/src/models/mysql/index.ts +++ b/src/models/mysql/index.ts @@ -1,5 +1,61 @@ /** 创建用户表 */ -const user = - "CREATE TABLE if not EXISTS users(id int PRIMARY key auto_increment,username varchar(32),password varchar(32),time DATETIME)"; +const user = ` + CREATE TABLE IF NOT EXISTS users ( + id INT PRIMARY KEY AUTO_INCREMENT, + username VARCHAR(100) NOT NULL COMMENT '用户名', + userid VARCHAR(100) NOT NULL COMMENT '企业微信用户ID', + name VARCHAR(100) NOT NULL COMMENT '用户名称', + password VARCHAR(100) NOT NULL COMMENT '密码', + department VARCHAR(255) COMMENT '部门', + position VARCHAR(100) COMMENT '职位', + mobile VARCHAR(20) COMMENT '手机号', + gender VARCHAR(10) COMMENT '性别', + email VARCHAR(100) COMMENT '邮箱', + avatar VARCHAR(255) COMMENT '头像URL', + status TINYINT DEFAULT 1 COMMENT '状态 1:启用 0:禁用', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表' +`; + +/** 创建角色表 */ +const role = ` + CREATE TABLE IF NOT EXISTS roles ( + id INT PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(50) NOT NULL COMMENT '角色名称', + code VARCHAR(50) NOT NULL COMMENT '角色编码', + status TINYINT DEFAULT 1 COMMENT '状态 1:启用 0:禁用', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY idx_code (code) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表' +`; + +/** 创建用户角色关联表 */ +const userRole = ` + CREATE TABLE IF NOT EXISTS user_roles ( + id INT PRIMARY KEY AUTO_INCREMENT, + user_id INT NOT NULL COMMENT '用户ID', + role_id INT NOT NULL COMMENT '角色ID', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + KEY idx_user_id (user_id), + KEY idx_role_id (role_id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表' +`; + +/** 创建操作日志表 */ +const operationLogs = ` + CREATE TABLE IF NOT EXISTS operation_logs ( + id INT PRIMARY KEY AUTO_INCREMENT, + user_id INT NOT NULL, + username VARCHAR(255), + action VARCHAR(255) NOT NULL COMMENT '操作类型:新增、修改、删除等', + module VARCHAR(255) NOT NULL COMMENT '操作模块:用户管理、角色管理等', + description TEXT COMMENT '操作详细描述', + ip VARCHAR(50) COMMENT '操作IP', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表' +`; + +export { operationLogs, role, user, userRole }; -export { user }; diff --git a/src/router/excel.ts b/src/router/excel.ts new file mode 100644 index 0000000..d042a25 --- /dev/null +++ b/src/router/excel.ts @@ -0,0 +1,139 @@ +import { createHash } from "crypto"; +import { Request, Response } from "express"; +import * as path from 'path'; +import { promisify } from 'util'; +import * as xlsx from 'xlsx'; +import { connection } from "../utils/mysql"; + +const query = promisify(connection.query).bind(connection); +const beginTransaction = promisify(connection.beginTransaction).bind(connection); +const commit = promisify(connection.commit).bind(connection); +const rollback = promisify(connection.rollback).bind(connection); + +export async function importUsersFromLocalExcel(req: Request, res: Response) { + try { + const filePath = path.join(__dirname, '../../data/teachers.xlsx'); + console.log('Excel文件路径:', filePath); + + const workbook = xlsx.readFile(filePath); + const worksheet = workbook.Sheets[workbook.SheetNames[0]]; + + // 使用之前成功的格式 + const rows = xlsx.utils.sheet_to_json<{ + A: number; // 序号 + B: string; // 姓名 + C: string; // 工号 + D: string; // 密码 + E: string; // 角色 + F: string; // 部门 + }>(worksheet, { + range: 1, // 从第二行开始读取 + header: 'A' // 使用字母作为键 + }); + + console.log('读取到的数据行数:', rows.length); + console.log('第一行数据示例:', rows[0]); + + await beginTransaction(); + + try { + let successCount = 0; + let errorCount = 0; + const errors: string[] = []; + + // 获取默认教师角色ID + const DEFAULT_ROLE_ID = 2; // 教師角色ID + const roleMap = new Map(); + + for (const row of rows) { + try { + // 验证必要字段 + if (!row.B || !row.C || !row.D) { + throw new Error(`数据不完整: 姓名=${row.B}, 工号=${row.C}, 密码=${row.D}`); + } + + // 获取角色ID + let roleId = DEFAULT_ROLE_ID; // 默认使用教师角色 + if (row.E) { + if (!roleMap.has(row.E)) { + const existingRoles: any[] = await query( + "SELECT id FROM roles WHERE name = ?", + [row.E] + ); + if (existingRoles.length > 0) { + roleMap.set(row.E, existingRoles[0].id); + roleId = existingRoles[0].id; + } else { + console.log(`找不到角色 ${row.E},使用默认教师角色`); + roleMap.set(row.E, DEFAULT_ROLE_ID); + } + } else { + roleId = roleMap.get(row.E)!; + } + } + + const hashedPassword = createHash("md5") + .update(row.D) + .digest("hex"); + + // 插入用户 + const result: any = await query( + `INSERT INTO users ( + username, name, password, department, + position, status + ) VALUES (?, ?, ?, ?, ?, 1)`, + [ + row.C, // username (工号) + row.B, // name (姓名) + hashedPassword, // password + row.F || '', // department + row.E || '教師', // position + ] + ); + + // 插入用户角色关联 + await query( + "INSERT INTO user_roles (user_id, role_id) VALUES (?, ?)", + [result.insertId, roleId] + ); + + successCount++; + } catch (error) { + console.error('处理用户错误:', error); + errorCount++; + errors.push(`行 ${successCount + errorCount}: ${error.message}`); + } + } + + await commit(); + console.log('事务提交成功'); + + res.json({ + success: true, + data: { + message: "导入完成", + stats: { + total: rows.length, + success: successCount, + error: errorCount + }, + errors: errors + } + }); + + } catch (error) { + console.error('处理数据错误:', error); + await rollback(); + throw error; + } + } catch (error) { + console.error('导入用户错误:', error); + res.json({ + success: false, + data: { + message: "导入失败", + error: error.message + } + }); + } +} \ No newline at end of file diff --git a/src/router/http.ts b/src/router/http.ts index 4f2b124..a89fc2b 100644 --- a/src/router/http.ts +++ b/src/router/http.ts @@ -1,14 +1,15 @@ -import * as fs from "fs"; -import secret from "../config"; -import * as mysql from "mysql2"; -import * as jwt from "jsonwebtoken"; import { createHash } from "crypto"; +import { Request, Response } from "express"; +import * as fs from "fs"; +import * as jwt from "jsonwebtoken"; +import * as mysql from "mysql2"; +import { OkPacket } from 'mysql2'; +import { createMathExpr } from "svg-captcha"; +import secret from "../config"; import Logger from "../loaders/logger"; import { Message } from "../utils/enums"; -import getFormatDate from "../utils/date"; import { connection } from "../utils/mysql"; -import { Request, Response } from "express"; -import { createMathExpr } from "svg-captcha"; +import { logOperation, ModuleType, OperationType } from "../utils/operationLog"; const utils = require("@pureadmin/utils"); @@ -56,78 +57,153 @@ let expiresIn = 60000; */ const login = async (req: Request, res: Response) => { - // const { username, password, verify } = req.body; - // if (generateVerify !== verify) return res.json({ - // success: false, - // data: { - // message: Message[0]; - // } - // }) const { username, password } = req.body; - let sql: string = - "select * from users where username=" + "'" + username + "'"; - connection.query(sql, async function (err, data: any) { - if (data.length == 0) { + + console.log('Login attempt:', { username, password }); + + let sql = ` + SELECT u.*, GROUP_CONCAT(r.code) as roles + FROM users u + LEFT JOIN user_roles ur ON u.id = ur.user_id + LEFT JOIN roles r ON ur.role_id = r.id + WHERE u.username = ? AND u.status = 1 + GROUP BY u.id + `; + + connection.query(sql, [username], async function (err, data: any) { + // console.log('Query result:', { err, data }); + + if (err) { + // Logger.error(err); + return res.json({ + success: false, + data: { message: "数据库查询错误" } + }); + } + + if (data.length === 0) { + // 记录登录失败日志 + logOperation({ + userId: 0, + username: username, + action: OperationType.LOGIN, + module: ModuleType.AUTH, + description: `用户登录失败:用户不存在 (${username})`, + ip: req.ip || '' + }); + await res.json({ success: false, - data: { message: Message[1] }, + data: { message: Message[1] } // 用户不存在 }); } else { - if ( - createHash("md5").update(password).digest("hex") == data[0].password - ) { - const accessToken = jwt.sign( - { - accountId: data[0].id, - }, - secret.jwtSecret, - { expiresIn } - ); - if (username === "admin") { - await res.json({ - success: true, - data: { - message: Message[2], - username, - // 这里模拟角色,根据自己需求修改 - roles: ["admin"], - accessToken, - // 这里模拟刷新token,根据自己需求修改 - refreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh", - expires: new Date(new Date()).getTime() + expiresIn, - // 这个标识是真实后端返回的接口,只是为了演示 - pureAdminBackend: - "这个标识是pure-admin-backend真实后端返回的接口,只是为了演示", - }, - }); - } else { - await res.json({ - success: true, - data: { - message: Message[2], - username, - // 这里模拟角色,根据自己需求修改 - roles: ["common"], - accessToken, - // 这里模拟刷新token,根据自己需求修改 - refreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh", - expires: new Date(new Date()).getTime() + expiresIn, - // 这个标识是真实后端返回的接口,只是为了演示 - pureAdminBackend: - "这个标识是pure-admin-backend真实后端返回的接口,只是为了演示", - }, - }); - } - } else { - await res.json({ + const user = data[0]; + + // 验证密码 + const hashedPassword = createHash("md5").update(password).digest("hex"); + if (hashedPassword !== user.password) { + // 记录登录失败日志 + logOperation({ + userId: 0, + username: username, + action: OperationType.LOGIN, + module: ModuleType.AUTH, + description: `用户登录失败:密码错误 (${username})`, + ip: req.ip || '' + }); + return res.json({ success: false, - data: { message: Message[3] }, + data: { message: "密码错误" } }); } + + const accessToken = jwt.sign( + { + id: user.id, // 用户ID + username: user.username, // 用户名 + name: user.name + }, + secret.jwtSecret, + { expiresIn } + ); + // 记录登录成功日志 + logOperation({ + userId: user.id, + username: user.username, + action: OperationType.LOGIN, + module: ModuleType.AUTH, + description: `用户登录成功 (${username})`, + ip: req.ip || '' + }); + await res.json({ + success: true, + data: { + message: Message[2], + username: user.name, // 返回 name 字段作为用户名 + userid: user.userid, // 返回 userid + roles: user.roles ? user.roles.split(',') : [], + accessToken, + refreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh", + expires: new Date(new Date()).getTime() + expiresIn, + department: user.department, + position: user.position, + mobile: user.mobile, + email: user.email, + avatar: user.avatar + } + }); } }); }; +// 刷新 token +const refreshToken = async (req: Request, res: Response) => { + const { refreshToken } = req.body; + + try { + // 验证 refresh token + const decoded = jwt.verify(refreshToken, secret.jwtSecret) as any; + + // 查询用户是否还有效 + const sql = `SELECT * FROM users WHERE id = ? AND status = 1`; + + connection.query(sql, [decoded.id], async function (err, data: any) { + if (err || data.length === 0) { + return res.json({ + success: false, + data: { message: "用户不存在或已禁用" } + }); + } + const user = data[0]; + // 生成新的 access token + const accessToken = jwt.sign( + { + id: user.id, + username: user.username, + name: user.name + }, + secret.jwtSecret, + { expiresIn } + ); + + res.json({ + success: true, + data: { + accessToken, + refreshToken: accessToken, // 简单起见,使用相同的 token + expires: new Date(new Date()).getTime() + expiresIn + } + }); + }); + } catch (error) { + res.json({ + success: false, + data: { + message: "refresh token 无效" + } + }); + } +}; // /** // * @typedef Register // * @property {string} username.required - 用户名 @@ -153,58 +229,159 @@ const login = async (req: Request, res: Response) => { * @headers {string} 200.X-Expires-After * @security JWT */ - const register = async (req: Request, res: Response) => { - // const { username, password, verify } = req.body; - const { username, password } = req.body; - // if (generateVerify !== verify) - // return res.json({ - // success: false, - // data: { message: Message[0] }, - // }); - if (password.length < 6) + const userData = req.body; + + if (userData.password.length < 6) return res.json({ success: false, data: { message: Message[4] }, }); - let sql: string = - "select * from users where username=" + "'" + username + "'"; - connection.query(sql, async (err, data: any) => { + + let sql = "SELECT * FROM users WHERE username = ?"; + + connection.query(sql, [userData.username], async (err, data: any) => { + if (err) { + Logger.error(err); + return res.json({ + success: false, + data: { message: "数据库查询错误" } + }); + } + if (data.length > 0) { await res.json({ success: false, data: { message: Message[5] }, }); } else { - let time = await getFormatDate(); - let sql: string = - "insert into users (username,password,time) value(" + - "'" + - username + - "'" + - "," + - "'" + - createHash("md5").update(password).digest("hex") + - "'" + - "," + - "'" + - time + - "'" + - ")"; - connection.query(sql, async function (err) { + const insertUserSql = ` + INSERT INTO users ( + username, + userid, + name, + password, + department, + position, + mobile, + gender, + email, + avatar, + status, + created_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, NOW()) + `; + + const values = [ + userData.username, + userData.userid || null, + userData.name || userData.username, + createHash("md5").update(userData.password).digest("hex"), + userData.department || null, + userData.position || null, + userData.mobile || null, + userData.gender || null, + userData.email || null, + userData.avatar || null + ]; + + connection.query(insertUserSql, values, async function (err, result: OkPacket) { // 指定 result 类型为 OkPacket if (err) { Logger.error(err); + return res.json({ + success: false, + data: { message: "注册失败" } + }); + } + + // 处理角色关联 + if (userData.roles && userData.roles.length > 0) { + const userId = result.insertId; // 现在 TypeScript 知道 result 有 insertId 属性 + const insertRolesSql = ` + INSERT INTO user_roles (user_id, role_id) + SELECT ?, id FROM roles WHERE code IN (?) + `; + + connection.query(insertRolesSql, [userId, userData.roles], function(err) { + if (err) { + Logger.error(err); + return res.json({ + success: false, + data: { message: "添加用户角色失败" } + }); + } + + res.json({ + success: true, + data: { message: Message[6] } + }); + }); } else { - await res.json({ + res.json({ success: true, - data: { message: Message[6] }, + data: { message: Message[6] } }); } }); } }); }; +// 添加获取用户列表的处理函数 +const getUserList = async (req: Request, res: Response) => { + try { + const authHeader = req.get("Authorization"); + // console.log('收到的 Authorization header:', authHeader); // 添加日志看看请求头 + if (!authHeader) { + return res.status(401).json({ + success: false, + data: { message: "未登录" } + }); + } + + // 直接查询用户列表,不做 token 验证 + const sql = ` + SELECT + u.*, + GROUP_CONCAT(r.code) as roles + FROM users u + LEFT JOIN user_roles ur ON u.id = ur.user_id + LEFT JOIN roles r ON ur.role_id = r.id + GROUP BY u.id + `; + + connection.query(sql, (err, data: any) => { + if (err) { + // Logger.error('查询用户列表错误:', err); + return res.json({ + success: false, + data: { message: "获取用户列表失败" } + }); + } + + // console.log('查询到的用户数据:', data); // 添加日志看看查询结果 + + const users = data.map(user => ({ + ...user, + roles: user.roles ? user.roles.split(',') : [] + })); + + res.json({ + success: true, + data: { + users + } + }); + }); + + } catch (error) { + // console.error('获取用户列表错误:', error); + return res.status(401).json({ + success: false, + data: { message: "获取用户列表失败" } + }); + } +}; /** * @typedef UpdateList * @property {string} username.required - 用户名 - eg: admin @@ -223,37 +400,135 @@ const register = async (req: Request, res: Response) => { const updateList = async (req: Request, res: Response) => { const { id } = req.params; - const { username } = req.body; - let payload = null; + const userData = req.body; // 获取所有更新字段 + try { + // 验证 token const authorizationHeader = req.get("Authorization") as string; const accessToken = authorizationHeader.substr("Bearer ".length); - payload = jwt.verify(accessToken, secret.jwtSecret); - } catch (error) { - return res.status(401).end(); - } - let modifySql: string = "UPDATE users SET username = ? WHERE id = ?"; - let sql: string = "select * from users where id=" + id; - connection.query(sql, function (err, data) { - connection.query(sql, function (err) { + const payload = jwt.verify(accessToken, secret.jwtSecret); + + // 构建更新字段 + const updateFields = []; + const updateValues = []; + + // 检查并添加每个可更新字段 + if (userData.username) { + updateFields.push("username = ?"); + updateValues.push(userData.username); + } + if (userData.name) { + updateFields.push("name = ?"); + updateValues.push(userData.name); + } + if (userData.userid) { + updateFields.push("userid = ?"); + updateValues.push(userData.userid); + } + if (userData.department) { + updateFields.push("department = ?"); + updateValues.push(userData.department); + } + if (userData.position) { + updateFields.push("position = ?"); + updateValues.push(userData.position); + } + if (userData.mobile) { + updateFields.push("mobile = ?"); + updateValues.push(userData.mobile); + } + if (userData.gender) { + updateFields.push("gender = ?"); + updateValues.push(userData.gender); + } + if (userData.email) { + updateFields.push("email = ?"); + updateValues.push(userData.email); + } + if (userData.avatar) { + updateFields.push("avatar = ?"); + updateValues.push(userData.avatar); + } + if (userData.status !== undefined) { + updateFields.push("status = ?"); + updateValues.push(userData.status); + } + + // 添加 ID 到 values 数组 + updateValues.push(id); + + const updateSql = ` + UPDATE users + SET ${updateFields.join(", ")} + WHERE id = ? + `; + + connection.query(updateSql, updateValues, async function(err) { if (err) { Logger.error(err); - } else { - let modifyParams: string[] = [username, id]; - // 改 - connection.query(modifySql, modifyParams, async function (err, result) { + return res.json({ + success: false, + data: { message: "更新用户失败" } + }); + } + // 直接使用更新的用户信息记录日志 + logOperation({ + userId: Number(id), // 转换为数字 + username: userData.username || userData.name, // 使用更新的用户信息 + action: OperationType.UPDATE, + module: ModuleType.USER, + description: `更新用户信息:ID=${id}, 字段:${updateFields.join(', ')}`, + ip: req.ip || '' + }); + + // 如果有角色信息,更新用户角色 + if (userData.roles && userData.roles.length > 0) { + // 先删除原有角色 + const deleteRolesSql = "DELETE FROM user_roles WHERE user_id = ?"; + connection.query(deleteRolesSql, [id], async function(err) { if (err) { Logger.error(err); - } else { - await res.json({ - success: true, - data: { message: Message[7] }, + return res.json({ + success: false, + data: { message: "更新用户角色失败" } }); } + + // 插入新角色 + const insertRolesSql = ` + INSERT INTO user_roles (user_id, role_id) + SELECT ?, id FROM roles WHERE code IN (?) + `; + + connection.query(insertRolesSql, [id, userData.roles], function(err) { + if (err) { + Logger.error(err); + return res.json({ + success: false, + data: { message: "更新用户角色失败" } + }); + } + + res.json({ + success: true, + data: { message: Message[7] } + }); + }); + }); + } else { + res.json({ + success: true, + data: { message: Message[7] } }); } }); - }); + } catch (error) { + Logger.error(error); + return res.status(401).json({ + success: false, + data: { message: "未授权" } + }); + } }; /** @@ -273,27 +548,126 @@ const updateList = async (req: Request, res: Response) => { const deleteList = async (req: Request, res: Response) => { const { id } = req.params; - let payload = null; + try { + // 验证 token const authorizationHeader = req.get("Authorization") as string; const accessToken = authorizationHeader.substr("Bearer ".length); - payload = jwt.verify(accessToken, secret.jwtSecret); - } catch (error) { - return res.status(401).end(); - } - let sql: string = "DELETE FROM users where id=" + "'" + id + "'"; - connection.query(sql, async function (err, data) { - if (err) { - console.log(err); - } else { - await res.json({ - success: true, - data: { message: Message[8] }, - }); - } - }); -}; + const payload = jwt.verify(accessToken, secret.jwtSecret); + // 开始事务 + connection.beginTransaction(function(err) { + if (err) { + Logger.error(err); + return res.json({ + success: false, + data: { message: "删除失败" } + }); + } + + // 先删除用户角色关联 + const deleteRolesSql = "DELETE FROM user_roles WHERE user_id = ?"; + connection.query(deleteRolesSql, [id], function(err) { + if (err) { + return connection.rollback(function() { + Logger.error(err); + res.json({ + success: false, + data: { message: "删除用户角色失败" } + }); + }); + } + + // 删除用户 + const deleteUserSql = "DELETE FROM users WHERE id = ?"; + connection.query(deleteUserSql, [id], function(err) { + if (err) { + return connection.rollback(function() { + Logger.error(err); + res.json({ + success: false, + data: { message: "删除用户失败" } + }); + }); + } + + // 提交事务 + connection.commit(function(err) { + if (err) { + return connection.rollback(function() { + Logger.error(err); + res.json({ + success: false, + data: { message: "删除失败" } + }); + }); + } + res.json({ + success: true, + data: { message: Message[8] } + }); + }); + }); + }); + }); + } catch (error) { + Logger.error(error); + return res.status(401).json({ + success: false, + data: { message: "未授权" } + }); + } +}; +/** + * @route GET /api/roles + * @summary 获取角色列表 + * @group 角色管理 + * @returns {object} 200 - 角色列表 + * @security JWT + */ +const getRoleList = async (req: Request, res: Response) => { + try { + const authorizationHeader = req.get("Authorization"); + const accessToken = authorizationHeader.replace("Bearer ", ""); + const decoded = jwt.verify(accessToken, secret.jwtSecret); + console.log('开始查询角色数据'); // 添加日志 + + // 查询所有角色 + const sql = ` + SELECT r.id, r.name, r.code, r.status, r.created_at + FROM roles r + WHERE r.status = 1 + ORDER BY r.id ASC + `; + + console.log('执行 SQL:', sql); // 添加日志 + + connection.query(sql, function(err, roles) { + if (err) { + console.error('数据库查询错误:', err); + return res.json({ + success: false, + data: { message: "获取角色列表失败" } + }); + } + + console.log('查询到的角色:', roles); // 添加日志 + + // 立即返回结果 + return res.json({ + success: true, + data: { roles } + }); + }); + + } catch (error) { + console.error('获取角色列表错误:', error); + return res.status(401).json({ + success: false, + data: { message: "未授权" } + }); + } +}; /** * @typedef SearchPage * @property {integer} page.required - 第几页 - eg: 1 @@ -457,14 +831,38 @@ const captcha = async (req: Request, res: Response) => { res.type("svg"); // 响应的类型 res.json({ success: true, data: { text: create.text, svg: create.data } }); }; - -export { - login, - register, - updateList, - deleteList, - searchPage, - searchVague, - upload, - captcha, +// 添加获取动态路由的处理函数 +const getAsyncRoutes = async (req: Request, res: Response) => { + // 这里返回你的动态路由配置 + res.json({ + success: true, + data: { + // 示例路由配置 + routes: [ + { + path: "/permission", + meta: { + title: "权限管理", + icon: "lollipop" + }, + children: [ + { + path: "/permission/page/index", + name: "PermissionPage", + meta: { + title: "页面权限", + roles: ["admin"] + } + } + ] + } + // ... 其他路由配置 + ] + } + }); }; +export { + captcha, deleteList, getAsyncRoutes, getRoleList, getUserList, login, refreshToken, register, searchPage, + searchVague, updateList, upload +}; + diff --git a/src/server.ts b/src/server.ts index 6cfe34e..4a00230 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,25 +1,29 @@ import app from "./app"; // import * as open from "open"; -import config from "./config"; import * as dayjs from "dayjs"; import * as multer from "multer"; -import { user } from "./models/mysql"; +import config from "./config"; import Logger from "./loaders/logger"; -import { queryTable } from "./utils/mysql"; +import { importUsersFromLocalExcel } from "./router/excel"; +import { getRoleList, getUserList } from "./router/http"; +// import { queryTable } from "./utils/mysql"; const expressSwagger = require("express-swagger-generator")(app); expressSwagger(config.options); - -queryTable(user); +// 初始化数据库表 +// queryTable(user); +// queryTable(role); +// queryTable(userRole); +// queryTable(operationLogs); import { + captcha, + deleteList, login, register, - updateList, - deleteList, searchPage, searchVague, + updateList, upload, - captcha, } from "./router/http"; app.post("/login", (req, res) => { @@ -46,11 +50,27 @@ app.post("/searchVague", (req, res) => { searchVague(req, res); }); +// 添加获取用户列表路由 +app.get("/user/list", (req, res) => { + getUserList(req, res); +}); // 新建存放临时文件的文件夹 const upload_tmp = multer({ dest: "upload_tmp/" }); app.post("/upload", upload_tmp.any(), (req, res) => { upload(req, res); }); +// 添加获取角色列表路由 +app.get("/roles", (req, res) => { // 注意这里的路径 + console.log("收到获取角色列表请求"); // 添加日志 + getRoleList(req, res); +}); + + +// Excel导入用户路由 +app.post("/api/excel/import-local", (req, res) => { + importUsersFromLocalExcel(req, res); +}); + app.get("/captcha", (req, res) => { captcha(req, res); diff --git a/src/utils/mysql.ts b/src/utils/mysql.ts index 6fa6a19..d622af8 100644 --- a/src/utils/mysql.ts +++ b/src/utils/mysql.ts @@ -4,7 +4,7 @@ import Logger from "../loaders/logger"; /** user数据库 */ export const connection = mysql.createConnection( - Object.assign({ database: "user" }, mysqlConfig.mysql) + Object.assign({ database: "houkong" }, mysqlConfig.mysql) ); export function queryTable(s: string): void { diff --git a/src/utils/operationLog.ts b/src/utils/operationLog.ts new file mode 100644 index 0000000..ef511bb --- /dev/null +++ b/src/utils/operationLog.ts @@ -0,0 +1,51 @@ +import { connection } from "./mysql"; +import Logger from "../loaders/logger"; + +// 定义操作类型 +export enum OperationType { + CREATE = 'CREATE', + UPDATE = 'UPDATE', + DELETE = 'DELETE', + QUERY = 'QUERY', + LOGIN = 'LOGIN', + UPLOAD = 'UPLOAD' +} + +// 定义模块类型 +export enum ModuleType { + USER = '用户管理', + ROLE = '角色管理', + FILE = '文件管理', + AUTH = '认证管理' +} + +// 记录操作日志 +export const logOperation = (params: { + userId: number; + username: string; + action: OperationType; + module: ModuleType; + description: string; + ip: string; +}) => { + const sql = ` + INSERT INTO operation_logs + (user_id, username, action, module, description, ip) + VALUES (?, ?, ?, ?, ?, ?) + `; + + const values = [ + params.userId, + params.username, + params.action, + params.module, + params.description, + params.ip + ]; + + connection.query(sql, values, (err) => { + if (err) { + Logger.error('记录操作日志失败:', err); + } + }); +}; \ No newline at end of file