├── .gitignore ├── LICENSE ├── README.md ├── index.html ├── package-lock.json ├── package.json └── server.js /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules 3 | .idea -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Kinsta Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kinsta - Hello World - Node.js 2 | An example of how to set your Node.js application up to enable deployment on Kinsta App Hosting services. 3 | 4 | --- 5 | Kinsta is a developer-centric cloud host / PaaS. We’re striving to make it easier for you to share your web projects with your users. Focus on coding and building, and we’ll take care of deployment and provide fast, scalable hosting. + 24/7 expert-only support. 6 | 7 | - [Start your free trial](https://kinsta.com/signup/?product_type=app-db) 8 | - [Application Hosting](https://kinsta.com/application-hosting) 9 | - [Database Hosting](https://kinsta.com/database-hosting) 10 | 11 | ## Dependency Management 12 | During the deployment process Kinsta will automatically install dependencies defined in your `package.json` file. 13 | 14 | ## Web Server Setup 15 | 16 | ### Port 17 | Kinsta automatically sets the `PORT` environment variable. You should **not** define it yourself and you should **not** hard-code it into the application. Use `process.env.PORT` in your code when referring to the server port. 18 | 19 | ``` 20 | app.listen(process.env.PORT, () => { 21 | console.log(`Hello World Application is running on port ${process.env.PORT}`) 22 | }) 23 | ``` 24 | 25 | ### Start Command 26 | When deploying an application Kinsta will automatically create a web process with `npm start` as the entry point. Make sure to use this command to run your server. If you would like to use another command you will need modify the runtime process in MyKinsta. 27 | 28 | ``` 29 | "scripts": { 30 | "start": "node server.js" 31 | }, 32 | ``` 33 | 34 | ## Deployment Lifecycle 35 | Whenever a deployment is initiated (through creating an application or re-deploying due to an incoming commit), the `npm build` command is run, followed by the `npm start` command. 36 | 37 | ## What is Node.JS 38 | Node.js is a runtime environment that allows developers to execute JavaScript code outside of a web browser, enabling server-side scripting and building scalable network applications. It utilizes an event-driven, non-blocking I/O model, making it efficient for handling concurrent requests and real-time applications. Learn more on [nodejs.org](https://nodejs.org). 39 | 40 | ## Watch How to Set Up a Node.JS Application on Kinsta 41 | [![Watch the video](https://img.youtube.com/vi/JBbyMn7dNys/maxresdefault.jpg)](https://www.youtube.com/watch?v=JBbyMn7dNys) 42 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | Node.js project | Kinsta

Welcome to your
Node.js project

Here are some ideas how to get started

Join the Kinsta Community forum and connect with developers

-------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world-node", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "hello-world-node", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "dotenv": "^16.3.1", 13 | "express": "^4.18.2" 14 | } 15 | }, 16 | "node_modules/accepts": { 17 | "version": "1.3.8", 18 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 19 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 20 | "dependencies": { 21 | "mime-types": "~2.1.34", 22 | "negotiator": "0.6.3" 23 | }, 24 | "engines": { 25 | "node": ">= 0.6" 26 | } 27 | }, 28 | "node_modules/array-flatten": { 29 | "version": "1.1.1", 30 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 31 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 32 | }, 33 | "node_modules/body-parser": { 34 | "version": "1.20.1", 35 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 36 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 37 | "dependencies": { 38 | "bytes": "3.1.2", 39 | "content-type": "~1.0.4", 40 | "debug": "2.6.9", 41 | "depd": "2.0.0", 42 | "destroy": "1.2.0", 43 | "http-errors": "2.0.0", 44 | "iconv-lite": "0.4.24", 45 | "on-finished": "2.4.1", 46 | "qs": "6.11.0", 47 | "raw-body": "2.5.1", 48 | "type-is": "~1.6.18", 49 | "unpipe": "1.0.0" 50 | }, 51 | "engines": { 52 | "node": ">= 0.8", 53 | "npm": "1.2.8000 || >= 1.4.16" 54 | } 55 | }, 56 | "node_modules/bytes": { 57 | "version": "3.1.2", 58 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 59 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 60 | "engines": { 61 | "node": ">= 0.8" 62 | } 63 | }, 64 | "node_modules/call-bind": { 65 | "version": "1.0.5", 66 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", 67 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", 68 | "dependencies": { 69 | "function-bind": "^1.1.2", 70 | "get-intrinsic": "^1.2.1", 71 | "set-function-length": "^1.1.1" 72 | }, 73 | "funding": { 74 | "url": "https://github.com/sponsors/ljharb" 75 | } 76 | }, 77 | "node_modules/content-disposition": { 78 | "version": "0.5.4", 79 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 80 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 81 | "dependencies": { 82 | "safe-buffer": "5.2.1" 83 | }, 84 | "engines": { 85 | "node": ">= 0.6" 86 | } 87 | }, 88 | "node_modules/content-type": { 89 | "version": "1.0.5", 90 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 91 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 92 | "engines": { 93 | "node": ">= 0.6" 94 | } 95 | }, 96 | "node_modules/cookie": { 97 | "version": "0.5.0", 98 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 99 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 100 | "engines": { 101 | "node": ">= 0.6" 102 | } 103 | }, 104 | "node_modules/cookie-signature": { 105 | "version": "1.0.6", 106 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 107 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 108 | }, 109 | "node_modules/debug": { 110 | "version": "2.6.9", 111 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 112 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 113 | "dependencies": { 114 | "ms": "2.0.0" 115 | } 116 | }, 117 | "node_modules/define-data-property": { 118 | "version": "1.1.1", 119 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", 120 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", 121 | "dependencies": { 122 | "get-intrinsic": "^1.2.1", 123 | "gopd": "^1.0.1", 124 | "has-property-descriptors": "^1.0.0" 125 | }, 126 | "engines": { 127 | "node": ">= 0.4" 128 | } 129 | }, 130 | "node_modules/depd": { 131 | "version": "2.0.0", 132 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 133 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 134 | "engines": { 135 | "node": ">= 0.8" 136 | } 137 | }, 138 | "node_modules/destroy": { 139 | "version": "1.2.0", 140 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 141 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 142 | "engines": { 143 | "node": ">= 0.8", 144 | "npm": "1.2.8000 || >= 1.4.16" 145 | } 146 | }, 147 | "node_modules/dotenv": { 148 | "version": "16.3.1", 149 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", 150 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", 151 | "engines": { 152 | "node": ">=12" 153 | }, 154 | "funding": { 155 | "url": "https://github.com/motdotla/dotenv?sponsor=1" 156 | } 157 | }, 158 | "node_modules/ee-first": { 159 | "version": "1.1.1", 160 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 161 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 162 | }, 163 | "node_modules/encodeurl": { 164 | "version": "1.0.2", 165 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 166 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 167 | "engines": { 168 | "node": ">= 0.8" 169 | } 170 | }, 171 | "node_modules/escape-html": { 172 | "version": "1.0.3", 173 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 174 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 175 | }, 176 | "node_modules/etag": { 177 | "version": "1.8.1", 178 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 179 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 180 | "engines": { 181 | "node": ">= 0.6" 182 | } 183 | }, 184 | "node_modules/express": { 185 | "version": "4.18.2", 186 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 187 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 188 | "dependencies": { 189 | "accepts": "~1.3.8", 190 | "array-flatten": "1.1.1", 191 | "body-parser": "1.20.1", 192 | "content-disposition": "0.5.4", 193 | "content-type": "~1.0.4", 194 | "cookie": "0.5.0", 195 | "cookie-signature": "1.0.6", 196 | "debug": "2.6.9", 197 | "depd": "2.0.0", 198 | "encodeurl": "~1.0.2", 199 | "escape-html": "~1.0.3", 200 | "etag": "~1.8.1", 201 | "finalhandler": "1.2.0", 202 | "fresh": "0.5.2", 203 | "http-errors": "2.0.0", 204 | "merge-descriptors": "1.0.1", 205 | "methods": "~1.1.2", 206 | "on-finished": "2.4.1", 207 | "parseurl": "~1.3.3", 208 | "path-to-regexp": "0.1.7", 209 | "proxy-addr": "~2.0.7", 210 | "qs": "6.11.0", 211 | "range-parser": "~1.2.1", 212 | "safe-buffer": "5.2.1", 213 | "send": "0.18.0", 214 | "serve-static": "1.15.0", 215 | "setprototypeof": "1.2.0", 216 | "statuses": "2.0.1", 217 | "type-is": "~1.6.18", 218 | "utils-merge": "1.0.1", 219 | "vary": "~1.1.2" 220 | }, 221 | "engines": { 222 | "node": ">= 0.10.0" 223 | } 224 | }, 225 | "node_modules/finalhandler": { 226 | "version": "1.2.0", 227 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 228 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 229 | "dependencies": { 230 | "debug": "2.6.9", 231 | "encodeurl": "~1.0.2", 232 | "escape-html": "~1.0.3", 233 | "on-finished": "2.4.1", 234 | "parseurl": "~1.3.3", 235 | "statuses": "2.0.1", 236 | "unpipe": "~1.0.0" 237 | }, 238 | "engines": { 239 | "node": ">= 0.8" 240 | } 241 | }, 242 | "node_modules/forwarded": { 243 | "version": "0.2.0", 244 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 245 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 246 | "engines": { 247 | "node": ">= 0.6" 248 | } 249 | }, 250 | "node_modules/fresh": { 251 | "version": "0.5.2", 252 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 253 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 254 | "engines": { 255 | "node": ">= 0.6" 256 | } 257 | }, 258 | "node_modules/function-bind": { 259 | "version": "1.1.2", 260 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 261 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 262 | "funding": { 263 | "url": "https://github.com/sponsors/ljharb" 264 | } 265 | }, 266 | "node_modules/get-intrinsic": { 267 | "version": "1.2.2", 268 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", 269 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", 270 | "dependencies": { 271 | "function-bind": "^1.1.2", 272 | "has-proto": "^1.0.1", 273 | "has-symbols": "^1.0.3", 274 | "hasown": "^2.0.0" 275 | }, 276 | "funding": { 277 | "url": "https://github.com/sponsors/ljharb" 278 | } 279 | }, 280 | "node_modules/gopd": { 281 | "version": "1.0.1", 282 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 283 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 284 | "dependencies": { 285 | "get-intrinsic": "^1.1.3" 286 | }, 287 | "funding": { 288 | "url": "https://github.com/sponsors/ljharb" 289 | } 290 | }, 291 | "node_modules/has-property-descriptors": { 292 | "version": "1.0.1", 293 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", 294 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", 295 | "dependencies": { 296 | "get-intrinsic": "^1.2.2" 297 | }, 298 | "funding": { 299 | "url": "https://github.com/sponsors/ljharb" 300 | } 301 | }, 302 | "node_modules/has-proto": { 303 | "version": "1.0.1", 304 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 305 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 306 | "engines": { 307 | "node": ">= 0.4" 308 | }, 309 | "funding": { 310 | "url": "https://github.com/sponsors/ljharb" 311 | } 312 | }, 313 | "node_modules/has-symbols": { 314 | "version": "1.0.3", 315 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 316 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 317 | "engines": { 318 | "node": ">= 0.4" 319 | }, 320 | "funding": { 321 | "url": "https://github.com/sponsors/ljharb" 322 | } 323 | }, 324 | "node_modules/hasown": { 325 | "version": "2.0.0", 326 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 327 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 328 | "dependencies": { 329 | "function-bind": "^1.1.2" 330 | }, 331 | "engines": { 332 | "node": ">= 0.4" 333 | } 334 | }, 335 | "node_modules/http-errors": { 336 | "version": "2.0.0", 337 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 338 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 339 | "dependencies": { 340 | "depd": "2.0.0", 341 | "inherits": "2.0.4", 342 | "setprototypeof": "1.2.0", 343 | "statuses": "2.0.1", 344 | "toidentifier": "1.0.1" 345 | }, 346 | "engines": { 347 | "node": ">= 0.8" 348 | } 349 | }, 350 | "node_modules/iconv-lite": { 351 | "version": "0.4.24", 352 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 353 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 354 | "dependencies": { 355 | "safer-buffer": ">= 2.1.2 < 3" 356 | }, 357 | "engines": { 358 | "node": ">=0.10.0" 359 | } 360 | }, 361 | "node_modules/inherits": { 362 | "version": "2.0.4", 363 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 364 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 365 | }, 366 | "node_modules/ipaddr.js": { 367 | "version": "1.9.1", 368 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 369 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 370 | "engines": { 371 | "node": ">= 0.10" 372 | } 373 | }, 374 | "node_modules/media-typer": { 375 | "version": "0.3.0", 376 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 377 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 378 | "engines": { 379 | "node": ">= 0.6" 380 | } 381 | }, 382 | "node_modules/merge-descriptors": { 383 | "version": "1.0.1", 384 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 385 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 386 | }, 387 | "node_modules/methods": { 388 | "version": "1.1.2", 389 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 390 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 391 | "engines": { 392 | "node": ">= 0.6" 393 | } 394 | }, 395 | "node_modules/mime": { 396 | "version": "1.6.0", 397 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 398 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 399 | "bin": { 400 | "mime": "cli.js" 401 | }, 402 | "engines": { 403 | "node": ">=4" 404 | } 405 | }, 406 | "node_modules/mime-db": { 407 | "version": "1.52.0", 408 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 409 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 410 | "engines": { 411 | "node": ">= 0.6" 412 | } 413 | }, 414 | "node_modules/mime-types": { 415 | "version": "2.1.35", 416 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 417 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 418 | "dependencies": { 419 | "mime-db": "1.52.0" 420 | }, 421 | "engines": { 422 | "node": ">= 0.6" 423 | } 424 | }, 425 | "node_modules/ms": { 426 | "version": "2.0.0", 427 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 428 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 429 | }, 430 | "node_modules/negotiator": { 431 | "version": "0.6.3", 432 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 433 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 434 | "engines": { 435 | "node": ">= 0.6" 436 | } 437 | }, 438 | "node_modules/object-inspect": { 439 | "version": "1.13.1", 440 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", 441 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", 442 | "funding": { 443 | "url": "https://github.com/sponsors/ljharb" 444 | } 445 | }, 446 | "node_modules/on-finished": { 447 | "version": "2.4.1", 448 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 449 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 450 | "dependencies": { 451 | "ee-first": "1.1.1" 452 | }, 453 | "engines": { 454 | "node": ">= 0.8" 455 | } 456 | }, 457 | "node_modules/parseurl": { 458 | "version": "1.3.3", 459 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 460 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 461 | "engines": { 462 | "node": ">= 0.8" 463 | } 464 | }, 465 | "node_modules/path-to-regexp": { 466 | "version": "0.1.7", 467 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 468 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 469 | }, 470 | "node_modules/proxy-addr": { 471 | "version": "2.0.7", 472 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 473 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 474 | "dependencies": { 475 | "forwarded": "0.2.0", 476 | "ipaddr.js": "1.9.1" 477 | }, 478 | "engines": { 479 | "node": ">= 0.10" 480 | } 481 | }, 482 | "node_modules/qs": { 483 | "version": "6.11.0", 484 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 485 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 486 | "dependencies": { 487 | "side-channel": "^1.0.4" 488 | }, 489 | "engines": { 490 | "node": ">=0.6" 491 | }, 492 | "funding": { 493 | "url": "https://github.com/sponsors/ljharb" 494 | } 495 | }, 496 | "node_modules/range-parser": { 497 | "version": "1.2.1", 498 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 499 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 500 | "engines": { 501 | "node": ">= 0.6" 502 | } 503 | }, 504 | "node_modules/raw-body": { 505 | "version": "2.5.1", 506 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 507 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 508 | "dependencies": { 509 | "bytes": "3.1.2", 510 | "http-errors": "2.0.0", 511 | "iconv-lite": "0.4.24", 512 | "unpipe": "1.0.0" 513 | }, 514 | "engines": { 515 | "node": ">= 0.8" 516 | } 517 | }, 518 | "node_modules/safe-buffer": { 519 | "version": "5.2.1", 520 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 521 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 522 | "funding": [ 523 | { 524 | "type": "github", 525 | "url": "https://github.com/sponsors/feross" 526 | }, 527 | { 528 | "type": "patreon", 529 | "url": "https://www.patreon.com/feross" 530 | }, 531 | { 532 | "type": "consulting", 533 | "url": "https://feross.org/support" 534 | } 535 | ] 536 | }, 537 | "node_modules/safer-buffer": { 538 | "version": "2.1.2", 539 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 540 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 541 | }, 542 | "node_modules/send": { 543 | "version": "0.18.0", 544 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 545 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 546 | "dependencies": { 547 | "debug": "2.6.9", 548 | "depd": "2.0.0", 549 | "destroy": "1.2.0", 550 | "encodeurl": "~1.0.2", 551 | "escape-html": "~1.0.3", 552 | "etag": "~1.8.1", 553 | "fresh": "0.5.2", 554 | "http-errors": "2.0.0", 555 | "mime": "1.6.0", 556 | "ms": "2.1.3", 557 | "on-finished": "2.4.1", 558 | "range-parser": "~1.2.1", 559 | "statuses": "2.0.1" 560 | }, 561 | "engines": { 562 | "node": ">= 0.8.0" 563 | } 564 | }, 565 | "node_modules/send/node_modules/ms": { 566 | "version": "2.1.3", 567 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 568 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 569 | }, 570 | "node_modules/serve-static": { 571 | "version": "1.15.0", 572 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 573 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 574 | "dependencies": { 575 | "encodeurl": "~1.0.2", 576 | "escape-html": "~1.0.3", 577 | "parseurl": "~1.3.3", 578 | "send": "0.18.0" 579 | }, 580 | "engines": { 581 | "node": ">= 0.8.0" 582 | } 583 | }, 584 | "node_modules/set-function-length": { 585 | "version": "1.1.1", 586 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", 587 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", 588 | "dependencies": { 589 | "define-data-property": "^1.1.1", 590 | "get-intrinsic": "^1.2.1", 591 | "gopd": "^1.0.1", 592 | "has-property-descriptors": "^1.0.0" 593 | }, 594 | "engines": { 595 | "node": ">= 0.4" 596 | } 597 | }, 598 | "node_modules/setprototypeof": { 599 | "version": "1.2.0", 600 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 601 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 602 | }, 603 | "node_modules/side-channel": { 604 | "version": "1.0.4", 605 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 606 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 607 | "dependencies": { 608 | "call-bind": "^1.0.0", 609 | "get-intrinsic": "^1.0.2", 610 | "object-inspect": "^1.9.0" 611 | }, 612 | "funding": { 613 | "url": "https://github.com/sponsors/ljharb" 614 | } 615 | }, 616 | "node_modules/statuses": { 617 | "version": "2.0.1", 618 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 619 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 620 | "engines": { 621 | "node": ">= 0.8" 622 | } 623 | }, 624 | "node_modules/toidentifier": { 625 | "version": "1.0.1", 626 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 627 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 628 | "engines": { 629 | "node": ">=0.6" 630 | } 631 | }, 632 | "node_modules/type-is": { 633 | "version": "1.6.18", 634 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 635 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 636 | "dependencies": { 637 | "media-typer": "0.3.0", 638 | "mime-types": "~2.1.24" 639 | }, 640 | "engines": { 641 | "node": ">= 0.6" 642 | } 643 | }, 644 | "node_modules/unpipe": { 645 | "version": "1.0.0", 646 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 647 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 648 | "engines": { 649 | "node": ">= 0.8" 650 | } 651 | }, 652 | "node_modules/utils-merge": { 653 | "version": "1.0.1", 654 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 655 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 656 | "engines": { 657 | "node": ">= 0.4.0" 658 | } 659 | }, 660 | "node_modules/vary": { 661 | "version": "1.1.2", 662 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 663 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 664 | "engines": { 665 | "node": ">= 0.8" 666 | } 667 | } 668 | }, 669 | "dependencies": { 670 | "accepts": { 671 | "version": "1.3.8", 672 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 673 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 674 | "requires": { 675 | "mime-types": "~2.1.34", 676 | "negotiator": "0.6.3" 677 | } 678 | }, 679 | "array-flatten": { 680 | "version": "1.1.1", 681 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 682 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 683 | }, 684 | "body-parser": { 685 | "version": "1.20.1", 686 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 687 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 688 | "requires": { 689 | "bytes": "3.1.2", 690 | "content-type": "~1.0.4", 691 | "debug": "2.6.9", 692 | "depd": "2.0.0", 693 | "destroy": "1.2.0", 694 | "http-errors": "2.0.0", 695 | "iconv-lite": "0.4.24", 696 | "on-finished": "2.4.1", 697 | "qs": "6.11.0", 698 | "raw-body": "2.5.1", 699 | "type-is": "~1.6.18", 700 | "unpipe": "1.0.0" 701 | } 702 | }, 703 | "bytes": { 704 | "version": "3.1.2", 705 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 706 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 707 | }, 708 | "call-bind": { 709 | "version": "1.0.5", 710 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", 711 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", 712 | "requires": { 713 | "function-bind": "^1.1.2", 714 | "get-intrinsic": "^1.2.1", 715 | "set-function-length": "^1.1.1" 716 | } 717 | }, 718 | "content-disposition": { 719 | "version": "0.5.4", 720 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 721 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 722 | "requires": { 723 | "safe-buffer": "5.2.1" 724 | } 725 | }, 726 | "content-type": { 727 | "version": "1.0.5", 728 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 729 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" 730 | }, 731 | "cookie": { 732 | "version": "0.5.0", 733 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 734 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 735 | }, 736 | "cookie-signature": { 737 | "version": "1.0.6", 738 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 739 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 740 | }, 741 | "debug": { 742 | "version": "2.6.9", 743 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 744 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 745 | "requires": { 746 | "ms": "2.0.0" 747 | } 748 | }, 749 | "define-data-property": { 750 | "version": "1.1.1", 751 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", 752 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", 753 | "requires": { 754 | "get-intrinsic": "^1.2.1", 755 | "gopd": "^1.0.1", 756 | "has-property-descriptors": "^1.0.0" 757 | } 758 | }, 759 | "depd": { 760 | "version": "2.0.0", 761 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 762 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 763 | }, 764 | "destroy": { 765 | "version": "1.2.0", 766 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 767 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 768 | }, 769 | "dotenv": { 770 | "version": "16.3.1", 771 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", 772 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" 773 | }, 774 | "ee-first": { 775 | "version": "1.1.1", 776 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 777 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 778 | }, 779 | "encodeurl": { 780 | "version": "1.0.2", 781 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 782 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 783 | }, 784 | "escape-html": { 785 | "version": "1.0.3", 786 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 787 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 788 | }, 789 | "etag": { 790 | "version": "1.8.1", 791 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 792 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 793 | }, 794 | "express": { 795 | "version": "4.18.2", 796 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 797 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 798 | "requires": { 799 | "accepts": "~1.3.8", 800 | "array-flatten": "1.1.1", 801 | "body-parser": "1.20.1", 802 | "content-disposition": "0.5.4", 803 | "content-type": "~1.0.4", 804 | "cookie": "0.5.0", 805 | "cookie-signature": "1.0.6", 806 | "debug": "2.6.9", 807 | "depd": "2.0.0", 808 | "encodeurl": "~1.0.2", 809 | "escape-html": "~1.0.3", 810 | "etag": "~1.8.1", 811 | "finalhandler": "1.2.0", 812 | "fresh": "0.5.2", 813 | "http-errors": "2.0.0", 814 | "merge-descriptors": "1.0.1", 815 | "methods": "~1.1.2", 816 | "on-finished": "2.4.1", 817 | "parseurl": "~1.3.3", 818 | "path-to-regexp": "0.1.7", 819 | "proxy-addr": "~2.0.7", 820 | "qs": "6.11.0", 821 | "range-parser": "~1.2.1", 822 | "safe-buffer": "5.2.1", 823 | "send": "0.18.0", 824 | "serve-static": "1.15.0", 825 | "setprototypeof": "1.2.0", 826 | "statuses": "2.0.1", 827 | "type-is": "~1.6.18", 828 | "utils-merge": "1.0.1", 829 | "vary": "~1.1.2" 830 | } 831 | }, 832 | "finalhandler": { 833 | "version": "1.2.0", 834 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 835 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 836 | "requires": { 837 | "debug": "2.6.9", 838 | "encodeurl": "~1.0.2", 839 | "escape-html": "~1.0.3", 840 | "on-finished": "2.4.1", 841 | "parseurl": "~1.3.3", 842 | "statuses": "2.0.1", 843 | "unpipe": "~1.0.0" 844 | } 845 | }, 846 | "forwarded": { 847 | "version": "0.2.0", 848 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 849 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 850 | }, 851 | "fresh": { 852 | "version": "0.5.2", 853 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 854 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 855 | }, 856 | "function-bind": { 857 | "version": "1.1.2", 858 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 859 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" 860 | }, 861 | "get-intrinsic": { 862 | "version": "1.2.2", 863 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", 864 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", 865 | "requires": { 866 | "function-bind": "^1.1.2", 867 | "has-proto": "^1.0.1", 868 | "has-symbols": "^1.0.3", 869 | "hasown": "^2.0.0" 870 | } 871 | }, 872 | "gopd": { 873 | "version": "1.0.1", 874 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 875 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 876 | "requires": { 877 | "get-intrinsic": "^1.1.3" 878 | } 879 | }, 880 | "has-property-descriptors": { 881 | "version": "1.0.1", 882 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", 883 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", 884 | "requires": { 885 | "get-intrinsic": "^1.2.2" 886 | } 887 | }, 888 | "has-proto": { 889 | "version": "1.0.1", 890 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 891 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" 892 | }, 893 | "has-symbols": { 894 | "version": "1.0.3", 895 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 896 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 897 | }, 898 | "hasown": { 899 | "version": "2.0.0", 900 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 901 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 902 | "requires": { 903 | "function-bind": "^1.1.2" 904 | } 905 | }, 906 | "http-errors": { 907 | "version": "2.0.0", 908 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 909 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 910 | "requires": { 911 | "depd": "2.0.0", 912 | "inherits": "2.0.4", 913 | "setprototypeof": "1.2.0", 914 | "statuses": "2.0.1", 915 | "toidentifier": "1.0.1" 916 | } 917 | }, 918 | "iconv-lite": { 919 | "version": "0.4.24", 920 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 921 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 922 | "requires": { 923 | "safer-buffer": ">= 2.1.2 < 3" 924 | } 925 | }, 926 | "inherits": { 927 | "version": "2.0.4", 928 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 929 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 930 | }, 931 | "ipaddr.js": { 932 | "version": "1.9.1", 933 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 934 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 935 | }, 936 | "media-typer": { 937 | "version": "0.3.0", 938 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 939 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 940 | }, 941 | "merge-descriptors": { 942 | "version": "1.0.1", 943 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 944 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 945 | }, 946 | "methods": { 947 | "version": "1.1.2", 948 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 949 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 950 | }, 951 | "mime": { 952 | "version": "1.6.0", 953 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 954 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 955 | }, 956 | "mime-db": { 957 | "version": "1.52.0", 958 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 959 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 960 | }, 961 | "mime-types": { 962 | "version": "2.1.35", 963 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 964 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 965 | "requires": { 966 | "mime-db": "1.52.0" 967 | } 968 | }, 969 | "ms": { 970 | "version": "2.0.0", 971 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 972 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 973 | }, 974 | "negotiator": { 975 | "version": "0.6.3", 976 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 977 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 978 | }, 979 | "object-inspect": { 980 | "version": "1.13.1", 981 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", 982 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" 983 | }, 984 | "on-finished": { 985 | "version": "2.4.1", 986 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 987 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 988 | "requires": { 989 | "ee-first": "1.1.1" 990 | } 991 | }, 992 | "parseurl": { 993 | "version": "1.3.3", 994 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 995 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 996 | }, 997 | "path-to-regexp": { 998 | "version": "0.1.7", 999 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1000 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1001 | }, 1002 | "proxy-addr": { 1003 | "version": "2.0.7", 1004 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1005 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1006 | "requires": { 1007 | "forwarded": "0.2.0", 1008 | "ipaddr.js": "1.9.1" 1009 | } 1010 | }, 1011 | "qs": { 1012 | "version": "6.11.0", 1013 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1014 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1015 | "requires": { 1016 | "side-channel": "^1.0.4" 1017 | } 1018 | }, 1019 | "range-parser": { 1020 | "version": "1.2.1", 1021 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1022 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1023 | }, 1024 | "raw-body": { 1025 | "version": "2.5.1", 1026 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1027 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1028 | "requires": { 1029 | "bytes": "3.1.2", 1030 | "http-errors": "2.0.0", 1031 | "iconv-lite": "0.4.24", 1032 | "unpipe": "1.0.0" 1033 | } 1034 | }, 1035 | "safe-buffer": { 1036 | "version": "5.2.1", 1037 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1038 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1039 | }, 1040 | "safer-buffer": { 1041 | "version": "2.1.2", 1042 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1043 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1044 | }, 1045 | "send": { 1046 | "version": "0.18.0", 1047 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1048 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1049 | "requires": { 1050 | "debug": "2.6.9", 1051 | "depd": "2.0.0", 1052 | "destroy": "1.2.0", 1053 | "encodeurl": "~1.0.2", 1054 | "escape-html": "~1.0.3", 1055 | "etag": "~1.8.1", 1056 | "fresh": "0.5.2", 1057 | "http-errors": "2.0.0", 1058 | "mime": "1.6.0", 1059 | "ms": "2.1.3", 1060 | "on-finished": "2.4.1", 1061 | "range-parser": "~1.2.1", 1062 | "statuses": "2.0.1" 1063 | }, 1064 | "dependencies": { 1065 | "ms": { 1066 | "version": "2.1.3", 1067 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1068 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1069 | } 1070 | } 1071 | }, 1072 | "serve-static": { 1073 | "version": "1.15.0", 1074 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1075 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1076 | "requires": { 1077 | "encodeurl": "~1.0.2", 1078 | "escape-html": "~1.0.3", 1079 | "parseurl": "~1.3.3", 1080 | "send": "0.18.0" 1081 | } 1082 | }, 1083 | "set-function-length": { 1084 | "version": "1.1.1", 1085 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", 1086 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", 1087 | "requires": { 1088 | "define-data-property": "^1.1.1", 1089 | "get-intrinsic": "^1.2.1", 1090 | "gopd": "^1.0.1", 1091 | "has-property-descriptors": "^1.0.0" 1092 | } 1093 | }, 1094 | "setprototypeof": { 1095 | "version": "1.2.0", 1096 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1097 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1098 | }, 1099 | "side-channel": { 1100 | "version": "1.0.4", 1101 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1102 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1103 | "requires": { 1104 | "call-bind": "^1.0.0", 1105 | "get-intrinsic": "^1.0.2", 1106 | "object-inspect": "^1.9.0" 1107 | } 1108 | }, 1109 | "statuses": { 1110 | "version": "2.0.1", 1111 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1112 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1113 | }, 1114 | "toidentifier": { 1115 | "version": "1.0.1", 1116 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1117 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1118 | }, 1119 | "type-is": { 1120 | "version": "1.6.18", 1121 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1122 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1123 | "requires": { 1124 | "media-typer": "0.3.0", 1125 | "mime-types": "~2.1.24" 1126 | } 1127 | }, 1128 | "unpipe": { 1129 | "version": "1.0.0", 1130 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1131 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1132 | }, 1133 | "utils-merge": { 1134 | "version": "1.0.1", 1135 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1136 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1137 | }, 1138 | "vary": { 1139 | "version": "1.1.2", 1140 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1141 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1142 | } 1143 | } 1144 | } 1145 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world-node", 3 | "version": "1.0.0", 4 | "description": "An example of how to set your Node.js application up to enable deployment on Kinsta App Hosting services.", 5 | "main": "server.js", 6 | "scripts": { 7 | "start": "node server.js" 8 | }, 9 | "author": "", 10 | "license": "MIT", 11 | "dependencies": { 12 | "dotenv": "^16.3.1", 13 | "express": "^4.18.2" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | const express = require('express') 3 | const path = require('path') 4 | const app = express() 5 | 6 | app.get('/', async (req, res) => { 7 | res.sendFile(path.join(__dirname, '/index.html')); 8 | }) 9 | 10 | app.listen(process.env.PORT, () => { 11 | console.log(`Hello World Application is running on port ${process.env.PORT}`) 12 | }) 13 | --------------------------------------------------------------------------------