Hey, check out this crazy news article that totally isn't a rickroll

initial commit

+103
.gitignore
···
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + lerna-debug.log* 8 + 9 + # Diagnostic reports (https://nodejs.org/api/report.html) 10 + report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 + 12 + # Runtime data 13 + pids 14 + *.pid 15 + *.seed 16 + *.pid.lock 17 + 18 + # Directory for instrumented libs generated by jscoverage/JSCover 19 + lib-cov 20 + 21 + # Coverage directory used by tools like istanbul 22 + coverage 23 + *.lcov 24 + 25 + # nyc test coverage 26 + .nyc_output 27 + 28 + # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 + .grunt 30 + 31 + # Bower dependency directory (https://bower.io/) 32 + bower_components 33 + 34 + # node-waf configuration 35 + .lock-wscript 36 + 37 + # Compiled binary addons (https://nodejs.org/api/addons.html) 38 + build/Release 39 + 40 + # Dependency directories 41 + node_modules/ 42 + jspm_packages/ 43 + 44 + # TypeScript v1 declaration files 45 + typings/ 46 + 47 + # TypeScript cache 48 + *.tsbuildinfo 49 + 50 + # Optional npm cache directory 51 + .npm 52 + 53 + # Optional eslint cache 54 + .eslintcache 55 + 56 + # Microbundle cache 57 + .rpt2_cache/ 58 + .rts2_cache_cjs/ 59 + .rts2_cache_es/ 60 + .rts2_cache_umd/ 61 + 62 + # Optional REPL history 63 + .node_repl_history 64 + 65 + # Output of 'npm pack' 66 + *.tgz 67 + 68 + # Yarn Integrity file 69 + .yarn-integrity 70 + 71 + # dotenv environment variables file 72 + .env 73 + .env.test 74 + 75 + # parcel-bundler cache (https://parceljs.org/) 76 + .cache 77 + 78 + # next.js build output 79 + .next 80 + 81 + # nuxt.js build output 82 + .nuxt 83 + 84 + # gatsby files 85 + .cache/ 86 + public 87 + 88 + # vuepress build output 89 + .vuepress/dist 90 + 91 + # Serverless directories 92 + .serverless/ 93 + 94 + # FuseBox cache 95 + .fusebox/ 96 + 97 + # DynamoDB Local files 98 + .dynamodb/ 99 + 100 + 101 + # custom .gitignore 102 + .vscode 103 + *:Zone.Identifier
+22
Dockerfile
···
··· 1 + FROM node:lts-alpine3.15 AS install 2 + 3 + WORKDIR /usr/src/app 4 + 5 + COPY package*.json ./ 6 + 7 + ENV NPM_CONFIG_LOGLEVEL warn 8 + RUN npm ci --only=production 9 + 10 + COPY . . 11 + 12 + FROM node:lts-alpine3.15 13 + 14 + WORKDIR /usr/src/app 15 + 16 + COPY --from=install /usr/src/app /usr/src/app/ 17 + 18 + USER node 19 + 20 + CMD [ "npm", "start" ] 21 + 22 + EXPOSE 8080
+44
Web.js
···
··· 1 + const fs = require('fs'); 2 + const path = require('path'); 3 + const express = require('express'); 4 + const exuseragent = require('express-useragent'); 5 + 6 + 7 + class Web { 8 + constructor() { 9 + const port = process.env.PORT || 8080; 10 + const app = express(); 11 + app.set('trust proxy', 1); 12 + app.use(exuseragent.express()); 13 + app.use('/assets/', express.static('assets')); 14 + 15 + app.get('/', (req, res) => { 16 + res.sendFile(path.join(__dirname, 'views', 'index.html')); 17 + }); 18 + 19 + app.get('/*', (req, res) => { 20 + if (req.useragent.isBot) { 21 + let components = req.url.split('/'); 22 + let dest = ''; 23 + components.forEach(c => { 24 + dest = `${c}/${dest}`; 25 + }); 26 + dest = `https://${dest}`; 27 + res.redirect(dest); 28 + } 29 + else { 30 + res.redirect('https://www.youtube.com/watch?v=dQw4w9WgXcQ'); 31 + } 32 + }); 33 + 34 + this._server = app.listen(port, () => console.log(`rickognito running on port ${port}!`)); 35 + } 36 + 37 + close() { 38 + if (this._server) { 39 + this._server.close(); 40 + } 41 + } 42 + } 43 + 44 + module.exports = Web;
+4
assets/css/styles.css
···
··· 1 + html, 2 + body { 3 + font-family: 'Courier New', Courier, monospace; 4 + }
+17
assets/js/url.js
···
··· 1 + document.addEventListener("DOMContentLoaded", function () { 2 + const url = new URL(window.location.href); 3 + let input = document.getElementById('urlinput'); 4 + let output = document.getElementById('urloutput'); 5 + let protocol = new RegExp('^[A-Za-z]+://'); 6 + 7 + input.addEventListener('change', (e) => { 8 + let intext = e.currentTarget.value.replace(protocol, ''); 9 + let components = intext.split('/'); 10 + let out = ''; 11 + components.forEach(c => { 12 + out = `${c}/${out}`; 13 + }); 14 + out = `${url.protocol}//${url.hostname}/${out}`; 15 + output.value = out; 16 + }); 17 + });
+6
index.js
···
··· 1 + const WormWeb = require('./Web.js'); 2 + 3 + const web = new WormWeb(); 4 + process.on('SIGTERM', () => { 5 + web.close(); 6 + });
+1032
package-lock.json
···
··· 1 + { 2 + "name": "rickognito", 3 + "version": "0.0.1", 4 + "lockfileVersion": 2, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "rickognito", 9 + "version": "0.0.1", 10 + "license": "MIT", 11 + "dependencies": { 12 + "express": "^4.18.1", 13 + "express-useragent": "^1.0.15" 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": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 32 + }, 33 + "node_modules/body-parser": { 34 + "version": "1.20.0", 35 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 36 + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 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.10.3", 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.2", 66 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 67 + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 68 + "dependencies": { 69 + "function-bind": "^1.1.1", 70 + "get-intrinsic": "^1.0.2" 71 + }, 72 + "funding": { 73 + "url": "https://github.com/sponsors/ljharb" 74 + } 75 + }, 76 + "node_modules/content-disposition": { 77 + "version": "0.5.4", 78 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 79 + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 80 + "dependencies": { 81 + "safe-buffer": "5.2.1" 82 + }, 83 + "engines": { 84 + "node": ">= 0.6" 85 + } 86 + }, 87 + "node_modules/content-type": { 88 + "version": "1.0.4", 89 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 90 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 91 + "engines": { 92 + "node": ">= 0.6" 93 + } 94 + }, 95 + "node_modules/cookie": { 96 + "version": "0.5.0", 97 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 98 + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 99 + "engines": { 100 + "node": ">= 0.6" 101 + } 102 + }, 103 + "node_modules/cookie-signature": { 104 + "version": "1.0.6", 105 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 106 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 107 + }, 108 + "node_modules/debug": { 109 + "version": "2.6.9", 110 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 111 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 112 + "dependencies": { 113 + "ms": "2.0.0" 114 + } 115 + }, 116 + "node_modules/depd": { 117 + "version": "2.0.0", 118 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 119 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 120 + "engines": { 121 + "node": ">= 0.8" 122 + } 123 + }, 124 + "node_modules/destroy": { 125 + "version": "1.2.0", 126 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 127 + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 128 + "engines": { 129 + "node": ">= 0.8", 130 + "npm": "1.2.8000 || >= 1.4.16" 131 + } 132 + }, 133 + "node_modules/ee-first": { 134 + "version": "1.1.1", 135 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 136 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 137 + }, 138 + "node_modules/encodeurl": { 139 + "version": "1.0.2", 140 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 141 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 142 + "engines": { 143 + "node": ">= 0.8" 144 + } 145 + }, 146 + "node_modules/escape-html": { 147 + "version": "1.0.3", 148 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 149 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 150 + }, 151 + "node_modules/etag": { 152 + "version": "1.8.1", 153 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 154 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 155 + "engines": { 156 + "node": ">= 0.6" 157 + } 158 + }, 159 + "node_modules/express": { 160 + "version": "4.18.1", 161 + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 162 + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 163 + "dependencies": { 164 + "accepts": "~1.3.8", 165 + "array-flatten": "1.1.1", 166 + "body-parser": "1.20.0", 167 + "content-disposition": "0.5.4", 168 + "content-type": "~1.0.4", 169 + "cookie": "0.5.0", 170 + "cookie-signature": "1.0.6", 171 + "debug": "2.6.9", 172 + "depd": "2.0.0", 173 + "encodeurl": "~1.0.2", 174 + "escape-html": "~1.0.3", 175 + "etag": "~1.8.1", 176 + "finalhandler": "1.2.0", 177 + "fresh": "0.5.2", 178 + "http-errors": "2.0.0", 179 + "merge-descriptors": "1.0.1", 180 + "methods": "~1.1.2", 181 + "on-finished": "2.4.1", 182 + "parseurl": "~1.3.3", 183 + "path-to-regexp": "0.1.7", 184 + "proxy-addr": "~2.0.7", 185 + "qs": "6.10.3", 186 + "range-parser": "~1.2.1", 187 + "safe-buffer": "5.2.1", 188 + "send": "0.18.0", 189 + "serve-static": "1.15.0", 190 + "setprototypeof": "1.2.0", 191 + "statuses": "2.0.1", 192 + "type-is": "~1.6.18", 193 + "utils-merge": "1.0.1", 194 + "vary": "~1.1.2" 195 + }, 196 + "engines": { 197 + "node": ">= 0.10.0" 198 + } 199 + }, 200 + "node_modules/express-useragent": { 201 + "version": "1.0.15", 202 + "resolved": "https://registry.npmjs.org/express-useragent/-/express-useragent-1.0.15.tgz", 203 + "integrity": "sha512-eq5xMiYCYwFPoekffMjvEIk+NWdlQY9Y38OsTyl13IvA728vKT+q/CSERYWzcw93HGBJcIqMIsZC5CZGARPVdg==", 204 + "engines": { 205 + "node": ">=4.5" 206 + } 207 + }, 208 + "node_modules/finalhandler": { 209 + "version": "1.2.0", 210 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 211 + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 212 + "dependencies": { 213 + "debug": "2.6.9", 214 + "encodeurl": "~1.0.2", 215 + "escape-html": "~1.0.3", 216 + "on-finished": "2.4.1", 217 + "parseurl": "~1.3.3", 218 + "statuses": "2.0.1", 219 + "unpipe": "~1.0.0" 220 + }, 221 + "engines": { 222 + "node": ">= 0.8" 223 + } 224 + }, 225 + "node_modules/forwarded": { 226 + "version": "0.2.0", 227 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 228 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 229 + "engines": { 230 + "node": ">= 0.6" 231 + } 232 + }, 233 + "node_modules/fresh": { 234 + "version": "0.5.2", 235 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 236 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 237 + "engines": { 238 + "node": ">= 0.6" 239 + } 240 + }, 241 + "node_modules/function-bind": { 242 + "version": "1.1.1", 243 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 244 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 245 + }, 246 + "node_modules/get-intrinsic": { 247 + "version": "1.1.1", 248 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 249 + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 250 + "dependencies": { 251 + "function-bind": "^1.1.1", 252 + "has": "^1.0.3", 253 + "has-symbols": "^1.0.1" 254 + }, 255 + "funding": { 256 + "url": "https://github.com/sponsors/ljharb" 257 + } 258 + }, 259 + "node_modules/has": { 260 + "version": "1.0.3", 261 + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 262 + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 263 + "dependencies": { 264 + "function-bind": "^1.1.1" 265 + }, 266 + "engines": { 267 + "node": ">= 0.4.0" 268 + } 269 + }, 270 + "node_modules/has-symbols": { 271 + "version": "1.0.3", 272 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 273 + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 274 + "engines": { 275 + "node": ">= 0.4" 276 + }, 277 + "funding": { 278 + "url": "https://github.com/sponsors/ljharb" 279 + } 280 + }, 281 + "node_modules/http-errors": { 282 + "version": "2.0.0", 283 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 284 + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 285 + "dependencies": { 286 + "depd": "2.0.0", 287 + "inherits": "2.0.4", 288 + "setprototypeof": "1.2.0", 289 + "statuses": "2.0.1", 290 + "toidentifier": "1.0.1" 291 + }, 292 + "engines": { 293 + "node": ">= 0.8" 294 + } 295 + }, 296 + "node_modules/iconv-lite": { 297 + "version": "0.4.24", 298 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 299 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 300 + "dependencies": { 301 + "safer-buffer": ">= 2.1.2 < 3" 302 + }, 303 + "engines": { 304 + "node": ">=0.10.0" 305 + } 306 + }, 307 + "node_modules/inherits": { 308 + "version": "2.0.4", 309 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 310 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 311 + }, 312 + "node_modules/ipaddr.js": { 313 + "version": "1.9.1", 314 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 315 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 316 + "engines": { 317 + "node": ">= 0.10" 318 + } 319 + }, 320 + "node_modules/media-typer": { 321 + "version": "0.3.0", 322 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 323 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 324 + "engines": { 325 + "node": ">= 0.6" 326 + } 327 + }, 328 + "node_modules/merge-descriptors": { 329 + "version": "1.0.1", 330 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 331 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 332 + }, 333 + "node_modules/methods": { 334 + "version": "1.1.2", 335 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 336 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 337 + "engines": { 338 + "node": ">= 0.6" 339 + } 340 + }, 341 + "node_modules/mime": { 342 + "version": "1.6.0", 343 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 344 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 345 + "bin": { 346 + "mime": "cli.js" 347 + }, 348 + "engines": { 349 + "node": ">=4" 350 + } 351 + }, 352 + "node_modules/mime-db": { 353 + "version": "1.52.0", 354 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 355 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 356 + "engines": { 357 + "node": ">= 0.6" 358 + } 359 + }, 360 + "node_modules/mime-types": { 361 + "version": "2.1.35", 362 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 363 + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 364 + "dependencies": { 365 + "mime-db": "1.52.0" 366 + }, 367 + "engines": { 368 + "node": ">= 0.6" 369 + } 370 + }, 371 + "node_modules/ms": { 372 + "version": "2.0.0", 373 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 374 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 375 + }, 376 + "node_modules/negotiator": { 377 + "version": "0.6.3", 378 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 379 + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 380 + "engines": { 381 + "node": ">= 0.6" 382 + } 383 + }, 384 + "node_modules/object-inspect": { 385 + "version": "1.12.0", 386 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", 387 + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", 388 + "funding": { 389 + "url": "https://github.com/sponsors/ljharb" 390 + } 391 + }, 392 + "node_modules/on-finished": { 393 + "version": "2.4.1", 394 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 395 + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 396 + "dependencies": { 397 + "ee-first": "1.1.1" 398 + }, 399 + "engines": { 400 + "node": ">= 0.8" 401 + } 402 + }, 403 + "node_modules/parseurl": { 404 + "version": "1.3.3", 405 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 406 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 407 + "engines": { 408 + "node": ">= 0.8" 409 + } 410 + }, 411 + "node_modules/path-to-regexp": { 412 + "version": "0.1.7", 413 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 414 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 415 + }, 416 + "node_modules/proxy-addr": { 417 + "version": "2.0.7", 418 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 419 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 420 + "dependencies": { 421 + "forwarded": "0.2.0", 422 + "ipaddr.js": "1.9.1" 423 + }, 424 + "engines": { 425 + "node": ">= 0.10" 426 + } 427 + }, 428 + "node_modules/qs": { 429 + "version": "6.10.3", 430 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 431 + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 432 + "dependencies": { 433 + "side-channel": "^1.0.4" 434 + }, 435 + "engines": { 436 + "node": ">=0.6" 437 + }, 438 + "funding": { 439 + "url": "https://github.com/sponsors/ljharb" 440 + } 441 + }, 442 + "node_modules/range-parser": { 443 + "version": "1.2.1", 444 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 445 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 446 + "engines": { 447 + "node": ">= 0.6" 448 + } 449 + }, 450 + "node_modules/raw-body": { 451 + "version": "2.5.1", 452 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 453 + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 454 + "dependencies": { 455 + "bytes": "3.1.2", 456 + "http-errors": "2.0.0", 457 + "iconv-lite": "0.4.24", 458 + "unpipe": "1.0.0" 459 + }, 460 + "engines": { 461 + "node": ">= 0.8" 462 + } 463 + }, 464 + "node_modules/safe-buffer": { 465 + "version": "5.2.1", 466 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 467 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 468 + "funding": [ 469 + { 470 + "type": "github", 471 + "url": "https://github.com/sponsors/feross" 472 + }, 473 + { 474 + "type": "patreon", 475 + "url": "https://www.patreon.com/feross" 476 + }, 477 + { 478 + "type": "consulting", 479 + "url": "https://feross.org/support" 480 + } 481 + ] 482 + }, 483 + "node_modules/safer-buffer": { 484 + "version": "2.1.2", 485 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 486 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 487 + }, 488 + "node_modules/send": { 489 + "version": "0.18.0", 490 + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 491 + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 492 + "dependencies": { 493 + "debug": "2.6.9", 494 + "depd": "2.0.0", 495 + "destroy": "1.2.0", 496 + "encodeurl": "~1.0.2", 497 + "escape-html": "~1.0.3", 498 + "etag": "~1.8.1", 499 + "fresh": "0.5.2", 500 + "http-errors": "2.0.0", 501 + "mime": "1.6.0", 502 + "ms": "2.1.3", 503 + "on-finished": "2.4.1", 504 + "range-parser": "~1.2.1", 505 + "statuses": "2.0.1" 506 + }, 507 + "engines": { 508 + "node": ">= 0.8.0" 509 + } 510 + }, 511 + "node_modules/send/node_modules/ms": { 512 + "version": "2.1.3", 513 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 514 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 515 + }, 516 + "node_modules/serve-static": { 517 + "version": "1.15.0", 518 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 519 + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 520 + "dependencies": { 521 + "encodeurl": "~1.0.2", 522 + "escape-html": "~1.0.3", 523 + "parseurl": "~1.3.3", 524 + "send": "0.18.0" 525 + }, 526 + "engines": { 527 + "node": ">= 0.8.0" 528 + } 529 + }, 530 + "node_modules/setprototypeof": { 531 + "version": "1.2.0", 532 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 533 + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 534 + }, 535 + "node_modules/side-channel": { 536 + "version": "1.0.4", 537 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 538 + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 539 + "dependencies": { 540 + "call-bind": "^1.0.0", 541 + "get-intrinsic": "^1.0.2", 542 + "object-inspect": "^1.9.0" 543 + }, 544 + "funding": { 545 + "url": "https://github.com/sponsors/ljharb" 546 + } 547 + }, 548 + "node_modules/statuses": { 549 + "version": "2.0.1", 550 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 551 + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 552 + "engines": { 553 + "node": ">= 0.8" 554 + } 555 + }, 556 + "node_modules/toidentifier": { 557 + "version": "1.0.1", 558 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 559 + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 560 + "engines": { 561 + "node": ">=0.6" 562 + } 563 + }, 564 + "node_modules/type-is": { 565 + "version": "1.6.18", 566 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 567 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 568 + "dependencies": { 569 + "media-typer": "0.3.0", 570 + "mime-types": "~2.1.24" 571 + }, 572 + "engines": { 573 + "node": ">= 0.6" 574 + } 575 + }, 576 + "node_modules/unpipe": { 577 + "version": "1.0.0", 578 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 579 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 580 + "engines": { 581 + "node": ">= 0.8" 582 + } 583 + }, 584 + "node_modules/utils-merge": { 585 + "version": "1.0.1", 586 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 587 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 588 + "engines": { 589 + "node": ">= 0.4.0" 590 + } 591 + }, 592 + "node_modules/vary": { 593 + "version": "1.1.2", 594 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 595 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 596 + "engines": { 597 + "node": ">= 0.8" 598 + } 599 + } 600 + }, 601 + "dependencies": { 602 + "accepts": { 603 + "version": "1.3.8", 604 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 605 + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 606 + "requires": { 607 + "mime-types": "~2.1.34", 608 + "negotiator": "0.6.3" 609 + } 610 + }, 611 + "array-flatten": { 612 + "version": "1.1.1", 613 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 614 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 615 + }, 616 + "body-parser": { 617 + "version": "1.20.0", 618 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 619 + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 620 + "requires": { 621 + "bytes": "3.1.2", 622 + "content-type": "~1.0.4", 623 + "debug": "2.6.9", 624 + "depd": "2.0.0", 625 + "destroy": "1.2.0", 626 + "http-errors": "2.0.0", 627 + "iconv-lite": "0.4.24", 628 + "on-finished": "2.4.1", 629 + "qs": "6.10.3", 630 + "raw-body": "2.5.1", 631 + "type-is": "~1.6.18", 632 + "unpipe": "1.0.0" 633 + } 634 + }, 635 + "bytes": { 636 + "version": "3.1.2", 637 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 638 + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 639 + }, 640 + "call-bind": { 641 + "version": "1.0.2", 642 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 643 + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 644 + "requires": { 645 + "function-bind": "^1.1.1", 646 + "get-intrinsic": "^1.0.2" 647 + } 648 + }, 649 + "content-disposition": { 650 + "version": "0.5.4", 651 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 652 + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 653 + "requires": { 654 + "safe-buffer": "5.2.1" 655 + } 656 + }, 657 + "content-type": { 658 + "version": "1.0.4", 659 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 660 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 661 + }, 662 + "cookie": { 663 + "version": "0.5.0", 664 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 665 + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 666 + }, 667 + "cookie-signature": { 668 + "version": "1.0.6", 669 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 670 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 671 + }, 672 + "debug": { 673 + "version": "2.6.9", 674 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 675 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 676 + "requires": { 677 + "ms": "2.0.0" 678 + } 679 + }, 680 + "depd": { 681 + "version": "2.0.0", 682 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 683 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 684 + }, 685 + "destroy": { 686 + "version": "1.2.0", 687 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 688 + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 689 + }, 690 + "ee-first": { 691 + "version": "1.1.1", 692 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 693 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 694 + }, 695 + "encodeurl": { 696 + "version": "1.0.2", 697 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 698 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 699 + }, 700 + "escape-html": { 701 + "version": "1.0.3", 702 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 703 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 704 + }, 705 + "etag": { 706 + "version": "1.8.1", 707 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 708 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 709 + }, 710 + "express": { 711 + "version": "4.18.1", 712 + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 713 + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 714 + "requires": { 715 + "accepts": "~1.3.8", 716 + "array-flatten": "1.1.1", 717 + "body-parser": "1.20.0", 718 + "content-disposition": "0.5.4", 719 + "content-type": "~1.0.4", 720 + "cookie": "0.5.0", 721 + "cookie-signature": "1.0.6", 722 + "debug": "2.6.9", 723 + "depd": "2.0.0", 724 + "encodeurl": "~1.0.2", 725 + "escape-html": "~1.0.3", 726 + "etag": "~1.8.1", 727 + "finalhandler": "1.2.0", 728 + "fresh": "0.5.2", 729 + "http-errors": "2.0.0", 730 + "merge-descriptors": "1.0.1", 731 + "methods": "~1.1.2", 732 + "on-finished": "2.4.1", 733 + "parseurl": "~1.3.3", 734 + "path-to-regexp": "0.1.7", 735 + "proxy-addr": "~2.0.7", 736 + "qs": "6.10.3", 737 + "range-parser": "~1.2.1", 738 + "safe-buffer": "5.2.1", 739 + "send": "0.18.0", 740 + "serve-static": "1.15.0", 741 + "setprototypeof": "1.2.0", 742 + "statuses": "2.0.1", 743 + "type-is": "~1.6.18", 744 + "utils-merge": "1.0.1", 745 + "vary": "~1.1.2" 746 + } 747 + }, 748 + "express-useragent": { 749 + "version": "1.0.15", 750 + "resolved": "https://registry.npmjs.org/express-useragent/-/express-useragent-1.0.15.tgz", 751 + "integrity": "sha512-eq5xMiYCYwFPoekffMjvEIk+NWdlQY9Y38OsTyl13IvA728vKT+q/CSERYWzcw93HGBJcIqMIsZC5CZGARPVdg==" 752 + }, 753 + "finalhandler": { 754 + "version": "1.2.0", 755 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 756 + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 757 + "requires": { 758 + "debug": "2.6.9", 759 + "encodeurl": "~1.0.2", 760 + "escape-html": "~1.0.3", 761 + "on-finished": "2.4.1", 762 + "parseurl": "~1.3.3", 763 + "statuses": "2.0.1", 764 + "unpipe": "~1.0.0" 765 + } 766 + }, 767 + "forwarded": { 768 + "version": "0.2.0", 769 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 770 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 771 + }, 772 + "fresh": { 773 + "version": "0.5.2", 774 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 775 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 776 + }, 777 + "function-bind": { 778 + "version": "1.1.1", 779 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 780 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 781 + }, 782 + "get-intrinsic": { 783 + "version": "1.1.1", 784 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 785 + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 786 + "requires": { 787 + "function-bind": "^1.1.1", 788 + "has": "^1.0.3", 789 + "has-symbols": "^1.0.1" 790 + } 791 + }, 792 + "has": { 793 + "version": "1.0.3", 794 + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 795 + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 796 + "requires": { 797 + "function-bind": "^1.1.1" 798 + } 799 + }, 800 + "has-symbols": { 801 + "version": "1.0.3", 802 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 803 + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 804 + }, 805 + "http-errors": { 806 + "version": "2.0.0", 807 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 808 + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 809 + "requires": { 810 + "depd": "2.0.0", 811 + "inherits": "2.0.4", 812 + "setprototypeof": "1.2.0", 813 + "statuses": "2.0.1", 814 + "toidentifier": "1.0.1" 815 + } 816 + }, 817 + "iconv-lite": { 818 + "version": "0.4.24", 819 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 820 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 821 + "requires": { 822 + "safer-buffer": ">= 2.1.2 < 3" 823 + } 824 + }, 825 + "inherits": { 826 + "version": "2.0.4", 827 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 828 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 829 + }, 830 + "ipaddr.js": { 831 + "version": "1.9.1", 832 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 833 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 834 + }, 835 + "media-typer": { 836 + "version": "0.3.0", 837 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 838 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 839 + }, 840 + "merge-descriptors": { 841 + "version": "1.0.1", 842 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 843 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 844 + }, 845 + "methods": { 846 + "version": "1.1.2", 847 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 848 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 849 + }, 850 + "mime": { 851 + "version": "1.6.0", 852 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 853 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 854 + }, 855 + "mime-db": { 856 + "version": "1.52.0", 857 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 858 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 859 + }, 860 + "mime-types": { 861 + "version": "2.1.35", 862 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 863 + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 864 + "requires": { 865 + "mime-db": "1.52.0" 866 + } 867 + }, 868 + "ms": { 869 + "version": "2.0.0", 870 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 871 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 872 + }, 873 + "negotiator": { 874 + "version": "0.6.3", 875 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 876 + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 877 + }, 878 + "object-inspect": { 879 + "version": "1.12.0", 880 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", 881 + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" 882 + }, 883 + "on-finished": { 884 + "version": "2.4.1", 885 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 886 + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 887 + "requires": { 888 + "ee-first": "1.1.1" 889 + } 890 + }, 891 + "parseurl": { 892 + "version": "1.3.3", 893 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 894 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 895 + }, 896 + "path-to-regexp": { 897 + "version": "0.1.7", 898 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 899 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 900 + }, 901 + "proxy-addr": { 902 + "version": "2.0.7", 903 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 904 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 905 + "requires": { 906 + "forwarded": "0.2.0", 907 + "ipaddr.js": "1.9.1" 908 + } 909 + }, 910 + "qs": { 911 + "version": "6.10.3", 912 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 913 + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 914 + "requires": { 915 + "side-channel": "^1.0.4" 916 + } 917 + }, 918 + "range-parser": { 919 + "version": "1.2.1", 920 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 921 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 922 + }, 923 + "raw-body": { 924 + "version": "2.5.1", 925 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 926 + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 927 + "requires": { 928 + "bytes": "3.1.2", 929 + "http-errors": "2.0.0", 930 + "iconv-lite": "0.4.24", 931 + "unpipe": "1.0.0" 932 + } 933 + }, 934 + "safe-buffer": { 935 + "version": "5.2.1", 936 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 937 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 938 + }, 939 + "safer-buffer": { 940 + "version": "2.1.2", 941 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 942 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 943 + }, 944 + "send": { 945 + "version": "0.18.0", 946 + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 947 + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 948 + "requires": { 949 + "debug": "2.6.9", 950 + "depd": "2.0.0", 951 + "destroy": "1.2.0", 952 + "encodeurl": "~1.0.2", 953 + "escape-html": "~1.0.3", 954 + "etag": "~1.8.1", 955 + "fresh": "0.5.2", 956 + "http-errors": "2.0.0", 957 + "mime": "1.6.0", 958 + "ms": "2.1.3", 959 + "on-finished": "2.4.1", 960 + "range-parser": "~1.2.1", 961 + "statuses": "2.0.1" 962 + }, 963 + "dependencies": { 964 + "ms": { 965 + "version": "2.1.3", 966 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 967 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 968 + } 969 + } 970 + }, 971 + "serve-static": { 972 + "version": "1.15.0", 973 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 974 + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 975 + "requires": { 976 + "encodeurl": "~1.0.2", 977 + "escape-html": "~1.0.3", 978 + "parseurl": "~1.3.3", 979 + "send": "0.18.0" 980 + } 981 + }, 982 + "setprototypeof": { 983 + "version": "1.2.0", 984 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 985 + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 986 + }, 987 + "side-channel": { 988 + "version": "1.0.4", 989 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 990 + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 991 + "requires": { 992 + "call-bind": "^1.0.0", 993 + "get-intrinsic": "^1.0.2", 994 + "object-inspect": "^1.9.0" 995 + } 996 + }, 997 + "statuses": { 998 + "version": "2.0.1", 999 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1000 + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1001 + }, 1002 + "toidentifier": { 1003 + "version": "1.0.1", 1004 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1005 + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1006 + }, 1007 + "type-is": { 1008 + "version": "1.6.18", 1009 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1010 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1011 + "requires": { 1012 + "media-typer": "0.3.0", 1013 + "mime-types": "~2.1.24" 1014 + } 1015 + }, 1016 + "unpipe": { 1017 + "version": "1.0.0", 1018 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1019 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1020 + }, 1021 + "utils-merge": { 1022 + "version": "1.0.1", 1023 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1024 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1025 + }, 1026 + "vary": { 1027 + "version": "1.1.2", 1028 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1029 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1030 + } 1031 + } 1032 + }
+20
package.json
···
··· 1 + { 2 + "name": "rickognito", 3 + "version": "0.0.1", 4 + "description": "Disguise a rickroll", 5 + "main": "index.js", 6 + "repository": { 7 + "type": "git", 8 + "url": "git+ssh://git@gitlab.com/sanin.dev/rickognito.git" 9 + }, 10 + "author": "Cory Sanin", 11 + "license": "MIT", 12 + "bugs": { 13 + "url": "https://gitlab.com/sanin.dev/rickognito/issues" 14 + }, 15 + "homepage": "https://gitlab.com/sanin.dev/rickognito#readme", 16 + "dependencies": { 17 + "express": "^4.18.1", 18 + "express-useragent": "^1.0.15" 19 + } 20 + }
+31
views/index.html
···
··· 1 + <!DOCTYPE html> 2 + <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 3 + 4 + <head> 5 + <meta charset="utf-8" /> 6 + <title> 7 + Rickognito 8 + </title> 9 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 10 + <meta name="og:title" content="Rickognito" /> 11 + <meta name="description" content="Definitely a legit site" /> 12 + <meta name="og:description" content="Definitely a legit site" /> 13 + <link rel="icon" 14 + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🕴️</text></svg>"> 15 + <link rel="stylesheet" href="/assets/css/styles.css?v1"> 16 + </head> 17 + 18 + <body> 19 + <div id="main"> 20 + <div id="container" class="panel"> 21 + <label for="urlinput">Mask URL:</label> 22 + <input name="in" type="text" id="urlinput" /> 23 + 24 + <label for="urloutput">Disguised URL:</label> 25 + <input type="text" readonly id="urloutput" /> 26 + </div> 27 + </div> 28 + <script src="/assets/js/url.js" defer></script> 29 + </body> 30 + 31 + </html>