├── .env ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src ├── api │ └── ai.ts ├── configs │ ├── db.ts │ └── query.ts ├── index.ts └── middlewares │ └── jsonResponse.ts └── tsconfig.json /.env: -------------------------------------------------------------------------------- 1 | # Do not share your OpenAI API key with anyone! It should remain a secret. 2 | # OPENAI_API_KEY=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 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | dist/ 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # openai-server 2 | 3 | #### chatGTP接口开发(采用express+ts开发opeanai接口,仅后端代码,前端代码请前往openai-public) 4 | ##### 示例:https://kiritosa.com/ai 5 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openai-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@cspotcode/source-map-support": { 8 | "version": "0.8.1", 9 | "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 10 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 11 | "dev": true, 12 | "requires": { 13 | "@jridgewell/trace-mapping": "0.3.9" 14 | } 15 | }, 16 | "@jridgewell/resolve-uri": { 17 | "version": "3.1.0", 18 | "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 19 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 20 | "dev": true 21 | }, 22 | "@jridgewell/sourcemap-codec": { 23 | "version": "1.4.14", 24 | "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 25 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 26 | "dev": true 27 | }, 28 | "@jridgewell/trace-mapping": { 29 | "version": "0.3.9", 30 | "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 31 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 32 | "dev": true, 33 | "requires": { 34 | "@jridgewell/resolve-uri": "^3.0.3", 35 | "@jridgewell/sourcemap-codec": "^1.4.10" 36 | } 37 | }, 38 | "@tsconfig/node10": { 39 | "version": "1.0.9", 40 | "resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.9.tgz", 41 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 42 | "dev": true 43 | }, 44 | "@tsconfig/node12": { 45 | "version": "1.0.11", 46 | "resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz", 47 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 48 | "dev": true 49 | }, 50 | "@tsconfig/node14": { 51 | "version": "1.0.3", 52 | "resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz", 53 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 54 | "dev": true 55 | }, 56 | "@tsconfig/node16": { 57 | "version": "1.0.3", 58 | "resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.3.tgz", 59 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 60 | "dev": true 61 | }, 62 | "@types/body-parser": { 63 | "version": "1.19.2", 64 | "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz", 65 | "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", 66 | "dev": true, 67 | "requires": { 68 | "@types/connect": "*", 69 | "@types/node": "*" 70 | } 71 | }, 72 | "@types/connect": { 73 | "version": "3.4.35", 74 | "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz", 75 | "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", 76 | "dev": true, 77 | "requires": { 78 | "@types/node": "*" 79 | } 80 | }, 81 | "@types/cookie-parser": { 82 | "version": "1.4.3", 83 | "resolved": "https://registry.npmmirror.com/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", 84 | "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", 85 | "dev": true, 86 | "requires": { 87 | "@types/express": "*" 88 | } 89 | }, 90 | "@types/express": { 91 | "version": "4.17.17", 92 | "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.17.tgz", 93 | "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", 94 | "dev": true, 95 | "requires": { 96 | "@types/body-parser": "*", 97 | "@types/express-serve-static-core": "^4.17.33", 98 | "@types/qs": "*", 99 | "@types/serve-static": "*" 100 | } 101 | }, 102 | "@types/express-serve-static-core": { 103 | "version": "4.17.33", 104 | "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", 105 | "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", 106 | "dev": true, 107 | "requires": { 108 | "@types/node": "*", 109 | "@types/qs": "*", 110 | "@types/range-parser": "*" 111 | } 112 | }, 113 | "@types/marked": { 114 | "version": "4.0.8", 115 | "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.8.tgz", 116 | "integrity": "sha512-HVNzMT5QlWCOdeuBsgXP8EZzKUf0+AXzN+sLmjvaB3ZlLqO+e4u0uXrdw9ub69wBKFs+c6/pA4r9sy6cCDvImw==" 117 | }, 118 | "@types/mime": { 119 | "version": "3.0.1", 120 | "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-3.0.1.tgz", 121 | "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", 122 | "dev": true 123 | }, 124 | "@types/node": { 125 | "version": "18.15.0", 126 | "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.15.0.tgz", 127 | "integrity": "sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==", 128 | "dev": true 129 | }, 130 | "@types/qs": { 131 | "version": "6.9.7", 132 | "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz", 133 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", 134 | "dev": true 135 | }, 136 | "@types/range-parser": { 137 | "version": "1.2.4", 138 | "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz", 139 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 140 | "dev": true 141 | }, 142 | "@types/serve-static": { 143 | "version": "1.15.1", 144 | "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.1.tgz", 145 | "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", 146 | "dev": true, 147 | "requires": { 148 | "@types/mime": "*", 149 | "@types/node": "*" 150 | } 151 | }, 152 | "abbrev": { 153 | "version": "1.1.1", 154 | "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", 155 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 156 | "dev": true 157 | }, 158 | "accepts": { 159 | "version": "1.3.8", 160 | "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", 161 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 162 | "requires": { 163 | "mime-types": "~2.1.34", 164 | "negotiator": "0.6.3" 165 | } 166 | }, 167 | "acorn": { 168 | "version": "8.8.2", 169 | "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz", 170 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 171 | "dev": true 172 | }, 173 | "acorn-walk": { 174 | "version": "8.2.0", 175 | "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", 176 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 177 | "dev": true 178 | }, 179 | "anymatch": { 180 | "version": "3.1.3", 181 | "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", 182 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 183 | "dev": true, 184 | "requires": { 185 | "normalize-path": "^3.0.0", 186 | "picomatch": "^2.0.4" 187 | } 188 | }, 189 | "arg": { 190 | "version": "4.1.3", 191 | "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz", 192 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 193 | "dev": true 194 | }, 195 | "array-flatten": { 196 | "version": "1.1.1", 197 | "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", 198 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 199 | }, 200 | "asynckit": { 201 | "version": "0.4.0", 202 | "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", 203 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 204 | }, 205 | "axios": { 206 | "version": "1.3.4", 207 | "resolved": "https://registry.npmmirror.com/axios/-/axios-1.3.4.tgz", 208 | "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", 209 | "requires": { 210 | "follow-redirects": "^1.15.0", 211 | "form-data": "^4.0.0", 212 | "proxy-from-env": "^1.1.0" 213 | } 214 | }, 215 | "balanced-match": { 216 | "version": "1.0.2", 217 | "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", 218 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 219 | "dev": true 220 | }, 221 | "bignumber.js": { 222 | "version": "9.0.0", 223 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 224 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 225 | "dev": true 226 | }, 227 | "binary-extensions": { 228 | "version": "2.2.0", 229 | "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", 230 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 231 | "dev": true 232 | }, 233 | "body-parser": { 234 | "version": "1.20.2", 235 | "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.2.tgz", 236 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 237 | "requires": { 238 | "bytes": "3.1.2", 239 | "content-type": "~1.0.5", 240 | "debug": "2.6.9", 241 | "depd": "2.0.0", 242 | "destroy": "1.2.0", 243 | "http-errors": "2.0.0", 244 | "iconv-lite": "0.4.24", 245 | "on-finished": "2.4.1", 246 | "qs": "6.11.0", 247 | "raw-body": "2.5.2", 248 | "type-is": "~1.6.18", 249 | "unpipe": "1.0.0" 250 | } 251 | }, 252 | "brace-expansion": { 253 | "version": "1.1.11", 254 | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", 255 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 256 | "dev": true, 257 | "requires": { 258 | "balanced-match": "^1.0.0", 259 | "concat-map": "0.0.1" 260 | } 261 | }, 262 | "braces": { 263 | "version": "3.0.2", 264 | "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", 265 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 266 | "dev": true, 267 | "requires": { 268 | "fill-range": "^7.0.1" 269 | } 270 | }, 271 | "bytes": { 272 | "version": "3.1.2", 273 | "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", 274 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 275 | }, 276 | "call-bind": { 277 | "version": "1.0.2", 278 | "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", 279 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 280 | "requires": { 281 | "function-bind": "^1.1.1", 282 | "get-intrinsic": "^1.0.2" 283 | } 284 | }, 285 | "chokidar": { 286 | "version": "3.5.3", 287 | "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", 288 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 289 | "dev": true, 290 | "requires": { 291 | "anymatch": "~3.1.2", 292 | "braces": "~3.0.2", 293 | "fsevents": "~2.3.2", 294 | "glob-parent": "~5.1.2", 295 | "is-binary-path": "~2.1.0", 296 | "is-glob": "~4.0.1", 297 | "normalize-path": "~3.0.0", 298 | "readdirp": "~3.6.0" 299 | } 300 | }, 301 | "combined-stream": { 302 | "version": "1.0.8", 303 | "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", 304 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 305 | "requires": { 306 | "delayed-stream": "~1.0.0" 307 | } 308 | }, 309 | "concat-map": { 310 | "version": "0.0.1", 311 | "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", 312 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 313 | "dev": true 314 | }, 315 | "content-disposition": { 316 | "version": "0.5.4", 317 | "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", 318 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 319 | "requires": { 320 | "safe-buffer": "5.2.1" 321 | } 322 | }, 323 | "content-type": { 324 | "version": "1.0.5", 325 | "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", 326 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" 327 | }, 328 | "cookie": { 329 | "version": "0.5.0", 330 | "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", 331 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 332 | }, 333 | "cookie-parser": { 334 | "version": "1.4.6", 335 | "resolved": "https://registry.npmmirror.com/cookie-parser/-/cookie-parser-1.4.6.tgz", 336 | "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", 337 | "requires": { 338 | "cookie": "0.4.1", 339 | "cookie-signature": "1.0.6" 340 | }, 341 | "dependencies": { 342 | "cookie": { 343 | "version": "0.4.1", 344 | "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.4.1.tgz", 345 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" 346 | } 347 | } 348 | }, 349 | "cookie-signature": { 350 | "version": "1.0.6", 351 | "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", 352 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 353 | }, 354 | "core-util-is": { 355 | "version": "1.0.3", 356 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 357 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 358 | "dev": true 359 | }, 360 | "create-require": { 361 | "version": "1.1.1", 362 | "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz", 363 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 364 | "dev": true 365 | }, 366 | "debug": { 367 | "version": "2.6.9", 368 | "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", 369 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 370 | "requires": { 371 | "ms": "2.0.0" 372 | } 373 | }, 374 | "delayed-stream": { 375 | "version": "1.0.0", 376 | "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", 377 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" 378 | }, 379 | "denque": { 380 | "version": "2.1.0", 381 | "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", 382 | "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", 383 | "dev": true 384 | }, 385 | "depd": { 386 | "version": "2.0.0", 387 | "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", 388 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 389 | }, 390 | "destroy": { 391 | "version": "1.2.0", 392 | "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", 393 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 394 | }, 395 | "diff": { 396 | "version": "4.0.2", 397 | "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", 398 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 399 | "dev": true 400 | }, 401 | "ee-first": { 402 | "version": "1.1.1", 403 | "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", 404 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 405 | }, 406 | "encodeurl": { 407 | "version": "1.0.2", 408 | "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", 409 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 410 | }, 411 | "escape-html": { 412 | "version": "1.0.3", 413 | "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", 414 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 415 | }, 416 | "etag": { 417 | "version": "1.8.1", 418 | "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", 419 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 420 | }, 421 | "express": { 422 | "version": "4.18.2", 423 | "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz", 424 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 425 | "requires": { 426 | "accepts": "~1.3.8", 427 | "array-flatten": "1.1.1", 428 | "body-parser": "1.20.1", 429 | "content-disposition": "0.5.4", 430 | "content-type": "~1.0.4", 431 | "cookie": "0.5.0", 432 | "cookie-signature": "1.0.6", 433 | "debug": "2.6.9", 434 | "depd": "2.0.0", 435 | "encodeurl": "~1.0.2", 436 | "escape-html": "~1.0.3", 437 | "etag": "~1.8.1", 438 | "finalhandler": "1.2.0", 439 | "fresh": "0.5.2", 440 | "http-errors": "2.0.0", 441 | "merge-descriptors": "1.0.1", 442 | "methods": "~1.1.2", 443 | "on-finished": "2.4.1", 444 | "parseurl": "~1.3.3", 445 | "path-to-regexp": "0.1.7", 446 | "proxy-addr": "~2.0.7", 447 | "qs": "6.11.0", 448 | "range-parser": "~1.2.1", 449 | "safe-buffer": "5.2.1", 450 | "send": "0.18.0", 451 | "serve-static": "1.15.0", 452 | "setprototypeof": "1.2.0", 453 | "statuses": "2.0.1", 454 | "type-is": "~1.6.18", 455 | "utils-merge": "1.0.1", 456 | "vary": "~1.1.2" 457 | }, 458 | "dependencies": { 459 | "body-parser": { 460 | "version": "1.20.1", 461 | "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz", 462 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 463 | "requires": { 464 | "bytes": "3.1.2", 465 | "content-type": "~1.0.4", 466 | "debug": "2.6.9", 467 | "depd": "2.0.0", 468 | "destroy": "1.2.0", 469 | "http-errors": "2.0.0", 470 | "iconv-lite": "0.4.24", 471 | "on-finished": "2.4.1", 472 | "qs": "6.11.0", 473 | "raw-body": "2.5.1", 474 | "type-is": "~1.6.18", 475 | "unpipe": "1.0.0" 476 | } 477 | }, 478 | "raw-body": { 479 | "version": "2.5.1", 480 | "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", 481 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 482 | "requires": { 483 | "bytes": "3.1.2", 484 | "http-errors": "2.0.0", 485 | "iconv-lite": "0.4.24", 486 | "unpipe": "1.0.0" 487 | } 488 | } 489 | } 490 | }, 491 | "fill-range": { 492 | "version": "7.0.1", 493 | "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", 494 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 495 | "dev": true, 496 | "requires": { 497 | "to-regex-range": "^5.0.1" 498 | } 499 | }, 500 | "finalhandler": { 501 | "version": "1.2.0", 502 | "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", 503 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 504 | "requires": { 505 | "debug": "2.6.9", 506 | "encodeurl": "~1.0.2", 507 | "escape-html": "~1.0.3", 508 | "on-finished": "2.4.1", 509 | "parseurl": "~1.3.3", 510 | "statuses": "2.0.1", 511 | "unpipe": "~1.0.0" 512 | } 513 | }, 514 | "follow-redirects": { 515 | "version": "1.15.2", 516 | "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz", 517 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" 518 | }, 519 | "form-data": { 520 | "version": "4.0.0", 521 | "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", 522 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 523 | "requires": { 524 | "asynckit": "^0.4.0", 525 | "combined-stream": "^1.0.8", 526 | "mime-types": "^2.1.12" 527 | } 528 | }, 529 | "forwarded": { 530 | "version": "0.2.0", 531 | "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", 532 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 533 | }, 534 | "fresh": { 535 | "version": "0.5.2", 536 | "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", 537 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 538 | }, 539 | "fsevents": { 540 | "version": "2.3.2", 541 | "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", 542 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 543 | "dev": true, 544 | "optional": true 545 | }, 546 | "function-bind": { 547 | "version": "1.1.1", 548 | "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", 549 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 550 | }, 551 | "generate-function": { 552 | "version": "2.3.1", 553 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", 554 | "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", 555 | "dev": true, 556 | "requires": { 557 | "is-property": "^1.0.2" 558 | } 559 | }, 560 | "get-intrinsic": { 561 | "version": "1.2.0", 562 | "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 563 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 564 | "requires": { 565 | "function-bind": "^1.1.1", 566 | "has": "^1.0.3", 567 | "has-symbols": "^1.0.3" 568 | } 569 | }, 570 | "glob-parent": { 571 | "version": "5.1.2", 572 | "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", 573 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 574 | "dev": true, 575 | "requires": { 576 | "is-glob": "^4.0.1" 577 | } 578 | }, 579 | "has": { 580 | "version": "1.0.3", 581 | "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", 582 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 583 | "requires": { 584 | "function-bind": "^1.1.1" 585 | } 586 | }, 587 | "has-flag": { 588 | "version": "3.0.0", 589 | "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", 590 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 591 | "dev": true 592 | }, 593 | "has-symbols": { 594 | "version": "1.0.3", 595 | "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", 596 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 597 | }, 598 | "http-errors": { 599 | "version": "2.0.0", 600 | "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", 601 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 602 | "requires": { 603 | "depd": "2.0.0", 604 | "inherits": "2.0.4", 605 | "setprototypeof": "1.2.0", 606 | "statuses": "2.0.1", 607 | "toidentifier": "1.0.1" 608 | } 609 | }, 610 | "iconv-lite": { 611 | "version": "0.4.24", 612 | "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", 613 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 614 | "requires": { 615 | "safer-buffer": ">= 2.1.2 < 3" 616 | } 617 | }, 618 | "ignore-by-default": { 619 | "version": "1.0.1", 620 | "resolved": "https://registry.npmmirror.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 621 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 622 | "dev": true 623 | }, 624 | "inherits": { 625 | "version": "2.0.4", 626 | "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", 627 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 628 | }, 629 | "ipaddr.js": { 630 | "version": "1.9.1", 631 | "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 632 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 633 | }, 634 | "is-binary-path": { 635 | "version": "2.1.0", 636 | "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", 637 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 638 | "dev": true, 639 | "requires": { 640 | "binary-extensions": "^2.0.0" 641 | } 642 | }, 643 | "is-extglob": { 644 | "version": "2.1.1", 645 | "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", 646 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 647 | "dev": true 648 | }, 649 | "is-glob": { 650 | "version": "4.0.3", 651 | "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", 652 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 653 | "dev": true, 654 | "requires": { 655 | "is-extglob": "^2.1.1" 656 | } 657 | }, 658 | "is-number": { 659 | "version": "7.0.0", 660 | "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", 661 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 662 | "dev": true 663 | }, 664 | "is-property": { 665 | "version": "1.0.2", 666 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 667 | "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", 668 | "dev": true 669 | }, 670 | "isarray": { 671 | "version": "1.0.0", 672 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 673 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 674 | "dev": true 675 | }, 676 | "long": { 677 | "version": "5.2.1", 678 | "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", 679 | "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", 680 | "dev": true 681 | }, 682 | "lru-cache": { 683 | "version": "7.18.3", 684 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 685 | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 686 | "dev": true 687 | }, 688 | "make-error": { 689 | "version": "1.3.6", 690 | "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz", 691 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 692 | "dev": true 693 | }, 694 | "marked": { 695 | "version": "4.3.0", 696 | "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", 697 | "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" 698 | }, 699 | "media-typer": { 700 | "version": "0.3.0", 701 | "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", 702 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 703 | }, 704 | "merge-descriptors": { 705 | "version": "1.0.1", 706 | "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 707 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 708 | }, 709 | "methods": { 710 | "version": "1.1.2", 711 | "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", 712 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 713 | }, 714 | "mime": { 715 | "version": "1.6.0", 716 | "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", 717 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 718 | }, 719 | "mime-db": { 720 | "version": "1.52.0", 721 | "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", 722 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 723 | }, 724 | "mime-types": { 725 | "version": "2.1.35", 726 | "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", 727 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 728 | "requires": { 729 | "mime-db": "1.52.0" 730 | } 731 | }, 732 | "minimatch": { 733 | "version": "3.1.2", 734 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", 735 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 736 | "dev": true, 737 | "requires": { 738 | "brace-expansion": "^1.1.7" 739 | } 740 | }, 741 | "ms": { 742 | "version": "2.0.0", 743 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", 744 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 745 | }, 746 | "mysql": { 747 | "version": "2.18.1", 748 | "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", 749 | "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", 750 | "dev": true, 751 | "requires": { 752 | "bignumber.js": "9.0.0", 753 | "readable-stream": "2.3.7", 754 | "safe-buffer": "5.1.2", 755 | "sqlstring": "2.3.1" 756 | }, 757 | "dependencies": { 758 | "safe-buffer": { 759 | "version": "5.1.2", 760 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 761 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 762 | "dev": true 763 | } 764 | } 765 | }, 766 | "mysql2": { 767 | "version": "3.2.0", 768 | "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.2.0.tgz", 769 | "integrity": "sha512-0Vn6a9WSrq6fWwvPgrvIwnOCldiEcgbzapVRDAtDZ4cMTxN7pnGqCTx8EG32S/NYXl6AXkdO+9hV1tSIi/LigA==", 770 | "dev": true, 771 | "requires": { 772 | "denque": "^2.1.0", 773 | "generate-function": "^2.3.1", 774 | "iconv-lite": "^0.6.3", 775 | "long": "^5.2.1", 776 | "lru-cache": "^7.14.1", 777 | "named-placeholders": "^1.1.3", 778 | "seq-queue": "^0.0.5", 779 | "sqlstring": "^2.3.2" 780 | }, 781 | "dependencies": { 782 | "iconv-lite": { 783 | "version": "0.6.3", 784 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 785 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 786 | "dev": true, 787 | "requires": { 788 | "safer-buffer": ">= 2.1.2 < 3.0.0" 789 | } 790 | }, 791 | "sqlstring": { 792 | "version": "2.3.3", 793 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", 794 | "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", 795 | "dev": true 796 | } 797 | } 798 | }, 799 | "named-placeholders": { 800 | "version": "1.1.3", 801 | "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", 802 | "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", 803 | "dev": true, 804 | "requires": { 805 | "lru-cache": "^7.14.1" 806 | } 807 | }, 808 | "negotiator": { 809 | "version": "0.6.3", 810 | "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", 811 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 812 | }, 813 | "nodemon": { 814 | "version": "2.0.21", 815 | "resolved": "https://registry.npmmirror.com/nodemon/-/nodemon-2.0.21.tgz", 816 | "integrity": "sha512-djN/n2549DUtY33S7o1djRCd7dEm0kBnj9c7S9XVXqRUbuggN1MZH/Nqa+5RFQr63Fbefq37nFXAE9VU86yL1A==", 817 | "dev": true, 818 | "requires": { 819 | "chokidar": "^3.5.2", 820 | "debug": "^3.2.7", 821 | "ignore-by-default": "^1.0.1", 822 | "minimatch": "^3.1.2", 823 | "pstree.remy": "^1.1.8", 824 | "semver": "^5.7.1", 825 | "simple-update-notifier": "^1.0.7", 826 | "supports-color": "^5.5.0", 827 | "touch": "^3.1.0", 828 | "undefsafe": "^2.0.5" 829 | }, 830 | "dependencies": { 831 | "debug": { 832 | "version": "3.2.7", 833 | "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", 834 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 835 | "dev": true, 836 | "requires": { 837 | "ms": "^2.1.1" 838 | } 839 | }, 840 | "ms": { 841 | "version": "2.1.3", 842 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", 843 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 844 | "dev": true 845 | } 846 | } 847 | }, 848 | "nopt": { 849 | "version": "1.0.10", 850 | "resolved": "https://registry.npmmirror.com/nopt/-/nopt-1.0.10.tgz", 851 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 852 | "dev": true, 853 | "requires": { 854 | "abbrev": "1" 855 | } 856 | }, 857 | "normalize-path": { 858 | "version": "3.0.0", 859 | "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", 860 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 861 | "dev": true 862 | }, 863 | "object-inspect": { 864 | "version": "1.12.3", 865 | "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz", 866 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" 867 | }, 868 | "on-finished": { 869 | "version": "2.4.1", 870 | "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", 871 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 872 | "requires": { 873 | "ee-first": "1.1.1" 874 | } 875 | }, 876 | "openai": { 877 | "version": "3.2.1", 878 | "resolved": "https://registry.npmmirror.com/openai/-/openai-3.2.1.tgz", 879 | "integrity": "sha512-762C9BNlJPbjjlWZi4WYK9iM2tAVAv0uUp1UmI34vb0CN5T2mjB/qM6RYBmNKMh/dN9fC+bxqPwWJZUTWW052A==", 880 | "requires": { 881 | "axios": "^0.26.0", 882 | "form-data": "^4.0.0" 883 | }, 884 | "dependencies": { 885 | "axios": { 886 | "version": "0.26.1", 887 | "resolved": "https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz", 888 | "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", 889 | "requires": { 890 | "follow-redirects": "^1.14.8" 891 | } 892 | } 893 | } 894 | }, 895 | "parseurl": { 896 | "version": "1.3.3", 897 | "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", 898 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 899 | }, 900 | "path-to-regexp": { 901 | "version": "0.1.7", 902 | "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 903 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 904 | }, 905 | "picomatch": { 906 | "version": "2.3.1", 907 | "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", 908 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 909 | "dev": true 910 | }, 911 | "process-nextick-args": { 912 | "version": "2.0.1", 913 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 914 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 915 | "dev": true 916 | }, 917 | "proxy-addr": { 918 | "version": "2.0.7", 919 | "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", 920 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 921 | "requires": { 922 | "forwarded": "0.2.0", 923 | "ipaddr.js": "1.9.1" 924 | } 925 | }, 926 | "proxy-from-env": { 927 | "version": "1.1.0", 928 | "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 929 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 930 | }, 931 | "pstree.remy": { 932 | "version": "1.1.8", 933 | "resolved": "https://registry.npmmirror.com/pstree.remy/-/pstree.remy-1.1.8.tgz", 934 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 935 | "dev": true 936 | }, 937 | "qs": { 938 | "version": "6.11.0", 939 | "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", 940 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 941 | "requires": { 942 | "side-channel": "^1.0.4" 943 | } 944 | }, 945 | "range-parser": { 946 | "version": "1.2.1", 947 | "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", 948 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 949 | }, 950 | "raw-body": { 951 | "version": "2.5.2", 952 | "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz", 953 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 954 | "requires": { 955 | "bytes": "3.1.2", 956 | "http-errors": "2.0.0", 957 | "iconv-lite": "0.4.24", 958 | "unpipe": "1.0.0" 959 | } 960 | }, 961 | "readable-stream": { 962 | "version": "2.3.7", 963 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 964 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 965 | "dev": true, 966 | "requires": { 967 | "core-util-is": "~1.0.0", 968 | "inherits": "~2.0.3", 969 | "isarray": "~1.0.0", 970 | "process-nextick-args": "~2.0.0", 971 | "safe-buffer": "~5.1.1", 972 | "string_decoder": "~1.1.1", 973 | "util-deprecate": "~1.0.1" 974 | }, 975 | "dependencies": { 976 | "safe-buffer": { 977 | "version": "5.1.2", 978 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 979 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 980 | "dev": true 981 | } 982 | } 983 | }, 984 | "readdirp": { 985 | "version": "3.6.0", 986 | "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", 987 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 988 | "dev": true, 989 | "requires": { 990 | "picomatch": "^2.2.1" 991 | } 992 | }, 993 | "safe-buffer": { 994 | "version": "5.2.1", 995 | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", 996 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 997 | }, 998 | "safer-buffer": { 999 | "version": "2.1.2", 1000 | "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", 1001 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1002 | }, 1003 | "semver": { 1004 | "version": "5.7.1", 1005 | "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", 1006 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1007 | "dev": true 1008 | }, 1009 | "send": { 1010 | "version": "0.18.0", 1011 | "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", 1012 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1013 | "requires": { 1014 | "debug": "2.6.9", 1015 | "depd": "2.0.0", 1016 | "destroy": "1.2.0", 1017 | "encodeurl": "~1.0.2", 1018 | "escape-html": "~1.0.3", 1019 | "etag": "~1.8.1", 1020 | "fresh": "0.5.2", 1021 | "http-errors": "2.0.0", 1022 | "mime": "1.6.0", 1023 | "ms": "2.1.3", 1024 | "on-finished": "2.4.1", 1025 | "range-parser": "~1.2.1", 1026 | "statuses": "2.0.1" 1027 | }, 1028 | "dependencies": { 1029 | "ms": { 1030 | "version": "2.1.3", 1031 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", 1032 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1033 | } 1034 | } 1035 | }, 1036 | "seq-queue": { 1037 | "version": "0.0.5", 1038 | "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", 1039 | "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", 1040 | "dev": true 1041 | }, 1042 | "serve-static": { 1043 | "version": "1.15.0", 1044 | "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", 1045 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1046 | "requires": { 1047 | "encodeurl": "~1.0.2", 1048 | "escape-html": "~1.0.3", 1049 | "parseurl": "~1.3.3", 1050 | "send": "0.18.0" 1051 | } 1052 | }, 1053 | "setprototypeof": { 1054 | "version": "1.2.0", 1055 | "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", 1056 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1057 | }, 1058 | "side-channel": { 1059 | "version": "1.0.4", 1060 | "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", 1061 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1062 | "requires": { 1063 | "call-bind": "^1.0.0", 1064 | "get-intrinsic": "^1.0.2", 1065 | "object-inspect": "^1.9.0" 1066 | } 1067 | }, 1068 | "simple-update-notifier": { 1069 | "version": "1.1.0", 1070 | "resolved": "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", 1071 | "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", 1072 | "dev": true, 1073 | "requires": { 1074 | "semver": "~7.0.0" 1075 | }, 1076 | "dependencies": { 1077 | "semver": { 1078 | "version": "7.0.0", 1079 | "resolved": "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz", 1080 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1081 | "dev": true 1082 | } 1083 | } 1084 | }, 1085 | "sqlstring": { 1086 | "version": "2.3.1", 1087 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", 1088 | "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==", 1089 | "dev": true 1090 | }, 1091 | "statuses": { 1092 | "version": "2.0.1", 1093 | "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", 1094 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1095 | }, 1096 | "string_decoder": { 1097 | "version": "1.1.1", 1098 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1099 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1100 | "dev": true, 1101 | "requires": { 1102 | "safe-buffer": "~5.1.0" 1103 | }, 1104 | "dependencies": { 1105 | "safe-buffer": { 1106 | "version": "5.1.2", 1107 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1108 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1109 | "dev": true 1110 | } 1111 | } 1112 | }, 1113 | "supports-color": { 1114 | "version": "5.5.0", 1115 | "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", 1116 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1117 | "dev": true, 1118 | "requires": { 1119 | "has-flag": "^3.0.0" 1120 | } 1121 | }, 1122 | "to-regex-range": { 1123 | "version": "5.0.1", 1124 | "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", 1125 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1126 | "dev": true, 1127 | "requires": { 1128 | "is-number": "^7.0.0" 1129 | } 1130 | }, 1131 | "toidentifier": { 1132 | "version": "1.0.1", 1133 | "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", 1134 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1135 | }, 1136 | "touch": { 1137 | "version": "3.1.0", 1138 | "resolved": "https://registry.npmmirror.com/touch/-/touch-3.1.0.tgz", 1139 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 1140 | "dev": true, 1141 | "requires": { 1142 | "nopt": "~1.0.10" 1143 | } 1144 | }, 1145 | "ts-node": { 1146 | "version": "10.9.1", 1147 | "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz", 1148 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 1149 | "dev": true, 1150 | "requires": { 1151 | "@cspotcode/source-map-support": "^0.8.0", 1152 | "@tsconfig/node10": "^1.0.7", 1153 | "@tsconfig/node12": "^1.0.7", 1154 | "@tsconfig/node14": "^1.0.0", 1155 | "@tsconfig/node16": "^1.0.2", 1156 | "acorn": "^8.4.1", 1157 | "acorn-walk": "^8.1.1", 1158 | "arg": "^4.1.0", 1159 | "create-require": "^1.1.0", 1160 | "diff": "^4.0.1", 1161 | "make-error": "^1.1.1", 1162 | "v8-compile-cache-lib": "^3.0.1", 1163 | "yn": "3.1.1" 1164 | } 1165 | }, 1166 | "type-is": { 1167 | "version": "1.6.18", 1168 | "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", 1169 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1170 | "requires": { 1171 | "media-typer": "0.3.0", 1172 | "mime-types": "~2.1.24" 1173 | } 1174 | }, 1175 | "typescript": { 1176 | "version": "4.9.5", 1177 | "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz", 1178 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 1179 | "dev": true 1180 | }, 1181 | "undefsafe": { 1182 | "version": "2.0.5", 1183 | "resolved": "https://registry.npmmirror.com/undefsafe/-/undefsafe-2.0.5.tgz", 1184 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 1185 | "dev": true 1186 | }, 1187 | "unpipe": { 1188 | "version": "1.0.0", 1189 | "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", 1190 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1191 | }, 1192 | "util-deprecate": { 1193 | "version": "1.0.2", 1194 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1195 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1196 | "dev": true 1197 | }, 1198 | "utils-merge": { 1199 | "version": "1.0.1", 1200 | "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", 1201 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1202 | }, 1203 | "v8-compile-cache-lib": { 1204 | "version": "3.0.1", 1205 | "resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 1206 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 1207 | "dev": true 1208 | }, 1209 | "vary": { 1210 | "version": "1.1.2", 1211 | "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", 1212 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1213 | }, 1214 | "yn": { 1215 | "version": "3.1.1", 1216 | "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz", 1217 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 1218 | "dev": true 1219 | } 1220 | } 1221 | } 1222 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openai-server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "nodemon src/index.ts", 9 | "build": "rm -rf dist && node_modules/typescript/bin/tsc --build", 10 | "deploy": "node dist/src/index.js" 11 | }, 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "@types/marked": "^4.0.8", 16 | "axios": "^1.3.4", 17 | "body-parser": "^1.20.2", 18 | "cookie-parser": "^1.4.6", 19 | "express": "^4.18.2", 20 | "marked": "^4.3.0", 21 | "openai": "^3.2.1" 22 | }, 23 | "devDependencies": { 24 | "@types/cookie-parser": "^1.4.3", 25 | "@types/express": "^4.17.17", 26 | "@types/node": "^18.15.0", 27 | "mysql": "^2.18.1", 28 | "mysql2": "^3.2.0", 29 | "nodemon": "^2.0.21", 30 | "ts-node": "^10.9.1", 31 | "typescript": "^4.9.5" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/api/ai.ts: -------------------------------------------------------------------------------- 1 | import { Configuration, OpenAIApi } from "openai"; 2 | import { marked } from "marked"; 3 | import query from "../configs/query"; 4 | 5 | export const routes = (app: any) => { 6 | return { 7 | chart: app.use("/api/chart", async (req: any, res: any) => { 8 | try { 9 | const { content = "" } = req.query || {}; 10 | const apiKeyRes: any = 11 | (await query(`select auth_key from openai.user_key;`)) || []; 12 | const { auth_key: OPENAI_API_KEY } = apiKeyRes[0] || {}; 13 | 14 | const configuration = new Configuration({ 15 | organization: "org-5ZqRIjonyON5xbje0fcE7zBh", 16 | apiKey: OPENAI_API_KEY, 17 | }); 18 | 19 | const openai = new OpenAIApi(configuration); 20 | const response = await openai.createChatCompletion({ 21 | model: "gpt-3.5-turbo", 22 | messages: [{ role: "user", content }], 23 | temperature: 1, 24 | }); 25 | 26 | const { message } = response.data.choices[0]; 27 | const messageHtml = message?.content || ""; 28 | const resData = marked.parse(messageHtml); 29 | 30 | return res.send(resData); 31 | } catch (err: any) { 32 | const { message = "" } = err || {}; 33 | return res.send(message); 34 | // return res.status(404).send(resError({ msg: message })); 35 | } 36 | }), 37 | chartBeta: app.use("/api/chartBeta", async (req: any, res: any) => { 38 | try { 39 | const { content = "", OPENAI_API_KEY = "" } = req.query || {}; 40 | const configuration = new Configuration({ 41 | organization: "org-5ZqRIjonyON5xbje0fcE7zBh", 42 | apiKey: OPENAI_API_KEY, 43 | }); 44 | const openai = new OpenAIApi(configuration); 45 | 46 | const response = await openai.createCompletion({ 47 | model: "text-davinci-002-render-sha", 48 | prompt: content, 49 | temperature: 0.7, 50 | }); 51 | 52 | const { text } = response.data.choices[0]; 53 | return res.status(200).json(text); 54 | } catch (err: any) { 55 | console.log("Err", err); 56 | const { message = "" } = err || {}; 57 | return res.status(404).json({ message }); 58 | } 59 | }), 60 | }; 61 | }; 62 | -------------------------------------------------------------------------------- /src/configs/db.ts: -------------------------------------------------------------------------------- 1 | import mysql from "mysql2"; 2 | 3 | // 创建连接池 4 | const pool = mysql.createPool({ 5 | host: "localhost", 6 | user: "root", 7 | password: "Your password", 8 | database: "Your database", 9 | port: 3306, 10 | waitForConnections: true, // 当连接池没有可用连接时,等待(true)还是抛错(false) 11 | connectionLimit: 10, // 连接数限制 12 | queueLimit: 0, // 没有限制 13 | }); 14 | 15 | const getConnection = () => { 16 | return new Promise(function (resolve, reject) { 17 | // 从连接池中获取一个连接 18 | pool.getConnection(function (err, connection) { 19 | if (err) { 20 | reject(err); 21 | console.log("[connect_err] - :" + err); 22 | return; 23 | } 24 | 25 | console.log("connected!"); 26 | resolve(connection); 27 | }); 28 | }); 29 | }; 30 | 31 | export default getConnection; 32 | -------------------------------------------------------------------------------- /src/configs/query.ts: -------------------------------------------------------------------------------- 1 | import getConnection from "./db"; 2 | 3 | const query = (sql: any, param?: any) => { 4 | return new Promise((resolve, reject) => { 5 | getConnection() 6 | // 获取连接 7 | .then((conn: any) => { 8 | // connected! (unless `err` is set) 9 | // queries here, when all queries are finished you do connection.release() to return the connection back to the pool 10 | conn.query(sql, param, (err: any, rows: any) => { 11 | if (err) { 12 | reject(err); 13 | console.log("[sql] - :" + sql); 14 | console.log("[query_err] - :" + err); 15 | return; 16 | } 17 | resolve(rows); 18 | // 释放连接 19 | conn.release(); 20 | }); 21 | }) 22 | .catch((err: any) => { 23 | reject(err); 24 | }); 25 | }); 26 | }; 27 | 28 | export default query; 29 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import cookieParser from "cookie-parser"; 3 | import bodyParser from "body-parser"; 4 | import { routes } from "./api/ai"; 5 | import { jsonResponse } from "./middlewares/jsonResponse"; 6 | import https from "https"; 7 | import fs from "fs"; 8 | 9 | const app: express.Application = express(); 10 | 11 | const port: number = 1200; 12 | 13 | // 载入中间件 14 | app.use(bodyParser.json()); 15 | app.use(bodyParser.urlencoded({ extended: false })); 16 | app.use(cookieParser()); 17 | app.use(jsonResponse); 18 | 19 | // allow custom header and CORS 20 | app.all("*", function (req, res, next) { 21 | res.header("Access-Control-Allow-Origin", "*"); 22 | res.header("Access-Control-Allow-Headers", "X-Requested-With"); 23 | res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); 24 | res.header("X-Powered-By", " 3.2.1"); 25 | res.header("Content-Type", "application/json;charset=utf-8"); 26 | next(); 27 | }); 28 | 29 | routes(app); 30 | 31 | // https 配置 32 | const httpsOption = { 33 | key: fs.readFileSync("/path/ssl/kiritosa.com/key.pem"), 34 | cert: fs.readFileSync("/path/ssl/kiritosa.com/fullchain.pem"), 35 | }; 36 | 37 | https.createServer(httpsOption, app).listen(port, () => { 38 | console.log(`App listening at http://localhost:${port}`); 39 | }); 40 | -------------------------------------------------------------------------------- /src/middlewares/jsonResponse.ts: -------------------------------------------------------------------------------- 1 | export function jsonResponse(req: any, res: any, next: any) { 2 | // 保存原始的send方法 3 | const originalSend = res.send; 4 | 5 | // 创建新的send方法 6 | res.send = function (data: any) { 7 | // 设置“Content-Type”响应头 8 | res.setHeader("Content-Type", "application/json"); 9 | 10 | // 格式化响应数据 11 | const responseData = { 12 | data: data, 13 | status: res.statusCode, 14 | }; 15 | 16 | // 发送格式化的响应 17 | originalSend.call(res, JSON.stringify(responseData)); 18 | }; 19 | 20 | next(); 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "rootDir": "./", 6 | "outDir": "./dist", 7 | "esModuleInterop": true, 8 | "strict": true 9 | }, 10 | "include": ["src/**/*"], 11 | "exclude": ["node_modules", "**/*.spec.ts"] 12 | } 13 | --------------------------------------------------------------------------------