├── .gitignore ├── README.md ├── app.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .env -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dial-up (Server) 2 | 3 | ## Access the internet over SMS! 4 | 5 | ### To see the companion app, check out this repo: https://github.com/alexandra03/dialup-app 6 | 7 | To run: clone the repo, create a Twilio account (buy phone number and forward SMS to the server where this will be running at `/get`), add relevant `ENV` variables, and run `node app.js`. 8 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var request = require('request'); 3 | var cheerio = require('cheerio'); 4 | var _ = require('underscore'); 5 | var sanitizeHtml = require('sanitize-html'); 6 | var bodyParser = require('body-parser'); 7 | 8 | if (process.env.NODE_ENV !== 'production') { 9 | require('dotenv').config(); 10 | } 11 | 12 | var redis = require('redis'); 13 | var redisClient = redis.createClient(process.env.REDIS_URL); 14 | 15 | var twilioClient = require('twilio')(process.env.TWILIO_SID, process.env.TWILIO_AUTH_TOKEN); 16 | 17 | var app = express(); 18 | app.use(bodyParser.json()); 19 | app.use(bodyParser.urlencoded({ 20 | extended: true 21 | })); 22 | 23 | /* 24 | Constants for minifying the HTML 25 | */ 26 | const shortenedExpressions = { 27 | 'the': 't', 28 | 'and': '&', 29 | 'that': 'h', 30 | 'with': 'w', 31 | }; 32 | 33 | const shortenedHTML = { 34 | '': 'Σ', 40 | '>': 'Π', 41 | '="submit" ': 'Γ', 42 | '="hidden" ': 'ß', 43 | 'name="': 'æ', 44 | 'type="': 'Δ', 45 | 'value="': '_' 46 | }; 47 | 48 | const urlsWeDontWant = [ 49 | 'policies', 'signin', 'preferences', 50 | 'login', 'signout' 51 | ]; 52 | 53 | 54 | /* 55 | Helper functions 56 | */ 57 | const shortenText = (text) => { 58 | if (text) { 59 | _.mapObject(shortenedExpressions, (word, short) => { 60 | text = text.replace(`/${word}/ig`, short); 61 | }); 62 | } 63 | return text; 64 | }; 65 | 66 | const urlToSymbol = (msgId, url) => { 67 | if (url && _.every(urlsWeDontWant, (notNecessary) => url.indexOf(notNecessary) < 0)) { 68 | var urlPlaceholder = Math.random().toString(36).substr(2, 3); 69 | redisClient.set(`${msgId}_${urlPlaceholder}`, url); 70 | return urlPlaceholder; 71 | } 72 | return ''; 73 | }; 74 | 75 | const transformTags = (msgId) => { 76 | return { 77 | 'a': (tagName, attribs) => { 78 | return { 79 | tagName: tagName, 80 | text: shortenText(attribs.text), 81 | attribs: { 82 | href: urlToSymbol(msgId, attribs.href) 83 | } 84 | } 85 | }, 86 | 'input': (tagName, attribs) => { 87 | var newAttribs = { 88 | type: attribs.type || 'text' 89 | }; 90 | if (attribs.type == 'submit') { 91 | newAttribs.value = shortenText(attribs.value); 92 | } else { 93 | newAttribs.name = attribs.name; 94 | } 95 | return { 96 | tagName: tagName, 97 | attribs: newAttribs 98 | } 99 | } 100 | } 101 | }; 102 | 103 | 104 | /* 105 | App time!! 106 | */ 107 | app.get('', (req, res) => { 108 | res.send('Hello!'); 109 | }); 110 | 111 | app.all('/get', (req, res) => { 112 | const url = `https://${req.body.Body}`; 113 | const msgId = req.body.MessageSid; 114 | 115 | request(url, (error, response, html) => { 116 | if (error) return; 117 | 118 | try { 119 | var $ = cheerio.load(html); // Load HTML to extract the body like we would in jQuery 120 | 121 | // Get rid of all the tags and attributes we don't want 122 | var clean = sanitizeHtml($('body').html(), { 123 | allowedTags: ['a', 'input', 'form'], 124 | transformTags: transformTags(msgId), 125 | textFilter: shortenText, 126 | allowedAttributes: { 127 | input: ['value', 'type', 'name'], 128 | a: ['href'] 129 | }, 130 | exclusiveFilter: (frame) => { 131 | // Ignore hidden inputs and anchors that go nowhere 132 | return (frame.tag === 'input' && frame.attribs.type === 'hidden') || 133 | (frame.tag === 'a' && frame.attribs && !frame.attribs.href); 134 | }, 135 | }); 136 | 137 | // Eliminate all spaces between elements 138 | clean = clean.replace(new RegExp('\>[ ]+\<', 'g'), '><'); 139 | 140 | // Minify all the remaining tags and attributes 141 | _.mapObject(shortenedHTML, (short, tag) => { 142 | clean = clean.replace(new RegExp(tag, 'g'), short); 143 | }); 144 | 145 | const chunks = clean.trim().match(/.{1,1595}/g).slice(0, 2); // Divide HTML into the max sized SMS - 5 146 | chunks.map((chunk, index) => { 147 | twilioClient.messages.create({ 148 | body: `${index+1}/${chunks.length} ${chunk}`, 149 | from: process.env.TWILIO_NUMBER, 150 | to: req.body.From, 151 | }); 152 | }); 153 | } catch(error) { 154 | twilioClient.messages.create({ 155 | body: `Sorry, something went wrong! Here's the error: ${error}`, 156 | from: process.env.TWILIO_NUMBER, 157 | to: req.body.From, 158 | }); 159 | } 160 | 161 | res.send(clean); 162 | }); 163 | }); 164 | 165 | app.listen(process.env.PORT || '8081'); 166 | 167 | exports = module.exports = app; 168 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dialup_server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/body-parser": { 8 | "version": "1.17.0", 9 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", 10 | "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", 11 | "requires": { 12 | "@types/connect": "*", 13 | "@types/node": "*" 14 | } 15 | }, 16 | "@types/connect": { 17 | "version": "3.4.32", 18 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", 19 | "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", 20 | "requires": { 21 | "@types/node": "*" 22 | } 23 | }, 24 | "@types/express": { 25 | "version": "4.16.1", 26 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", 27 | "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", 28 | "requires": { 29 | "@types/body-parser": "*", 30 | "@types/express-serve-static-core": "*", 31 | "@types/serve-static": "*" 32 | } 33 | }, 34 | "@types/express-serve-static-core": { 35 | "version": "4.16.4", 36 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.4.tgz", 37 | "integrity": "sha512-x/8h6FHm14rPWnW2HP5likD/rsqJ3t/77OWx2PLxym0hXbeBWQmcPyHmwX+CtCQpjIfgrUdEoDFcLPwPZWiqzQ==", 38 | "requires": { 39 | "@types/node": "*", 40 | "@types/range-parser": "*" 41 | } 42 | }, 43 | "@types/mime": { 44 | "version": "2.0.1", 45 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", 46 | "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" 47 | }, 48 | "@types/node": { 49 | "version": "11.13.0", 50 | "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", 51 | "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==" 52 | }, 53 | "@types/range-parser": { 54 | "version": "1.2.3", 55 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", 56 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" 57 | }, 58 | "@types/serve-static": { 59 | "version": "1.13.2", 60 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", 61 | "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", 62 | "requires": { 63 | "@types/express-serve-static-core": "*", 64 | "@types/mime": "*" 65 | } 66 | }, 67 | "accepts": { 68 | "version": "1.3.5", 69 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 70 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 71 | "requires": { 72 | "mime-types": "~2.1.18", 73 | "negotiator": "0.6.1" 74 | } 75 | }, 76 | "ajv": { 77 | "version": "6.10.0", 78 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 79 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 80 | "requires": { 81 | "fast-deep-equal": "^2.0.1", 82 | "fast-json-stable-stringify": "^2.0.0", 83 | "json-schema-traverse": "^0.4.1", 84 | "uri-js": "^4.2.2" 85 | } 86 | }, 87 | "ansi-styles": { 88 | "version": "3.2.1", 89 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 90 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 91 | "requires": { 92 | "color-convert": "^1.9.0" 93 | } 94 | }, 95 | "array-flatten": { 96 | "version": "1.1.1", 97 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 98 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 99 | }, 100 | "array-uniq": { 101 | "version": "1.0.3", 102 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 103 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" 104 | }, 105 | "asap": { 106 | "version": "2.0.6", 107 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 108 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 109 | }, 110 | "asn1": { 111 | "version": "0.2.4", 112 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 113 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 114 | "requires": { 115 | "safer-buffer": "~2.1.0" 116 | } 117 | }, 118 | "assert-plus": { 119 | "version": "1.0.0", 120 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 121 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 122 | }, 123 | "asynckit": { 124 | "version": "0.4.0", 125 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 126 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 127 | }, 128 | "aws-sign2": { 129 | "version": "0.7.0", 130 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 131 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 132 | }, 133 | "aws4": { 134 | "version": "1.8.0", 135 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 136 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 137 | }, 138 | "bcrypt-pbkdf": { 139 | "version": "1.0.2", 140 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 141 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 142 | "requires": { 143 | "tweetnacl": "^0.14.3" 144 | } 145 | }, 146 | "body-parser": { 147 | "version": "1.19.0", 148 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 149 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 150 | "requires": { 151 | "bytes": "3.1.0", 152 | "content-type": "~1.0.4", 153 | "debug": "2.6.9", 154 | "depd": "~1.1.2", 155 | "http-errors": "1.7.2", 156 | "iconv-lite": "0.4.24", 157 | "on-finished": "~2.3.0", 158 | "qs": "6.7.0", 159 | "raw-body": "2.4.0", 160 | "type-is": "~1.6.17" 161 | }, 162 | "dependencies": { 163 | "http-errors": { 164 | "version": "1.7.2", 165 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 166 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 167 | "requires": { 168 | "depd": "~1.1.2", 169 | "inherits": "2.0.3", 170 | "setprototypeof": "1.1.1", 171 | "statuses": ">= 1.5.0 < 2", 172 | "toidentifier": "1.0.0" 173 | } 174 | }, 175 | "mime-db": { 176 | "version": "1.40.0", 177 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 178 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 179 | }, 180 | "mime-types": { 181 | "version": "2.1.24", 182 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 183 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 184 | "requires": { 185 | "mime-db": "1.40.0" 186 | } 187 | }, 188 | "qs": { 189 | "version": "6.7.0", 190 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 191 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 192 | }, 193 | "setprototypeof": { 194 | "version": "1.1.1", 195 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 196 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 197 | }, 198 | "statuses": { 199 | "version": "1.5.0", 200 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 201 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 202 | }, 203 | "type-is": { 204 | "version": "1.6.18", 205 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 206 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 207 | "requires": { 208 | "media-typer": "0.3.0", 209 | "mime-types": "~2.1.24" 210 | } 211 | } 212 | } 213 | }, 214 | "boolbase": { 215 | "version": "1.0.0", 216 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 217 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" 218 | }, 219 | "buffer-equal-constant-time": { 220 | "version": "1.0.1", 221 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 222 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 223 | }, 224 | "bytes": { 225 | "version": "3.1.0", 226 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 227 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 228 | }, 229 | "caseless": { 230 | "version": "0.12.0", 231 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 232 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 233 | }, 234 | "chalk": { 235 | "version": "2.4.2", 236 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 237 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 238 | "requires": { 239 | "ansi-styles": "^3.2.1", 240 | "escape-string-regexp": "^1.0.5", 241 | "supports-color": "^5.3.0" 242 | } 243 | }, 244 | "cheerio": { 245 | "version": "1.0.0-rc.2", 246 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", 247 | "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", 248 | "requires": { 249 | "css-select": "~1.2.0", 250 | "dom-serializer": "~0.1.0", 251 | "entities": "~1.1.1", 252 | "htmlparser2": "^3.9.1", 253 | "lodash": "^4.15.0", 254 | "parse5": "^3.0.1" 255 | } 256 | }, 257 | "color-convert": { 258 | "version": "1.9.3", 259 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 260 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 261 | "requires": { 262 | "color-name": "1.1.3" 263 | } 264 | }, 265 | "color-name": { 266 | "version": "1.1.3", 267 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 268 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 269 | }, 270 | "combined-stream": { 271 | "version": "1.0.7", 272 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 273 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 274 | "requires": { 275 | "delayed-stream": "~1.0.0" 276 | } 277 | }, 278 | "content-disposition": { 279 | "version": "0.5.2", 280 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 281 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 282 | }, 283 | "content-type": { 284 | "version": "1.0.4", 285 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 286 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 287 | }, 288 | "cookie": { 289 | "version": "0.3.1", 290 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 291 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 292 | }, 293 | "cookie-signature": { 294 | "version": "1.0.6", 295 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 296 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 297 | }, 298 | "core-util-is": { 299 | "version": "1.0.2", 300 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 301 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 302 | }, 303 | "css-select": { 304 | "version": "1.2.0", 305 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 306 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 307 | "requires": { 308 | "boolbase": "~1.0.0", 309 | "css-what": "2.1", 310 | "domutils": "1.5.1", 311 | "nth-check": "~1.0.1" 312 | } 313 | }, 314 | "css-what": { 315 | "version": "2.1.3", 316 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 317 | "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" 318 | }, 319 | "dashdash": { 320 | "version": "1.14.1", 321 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 322 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 323 | "requires": { 324 | "assert-plus": "^1.0.0" 325 | } 326 | }, 327 | "debug": { 328 | "version": "2.6.9", 329 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 330 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 331 | "requires": { 332 | "ms": "2.0.0" 333 | } 334 | }, 335 | "delayed-stream": { 336 | "version": "1.0.0", 337 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 338 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 339 | }, 340 | "depd": { 341 | "version": "1.1.2", 342 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 343 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 344 | }, 345 | "deprecate": { 346 | "version": "1.0.0", 347 | "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", 348 | "integrity": "sha1-ZhSQ7SQokWpsiIPYg05WRvTkpKg=" 349 | }, 350 | "destroy": { 351 | "version": "1.0.4", 352 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 353 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 354 | }, 355 | "dom-serializer": { 356 | "version": "0.1.1", 357 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 358 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 359 | "requires": { 360 | "domelementtype": "^1.3.0", 361 | "entities": "^1.1.1" 362 | } 363 | }, 364 | "domelementtype": { 365 | "version": "1.3.1", 366 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 367 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 368 | }, 369 | "domhandler": { 370 | "version": "2.4.2", 371 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 372 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 373 | "requires": { 374 | "domelementtype": "1" 375 | } 376 | }, 377 | "domutils": { 378 | "version": "1.5.1", 379 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 380 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 381 | "requires": { 382 | "dom-serializer": "0", 383 | "domelementtype": "1" 384 | } 385 | }, 386 | "dotenv": { 387 | "version": "8.0.0", 388 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", 389 | "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" 390 | }, 391 | "double-ended-queue": { 392 | "version": "2.1.0-0", 393 | "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", 394 | "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" 395 | }, 396 | "ecc-jsbn": { 397 | "version": "0.1.2", 398 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 399 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 400 | "requires": { 401 | "jsbn": "~0.1.0", 402 | "safer-buffer": "^2.1.0" 403 | } 404 | }, 405 | "ecdsa-sig-formatter": { 406 | "version": "1.0.11", 407 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 408 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 409 | "requires": { 410 | "safe-buffer": "^5.0.1" 411 | } 412 | }, 413 | "ee-first": { 414 | "version": "1.1.1", 415 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 416 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 417 | }, 418 | "encodeurl": { 419 | "version": "1.0.2", 420 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 421 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 422 | }, 423 | "entities": { 424 | "version": "1.1.2", 425 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 426 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" 427 | }, 428 | "escape-html": { 429 | "version": "1.0.3", 430 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 431 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 432 | }, 433 | "escape-string-regexp": { 434 | "version": "1.0.5", 435 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 436 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 437 | }, 438 | "etag": { 439 | "version": "1.8.1", 440 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 441 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 442 | }, 443 | "express": { 444 | "version": "4.16.4", 445 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 446 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 447 | "requires": { 448 | "accepts": "~1.3.5", 449 | "array-flatten": "1.1.1", 450 | "body-parser": "1.18.3", 451 | "content-disposition": "0.5.2", 452 | "content-type": "~1.0.4", 453 | "cookie": "0.3.1", 454 | "cookie-signature": "1.0.6", 455 | "debug": "2.6.9", 456 | "depd": "~1.1.2", 457 | "encodeurl": "~1.0.2", 458 | "escape-html": "~1.0.3", 459 | "etag": "~1.8.1", 460 | "finalhandler": "1.1.1", 461 | "fresh": "0.5.2", 462 | "merge-descriptors": "1.0.1", 463 | "methods": "~1.1.2", 464 | "on-finished": "~2.3.0", 465 | "parseurl": "~1.3.2", 466 | "path-to-regexp": "0.1.7", 467 | "proxy-addr": "~2.0.4", 468 | "qs": "6.5.2", 469 | "range-parser": "~1.2.0", 470 | "safe-buffer": "5.1.2", 471 | "send": "0.16.2", 472 | "serve-static": "1.13.2", 473 | "setprototypeof": "1.1.0", 474 | "statuses": "~1.4.0", 475 | "type-is": "~1.6.16", 476 | "utils-merge": "1.0.1", 477 | "vary": "~1.1.2" 478 | }, 479 | "dependencies": { 480 | "body-parser": { 481 | "version": "1.18.3", 482 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 483 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 484 | "requires": { 485 | "bytes": "3.0.0", 486 | "content-type": "~1.0.4", 487 | "debug": "2.6.9", 488 | "depd": "~1.1.2", 489 | "http-errors": "~1.6.3", 490 | "iconv-lite": "0.4.23", 491 | "on-finished": "~2.3.0", 492 | "qs": "6.5.2", 493 | "raw-body": "2.3.3", 494 | "type-is": "~1.6.16" 495 | } 496 | }, 497 | "bytes": { 498 | "version": "3.0.0", 499 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 500 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 501 | }, 502 | "iconv-lite": { 503 | "version": "0.4.23", 504 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 505 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 506 | "requires": { 507 | "safer-buffer": ">= 2.1.2 < 3" 508 | } 509 | }, 510 | "raw-body": { 511 | "version": "2.3.3", 512 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 513 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 514 | "requires": { 515 | "bytes": "3.0.0", 516 | "http-errors": "1.6.3", 517 | "iconv-lite": "0.4.23", 518 | "unpipe": "1.0.0" 519 | } 520 | } 521 | } 522 | }, 523 | "extend": { 524 | "version": "3.0.2", 525 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 526 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 527 | }, 528 | "extsprintf": { 529 | "version": "1.3.0", 530 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 531 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 532 | }, 533 | "fast-deep-equal": { 534 | "version": "2.0.1", 535 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 536 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" 537 | }, 538 | "fast-json-stable-stringify": { 539 | "version": "2.0.0", 540 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 541 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 542 | }, 543 | "finalhandler": { 544 | "version": "1.1.1", 545 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 546 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 547 | "requires": { 548 | "debug": "2.6.9", 549 | "encodeurl": "~1.0.2", 550 | "escape-html": "~1.0.3", 551 | "on-finished": "~2.3.0", 552 | "parseurl": "~1.3.2", 553 | "statuses": "~1.4.0", 554 | "unpipe": "~1.0.0" 555 | } 556 | }, 557 | "forever-agent": { 558 | "version": "0.6.1", 559 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 560 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 561 | }, 562 | "form-data": { 563 | "version": "2.3.3", 564 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 565 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 566 | "requires": { 567 | "asynckit": "^0.4.0", 568 | "combined-stream": "^1.0.6", 569 | "mime-types": "^2.1.12" 570 | } 571 | }, 572 | "forwarded": { 573 | "version": "0.1.2", 574 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 575 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 576 | }, 577 | "fresh": { 578 | "version": "0.5.2", 579 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 580 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 581 | }, 582 | "getpass": { 583 | "version": "0.1.7", 584 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 585 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 586 | "requires": { 587 | "assert-plus": "^1.0.0" 588 | } 589 | }, 590 | "har-schema": { 591 | "version": "2.0.0", 592 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 593 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 594 | }, 595 | "har-validator": { 596 | "version": "5.1.3", 597 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 598 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 599 | "requires": { 600 | "ajv": "^6.5.5", 601 | "har-schema": "^2.0.0" 602 | } 603 | }, 604 | "has-flag": { 605 | "version": "3.0.0", 606 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 607 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 608 | }, 609 | "htmlparser2": { 610 | "version": "3.10.1", 611 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 612 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", 613 | "requires": { 614 | "domelementtype": "^1.3.1", 615 | "domhandler": "^2.3.0", 616 | "domutils": "^1.5.1", 617 | "entities": "^1.1.1", 618 | "inherits": "^2.0.1", 619 | "readable-stream": "^3.1.1" 620 | } 621 | }, 622 | "http-errors": { 623 | "version": "1.6.3", 624 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 625 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 626 | "requires": { 627 | "depd": "~1.1.2", 628 | "inherits": "2.0.3", 629 | "setprototypeof": "1.1.0", 630 | "statuses": ">= 1.4.0 < 2" 631 | } 632 | }, 633 | "http-signature": { 634 | "version": "1.2.0", 635 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 636 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 637 | "requires": { 638 | "assert-plus": "^1.0.0", 639 | "jsprim": "^1.2.2", 640 | "sshpk": "^1.7.0" 641 | } 642 | }, 643 | "iconv-lite": { 644 | "version": "0.4.24", 645 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 646 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 647 | "requires": { 648 | "safer-buffer": ">= 2.1.2 < 3" 649 | } 650 | }, 651 | "inherits": { 652 | "version": "2.0.3", 653 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 654 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 655 | }, 656 | "ipaddr.js": { 657 | "version": "1.9.0", 658 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", 659 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" 660 | }, 661 | "is-typedarray": { 662 | "version": "1.0.0", 663 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 664 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 665 | }, 666 | "isstream": { 667 | "version": "0.1.2", 668 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 669 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 670 | }, 671 | "jsbn": { 672 | "version": "0.1.1", 673 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 674 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 675 | }, 676 | "json-schema": { 677 | "version": "0.2.3", 678 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 679 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 680 | }, 681 | "json-schema-traverse": { 682 | "version": "0.4.1", 683 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 684 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 685 | }, 686 | "json-stringify-safe": { 687 | "version": "5.0.1", 688 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 689 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 690 | }, 691 | "jsonwebtoken": { 692 | "version": "8.5.1", 693 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 694 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 695 | "requires": { 696 | "jws": "^3.2.2", 697 | "lodash.includes": "^4.3.0", 698 | "lodash.isboolean": "^3.0.3", 699 | "lodash.isinteger": "^4.0.4", 700 | "lodash.isnumber": "^3.0.3", 701 | "lodash.isplainobject": "^4.0.6", 702 | "lodash.isstring": "^4.0.1", 703 | "lodash.once": "^4.0.0", 704 | "ms": "^2.1.1", 705 | "semver": "^5.6.0" 706 | }, 707 | "dependencies": { 708 | "ms": { 709 | "version": "2.1.1", 710 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 711 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 712 | } 713 | } 714 | }, 715 | "jsprim": { 716 | "version": "1.4.1", 717 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 718 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 719 | "requires": { 720 | "assert-plus": "1.0.0", 721 | "extsprintf": "1.3.0", 722 | "json-schema": "0.2.3", 723 | "verror": "1.10.0" 724 | } 725 | }, 726 | "jwa": { 727 | "version": "1.4.1", 728 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 729 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 730 | "requires": { 731 | "buffer-equal-constant-time": "1.0.1", 732 | "ecdsa-sig-formatter": "1.0.11", 733 | "safe-buffer": "^5.0.1" 734 | } 735 | }, 736 | "jws": { 737 | "version": "3.2.2", 738 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 739 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 740 | "requires": { 741 | "jwa": "^1.4.1", 742 | "safe-buffer": "^5.0.1" 743 | } 744 | }, 745 | "lodash": { 746 | "version": "4.17.11", 747 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 748 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 749 | }, 750 | "lodash.clonedeep": { 751 | "version": "4.5.0", 752 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 753 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 754 | }, 755 | "lodash.escaperegexp": { 756 | "version": "4.1.2", 757 | "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", 758 | "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" 759 | }, 760 | "lodash.includes": { 761 | "version": "4.3.0", 762 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 763 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 764 | }, 765 | "lodash.isboolean": { 766 | "version": "3.0.3", 767 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 768 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 769 | }, 770 | "lodash.isinteger": { 771 | "version": "4.0.4", 772 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 773 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 774 | }, 775 | "lodash.isnumber": { 776 | "version": "3.0.3", 777 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 778 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 779 | }, 780 | "lodash.isplainobject": { 781 | "version": "4.0.6", 782 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 783 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 784 | }, 785 | "lodash.isstring": { 786 | "version": "4.0.1", 787 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 788 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 789 | }, 790 | "lodash.mergewith": { 791 | "version": "4.6.1", 792 | "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", 793 | "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==" 794 | }, 795 | "lodash.once": { 796 | "version": "4.1.1", 797 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 798 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 799 | }, 800 | "media-typer": { 801 | "version": "0.3.0", 802 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 803 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 804 | }, 805 | "merge-descriptors": { 806 | "version": "1.0.1", 807 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 808 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 809 | }, 810 | "methods": { 811 | "version": "1.1.2", 812 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 813 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 814 | }, 815 | "mime": { 816 | "version": "1.4.1", 817 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 818 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 819 | }, 820 | "mime-db": { 821 | "version": "1.38.0", 822 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", 823 | "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" 824 | }, 825 | "mime-types": { 826 | "version": "2.1.22", 827 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", 828 | "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", 829 | "requires": { 830 | "mime-db": "~1.38.0" 831 | } 832 | }, 833 | "moment": { 834 | "version": "2.19.3", 835 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.3.tgz", 836 | "integrity": "sha1-vbmdJw1tf9p4zA+6zoVeJ/59pp8=" 837 | }, 838 | "ms": { 839 | "version": "2.0.0", 840 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 841 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 842 | }, 843 | "negotiator": { 844 | "version": "0.6.1", 845 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 846 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 847 | }, 848 | "nth-check": { 849 | "version": "1.0.2", 850 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 851 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 852 | "requires": { 853 | "boolbase": "~1.0.0" 854 | } 855 | }, 856 | "number-is-nan": { 857 | "version": "1.0.1", 858 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 859 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 860 | }, 861 | "oauth-sign": { 862 | "version": "0.9.0", 863 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 864 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 865 | }, 866 | "on-finished": { 867 | "version": "2.3.0", 868 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 869 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 870 | "requires": { 871 | "ee-first": "1.1.1" 872 | } 873 | }, 874 | "parse5": { 875 | "version": "3.0.3", 876 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", 877 | "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", 878 | "requires": { 879 | "@types/node": "*" 880 | } 881 | }, 882 | "parseurl": { 883 | "version": "1.3.3", 884 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 885 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 886 | }, 887 | "path-to-regexp": { 888 | "version": "0.1.7", 889 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 890 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 891 | }, 892 | "performance-now": { 893 | "version": "2.1.0", 894 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 895 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 896 | }, 897 | "pop-iterate": { 898 | "version": "1.0.1", 899 | "resolved": "https://registry.npmjs.org/pop-iterate/-/pop-iterate-1.0.1.tgz", 900 | "integrity": "sha1-zqz9q0q/NT16DyqqLB/Hs/lBO6M=" 901 | }, 902 | "postcss": { 903 | "version": "7.0.14", 904 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", 905 | "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", 906 | "requires": { 907 | "chalk": "^2.4.2", 908 | "source-map": "^0.6.1", 909 | "supports-color": "^6.1.0" 910 | }, 911 | "dependencies": { 912 | "supports-color": { 913 | "version": "6.1.0", 914 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 915 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 916 | "requires": { 917 | "has-flag": "^3.0.0" 918 | } 919 | } 920 | } 921 | }, 922 | "proxy-addr": { 923 | "version": "2.0.5", 924 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", 925 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", 926 | "requires": { 927 | "forwarded": "~0.1.2", 928 | "ipaddr.js": "1.9.0" 929 | } 930 | }, 931 | "psl": { 932 | "version": "1.1.31", 933 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", 934 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" 935 | }, 936 | "punycode": { 937 | "version": "2.1.1", 938 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 939 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 940 | }, 941 | "q": { 942 | "version": "2.0.3", 943 | "resolved": "https://registry.npmjs.org/q/-/q-2.0.3.tgz", 944 | "integrity": "sha1-dbjbAlWhpa+C9Yw/Oqoe/sfQ0TQ=", 945 | "requires": { 946 | "asap": "^2.0.0", 947 | "pop-iterate": "^1.0.1", 948 | "weak-map": "^1.0.5" 949 | } 950 | }, 951 | "qs": { 952 | "version": "6.5.2", 953 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 954 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 955 | }, 956 | "range-parser": { 957 | "version": "1.2.0", 958 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 959 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 960 | }, 961 | "raw-body": { 962 | "version": "2.4.0", 963 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 964 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 965 | "requires": { 966 | "bytes": "3.1.0", 967 | "http-errors": "1.7.2", 968 | "iconv-lite": "0.4.24", 969 | "unpipe": "1.0.0" 970 | }, 971 | "dependencies": { 972 | "http-errors": { 973 | "version": "1.7.2", 974 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 975 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 976 | "requires": { 977 | "depd": "~1.1.2", 978 | "inherits": "2.0.3", 979 | "setprototypeof": "1.1.1", 980 | "statuses": ">= 1.5.0 < 2", 981 | "toidentifier": "1.0.0" 982 | } 983 | }, 984 | "setprototypeof": { 985 | "version": "1.1.1", 986 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 987 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 988 | }, 989 | "statuses": { 990 | "version": "1.5.0", 991 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 992 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 993 | } 994 | } 995 | }, 996 | "readable-stream": { 997 | "version": "3.3.0", 998 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", 999 | "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", 1000 | "requires": { 1001 | "inherits": "^2.0.3", 1002 | "string_decoder": "^1.1.1", 1003 | "util-deprecate": "^1.0.1" 1004 | } 1005 | }, 1006 | "redis": { 1007 | "version": "2.8.0", 1008 | "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", 1009 | "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", 1010 | "requires": { 1011 | "double-ended-queue": "^2.1.0-0", 1012 | "redis-commands": "^1.2.0", 1013 | "redis-parser": "^2.6.0" 1014 | } 1015 | }, 1016 | "redis-commands": { 1017 | "version": "1.4.0", 1018 | "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.4.0.tgz", 1019 | "integrity": "sha512-cu8EF+MtkwI4DLIT0x9P8qNTLFhQD4jLfxLR0cCNkeGzs87FN6879JOJwNQR/1zD7aSYNbU0hgsV9zGY71Itvw==" 1020 | }, 1021 | "redis-parser": { 1022 | "version": "2.6.0", 1023 | "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", 1024 | "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" 1025 | }, 1026 | "request": { 1027 | "version": "2.88.0", 1028 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 1029 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 1030 | "requires": { 1031 | "aws-sign2": "~0.7.0", 1032 | "aws4": "^1.8.0", 1033 | "caseless": "~0.12.0", 1034 | "combined-stream": "~1.0.6", 1035 | "extend": "~3.0.2", 1036 | "forever-agent": "~0.6.1", 1037 | "form-data": "~2.3.2", 1038 | "har-validator": "~5.1.0", 1039 | "http-signature": "~1.2.0", 1040 | "is-typedarray": "~1.0.0", 1041 | "isstream": "~0.1.2", 1042 | "json-stringify-safe": "~5.0.1", 1043 | "mime-types": "~2.1.19", 1044 | "oauth-sign": "~0.9.0", 1045 | "performance-now": "^2.1.0", 1046 | "qs": "~6.5.2", 1047 | "safe-buffer": "^5.1.2", 1048 | "tough-cookie": "~2.4.3", 1049 | "tunnel-agent": "^0.6.0", 1050 | "uuid": "^3.3.2" 1051 | } 1052 | }, 1053 | "rootpath": { 1054 | "version": "0.1.2", 1055 | "resolved": "https://registry.npmjs.org/rootpath/-/rootpath-0.1.2.tgz", 1056 | "integrity": "sha1-Wzeah9ypBum5HWkKWZQ5vvJn6ms=" 1057 | }, 1058 | "safe-buffer": { 1059 | "version": "5.1.2", 1060 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1061 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1062 | }, 1063 | "safer-buffer": { 1064 | "version": "2.1.2", 1065 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1066 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1067 | }, 1068 | "sanitize-html": { 1069 | "version": "1.20.0", 1070 | "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.0.tgz", 1071 | "integrity": "sha512-BpxXkBoAG+uKCHjoXFmox6kCSYpnulABoGcZ/R3QyY9ndXbIM5S94eOr1IqnzTG8TnbmXaxWoDDzKC5eJv7fEQ==", 1072 | "requires": { 1073 | "chalk": "^2.4.1", 1074 | "htmlparser2": "^3.10.0", 1075 | "lodash.clonedeep": "^4.5.0", 1076 | "lodash.escaperegexp": "^4.1.2", 1077 | "lodash.isplainobject": "^4.0.6", 1078 | "lodash.isstring": "^4.0.1", 1079 | "lodash.mergewith": "^4.6.1", 1080 | "postcss": "^7.0.5", 1081 | "srcset": "^1.0.0", 1082 | "xtend": "^4.0.1" 1083 | } 1084 | }, 1085 | "scmp": { 1086 | "version": "2.0.0", 1087 | "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.0.0.tgz", 1088 | "integrity": "sha1-JHEQ7yLM+JexOj8KvdtSeCOTzWo=" 1089 | }, 1090 | "semver": { 1091 | "version": "5.7.0", 1092 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 1093 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" 1094 | }, 1095 | "send": { 1096 | "version": "0.16.2", 1097 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 1098 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 1099 | "requires": { 1100 | "debug": "2.6.9", 1101 | "depd": "~1.1.2", 1102 | "destroy": "~1.0.4", 1103 | "encodeurl": "~1.0.2", 1104 | "escape-html": "~1.0.3", 1105 | "etag": "~1.8.1", 1106 | "fresh": "0.5.2", 1107 | "http-errors": "~1.6.2", 1108 | "mime": "1.4.1", 1109 | "ms": "2.0.0", 1110 | "on-finished": "~2.3.0", 1111 | "range-parser": "~1.2.0", 1112 | "statuses": "~1.4.0" 1113 | } 1114 | }, 1115 | "serve-static": { 1116 | "version": "1.13.2", 1117 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 1118 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 1119 | "requires": { 1120 | "encodeurl": "~1.0.2", 1121 | "escape-html": "~1.0.3", 1122 | "parseurl": "~1.3.2", 1123 | "send": "0.16.2" 1124 | } 1125 | }, 1126 | "setprototypeof": { 1127 | "version": "1.1.0", 1128 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1129 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 1130 | }, 1131 | "source-map": { 1132 | "version": "0.6.1", 1133 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1134 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1135 | }, 1136 | "srcset": { 1137 | "version": "1.0.0", 1138 | "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", 1139 | "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", 1140 | "requires": { 1141 | "array-uniq": "^1.0.2", 1142 | "number-is-nan": "^1.0.0" 1143 | } 1144 | }, 1145 | "sshpk": { 1146 | "version": "1.16.1", 1147 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1148 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1149 | "requires": { 1150 | "asn1": "~0.2.3", 1151 | "assert-plus": "^1.0.0", 1152 | "bcrypt-pbkdf": "^1.0.0", 1153 | "dashdash": "^1.12.0", 1154 | "ecc-jsbn": "~0.1.1", 1155 | "getpass": "^0.1.1", 1156 | "jsbn": "~0.1.0", 1157 | "safer-buffer": "^2.0.2", 1158 | "tweetnacl": "~0.14.0" 1159 | } 1160 | }, 1161 | "statuses": { 1162 | "version": "1.4.0", 1163 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 1164 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 1165 | }, 1166 | "string_decoder": { 1167 | "version": "1.2.0", 1168 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", 1169 | "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", 1170 | "requires": { 1171 | "safe-buffer": "~5.1.0" 1172 | } 1173 | }, 1174 | "supports-color": { 1175 | "version": "5.5.0", 1176 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1177 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1178 | "requires": { 1179 | "has-flag": "^3.0.0" 1180 | } 1181 | }, 1182 | "toidentifier": { 1183 | "version": "1.0.0", 1184 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1185 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1186 | }, 1187 | "tough-cookie": { 1188 | "version": "2.4.3", 1189 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1190 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1191 | "requires": { 1192 | "psl": "^1.1.24", 1193 | "punycode": "^1.4.1" 1194 | }, 1195 | "dependencies": { 1196 | "punycode": { 1197 | "version": "1.4.1", 1198 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1199 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1200 | } 1201 | } 1202 | }, 1203 | "tunnel-agent": { 1204 | "version": "0.6.0", 1205 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1206 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1207 | "requires": { 1208 | "safe-buffer": "^5.0.1" 1209 | } 1210 | }, 1211 | "tweetnacl": { 1212 | "version": "0.14.5", 1213 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1214 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1215 | }, 1216 | "twilio": { 1217 | "version": "3.30.3", 1218 | "resolved": "https://registry.npmjs.org/twilio/-/twilio-3.30.3.tgz", 1219 | "integrity": "sha512-B9Gv6JzUyIQ74fbAxRNs7G/X6BgmGu/z4xyrYX48vn+sxvoRmSde1wHBnwkFOLA8+33gprC3FvORkaMx0DuRAg==", 1220 | "requires": { 1221 | "@types/express": "^4.11.1", 1222 | "deprecate": "1.0.0", 1223 | "jsonwebtoken": "^8.1.0", 1224 | "lodash": "^4.17.11", 1225 | "moment": "2.19.3", 1226 | "q": "2.0.x", 1227 | "request": "^2.88.0", 1228 | "rootpath": "0.1.2", 1229 | "scmp": "2.0.0", 1230 | "xmlbuilder": "9.0.1" 1231 | } 1232 | }, 1233 | "type-is": { 1234 | "version": "1.6.16", 1235 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 1236 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 1237 | "requires": { 1238 | "media-typer": "0.3.0", 1239 | "mime-types": "~2.1.18" 1240 | } 1241 | }, 1242 | "underscore": { 1243 | "version": "1.9.1", 1244 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", 1245 | "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" 1246 | }, 1247 | "unpipe": { 1248 | "version": "1.0.0", 1249 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1250 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1251 | }, 1252 | "uri-js": { 1253 | "version": "4.2.2", 1254 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1255 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1256 | "requires": { 1257 | "punycode": "^2.1.0" 1258 | } 1259 | }, 1260 | "util-deprecate": { 1261 | "version": "1.0.2", 1262 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1263 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1264 | }, 1265 | "utils-merge": { 1266 | "version": "1.0.1", 1267 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1268 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1269 | }, 1270 | "uuid": { 1271 | "version": "3.3.2", 1272 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1273 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 1274 | }, 1275 | "vary": { 1276 | "version": "1.1.2", 1277 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1278 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1279 | }, 1280 | "verror": { 1281 | "version": "1.10.0", 1282 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1283 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1284 | "requires": { 1285 | "assert-plus": "^1.0.0", 1286 | "core-util-is": "1.0.2", 1287 | "extsprintf": "^1.2.0" 1288 | } 1289 | }, 1290 | "weak-map": { 1291 | "version": "1.0.5", 1292 | "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz", 1293 | "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" 1294 | }, 1295 | "xmlbuilder": { 1296 | "version": "9.0.1", 1297 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.1.tgz", 1298 | "integrity": "sha1-kc1wiXdVNj66V8Et3uq0o0GmH2U=" 1299 | }, 1300 | "xtend": { 1301 | "version": "4.0.1", 1302 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1303 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 1304 | } 1305 | } 1306 | } 1307 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dialup_server", 3 | "version": "1.0.0", 4 | "description": "Server for using the internet over SMS", 5 | "main": "app.js", 6 | "scripts": { 7 | "start": "node app.js" 8 | }, 9 | "author": "Alexandra Sunderland", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.19.0", 13 | "cheerio": "^1.0.0-rc.2", 14 | "dotenv": "^8.0.0", 15 | "express": "^4.16.4", 16 | "redis": "^2.8.0", 17 | "request": "^2.88.0", 18 | "sanitize-html": "^1.20.0", 19 | "twilio": "^3.30.3", 20 | "underscore": "^1.9.1" 21 | } 22 | } 23 | --------------------------------------------------------------------------------