├── .gitconfig ├── .gitignore ├── .glitch-assets ├── README.md ├── package-lock.json ├── package.json ├── scripts └── deploy.sh ├── server.js ├── static ├── images │ ├── loading.gif │ └── turn-off-retweets-screenshot.png └── js │ ├── profile.js │ └── vue-2.3.0.js └── views ├── base.html ├── error.html └── index.html /.gitconfig: -------------------------------------------------------------------------------- 1 | [core] 2 | excludesfile = /etc/.gitignore-global 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .envrc 3 | -------------------------------------------------------------------------------- /.glitch-assets: -------------------------------------------------------------------------------- 1 | {"name":"slack-icon.png","date":"2016-03-05T01:39:02.953Z","url":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2Fslack-icon.png","type":"image/png","size":5643,"imageWidth":128,"imageHeight":128,"thumbnail":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2Fslack-icon.png","thumbnailWidth":128,"thumbnailHeight":128,"dominantColor":null,"uuid":"vI46j7yFTVppfo8R"} 2 | {"name":"sign-in-with-twitter.png","date":"2016-02-21T18:19:21.279Z","url":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2Fsign-in-with-twitter.png","type":"image/png","size":2830,"imageWidth":158,"imageHeight":28,"thumbnail":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2Fsign-in-with-twitter.png","thumbnailWidth":158,"thumbnailHeight":28,"dominantColor":null,"uuid":"20dsgcRljhg1znVT"} 3 | {"name":"TZWmFyV.jpg","date":"2016-02-21T07:17:11.670Z","url":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2FTZWmFyV.jpg","type":"image/jpeg","size":18062,"imageWidth":500,"imageHeight":125,"thumbnail":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2Fthumbnails%2FTZWmFyV.jpg","thumbnailWidth":330,"thumbnailHeight":82,"dominantColor":"rgb(252,252,252)","uuid":"AHJCBnVyhdsrmoUz"} 4 | {"name":"login_with_facebook.png","date":"2016-02-21T06:53:38.632Z","url":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2Flogin_with_facebook.png","type":"image/png","size":7100,"imageWidth":191,"imageHeight":40,"thumbnail":"https://s3.amazonaws.com/hyperweb-editor-assets/us-east-1%3Ad93343c3-d924-46cb-ac62-1d7592c57166%2Flogin_with_facebook.png","thumbnailWidth":191,"thumbnailHeight":40,"dominantColor":null,"uuid":"leTsDGNyUkOj121K"} 5 | {"uuid":"vI46j7yFTVppfo8R","deleted":true} 6 | {"name":"passportJSGIF.gif","date":"2016-11-21T13:47:18.215Z","url":"https://cdn.hyperdev.com/0d184ee3-fd8d-4b94-acf4-b4e686e57375%2FpassportJSGIF.gif","type":"image/gif","size":55669,"imageWidth":447,"imageHeight":361,"thumbnail":"https://cdn.hyperdev.com/0d184ee3-fd8d-4b94-acf4-b4e686e57375%2Fthumbnails%2FpassportJSGIF.gif","thumbnailWidth":330,"thumbnailHeight":267,"dominantColor":"rgb(252,252,252)","uuid":"QjZ3DXC2ArqWRdQ7"} 7 | {"name":"giphy.gif","date":"2017-06-22T03:36:25.549Z","url":"https://cdn.glitch.com/6ad56f6a-9176-4aac-af49-a9e250b34e80%2Fgiphy.gif","type":"image/gif","size":8942,"imageWidth":256,"imageHeight":256,"thumbnail":"https://cdn.glitch.com/6ad56f6a-9176-4aac-af49-a9e250b34e80%2Fgiphy.gif","thumbnailWidth":256,"thumbnailHeight":256,"dominantColor":"rgb(252,252,252)","uuid":"8HLz1Q2vJS9soskH"} 8 | {"name":"loading.gif","date":"2017-06-22T03:43:08.407Z","url":"https://cdn.glitch.com/6ad56f6a-9176-4aac-af49-a9e250b34e80%2Floading.gif","type":"image/gif","size":52664,"imageWidth":134,"imageHeight":134,"thumbnail":"https://cdn.glitch.com/6ad56f6a-9176-4aac-af49-a9e250b34e80%2Floading.gif","thumbnailWidth":134,"thumbnailHeight":134,"dominantColor":null,"uuid":"lF9JNayKENhuNNHI"} 9 | {"name":"turn-off-retweets.png","date":"2017-10-30T17:36:45.057Z","url":"https://cdn.glitch.com/6ad56f6a-9176-4aac-af49-a9e250b34e80%2Fturn-off-retweets.png","type":"image/png","size":20248,"imageWidth":211,"imageHeight":356,"thumbnail":"https://cdn.glitch.com/6ad56f6a-9176-4aac-af49-a9e250b34e80%2Fthumbnails%2Fturn-off-retweets.png","thumbnailWidth":196,"thumbnailHeight":330,"dominantColor":"rgb(252,252,252)","uuid":"J7PLclfH8KtKPwQQ"} 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # turn-off-retweets 2 | 3 | This is the source for https://turn-off-retweets.jvns.ca/, a small website to help you turn off 4 | Twitter retweets for the people you follow. 5 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "turn-off-retweets", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "body-parser": "^1.13.3", 9 | "connect-ensure-login": "^0.1.1", 10 | "connect-session-sequelize": "^4.1.0", 11 | "cookie-parser": "^1.3.5", 12 | "express": "^4.13.4", 13 | "express-session": "^1.11.3", 14 | "morgan": "*", 15 | "nunjucks": "^1.3.4", 16 | "oauth": "^0.9.14", 17 | "passport": "^0.2.2", 18 | "passport-twitter": "^1.0.4", 19 | "sequelize": "*", 20 | "serve-static": "*" 21 | } 22 | }, 23 | "node_modules/body-parser": { 24 | "version": "1.18.3", 25 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 26 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 27 | "dependencies": { 28 | "bytes": "3.0.0", 29 | "content-type": "~1.0.4", 30 | "debug": "2.6.9", 31 | "depd": "~1.1.2", 32 | "http-errors": "~1.6.3", 33 | "iconv-lite": "0.4.23", 34 | "on-finished": "~2.3.0", 35 | "qs": "6.5.2", 36 | "raw-body": "2.3.3", 37 | "type-is": "~1.6.16" 38 | }, 39 | "engines": { 40 | "node": ">= 0.8" 41 | } 42 | }, 43 | "node_modules/body-parser/node_modules/bytes": { 44 | "version": "3.0.0", 45 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 46 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", 47 | "engines": { 48 | "node": ">= 0.8" 49 | } 50 | }, 51 | "node_modules/body-parser/node_modules/content-type": { 52 | "version": "1.0.4", 53 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 54 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 55 | "engines": { 56 | "node": ">= 0.6" 57 | } 58 | }, 59 | "node_modules/body-parser/node_modules/debug": { 60 | "version": "2.6.9", 61 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 62 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 63 | "dependencies": { 64 | "ms": "2.0.0" 65 | } 66 | }, 67 | "node_modules/body-parser/node_modules/depd": { 68 | "version": "1.1.2", 69 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 70 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 71 | "engines": { 72 | "node": ">= 0.6" 73 | } 74 | }, 75 | "node_modules/body-parser/node_modules/ee-first": { 76 | "version": "1.1.1", 77 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 78 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 79 | }, 80 | "node_modules/body-parser/node_modules/http-errors": { 81 | "version": "1.6.3", 82 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 83 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 84 | "dependencies": { 85 | "depd": "~1.1.2", 86 | "inherits": "2.0.3", 87 | "setprototypeof": "1.1.0", 88 | "statuses": ">= 1.4.0 < 2" 89 | }, 90 | "engines": { 91 | "node": ">= 0.6" 92 | } 93 | }, 94 | "node_modules/body-parser/node_modules/iconv-lite": { 95 | "version": "0.4.23", 96 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 97 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 98 | "dependencies": { 99 | "safer-buffer": ">= 2.1.2 < 3" 100 | }, 101 | "engines": { 102 | "node": ">=0.10.0" 103 | } 104 | }, 105 | "node_modules/body-parser/node_modules/inherits": { 106 | "version": "2.0.3", 107 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 108 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 109 | }, 110 | "node_modules/body-parser/node_modules/media-typer": { 111 | "version": "0.3.0", 112 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 113 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 114 | "engines": { 115 | "node": ">= 0.6" 116 | } 117 | }, 118 | "node_modules/body-parser/node_modules/mime-db": { 119 | "version": "1.45.0", 120 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", 121 | "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", 122 | "engines": { 123 | "node": ">= 0.6" 124 | } 125 | }, 126 | "node_modules/body-parser/node_modules/mime-types": { 127 | "version": "2.1.28", 128 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", 129 | "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", 130 | "dependencies": { 131 | "mime-db": "1.45.0" 132 | }, 133 | "engines": { 134 | "node": ">= 0.6" 135 | } 136 | }, 137 | "node_modules/body-parser/node_modules/ms": { 138 | "version": "2.0.0", 139 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 140 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 141 | }, 142 | "node_modules/body-parser/node_modules/on-finished": { 143 | "version": "2.3.0", 144 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 145 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 146 | "dependencies": { 147 | "ee-first": "1.1.1" 148 | }, 149 | "engines": { 150 | "node": ">= 0.8" 151 | } 152 | }, 153 | "node_modules/body-parser/node_modules/qs": { 154 | "version": "6.5.2", 155 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 156 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 157 | "engines": { 158 | "node": ">=0.6" 159 | } 160 | }, 161 | "node_modules/body-parser/node_modules/raw-body": { 162 | "version": "2.3.3", 163 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 164 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 165 | "dependencies": { 166 | "bytes": "3.0.0", 167 | "http-errors": "1.6.3", 168 | "iconv-lite": "0.4.23", 169 | "unpipe": "1.0.0" 170 | }, 171 | "engines": { 172 | "node": ">= 0.8" 173 | } 174 | }, 175 | "node_modules/body-parser/node_modules/safer-buffer": { 176 | "version": "2.1.2", 177 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 178 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 179 | }, 180 | "node_modules/body-parser/node_modules/setprototypeof": { 181 | "version": "1.1.0", 182 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 183 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 184 | }, 185 | "node_modules/body-parser/node_modules/statuses": { 186 | "version": "1.5.0", 187 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 188 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 189 | "engines": { 190 | "node": ">= 0.6" 191 | } 192 | }, 193 | "node_modules/body-parser/node_modules/type-is": { 194 | "version": "1.6.18", 195 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 196 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 197 | "dependencies": { 198 | "media-typer": "0.3.0", 199 | "mime-types": "~2.1.24" 200 | }, 201 | "engines": { 202 | "node": ">= 0.6" 203 | } 204 | }, 205 | "node_modules/body-parser/node_modules/unpipe": { 206 | "version": "1.0.0", 207 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 208 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 209 | "engines": { 210 | "node": ">= 0.8" 211 | } 212 | }, 213 | "node_modules/connect-ensure-login": { 214 | "version": "0.1.1", 215 | "resolved": "https://registry.npmjs.org/connect-ensure-login/-/connect-ensure-login-0.1.1.tgz", 216 | "integrity": "sha1-F03MUSQ7nqwj+NmCFa62aU4uihI=", 217 | "engines": { 218 | "node": ">= 0.4.0" 219 | } 220 | }, 221 | "node_modules/connect-session-sequelize": { 222 | "version": "4.1.0", 223 | "resolved": "http://registry.npmjs.org/connect-session-sequelize/-/connect-session-sequelize-4.1.0.tgz", 224 | "integrity": "sha1-1AJ0nDvr15IJGSwWTAkHQrP+IBE=", 225 | "dependencies": { 226 | "debug": "^2.1.1", 227 | "deep-equal": "^1.0.1" 228 | }, 229 | "engines": { 230 | "node": "*" 231 | }, 232 | "peerDependencies": { 233 | "sequelize": ">= 3.24.5" 234 | } 235 | }, 236 | "node_modules/connect-session-sequelize/node_modules/call-bind": { 237 | "version": "1.0.1", 238 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.1.tgz", 239 | "integrity": "sha512-tvAvUwNcRikl3RVF20X9lsYmmepsovzTWeJiXjO0PkJp15uy/6xKFZOQtuiSULwYW+6ToZBprphCgWXC2dSgcQ==", 240 | "dependencies": { 241 | "function-bind": "^1.1.1", 242 | "get-intrinsic": "^1.0.2" 243 | }, 244 | "funding": { 245 | "url": "https://github.com/sponsors/ljharb" 246 | } 247 | }, 248 | "node_modules/connect-session-sequelize/node_modules/debug": { 249 | "version": "2.6.9", 250 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 251 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 252 | "dependencies": { 253 | "ms": "2.0.0" 254 | } 255 | }, 256 | "node_modules/connect-session-sequelize/node_modules/deep-equal": { 257 | "version": "1.1.1", 258 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", 259 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", 260 | "dependencies": { 261 | "is-arguments": "^1.0.4", 262 | "is-date-object": "^1.0.1", 263 | "is-regex": "^1.0.4", 264 | "object-is": "^1.0.1", 265 | "object-keys": "^1.1.1", 266 | "regexp.prototype.flags": "^1.2.0" 267 | }, 268 | "funding": { 269 | "url": "https://github.com/sponsors/ljharb" 270 | } 271 | }, 272 | "node_modules/connect-session-sequelize/node_modules/define-properties": { 273 | "version": "1.1.3", 274 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 275 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 276 | "dependencies": { 277 | "object-keys": "^1.0.12" 278 | }, 279 | "engines": { 280 | "node": ">= 0.4" 281 | } 282 | }, 283 | "node_modules/connect-session-sequelize/node_modules/es-abstract": { 284 | "version": "1.17.7", 285 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", 286 | "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", 287 | "dependencies": { 288 | "es-to-primitive": "^1.2.1", 289 | "function-bind": "^1.1.1", 290 | "has": "^1.0.3", 291 | "has-symbols": "^1.0.1", 292 | "is-callable": "^1.2.2", 293 | "is-regex": "^1.1.1", 294 | "object-inspect": "^1.8.0", 295 | "object-keys": "^1.1.1", 296 | "object.assign": "^4.1.1", 297 | "string.prototype.trimend": "^1.0.1", 298 | "string.prototype.trimstart": "^1.0.1" 299 | }, 300 | "engines": { 301 | "node": ">= 0.4" 302 | }, 303 | "funding": { 304 | "url": "https://github.com/sponsors/ljharb" 305 | } 306 | }, 307 | "node_modules/connect-session-sequelize/node_modules/es-to-primitive": { 308 | "version": "1.2.1", 309 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 310 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 311 | "dependencies": { 312 | "is-callable": "^1.1.4", 313 | "is-date-object": "^1.0.1", 314 | "is-symbol": "^1.0.2" 315 | }, 316 | "engines": { 317 | "node": ">= 0.4" 318 | }, 319 | "funding": { 320 | "url": "https://github.com/sponsors/ljharb" 321 | } 322 | }, 323 | "node_modules/connect-session-sequelize/node_modules/function-bind": { 324 | "version": "1.1.1", 325 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 326 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 327 | }, 328 | "node_modules/connect-session-sequelize/node_modules/get-intrinsic": { 329 | "version": "1.0.2", 330 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", 331 | "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", 332 | "dependencies": { 333 | "function-bind": "^1.1.1", 334 | "has": "^1.0.3", 335 | "has-symbols": "^1.0.1" 336 | }, 337 | "funding": { 338 | "url": "https://github.com/sponsors/ljharb" 339 | } 340 | }, 341 | "node_modules/connect-session-sequelize/node_modules/has": { 342 | "version": "1.0.3", 343 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 344 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 345 | "dependencies": { 346 | "function-bind": "^1.1.1" 347 | }, 348 | "engines": { 349 | "node": ">= 0.4.0" 350 | } 351 | }, 352 | "node_modules/connect-session-sequelize/node_modules/has-symbols": { 353 | "version": "1.0.1", 354 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 355 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 356 | "engines": { 357 | "node": ">= 0.4" 358 | }, 359 | "funding": { 360 | "url": "https://github.com/sponsors/ljharb" 361 | } 362 | }, 363 | "node_modules/connect-session-sequelize/node_modules/is-arguments": { 364 | "version": "1.1.0", 365 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", 366 | "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", 367 | "dependencies": { 368 | "call-bind": "^1.0.0" 369 | }, 370 | "engines": { 371 | "node": ">= 0.4" 372 | }, 373 | "funding": { 374 | "url": "https://github.com/sponsors/ljharb" 375 | } 376 | }, 377 | "node_modules/connect-session-sequelize/node_modules/is-callable": { 378 | "version": "1.2.2", 379 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", 380 | "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", 381 | "engines": { 382 | "node": ">= 0.4" 383 | }, 384 | "funding": { 385 | "url": "https://github.com/sponsors/ljharb" 386 | } 387 | }, 388 | "node_modules/connect-session-sequelize/node_modules/is-date-object": { 389 | "version": "1.0.2", 390 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 391 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 392 | "engines": { 393 | "node": ">= 0.4" 394 | }, 395 | "funding": { 396 | "url": "https://github.com/sponsors/ljharb" 397 | } 398 | }, 399 | "node_modules/connect-session-sequelize/node_modules/is-regex": { 400 | "version": "1.1.1", 401 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", 402 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", 403 | "dependencies": { 404 | "has-symbols": "^1.0.1" 405 | }, 406 | "engines": { 407 | "node": ">= 0.4" 408 | }, 409 | "funding": { 410 | "url": "https://github.com/sponsors/ljharb" 411 | } 412 | }, 413 | "node_modules/connect-session-sequelize/node_modules/is-symbol": { 414 | "version": "1.0.3", 415 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 416 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 417 | "dependencies": { 418 | "has-symbols": "^1.0.1" 419 | }, 420 | "engines": { 421 | "node": ">= 0.4" 422 | }, 423 | "funding": { 424 | "url": "https://github.com/sponsors/ljharb" 425 | } 426 | }, 427 | "node_modules/connect-session-sequelize/node_modules/ms": { 428 | "version": "2.0.0", 429 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 430 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 431 | }, 432 | "node_modules/connect-session-sequelize/node_modules/object-inspect": { 433 | "version": "1.9.0", 434 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", 435 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", 436 | "funding": { 437 | "url": "https://github.com/sponsors/ljharb" 438 | } 439 | }, 440 | "node_modules/connect-session-sequelize/node_modules/object-is": { 441 | "version": "1.1.4", 442 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", 443 | "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", 444 | "dependencies": { 445 | "call-bind": "^1.0.0", 446 | "define-properties": "^1.1.3" 447 | }, 448 | "engines": { 449 | "node": ">= 0.4" 450 | }, 451 | "funding": { 452 | "url": "https://github.com/sponsors/ljharb" 453 | } 454 | }, 455 | "node_modules/connect-session-sequelize/node_modules/object-keys": { 456 | "version": "1.1.1", 457 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 458 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 459 | "engines": { 460 | "node": ">= 0.4" 461 | } 462 | }, 463 | "node_modules/connect-session-sequelize/node_modules/object.assign": { 464 | "version": "4.1.2", 465 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 466 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 467 | "dependencies": { 468 | "call-bind": "^1.0.0", 469 | "define-properties": "^1.1.3", 470 | "has-symbols": "^1.0.1", 471 | "object-keys": "^1.1.1" 472 | }, 473 | "engines": { 474 | "node": ">= 0.4" 475 | }, 476 | "funding": { 477 | "url": "https://github.com/sponsors/ljharb" 478 | } 479 | }, 480 | "node_modules/connect-session-sequelize/node_modules/regexp.prototype.flags": { 481 | "version": "1.3.0", 482 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", 483 | "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", 484 | "dependencies": { 485 | "define-properties": "^1.1.3", 486 | "es-abstract": "^1.17.0-next.1" 487 | }, 488 | "engines": { 489 | "node": ">= 0.4" 490 | }, 491 | "funding": { 492 | "url": "https://github.com/sponsors/ljharb" 493 | } 494 | }, 495 | "node_modules/connect-session-sequelize/node_modules/string.prototype.trimend": { 496 | "version": "1.0.3", 497 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", 498 | "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", 499 | "dependencies": { 500 | "call-bind": "^1.0.0", 501 | "define-properties": "^1.1.3" 502 | }, 503 | "funding": { 504 | "url": "https://github.com/sponsors/ljharb" 505 | } 506 | }, 507 | "node_modules/connect-session-sequelize/node_modules/string.prototype.trimstart": { 508 | "version": "1.0.3", 509 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", 510 | "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", 511 | "dependencies": { 512 | "call-bind": "^1.0.0", 513 | "define-properties": "^1.1.3" 514 | }, 515 | "funding": { 516 | "url": "https://github.com/sponsors/ljharb" 517 | } 518 | }, 519 | "node_modules/cookie-parser": { 520 | "version": "1.4.3", 521 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", 522 | "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", 523 | "dependencies": { 524 | "cookie": "0.3.1", 525 | "cookie-signature": "1.0.6" 526 | }, 527 | "engines": { 528 | "node": ">= 0.8.0" 529 | } 530 | }, 531 | "node_modules/cookie-parser/node_modules/cookie": { 532 | "version": "0.3.1", 533 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 534 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 535 | "engines": { 536 | "node": ">= 0.6" 537 | } 538 | }, 539 | "node_modules/cookie-parser/node_modules/cookie-signature": { 540 | "version": "1.0.6", 541 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 542 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 543 | }, 544 | "node_modules/express": { 545 | "version": "4.16.4", 546 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 547 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 548 | "dependencies": { 549 | "accepts": "~1.3.5", 550 | "array-flatten": "1.1.1", 551 | "body-parser": "1.18.3", 552 | "content-disposition": "0.5.2", 553 | "content-type": "~1.0.4", 554 | "cookie": "0.3.1", 555 | "cookie-signature": "1.0.6", 556 | "debug": "2.6.9", 557 | "depd": "~1.1.2", 558 | "encodeurl": "~1.0.2", 559 | "escape-html": "~1.0.3", 560 | "etag": "~1.8.1", 561 | "finalhandler": "1.1.1", 562 | "fresh": "0.5.2", 563 | "merge-descriptors": "1.0.1", 564 | "methods": "~1.1.2", 565 | "on-finished": "~2.3.0", 566 | "parseurl": "~1.3.2", 567 | "path-to-regexp": "0.1.7", 568 | "proxy-addr": "~2.0.4", 569 | "qs": "6.5.2", 570 | "range-parser": "~1.2.0", 571 | "safe-buffer": "5.1.2", 572 | "send": "0.16.2", 573 | "serve-static": "1.13.2", 574 | "setprototypeof": "1.1.0", 575 | "statuses": "~1.4.0", 576 | "type-is": "~1.6.16", 577 | "utils-merge": "1.0.1", 578 | "vary": "~1.1.2" 579 | }, 580 | "engines": { 581 | "node": ">= 0.10.0" 582 | } 583 | }, 584 | "node_modules/express-session": { 585 | "version": "1.15.6", 586 | "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", 587 | "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", 588 | "dependencies": { 589 | "cookie": "0.3.1", 590 | "cookie-signature": "1.0.6", 591 | "crc": "3.4.4", 592 | "debug": "2.6.9", 593 | "depd": "~1.1.1", 594 | "on-headers": "~1.0.1", 595 | "parseurl": "~1.3.2", 596 | "uid-safe": "~2.1.5", 597 | "utils-merge": "1.0.1" 598 | }, 599 | "engines": { 600 | "node": ">= 0.8.0" 601 | } 602 | }, 603 | "node_modules/express-session/node_modules/cookie": { 604 | "version": "0.3.1", 605 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 606 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 607 | "engines": { 608 | "node": ">= 0.6" 609 | } 610 | }, 611 | "node_modules/express-session/node_modules/cookie-signature": { 612 | "version": "1.0.6", 613 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 614 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 615 | }, 616 | "node_modules/express-session/node_modules/crc": { 617 | "version": "3.4.4", 618 | "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", 619 | "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" 620 | }, 621 | "node_modules/express-session/node_modules/debug": { 622 | "version": "2.6.9", 623 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 624 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 625 | "dependencies": { 626 | "ms": "2.0.0" 627 | } 628 | }, 629 | "node_modules/express-session/node_modules/depd": { 630 | "version": "1.1.2", 631 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 632 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 633 | "engines": { 634 | "node": ">= 0.6" 635 | } 636 | }, 637 | "node_modules/express-session/node_modules/ms": { 638 | "version": "2.0.0", 639 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 640 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 641 | }, 642 | "node_modules/express-session/node_modules/on-headers": { 643 | "version": "1.0.2", 644 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 645 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 646 | "engines": { 647 | "node": ">= 0.8" 648 | } 649 | }, 650 | "node_modules/express-session/node_modules/parseurl": { 651 | "version": "1.3.3", 652 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 653 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 654 | "engines": { 655 | "node": ">= 0.8" 656 | } 657 | }, 658 | "node_modules/express-session/node_modules/random-bytes": { 659 | "version": "1.0.0", 660 | "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", 661 | "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", 662 | "engines": { 663 | "node": ">= 0.8" 664 | } 665 | }, 666 | "node_modules/express-session/node_modules/uid-safe": { 667 | "version": "2.1.5", 668 | "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", 669 | "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", 670 | "dependencies": { 671 | "random-bytes": "~1.0.0" 672 | }, 673 | "engines": { 674 | "node": ">= 0.8" 675 | } 676 | }, 677 | "node_modules/express-session/node_modules/utils-merge": { 678 | "version": "1.0.1", 679 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 680 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 681 | "engines": { 682 | "node": ">= 0.4.0" 683 | } 684 | }, 685 | "node_modules/express/node_modules/accepts": { 686 | "version": "1.3.7", 687 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 688 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 689 | "dependencies": { 690 | "mime-types": "~2.1.24", 691 | "negotiator": "0.6.2" 692 | }, 693 | "engines": { 694 | "node": ">= 0.6" 695 | } 696 | }, 697 | "node_modules/express/node_modules/array-flatten": { 698 | "version": "1.1.1", 699 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 700 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 701 | }, 702 | "node_modules/express/node_modules/body-parser": { 703 | "version": "1.18.3", 704 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 705 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 706 | "dependencies": { 707 | "bytes": "3.0.0", 708 | "content-type": "~1.0.4", 709 | "debug": "2.6.9", 710 | "depd": "~1.1.2", 711 | "http-errors": "~1.6.3", 712 | "iconv-lite": "0.4.23", 713 | "on-finished": "~2.3.0", 714 | "qs": "6.5.2", 715 | "raw-body": "2.3.3", 716 | "type-is": "~1.6.16" 717 | }, 718 | "engines": { 719 | "node": ">= 0.8" 720 | } 721 | }, 722 | "node_modules/express/node_modules/bytes": { 723 | "version": "3.0.0", 724 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 725 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", 726 | "engines": { 727 | "node": ">= 0.8" 728 | } 729 | }, 730 | "node_modules/express/node_modules/content-disposition": { 731 | "version": "0.5.2", 732 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 733 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", 734 | "engines": { 735 | "node": ">= 0.6" 736 | } 737 | }, 738 | "node_modules/express/node_modules/content-type": { 739 | "version": "1.0.4", 740 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 741 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 742 | "engines": { 743 | "node": ">= 0.6" 744 | } 745 | }, 746 | "node_modules/express/node_modules/cookie": { 747 | "version": "0.3.1", 748 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 749 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 750 | "engines": { 751 | "node": ">= 0.6" 752 | } 753 | }, 754 | "node_modules/express/node_modules/cookie-signature": { 755 | "version": "1.0.6", 756 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 757 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 758 | }, 759 | "node_modules/express/node_modules/debug": { 760 | "version": "2.6.9", 761 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 762 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 763 | "dependencies": { 764 | "ms": "2.0.0" 765 | } 766 | }, 767 | "node_modules/express/node_modules/depd": { 768 | "version": "1.1.2", 769 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 770 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 771 | "engines": { 772 | "node": ">= 0.6" 773 | } 774 | }, 775 | "node_modules/express/node_modules/destroy": { 776 | "version": "1.0.4", 777 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 778 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 779 | }, 780 | "node_modules/express/node_modules/ee-first": { 781 | "version": "1.1.1", 782 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 783 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 784 | }, 785 | "node_modules/express/node_modules/encodeurl": { 786 | "version": "1.0.2", 787 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 788 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 789 | "engines": { 790 | "node": ">= 0.8" 791 | } 792 | }, 793 | "node_modules/express/node_modules/escape-html": { 794 | "version": "1.0.3", 795 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 796 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 797 | }, 798 | "node_modules/express/node_modules/etag": { 799 | "version": "1.8.1", 800 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 801 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 802 | "engines": { 803 | "node": ">= 0.6" 804 | } 805 | }, 806 | "node_modules/express/node_modules/finalhandler": { 807 | "version": "1.1.1", 808 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 809 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 810 | "dependencies": { 811 | "debug": "2.6.9", 812 | "encodeurl": "~1.0.2", 813 | "escape-html": "~1.0.3", 814 | "on-finished": "~2.3.0", 815 | "parseurl": "~1.3.2", 816 | "statuses": "~1.4.0", 817 | "unpipe": "~1.0.0" 818 | }, 819 | "engines": { 820 | "node": ">= 0.8" 821 | } 822 | }, 823 | "node_modules/express/node_modules/forwarded": { 824 | "version": "0.1.2", 825 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 826 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", 827 | "engines": { 828 | "node": ">= 0.6" 829 | } 830 | }, 831 | "node_modules/express/node_modules/fresh": { 832 | "version": "0.5.2", 833 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 834 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 835 | "engines": { 836 | "node": ">= 0.6" 837 | } 838 | }, 839 | "node_modules/express/node_modules/http-errors": { 840 | "version": "1.6.3", 841 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 842 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 843 | "dependencies": { 844 | "depd": "~1.1.2", 845 | "inherits": "2.0.3", 846 | "setprototypeof": "1.1.0", 847 | "statuses": ">= 1.4.0 < 2" 848 | }, 849 | "engines": { 850 | "node": ">= 0.6" 851 | } 852 | }, 853 | "node_modules/express/node_modules/iconv-lite": { 854 | "version": "0.4.23", 855 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 856 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 857 | "dependencies": { 858 | "safer-buffer": ">= 2.1.2 < 3" 859 | }, 860 | "engines": { 861 | "node": ">=0.10.0" 862 | } 863 | }, 864 | "node_modules/express/node_modules/inherits": { 865 | "version": "2.0.3", 866 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 867 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 868 | }, 869 | "node_modules/express/node_modules/ipaddr.js": { 870 | "version": "1.9.1", 871 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 872 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 873 | "engines": { 874 | "node": ">= 0.10" 875 | } 876 | }, 877 | "node_modules/express/node_modules/media-typer": { 878 | "version": "0.3.0", 879 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 880 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 881 | "engines": { 882 | "node": ">= 0.6" 883 | } 884 | }, 885 | "node_modules/express/node_modules/merge-descriptors": { 886 | "version": "1.0.1", 887 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 888 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 889 | }, 890 | "node_modules/express/node_modules/methods": { 891 | "version": "1.1.2", 892 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 893 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 894 | "engines": { 895 | "node": ">= 0.6" 896 | } 897 | }, 898 | "node_modules/express/node_modules/mime": { 899 | "version": "1.4.1", 900 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 901 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", 902 | "bin": { 903 | "mime": "cli.js" 904 | } 905 | }, 906 | "node_modules/express/node_modules/mime-db": { 907 | "version": "1.45.0", 908 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", 909 | "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", 910 | "engines": { 911 | "node": ">= 0.6" 912 | } 913 | }, 914 | "node_modules/express/node_modules/mime-types": { 915 | "version": "2.1.28", 916 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", 917 | "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", 918 | "dependencies": { 919 | "mime-db": "1.45.0" 920 | }, 921 | "engines": { 922 | "node": ">= 0.6" 923 | } 924 | }, 925 | "node_modules/express/node_modules/ms": { 926 | "version": "2.0.0", 927 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 928 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 929 | }, 930 | "node_modules/express/node_modules/negotiator": { 931 | "version": "0.6.2", 932 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 933 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", 934 | "engines": { 935 | "node": ">= 0.6" 936 | } 937 | }, 938 | "node_modules/express/node_modules/on-finished": { 939 | "version": "2.3.0", 940 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 941 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 942 | "dependencies": { 943 | "ee-first": "1.1.1" 944 | }, 945 | "engines": { 946 | "node": ">= 0.8" 947 | } 948 | }, 949 | "node_modules/express/node_modules/parseurl": { 950 | "version": "1.3.3", 951 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 952 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 953 | "engines": { 954 | "node": ">= 0.8" 955 | } 956 | }, 957 | "node_modules/express/node_modules/path-to-regexp": { 958 | "version": "0.1.7", 959 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 960 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 961 | }, 962 | "node_modules/express/node_modules/proxy-addr": { 963 | "version": "2.0.6", 964 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 965 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 966 | "dependencies": { 967 | "forwarded": "~0.1.2", 968 | "ipaddr.js": "1.9.1" 969 | }, 970 | "engines": { 971 | "node": ">= 0.10" 972 | } 973 | }, 974 | "node_modules/express/node_modules/qs": { 975 | "version": "6.5.2", 976 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 977 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 978 | "engines": { 979 | "node": ">=0.6" 980 | } 981 | }, 982 | "node_modules/express/node_modules/range-parser": { 983 | "version": "1.2.1", 984 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 985 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 986 | "engines": { 987 | "node": ">= 0.6" 988 | } 989 | }, 990 | "node_modules/express/node_modules/raw-body": { 991 | "version": "2.3.3", 992 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 993 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 994 | "dependencies": { 995 | "bytes": "3.0.0", 996 | "http-errors": "1.6.3", 997 | "iconv-lite": "0.4.23", 998 | "unpipe": "1.0.0" 999 | }, 1000 | "engines": { 1001 | "node": ">= 0.8" 1002 | } 1003 | }, 1004 | "node_modules/express/node_modules/safe-buffer": { 1005 | "version": "5.1.2", 1006 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1007 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1008 | }, 1009 | "node_modules/express/node_modules/safer-buffer": { 1010 | "version": "2.1.2", 1011 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1012 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1013 | }, 1014 | "node_modules/express/node_modules/send": { 1015 | "version": "0.16.2", 1016 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 1017 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 1018 | "dependencies": { 1019 | "debug": "2.6.9", 1020 | "depd": "~1.1.2", 1021 | "destroy": "~1.0.4", 1022 | "encodeurl": "~1.0.2", 1023 | "escape-html": "~1.0.3", 1024 | "etag": "~1.8.1", 1025 | "fresh": "0.5.2", 1026 | "http-errors": "~1.6.2", 1027 | "mime": "1.4.1", 1028 | "ms": "2.0.0", 1029 | "on-finished": "~2.3.0", 1030 | "range-parser": "~1.2.0", 1031 | "statuses": "~1.4.0" 1032 | }, 1033 | "engines": { 1034 | "node": ">= 0.8.0" 1035 | } 1036 | }, 1037 | "node_modules/express/node_modules/serve-static": { 1038 | "version": "1.13.2", 1039 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 1040 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 1041 | "dependencies": { 1042 | "encodeurl": "~1.0.2", 1043 | "escape-html": "~1.0.3", 1044 | "parseurl": "~1.3.2", 1045 | "send": "0.16.2" 1046 | }, 1047 | "engines": { 1048 | "node": ">= 0.8.0" 1049 | } 1050 | }, 1051 | "node_modules/express/node_modules/setprototypeof": { 1052 | "version": "1.1.0", 1053 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1054 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 1055 | }, 1056 | "node_modules/express/node_modules/statuses": { 1057 | "version": "1.4.0", 1058 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 1059 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", 1060 | "engines": { 1061 | "node": ">= 0.6" 1062 | } 1063 | }, 1064 | "node_modules/express/node_modules/type-is": { 1065 | "version": "1.6.18", 1066 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1067 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1068 | "dependencies": { 1069 | "media-typer": "0.3.0", 1070 | "mime-types": "~2.1.24" 1071 | }, 1072 | "engines": { 1073 | "node": ">= 0.6" 1074 | } 1075 | }, 1076 | "node_modules/express/node_modules/unpipe": { 1077 | "version": "1.0.0", 1078 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1079 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 1080 | "engines": { 1081 | "node": ">= 0.8" 1082 | } 1083 | }, 1084 | "node_modules/express/node_modules/utils-merge": { 1085 | "version": "1.0.1", 1086 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1087 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 1088 | "engines": { 1089 | "node": ">= 0.4.0" 1090 | } 1091 | }, 1092 | "node_modules/express/node_modules/vary": { 1093 | "version": "1.1.2", 1094 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1095 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 1096 | "engines": { 1097 | "node": ">= 0.8" 1098 | } 1099 | }, 1100 | "node_modules/morgan": { 1101 | "version": "1.9.1", 1102 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", 1103 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", 1104 | "dependencies": { 1105 | "basic-auth": "~2.0.0", 1106 | "debug": "2.6.9", 1107 | "depd": "~1.1.2", 1108 | "on-finished": "~2.3.0", 1109 | "on-headers": "~1.0.1" 1110 | }, 1111 | "engines": { 1112 | "node": ">= 0.8.0" 1113 | } 1114 | }, 1115 | "node_modules/morgan/node_modules/basic-auth": { 1116 | "version": "2.0.1", 1117 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 1118 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 1119 | "dependencies": { 1120 | "safe-buffer": "5.1.2" 1121 | }, 1122 | "engines": { 1123 | "node": ">= 0.8" 1124 | } 1125 | }, 1126 | "node_modules/morgan/node_modules/debug": { 1127 | "version": "2.6.9", 1128 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1129 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1130 | "dependencies": { 1131 | "ms": "2.0.0" 1132 | } 1133 | }, 1134 | "node_modules/morgan/node_modules/depd": { 1135 | "version": "1.1.2", 1136 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1137 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 1138 | "engines": { 1139 | "node": ">= 0.6" 1140 | } 1141 | }, 1142 | "node_modules/morgan/node_modules/ee-first": { 1143 | "version": "1.1.1", 1144 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1145 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 1146 | }, 1147 | "node_modules/morgan/node_modules/ms": { 1148 | "version": "2.0.0", 1149 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1150 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1151 | }, 1152 | "node_modules/morgan/node_modules/on-finished": { 1153 | "version": "2.3.0", 1154 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1155 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1156 | "dependencies": { 1157 | "ee-first": "1.1.1" 1158 | }, 1159 | "engines": { 1160 | "node": ">= 0.8" 1161 | } 1162 | }, 1163 | "node_modules/morgan/node_modules/on-headers": { 1164 | "version": "1.0.2", 1165 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1166 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 1167 | "engines": { 1168 | "node": ">= 0.8" 1169 | } 1170 | }, 1171 | "node_modules/morgan/node_modules/safe-buffer": { 1172 | "version": "5.1.2", 1173 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1174 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1175 | }, 1176 | "node_modules/nunjucks": { 1177 | "version": "1.3.4", 1178 | "resolved": "http://registry.npmjs.org/nunjucks/-/nunjucks-1.3.4.tgz", 1179 | "integrity": "sha1-Td0QqDZLGmTT49fSqNQ2gTHTkEI=", 1180 | "deprecated": "potential XSS vulnerability in autoescape mode, and with escape filter was fixed in v2.4.3", 1181 | "dependencies": { 1182 | "chokidar": "~0.12.5", 1183 | "optimist": "*" 1184 | }, 1185 | "bin": { 1186 | "nunjucks-precompile": "bin/precompile" 1187 | }, 1188 | "engines": { 1189 | "node": "*" 1190 | } 1191 | }, 1192 | "node_modules/nunjucks/node_modules/async-each": { 1193 | "version": "0.1.6", 1194 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-0.1.6.tgz", 1195 | "integrity": "sha1-tn6Z7c3fllQeRK9WKQzX1cbnBDk=" 1196 | }, 1197 | "node_modules/nunjucks/node_modules/chokidar": { 1198 | "version": "0.12.6", 1199 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-0.12.6.tgz", 1200 | "integrity": "sha1-viBPW5Y04AkxElbl1ujg5QgoTS8=", 1201 | "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", 1202 | "dependencies": { 1203 | "async-each": "~0.1.5", 1204 | "readdirp": "~1.3.0" 1205 | }, 1206 | "optionalDependencies": { 1207 | "fsevents": "~0.3.1" 1208 | } 1209 | }, 1210 | "node_modules/nunjucks/node_modules/core-util-is": { 1211 | "version": "1.0.2", 1212 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1213 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1214 | }, 1215 | "node_modules/nunjucks/node_modules/fsevents": { 1216 | "version": "0.3.8", 1217 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-0.3.8.tgz", 1218 | "integrity": "sha1-mZLxAyySXIKVVNDVmAHcoDE6U1Y=", 1219 | "deprecated": "\"Please update to latest v2.3 or v2.2\"", 1220 | "hasInstallScript": true, 1221 | "optional": true, 1222 | "os": [ 1223 | "darwin" 1224 | ], 1225 | "dependencies": { 1226 | "nan": "^2.0.2" 1227 | }, 1228 | "engines": { 1229 | "node": ">=0.8.0" 1230 | } 1231 | }, 1232 | "node_modules/nunjucks/node_modules/graceful-fs": { 1233 | "version": "2.0.3", 1234 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", 1235 | "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", 1236 | "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", 1237 | "engines": { 1238 | "node": ">=0.4.0" 1239 | } 1240 | }, 1241 | "node_modules/nunjucks/node_modules/inherits": { 1242 | "version": "2.0.4", 1243 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1244 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1245 | }, 1246 | "node_modules/nunjucks/node_modules/isarray": { 1247 | "version": "0.0.1", 1248 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1249 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 1250 | }, 1251 | "node_modules/nunjucks/node_modules/lru-cache": { 1252 | "version": "2.7.3", 1253 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 1254 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" 1255 | }, 1256 | "node_modules/nunjucks/node_modules/minimatch": { 1257 | "version": "0.2.14", 1258 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", 1259 | "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", 1260 | "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", 1261 | "dependencies": { 1262 | "lru-cache": "2", 1263 | "sigmund": "~1.0.0" 1264 | }, 1265 | "engines": { 1266 | "node": "*" 1267 | } 1268 | }, 1269 | "node_modules/nunjucks/node_modules/minimist": { 1270 | "version": "0.0.10", 1271 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 1272 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" 1273 | }, 1274 | "node_modules/nunjucks/node_modules/optimist": { 1275 | "version": "0.6.1", 1276 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 1277 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 1278 | "dependencies": { 1279 | "minimist": "~0.0.1", 1280 | "wordwrap": "~0.0.2" 1281 | } 1282 | }, 1283 | "node_modules/nunjucks/node_modules/readable-stream": { 1284 | "version": "1.0.34", 1285 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1286 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 1287 | "dependencies": { 1288 | "core-util-is": "~1.0.0", 1289 | "inherits": "~2.0.1", 1290 | "isarray": "0.0.1", 1291 | "string_decoder": "~0.10.x" 1292 | } 1293 | }, 1294 | "node_modules/nunjucks/node_modules/readdirp": { 1295 | "version": "1.3.0", 1296 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-1.3.0.tgz", 1297 | "integrity": "sha1-6vGptGO+moGQ/JrhY6oayTSqNAs=", 1298 | "dependencies": { 1299 | "graceful-fs": "~2.0.0", 1300 | "minimatch": "~0.2.12", 1301 | "readable-stream": "~1.0.26-2" 1302 | }, 1303 | "engines": { 1304 | "node": ">=0.6" 1305 | } 1306 | }, 1307 | "node_modules/nunjucks/node_modules/sigmund": { 1308 | "version": "1.0.1", 1309 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1310 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" 1311 | }, 1312 | "node_modules/nunjucks/node_modules/string_decoder": { 1313 | "version": "0.10.31", 1314 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1315 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1316 | }, 1317 | "node_modules/nunjucks/node_modules/wordwrap": { 1318 | "version": "0.0.3", 1319 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 1320 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 1321 | "engines": { 1322 | "node": ">=0.4.0" 1323 | } 1324 | }, 1325 | "node_modules/oauth": { 1326 | "version": "0.9.15", 1327 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 1328 | "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" 1329 | }, 1330 | "node_modules/passport": { 1331 | "version": "0.2.2", 1332 | "resolved": "http://registry.npmjs.org/passport/-/passport-0.2.2.tgz", 1333 | "integrity": "sha1-nDjxe+uSnz2Br3uIOOhDDbhwPys=", 1334 | "dependencies": { 1335 | "passport-strategy": "1.x.x", 1336 | "pause": "0.0.1" 1337 | }, 1338 | "engines": { 1339 | "node": ">= 0.4.0" 1340 | } 1341 | }, 1342 | "node_modules/passport-twitter": { 1343 | "version": "1.0.4", 1344 | "resolved": "https://registry.npmjs.org/passport-twitter/-/passport-twitter-1.0.4.tgz", 1345 | "integrity": "sha1-AaeZ4fdgvy3knyul+6MigvGJMtc=", 1346 | "dependencies": { 1347 | "passport-oauth1": "1.x.x", 1348 | "xtraverse": "0.1.x" 1349 | }, 1350 | "engines": { 1351 | "node": ">= 0.4.0" 1352 | } 1353 | }, 1354 | "node_modules/passport-twitter/node_modules/oauth": { 1355 | "version": "0.9.15", 1356 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 1357 | "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" 1358 | }, 1359 | "node_modules/passport-twitter/node_modules/passport-oauth1": { 1360 | "version": "1.1.0", 1361 | "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.1.0.tgz", 1362 | "integrity": "sha1-p96YiiEfnPRoc3cTDqdN8ycwyRg=", 1363 | "dependencies": { 1364 | "oauth": "0.9.x", 1365 | "passport-strategy": "1.x.x", 1366 | "utils-merge": "1.x.x" 1367 | }, 1368 | "engines": { 1369 | "node": ">= 0.4.0" 1370 | } 1371 | }, 1372 | "node_modules/passport-twitter/node_modules/passport-strategy": { 1373 | "version": "1.0.0", 1374 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 1375 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=", 1376 | "engines": { 1377 | "node": ">= 0.4.0" 1378 | } 1379 | }, 1380 | "node_modules/passport-twitter/node_modules/utils-merge": { 1381 | "version": "1.0.1", 1382 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1383 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 1384 | "engines": { 1385 | "node": ">= 0.4.0" 1386 | } 1387 | }, 1388 | "node_modules/passport-twitter/node_modules/xmldom": { 1389 | "version": "0.1.31", 1390 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", 1391 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", 1392 | "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", 1393 | "engines": { 1394 | "node": ">=0.1" 1395 | } 1396 | }, 1397 | "node_modules/passport-twitter/node_modules/xtraverse": { 1398 | "version": "0.1.0", 1399 | "resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz", 1400 | "integrity": "sha1-t0G60BjveNip0ug63gB7P3lZxzI=", 1401 | "dependencies": { 1402 | "xmldom": "0.1.x" 1403 | }, 1404 | "engines": { 1405 | "node": ">= 0.4.0" 1406 | } 1407 | }, 1408 | "node_modules/passport/node_modules/passport-strategy": { 1409 | "version": "1.0.0", 1410 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 1411 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=", 1412 | "engines": { 1413 | "node": ">= 0.4.0" 1414 | } 1415 | }, 1416 | "node_modules/passport/node_modules/pause": { 1417 | "version": "0.0.1", 1418 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", 1419 | "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" 1420 | }, 1421 | "node_modules/sequelize": { 1422 | "version": "4.41.2", 1423 | "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.41.2.tgz", 1424 | "integrity": "sha512-8vPf2R0o9iEmtzkqNzwFdblO+0Mu+RNxOdLeYGGqWGlp3cushLpQucAeSGPQgf2hQVZP5yOCM1ouZKTQ5FTlvA==", 1425 | "deprecated": "Please update to v6 or higher! A migration guide can be found here: https://sequelize.org/v6/manual/upgrade-to-v6.html", 1426 | "dependencies": { 1427 | "bluebird": "^3.5.0", 1428 | "cls-bluebird": "^2.1.0", 1429 | "debug": "^3.1.0", 1430 | "depd": "^1.1.0", 1431 | "dottie": "^2.0.0", 1432 | "generic-pool": "^3.4.0", 1433 | "inflection": "1.12.0", 1434 | "lodash": "^4.17.1", 1435 | "moment": "^2.20.0", 1436 | "moment-timezone": "^0.5.14", 1437 | "retry-as-promised": "^2.3.2", 1438 | "semver": "^5.5.0", 1439 | "terraformer-wkt-parser": "^1.1.2", 1440 | "toposort-class": "^1.0.1", 1441 | "uuid": "^3.2.1", 1442 | "validator": "^10.4.0", 1443 | "wkx": "^0.4.1" 1444 | }, 1445 | "engines": { 1446 | "node": ">=4.0.0" 1447 | } 1448 | }, 1449 | "node_modules/sequelize/node_modules/@types/geojson": { 1450 | "version": "1.0.6", 1451 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", 1452 | "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" 1453 | }, 1454 | "node_modules/sequelize/node_modules/@types/node": { 1455 | "version": "14.14.20", 1456 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", 1457 | "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==" 1458 | }, 1459 | "node_modules/sequelize/node_modules/bluebird": { 1460 | "version": "3.7.2", 1461 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 1462 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 1463 | }, 1464 | "node_modules/sequelize/node_modules/cls-bluebird": { 1465 | "version": "2.1.0", 1466 | "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", 1467 | "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", 1468 | "dependencies": { 1469 | "is-bluebird": "^1.0.2", 1470 | "shimmer": "^1.1.0" 1471 | } 1472 | }, 1473 | "node_modules/sequelize/node_modules/debug": { 1474 | "version": "3.2.6", 1475 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 1476 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 1477 | "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", 1478 | "dependencies": { 1479 | "ms": "^2.1.1" 1480 | } 1481 | }, 1482 | "node_modules/sequelize/node_modules/depd": { 1483 | "version": "1.1.2", 1484 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1485 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 1486 | "engines": { 1487 | "node": ">= 0.6" 1488 | } 1489 | }, 1490 | "node_modules/sequelize/node_modules/dottie": { 1491 | "version": "2.0.2", 1492 | "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", 1493 | "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" 1494 | }, 1495 | "node_modules/sequelize/node_modules/generic-pool": { 1496 | "version": "3.7.1", 1497 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.7.1.tgz", 1498 | "integrity": "sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w==", 1499 | "engines": { 1500 | "node": ">= 4" 1501 | } 1502 | }, 1503 | "node_modules/sequelize/node_modules/inflection": { 1504 | "version": "1.12.0", 1505 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", 1506 | "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", 1507 | "engines": [ 1508 | "node >= 0.4.0" 1509 | ] 1510 | }, 1511 | "node_modules/sequelize/node_modules/is-bluebird": { 1512 | "version": "1.0.2", 1513 | "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", 1514 | "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=", 1515 | "engines": { 1516 | "node": ">=0.10.0" 1517 | } 1518 | }, 1519 | "node_modules/sequelize/node_modules/lodash": { 1520 | "version": "4.17.20", 1521 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 1522 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" 1523 | }, 1524 | "node_modules/sequelize/node_modules/moment": { 1525 | "version": "2.29.1", 1526 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 1527 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", 1528 | "engines": { 1529 | "node": "*" 1530 | } 1531 | }, 1532 | "node_modules/sequelize/node_modules/moment-timezone": { 1533 | "version": "0.5.32", 1534 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", 1535 | "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", 1536 | "dependencies": { 1537 | "moment": ">= 2.9.0" 1538 | }, 1539 | "engines": { 1540 | "node": "*" 1541 | } 1542 | }, 1543 | "node_modules/sequelize/node_modules/ms": { 1544 | "version": "2.1.1", 1545 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1546 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 1547 | }, 1548 | "node_modules/sequelize/node_modules/retry-as-promised": { 1549 | "version": "2.3.2", 1550 | "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", 1551 | "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", 1552 | "dependencies": { 1553 | "bluebird": "^3.4.6", 1554 | "debug": "^2.6.9" 1555 | } 1556 | }, 1557 | "node_modules/sequelize/node_modules/retry-as-promised/node_modules/debug": { 1558 | "version": "2.6.9", 1559 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1560 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1561 | "dependencies": { 1562 | "ms": "2.0.0" 1563 | } 1564 | }, 1565 | "node_modules/sequelize/node_modules/retry-as-promised/node_modules/ms": { 1566 | "version": "2.0.0", 1567 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1568 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1569 | }, 1570 | "node_modules/sequelize/node_modules/semver": { 1571 | "version": "5.7.1", 1572 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1573 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1574 | "bin": { 1575 | "semver": "bin/semver" 1576 | } 1577 | }, 1578 | "node_modules/sequelize/node_modules/shimmer": { 1579 | "version": "1.2.1", 1580 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", 1581 | "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" 1582 | }, 1583 | "node_modules/sequelize/node_modules/terraformer": { 1584 | "version": "1.0.12", 1585 | "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.12.tgz", 1586 | "integrity": "sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==", 1587 | "deprecated": "terraformer is deprecated and no longer supported. Please use @terraformer/arcgis.", 1588 | "engines": { 1589 | "node": ">=4.2.6" 1590 | }, 1591 | "optionalDependencies": { 1592 | "@types/geojson": "^7946.0.0 || ^1.0.0" 1593 | } 1594 | }, 1595 | "node_modules/sequelize/node_modules/terraformer-wkt-parser": { 1596 | "version": "1.2.1", 1597 | "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz", 1598 | "integrity": "sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==", 1599 | "deprecated": "terraformer-wkt-parser is deprecated and no longer supported. Please use @terraformer/wkt.", 1600 | "dependencies": { 1601 | "@types/geojson": "^1.0.0", 1602 | "terraformer": "~1.0.5" 1603 | }, 1604 | "engines": { 1605 | "node": ">=4.2.6" 1606 | } 1607 | }, 1608 | "node_modules/sequelize/node_modules/toposort-class": { 1609 | "version": "1.0.1", 1610 | "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 1611 | "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" 1612 | }, 1613 | "node_modules/sequelize/node_modules/uuid": { 1614 | "version": "3.4.0", 1615 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1616 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 1617 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 1618 | "bin": { 1619 | "uuid": "bin/uuid" 1620 | } 1621 | }, 1622 | "node_modules/sequelize/node_modules/validator": { 1623 | "version": "10.11.0", 1624 | "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", 1625 | "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", 1626 | "engines": { 1627 | "node": ">= 0.10" 1628 | } 1629 | }, 1630 | "node_modules/sequelize/node_modules/wkx": { 1631 | "version": "0.4.8", 1632 | "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", 1633 | "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", 1634 | "dependencies": { 1635 | "@types/node": "*" 1636 | } 1637 | }, 1638 | "node_modules/serve-static": { 1639 | "version": "1.13.2", 1640 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 1641 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 1642 | "dependencies": { 1643 | "encodeurl": "~1.0.2", 1644 | "escape-html": "~1.0.3", 1645 | "parseurl": "~1.3.2", 1646 | "send": "0.16.2" 1647 | }, 1648 | "engines": { 1649 | "node": ">= 0.8.0" 1650 | } 1651 | }, 1652 | "node_modules/serve-static/node_modules/debug": { 1653 | "version": "2.6.9", 1654 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1655 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1656 | "dependencies": { 1657 | "ms": "2.0.0" 1658 | } 1659 | }, 1660 | "node_modules/serve-static/node_modules/depd": { 1661 | "version": "1.1.2", 1662 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1663 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 1664 | "engines": { 1665 | "node": ">= 0.6" 1666 | } 1667 | }, 1668 | "node_modules/serve-static/node_modules/destroy": { 1669 | "version": "1.0.4", 1670 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 1671 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 1672 | }, 1673 | "node_modules/serve-static/node_modules/ee-first": { 1674 | "version": "1.1.1", 1675 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1676 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 1677 | }, 1678 | "node_modules/serve-static/node_modules/encodeurl": { 1679 | "version": "1.0.2", 1680 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1681 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 1682 | "engines": { 1683 | "node": ">= 0.8" 1684 | } 1685 | }, 1686 | "node_modules/serve-static/node_modules/escape-html": { 1687 | "version": "1.0.3", 1688 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1689 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 1690 | }, 1691 | "node_modules/serve-static/node_modules/etag": { 1692 | "version": "1.8.1", 1693 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1694 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 1695 | "engines": { 1696 | "node": ">= 0.6" 1697 | } 1698 | }, 1699 | "node_modules/serve-static/node_modules/fresh": { 1700 | "version": "0.5.2", 1701 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1702 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 1703 | "engines": { 1704 | "node": ">= 0.6" 1705 | } 1706 | }, 1707 | "node_modules/serve-static/node_modules/http-errors": { 1708 | "version": "1.6.3", 1709 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1710 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 1711 | "dependencies": { 1712 | "depd": "~1.1.2", 1713 | "inherits": "2.0.3", 1714 | "setprototypeof": "1.1.0", 1715 | "statuses": ">= 1.4.0 < 2" 1716 | }, 1717 | "engines": { 1718 | "node": ">= 0.6" 1719 | } 1720 | }, 1721 | "node_modules/serve-static/node_modules/inherits": { 1722 | "version": "2.0.3", 1723 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1724 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1725 | }, 1726 | "node_modules/serve-static/node_modules/mime": { 1727 | "version": "1.4.1", 1728 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 1729 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", 1730 | "bin": { 1731 | "mime": "cli.js" 1732 | } 1733 | }, 1734 | "node_modules/serve-static/node_modules/ms": { 1735 | "version": "2.0.0", 1736 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1737 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1738 | }, 1739 | "node_modules/serve-static/node_modules/on-finished": { 1740 | "version": "2.3.0", 1741 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1742 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1743 | "dependencies": { 1744 | "ee-first": "1.1.1" 1745 | }, 1746 | "engines": { 1747 | "node": ">= 0.8" 1748 | } 1749 | }, 1750 | "node_modules/serve-static/node_modules/parseurl": { 1751 | "version": "1.3.3", 1752 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1753 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1754 | "engines": { 1755 | "node": ">= 0.8" 1756 | } 1757 | }, 1758 | "node_modules/serve-static/node_modules/range-parser": { 1759 | "version": "1.2.1", 1760 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1761 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1762 | "engines": { 1763 | "node": ">= 0.6" 1764 | } 1765 | }, 1766 | "node_modules/serve-static/node_modules/send": { 1767 | "version": "0.16.2", 1768 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 1769 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 1770 | "dependencies": { 1771 | "debug": "2.6.9", 1772 | "depd": "~1.1.2", 1773 | "destroy": "~1.0.4", 1774 | "encodeurl": "~1.0.2", 1775 | "escape-html": "~1.0.3", 1776 | "etag": "~1.8.1", 1777 | "fresh": "0.5.2", 1778 | "http-errors": "~1.6.2", 1779 | "mime": "1.4.1", 1780 | "ms": "2.0.0", 1781 | "on-finished": "~2.3.0", 1782 | "range-parser": "~1.2.0", 1783 | "statuses": "~1.4.0" 1784 | }, 1785 | "engines": { 1786 | "node": ">= 0.8.0" 1787 | } 1788 | }, 1789 | "node_modules/serve-static/node_modules/setprototypeof": { 1790 | "version": "1.1.0", 1791 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1792 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 1793 | }, 1794 | "node_modules/serve-static/node_modules/statuses": { 1795 | "version": "1.4.0", 1796 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 1797 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", 1798 | "engines": { 1799 | "node": ">= 0.6" 1800 | } 1801 | } 1802 | }, 1803 | "dependencies": { 1804 | "body-parser": { 1805 | "version": "1.18.3", 1806 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 1807 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 1808 | "requires": { 1809 | "bytes": "3.0.0", 1810 | "content-type": "~1.0.4", 1811 | "debug": "2.6.9", 1812 | "depd": "~1.1.2", 1813 | "http-errors": "~1.6.3", 1814 | "iconv-lite": "0.4.23", 1815 | "on-finished": "~2.3.0", 1816 | "qs": "6.5.2", 1817 | "raw-body": "2.3.3", 1818 | "type-is": "~1.6.16" 1819 | }, 1820 | "dependencies": { 1821 | "bytes": { 1822 | "version": "3.0.0", 1823 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 1824 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 1825 | }, 1826 | "content-type": { 1827 | "version": "1.0.4", 1828 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 1829 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 1830 | }, 1831 | "debug": { 1832 | "version": "2.6.9", 1833 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1834 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1835 | "requires": { 1836 | "ms": "2.0.0" 1837 | } 1838 | }, 1839 | "depd": { 1840 | "version": "1.1.2", 1841 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1842 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 1843 | }, 1844 | "ee-first": { 1845 | "version": "1.1.1", 1846 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1847 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 1848 | }, 1849 | "http-errors": { 1850 | "version": "1.6.3", 1851 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1852 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 1853 | "requires": { 1854 | "depd": "~1.1.2", 1855 | "inherits": "2.0.3", 1856 | "setprototypeof": "1.1.0", 1857 | "statuses": ">= 1.4.0 < 2" 1858 | } 1859 | }, 1860 | "iconv-lite": { 1861 | "version": "0.4.23", 1862 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 1863 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 1864 | "requires": { 1865 | "safer-buffer": ">= 2.1.2 < 3" 1866 | } 1867 | }, 1868 | "inherits": { 1869 | "version": "2.0.3", 1870 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1871 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1872 | }, 1873 | "media-typer": { 1874 | "version": "0.3.0", 1875 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1876 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1877 | }, 1878 | "mime-db": { 1879 | "version": "1.45.0", 1880 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", 1881 | "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" 1882 | }, 1883 | "mime-types": { 1884 | "version": "2.1.28", 1885 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", 1886 | "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", 1887 | "requires": { 1888 | "mime-db": "1.45.0" 1889 | } 1890 | }, 1891 | "ms": { 1892 | "version": "2.0.0", 1893 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1894 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1895 | }, 1896 | "on-finished": { 1897 | "version": "2.3.0", 1898 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1899 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1900 | "requires": { 1901 | "ee-first": "1.1.1" 1902 | } 1903 | }, 1904 | "qs": { 1905 | "version": "6.5.2", 1906 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1907 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1908 | }, 1909 | "raw-body": { 1910 | "version": "2.3.3", 1911 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 1912 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 1913 | "requires": { 1914 | "bytes": "3.0.0", 1915 | "http-errors": "1.6.3", 1916 | "iconv-lite": "0.4.23", 1917 | "unpipe": "1.0.0" 1918 | } 1919 | }, 1920 | "safer-buffer": { 1921 | "version": "2.1.2", 1922 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1923 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1924 | }, 1925 | "setprototypeof": { 1926 | "version": "1.1.0", 1927 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1928 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 1929 | }, 1930 | "statuses": { 1931 | "version": "1.5.0", 1932 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1933 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1934 | }, 1935 | "type-is": { 1936 | "version": "1.6.18", 1937 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1938 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1939 | "requires": { 1940 | "media-typer": "0.3.0", 1941 | "mime-types": "~2.1.24" 1942 | } 1943 | }, 1944 | "unpipe": { 1945 | "version": "1.0.0", 1946 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1947 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1948 | } 1949 | } 1950 | }, 1951 | "connect-ensure-login": { 1952 | "version": "0.1.1", 1953 | "resolved": "https://registry.npmjs.org/connect-ensure-login/-/connect-ensure-login-0.1.1.tgz", 1954 | "integrity": "sha1-F03MUSQ7nqwj+NmCFa62aU4uihI=" 1955 | }, 1956 | "connect-session-sequelize": { 1957 | "version": "4.1.0", 1958 | "resolved": "http://registry.npmjs.org/connect-session-sequelize/-/connect-session-sequelize-4.1.0.tgz", 1959 | "integrity": "sha1-1AJ0nDvr15IJGSwWTAkHQrP+IBE=", 1960 | "requires": { 1961 | "debug": "^2.1.1", 1962 | "deep-equal": "^1.0.1" 1963 | }, 1964 | "dependencies": { 1965 | "call-bind": { 1966 | "version": "1.0.1", 1967 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.1.tgz", 1968 | "integrity": "sha512-tvAvUwNcRikl3RVF20X9lsYmmepsovzTWeJiXjO0PkJp15uy/6xKFZOQtuiSULwYW+6ToZBprphCgWXC2dSgcQ==", 1969 | "requires": { 1970 | "function-bind": "^1.1.1", 1971 | "get-intrinsic": "^1.0.2" 1972 | } 1973 | }, 1974 | "debug": { 1975 | "version": "2.6.9", 1976 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1977 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1978 | "requires": { 1979 | "ms": "2.0.0" 1980 | } 1981 | }, 1982 | "deep-equal": { 1983 | "version": "1.1.1", 1984 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", 1985 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", 1986 | "requires": { 1987 | "is-arguments": "^1.0.4", 1988 | "is-date-object": "^1.0.1", 1989 | "is-regex": "^1.0.4", 1990 | "object-is": "^1.0.1", 1991 | "object-keys": "^1.1.1", 1992 | "regexp.prototype.flags": "^1.2.0" 1993 | } 1994 | }, 1995 | "define-properties": { 1996 | "version": "1.1.3", 1997 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1998 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1999 | "requires": { 2000 | "object-keys": "^1.0.12" 2001 | } 2002 | }, 2003 | "es-abstract": { 2004 | "version": "1.17.7", 2005 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", 2006 | "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", 2007 | "requires": { 2008 | "es-to-primitive": "^1.2.1", 2009 | "function-bind": "^1.1.1", 2010 | "has": "^1.0.3", 2011 | "has-symbols": "^1.0.1", 2012 | "is-callable": "^1.2.2", 2013 | "is-regex": "^1.1.1", 2014 | "object-inspect": "^1.8.0", 2015 | "object-keys": "^1.1.1", 2016 | "object.assign": "^4.1.1", 2017 | "string.prototype.trimend": "^1.0.1", 2018 | "string.prototype.trimstart": "^1.0.1" 2019 | } 2020 | }, 2021 | "es-to-primitive": { 2022 | "version": "1.2.1", 2023 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 2024 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 2025 | "requires": { 2026 | "is-callable": "^1.1.4", 2027 | "is-date-object": "^1.0.1", 2028 | "is-symbol": "^1.0.2" 2029 | } 2030 | }, 2031 | "function-bind": { 2032 | "version": "1.1.1", 2033 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2034 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 2035 | }, 2036 | "get-intrinsic": { 2037 | "version": "1.0.2", 2038 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", 2039 | "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", 2040 | "requires": { 2041 | "function-bind": "^1.1.1", 2042 | "has": "^1.0.3", 2043 | "has-symbols": "^1.0.1" 2044 | } 2045 | }, 2046 | "has": { 2047 | "version": "1.0.3", 2048 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2049 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2050 | "requires": { 2051 | "function-bind": "^1.1.1" 2052 | } 2053 | }, 2054 | "has-symbols": { 2055 | "version": "1.0.1", 2056 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 2057 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" 2058 | }, 2059 | "is-arguments": { 2060 | "version": "1.1.0", 2061 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", 2062 | "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", 2063 | "requires": { 2064 | "call-bind": "^1.0.0" 2065 | } 2066 | }, 2067 | "is-callable": { 2068 | "version": "1.2.2", 2069 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", 2070 | "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" 2071 | }, 2072 | "is-date-object": { 2073 | "version": "1.0.2", 2074 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 2075 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" 2076 | }, 2077 | "is-regex": { 2078 | "version": "1.1.1", 2079 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", 2080 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", 2081 | "requires": { 2082 | "has-symbols": "^1.0.1" 2083 | } 2084 | }, 2085 | "is-symbol": { 2086 | "version": "1.0.3", 2087 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 2088 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 2089 | "requires": { 2090 | "has-symbols": "^1.0.1" 2091 | } 2092 | }, 2093 | "ms": { 2094 | "version": "2.0.0", 2095 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2096 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2097 | }, 2098 | "object-inspect": { 2099 | "version": "1.9.0", 2100 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", 2101 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" 2102 | }, 2103 | "object-is": { 2104 | "version": "1.1.4", 2105 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", 2106 | "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", 2107 | "requires": { 2108 | "call-bind": "^1.0.0", 2109 | "define-properties": "^1.1.3" 2110 | } 2111 | }, 2112 | "object-keys": { 2113 | "version": "1.1.1", 2114 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2115 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 2116 | }, 2117 | "object.assign": { 2118 | "version": "4.1.2", 2119 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 2120 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 2121 | "requires": { 2122 | "call-bind": "^1.0.0", 2123 | "define-properties": "^1.1.3", 2124 | "has-symbols": "^1.0.1", 2125 | "object-keys": "^1.1.1" 2126 | } 2127 | }, 2128 | "regexp.prototype.flags": { 2129 | "version": "1.3.0", 2130 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", 2131 | "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", 2132 | "requires": { 2133 | "define-properties": "^1.1.3", 2134 | "es-abstract": "^1.17.0-next.1" 2135 | } 2136 | }, 2137 | "string.prototype.trimend": { 2138 | "version": "1.0.3", 2139 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", 2140 | "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", 2141 | "requires": { 2142 | "call-bind": "^1.0.0", 2143 | "define-properties": "^1.1.3" 2144 | } 2145 | }, 2146 | "string.prototype.trimstart": { 2147 | "version": "1.0.3", 2148 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", 2149 | "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", 2150 | "requires": { 2151 | "call-bind": "^1.0.0", 2152 | "define-properties": "^1.1.3" 2153 | } 2154 | } 2155 | } 2156 | }, 2157 | "cookie-parser": { 2158 | "version": "1.4.3", 2159 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", 2160 | "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", 2161 | "requires": { 2162 | "cookie": "0.3.1", 2163 | "cookie-signature": "1.0.6" 2164 | }, 2165 | "dependencies": { 2166 | "cookie": { 2167 | "version": "0.3.1", 2168 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 2169 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 2170 | }, 2171 | "cookie-signature": { 2172 | "version": "1.0.6", 2173 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 2174 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 2175 | } 2176 | } 2177 | }, 2178 | "express": { 2179 | "version": "4.16.4", 2180 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 2181 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 2182 | "requires": { 2183 | "accepts": "~1.3.5", 2184 | "array-flatten": "1.1.1", 2185 | "body-parser": "1.18.3", 2186 | "content-disposition": "0.5.2", 2187 | "content-type": "~1.0.4", 2188 | "cookie": "0.3.1", 2189 | "cookie-signature": "1.0.6", 2190 | "debug": "2.6.9", 2191 | "depd": "~1.1.2", 2192 | "encodeurl": "~1.0.2", 2193 | "escape-html": "~1.0.3", 2194 | "etag": "~1.8.1", 2195 | "finalhandler": "1.1.1", 2196 | "fresh": "0.5.2", 2197 | "merge-descriptors": "1.0.1", 2198 | "methods": "~1.1.2", 2199 | "on-finished": "~2.3.0", 2200 | "parseurl": "~1.3.2", 2201 | "path-to-regexp": "0.1.7", 2202 | "proxy-addr": "~2.0.4", 2203 | "qs": "6.5.2", 2204 | "range-parser": "~1.2.0", 2205 | "safe-buffer": "5.1.2", 2206 | "send": "0.16.2", 2207 | "serve-static": "1.13.2", 2208 | "setprototypeof": "1.1.0", 2209 | "statuses": "~1.4.0", 2210 | "type-is": "~1.6.16", 2211 | "utils-merge": "1.0.1", 2212 | "vary": "~1.1.2" 2213 | }, 2214 | "dependencies": { 2215 | "accepts": { 2216 | "version": "1.3.7", 2217 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 2218 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 2219 | "requires": { 2220 | "mime-types": "~2.1.24", 2221 | "negotiator": "0.6.2" 2222 | } 2223 | }, 2224 | "array-flatten": { 2225 | "version": "1.1.1", 2226 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 2227 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 2228 | }, 2229 | "body-parser": { 2230 | "version": "1.18.3", 2231 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 2232 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 2233 | "requires": { 2234 | "bytes": "3.0.0", 2235 | "content-type": "~1.0.4", 2236 | "debug": "2.6.9", 2237 | "depd": "~1.1.2", 2238 | "http-errors": "~1.6.3", 2239 | "iconv-lite": "0.4.23", 2240 | "on-finished": "~2.3.0", 2241 | "qs": "6.5.2", 2242 | "raw-body": "2.3.3", 2243 | "type-is": "~1.6.16" 2244 | } 2245 | }, 2246 | "bytes": { 2247 | "version": "3.0.0", 2248 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 2249 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 2250 | }, 2251 | "content-disposition": { 2252 | "version": "0.5.2", 2253 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 2254 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 2255 | }, 2256 | "content-type": { 2257 | "version": "1.0.4", 2258 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 2259 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 2260 | }, 2261 | "cookie": { 2262 | "version": "0.3.1", 2263 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 2264 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 2265 | }, 2266 | "cookie-signature": { 2267 | "version": "1.0.6", 2268 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 2269 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 2270 | }, 2271 | "debug": { 2272 | "version": "2.6.9", 2273 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2274 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2275 | "requires": { 2276 | "ms": "2.0.0" 2277 | } 2278 | }, 2279 | "depd": { 2280 | "version": "1.1.2", 2281 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 2282 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 2283 | }, 2284 | "destroy": { 2285 | "version": "1.0.4", 2286 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 2287 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 2288 | }, 2289 | "ee-first": { 2290 | "version": "1.1.1", 2291 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 2292 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 2293 | }, 2294 | "encodeurl": { 2295 | "version": "1.0.2", 2296 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2297 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 2298 | }, 2299 | "escape-html": { 2300 | "version": "1.0.3", 2301 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 2302 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 2303 | }, 2304 | "etag": { 2305 | "version": "1.8.1", 2306 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 2307 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 2308 | }, 2309 | "finalhandler": { 2310 | "version": "1.1.1", 2311 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 2312 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 2313 | "requires": { 2314 | "debug": "2.6.9", 2315 | "encodeurl": "~1.0.2", 2316 | "escape-html": "~1.0.3", 2317 | "on-finished": "~2.3.0", 2318 | "parseurl": "~1.3.2", 2319 | "statuses": "~1.4.0", 2320 | "unpipe": "~1.0.0" 2321 | } 2322 | }, 2323 | "forwarded": { 2324 | "version": "0.1.2", 2325 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 2326 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 2327 | }, 2328 | "fresh": { 2329 | "version": "0.5.2", 2330 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2331 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 2332 | }, 2333 | "http-errors": { 2334 | "version": "1.6.3", 2335 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 2336 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 2337 | "requires": { 2338 | "depd": "~1.1.2", 2339 | "inherits": "2.0.3", 2340 | "setprototypeof": "1.1.0", 2341 | "statuses": ">= 1.4.0 < 2" 2342 | } 2343 | }, 2344 | "iconv-lite": { 2345 | "version": "0.4.23", 2346 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 2347 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 2348 | "requires": { 2349 | "safer-buffer": ">= 2.1.2 < 3" 2350 | } 2351 | }, 2352 | "inherits": { 2353 | "version": "2.0.3", 2354 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2355 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 2356 | }, 2357 | "ipaddr.js": { 2358 | "version": "1.9.1", 2359 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2360 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 2361 | }, 2362 | "media-typer": { 2363 | "version": "0.3.0", 2364 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2365 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 2366 | }, 2367 | "merge-descriptors": { 2368 | "version": "1.0.1", 2369 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 2370 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 2371 | }, 2372 | "methods": { 2373 | "version": "1.1.2", 2374 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2375 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 2376 | }, 2377 | "mime": { 2378 | "version": "1.4.1", 2379 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 2380 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 2381 | }, 2382 | "mime-db": { 2383 | "version": "1.45.0", 2384 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", 2385 | "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" 2386 | }, 2387 | "mime-types": { 2388 | "version": "2.1.28", 2389 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", 2390 | "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", 2391 | "requires": { 2392 | "mime-db": "1.45.0" 2393 | } 2394 | }, 2395 | "ms": { 2396 | "version": "2.0.0", 2397 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2398 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2399 | }, 2400 | "negotiator": { 2401 | "version": "0.6.2", 2402 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 2403 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 2404 | }, 2405 | "on-finished": { 2406 | "version": "2.3.0", 2407 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2408 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2409 | "requires": { 2410 | "ee-first": "1.1.1" 2411 | } 2412 | }, 2413 | "parseurl": { 2414 | "version": "1.3.3", 2415 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2416 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 2417 | }, 2418 | "path-to-regexp": { 2419 | "version": "0.1.7", 2420 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2421 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 2422 | }, 2423 | "proxy-addr": { 2424 | "version": "2.0.6", 2425 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 2426 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 2427 | "requires": { 2428 | "forwarded": "~0.1.2", 2429 | "ipaddr.js": "1.9.1" 2430 | } 2431 | }, 2432 | "qs": { 2433 | "version": "6.5.2", 2434 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 2435 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 2436 | }, 2437 | "range-parser": { 2438 | "version": "1.2.1", 2439 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2440 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 2441 | }, 2442 | "raw-body": { 2443 | "version": "2.3.3", 2444 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 2445 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 2446 | "requires": { 2447 | "bytes": "3.0.0", 2448 | "http-errors": "1.6.3", 2449 | "iconv-lite": "0.4.23", 2450 | "unpipe": "1.0.0" 2451 | } 2452 | }, 2453 | "safe-buffer": { 2454 | "version": "5.1.2", 2455 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2456 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2457 | }, 2458 | "safer-buffer": { 2459 | "version": "2.1.2", 2460 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2461 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2462 | }, 2463 | "send": { 2464 | "version": "0.16.2", 2465 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 2466 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 2467 | "requires": { 2468 | "debug": "2.6.9", 2469 | "depd": "~1.1.2", 2470 | "destroy": "~1.0.4", 2471 | "encodeurl": "~1.0.2", 2472 | "escape-html": "~1.0.3", 2473 | "etag": "~1.8.1", 2474 | "fresh": "0.5.2", 2475 | "http-errors": "~1.6.2", 2476 | "mime": "1.4.1", 2477 | "ms": "2.0.0", 2478 | "on-finished": "~2.3.0", 2479 | "range-parser": "~1.2.0", 2480 | "statuses": "~1.4.0" 2481 | } 2482 | }, 2483 | "serve-static": { 2484 | "version": "1.13.2", 2485 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 2486 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 2487 | "requires": { 2488 | "encodeurl": "~1.0.2", 2489 | "escape-html": "~1.0.3", 2490 | "parseurl": "~1.3.2", 2491 | "send": "0.16.2" 2492 | } 2493 | }, 2494 | "setprototypeof": { 2495 | "version": "1.1.0", 2496 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 2497 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 2498 | }, 2499 | "statuses": { 2500 | "version": "1.4.0", 2501 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 2502 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 2503 | }, 2504 | "type-is": { 2505 | "version": "1.6.18", 2506 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2507 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2508 | "requires": { 2509 | "media-typer": "0.3.0", 2510 | "mime-types": "~2.1.24" 2511 | } 2512 | }, 2513 | "unpipe": { 2514 | "version": "1.0.0", 2515 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2516 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2517 | }, 2518 | "utils-merge": { 2519 | "version": "1.0.1", 2520 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2521 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2522 | }, 2523 | "vary": { 2524 | "version": "1.1.2", 2525 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2526 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2527 | } 2528 | } 2529 | }, 2530 | "express-session": { 2531 | "version": "1.15.6", 2532 | "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", 2533 | "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", 2534 | "requires": { 2535 | "cookie": "0.3.1", 2536 | "cookie-signature": "1.0.6", 2537 | "crc": "3.4.4", 2538 | "debug": "2.6.9", 2539 | "depd": "~1.1.1", 2540 | "on-headers": "~1.0.1", 2541 | "parseurl": "~1.3.2", 2542 | "uid-safe": "~2.1.5", 2543 | "utils-merge": "1.0.1" 2544 | }, 2545 | "dependencies": { 2546 | "cookie": { 2547 | "version": "0.3.1", 2548 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 2549 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 2550 | }, 2551 | "cookie-signature": { 2552 | "version": "1.0.6", 2553 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 2554 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 2555 | }, 2556 | "crc": { 2557 | "version": "3.4.4", 2558 | "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", 2559 | "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" 2560 | }, 2561 | "debug": { 2562 | "version": "2.6.9", 2563 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2564 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2565 | "requires": { 2566 | "ms": "2.0.0" 2567 | } 2568 | }, 2569 | "depd": { 2570 | "version": "1.1.2", 2571 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 2572 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 2573 | }, 2574 | "ms": { 2575 | "version": "2.0.0", 2576 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2577 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2578 | }, 2579 | "on-headers": { 2580 | "version": "1.0.2", 2581 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 2582 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" 2583 | }, 2584 | "parseurl": { 2585 | "version": "1.3.3", 2586 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2587 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 2588 | }, 2589 | "random-bytes": { 2590 | "version": "1.0.0", 2591 | "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", 2592 | "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" 2593 | }, 2594 | "uid-safe": { 2595 | "version": "2.1.5", 2596 | "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", 2597 | "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", 2598 | "requires": { 2599 | "random-bytes": "~1.0.0" 2600 | } 2601 | }, 2602 | "utils-merge": { 2603 | "version": "1.0.1", 2604 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2605 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2606 | } 2607 | } 2608 | }, 2609 | "morgan": { 2610 | "version": "1.9.1", 2611 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", 2612 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", 2613 | "requires": { 2614 | "basic-auth": "~2.0.0", 2615 | "debug": "2.6.9", 2616 | "depd": "~1.1.2", 2617 | "on-finished": "~2.3.0", 2618 | "on-headers": "~1.0.1" 2619 | }, 2620 | "dependencies": { 2621 | "basic-auth": { 2622 | "version": "2.0.1", 2623 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 2624 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 2625 | "requires": { 2626 | "safe-buffer": "5.1.2" 2627 | } 2628 | }, 2629 | "debug": { 2630 | "version": "2.6.9", 2631 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2632 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2633 | "requires": { 2634 | "ms": "2.0.0" 2635 | } 2636 | }, 2637 | "depd": { 2638 | "version": "1.1.2", 2639 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 2640 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 2641 | }, 2642 | "ee-first": { 2643 | "version": "1.1.1", 2644 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 2645 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 2646 | }, 2647 | "ms": { 2648 | "version": "2.0.0", 2649 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2650 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2651 | }, 2652 | "on-finished": { 2653 | "version": "2.3.0", 2654 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2655 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2656 | "requires": { 2657 | "ee-first": "1.1.1" 2658 | } 2659 | }, 2660 | "on-headers": { 2661 | "version": "1.0.2", 2662 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 2663 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" 2664 | }, 2665 | "safe-buffer": { 2666 | "version": "5.1.2", 2667 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2668 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2669 | } 2670 | } 2671 | }, 2672 | "nunjucks": { 2673 | "version": "1.3.4", 2674 | "resolved": "http://registry.npmjs.org/nunjucks/-/nunjucks-1.3.4.tgz", 2675 | "integrity": "sha1-Td0QqDZLGmTT49fSqNQ2gTHTkEI=", 2676 | "requires": { 2677 | "chokidar": "~0.12.5", 2678 | "optimist": "*" 2679 | }, 2680 | "dependencies": { 2681 | "async-each": { 2682 | "version": "0.1.6", 2683 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-0.1.6.tgz", 2684 | "integrity": "sha1-tn6Z7c3fllQeRK9WKQzX1cbnBDk=" 2685 | }, 2686 | "chokidar": { 2687 | "version": "0.12.6", 2688 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-0.12.6.tgz", 2689 | "integrity": "sha1-viBPW5Y04AkxElbl1ujg5QgoTS8=", 2690 | "requires": { 2691 | "async-each": "~0.1.5", 2692 | "fsevents": "~0.3.1", 2693 | "readdirp": "~1.3.0" 2694 | } 2695 | }, 2696 | "core-util-is": { 2697 | "version": "1.0.2", 2698 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 2699 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 2700 | }, 2701 | "fsevents": { 2702 | "version": "0.3.8", 2703 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-0.3.8.tgz", 2704 | "integrity": "sha1-mZLxAyySXIKVVNDVmAHcoDE6U1Y=", 2705 | "optional": true, 2706 | "requires": { 2707 | "nan": "^2.0.2" 2708 | } 2709 | }, 2710 | "graceful-fs": { 2711 | "version": "2.0.3", 2712 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", 2713 | "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" 2714 | }, 2715 | "inherits": { 2716 | "version": "2.0.4", 2717 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2718 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2719 | }, 2720 | "isarray": { 2721 | "version": "0.0.1", 2722 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 2723 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 2724 | }, 2725 | "lru-cache": { 2726 | "version": "2.7.3", 2727 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 2728 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" 2729 | }, 2730 | "minimatch": { 2731 | "version": "0.2.14", 2732 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", 2733 | "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", 2734 | "requires": { 2735 | "lru-cache": "2", 2736 | "sigmund": "~1.0.0" 2737 | } 2738 | }, 2739 | "minimist": { 2740 | "version": "0.0.10", 2741 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 2742 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" 2743 | }, 2744 | "optimist": { 2745 | "version": "0.6.1", 2746 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 2747 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 2748 | "requires": { 2749 | "minimist": "~0.0.1", 2750 | "wordwrap": "~0.0.2" 2751 | } 2752 | }, 2753 | "readable-stream": { 2754 | "version": "1.0.34", 2755 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 2756 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 2757 | "requires": { 2758 | "core-util-is": "~1.0.0", 2759 | "inherits": "~2.0.1", 2760 | "isarray": "0.0.1", 2761 | "string_decoder": "~0.10.x" 2762 | } 2763 | }, 2764 | "readdirp": { 2765 | "version": "1.3.0", 2766 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-1.3.0.tgz", 2767 | "integrity": "sha1-6vGptGO+moGQ/JrhY6oayTSqNAs=", 2768 | "requires": { 2769 | "graceful-fs": "~2.0.0", 2770 | "minimatch": "~0.2.12", 2771 | "readable-stream": "~1.0.26-2" 2772 | } 2773 | }, 2774 | "sigmund": { 2775 | "version": "1.0.1", 2776 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 2777 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" 2778 | }, 2779 | "string_decoder": { 2780 | "version": "0.10.31", 2781 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2782 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 2783 | }, 2784 | "wordwrap": { 2785 | "version": "0.0.3", 2786 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 2787 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 2788 | } 2789 | } 2790 | }, 2791 | "oauth": { 2792 | "version": "0.9.15", 2793 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 2794 | "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" 2795 | }, 2796 | "passport": { 2797 | "version": "0.2.2", 2798 | "resolved": "http://registry.npmjs.org/passport/-/passport-0.2.2.tgz", 2799 | "integrity": "sha1-nDjxe+uSnz2Br3uIOOhDDbhwPys=", 2800 | "requires": { 2801 | "passport-strategy": "1.x.x", 2802 | "pause": "0.0.1" 2803 | }, 2804 | "dependencies": { 2805 | "passport-strategy": { 2806 | "version": "1.0.0", 2807 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 2808 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" 2809 | }, 2810 | "pause": { 2811 | "version": "0.0.1", 2812 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", 2813 | "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" 2814 | } 2815 | } 2816 | }, 2817 | "passport-twitter": { 2818 | "version": "1.0.4", 2819 | "resolved": "https://registry.npmjs.org/passport-twitter/-/passport-twitter-1.0.4.tgz", 2820 | "integrity": "sha1-AaeZ4fdgvy3knyul+6MigvGJMtc=", 2821 | "requires": { 2822 | "passport-oauth1": "1.x.x", 2823 | "xtraverse": "0.1.x" 2824 | }, 2825 | "dependencies": { 2826 | "oauth": { 2827 | "version": "0.9.15", 2828 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 2829 | "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" 2830 | }, 2831 | "passport-oauth1": { 2832 | "version": "1.1.0", 2833 | "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.1.0.tgz", 2834 | "integrity": "sha1-p96YiiEfnPRoc3cTDqdN8ycwyRg=", 2835 | "requires": { 2836 | "oauth": "0.9.x", 2837 | "passport-strategy": "1.x.x", 2838 | "utils-merge": "1.x.x" 2839 | } 2840 | }, 2841 | "passport-strategy": { 2842 | "version": "1.0.0", 2843 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 2844 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" 2845 | }, 2846 | "utils-merge": { 2847 | "version": "1.0.1", 2848 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2849 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2850 | }, 2851 | "xmldom": { 2852 | "version": "0.1.31", 2853 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", 2854 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" 2855 | }, 2856 | "xtraverse": { 2857 | "version": "0.1.0", 2858 | "resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz", 2859 | "integrity": "sha1-t0G60BjveNip0ug63gB7P3lZxzI=", 2860 | "requires": { 2861 | "xmldom": "0.1.x" 2862 | } 2863 | } 2864 | } 2865 | }, 2866 | "sequelize": { 2867 | "version": "4.41.2", 2868 | "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.41.2.tgz", 2869 | "integrity": "sha512-8vPf2R0o9iEmtzkqNzwFdblO+0Mu+RNxOdLeYGGqWGlp3cushLpQucAeSGPQgf2hQVZP5yOCM1ouZKTQ5FTlvA==", 2870 | "requires": { 2871 | "bluebird": "^3.5.0", 2872 | "cls-bluebird": "^2.1.0", 2873 | "debug": "^3.1.0", 2874 | "depd": "^1.1.0", 2875 | "dottie": "^2.0.0", 2876 | "generic-pool": "^3.4.0", 2877 | "inflection": "1.12.0", 2878 | "lodash": "^4.17.1", 2879 | "moment": "^2.20.0", 2880 | "moment-timezone": "^0.5.14", 2881 | "retry-as-promised": "^2.3.2", 2882 | "semver": "^5.5.0", 2883 | "terraformer-wkt-parser": "^1.1.2", 2884 | "toposort-class": "^1.0.1", 2885 | "uuid": "^3.2.1", 2886 | "validator": "^10.4.0", 2887 | "wkx": "^0.4.1" 2888 | }, 2889 | "dependencies": { 2890 | "@types/geojson": { 2891 | "version": "1.0.6", 2892 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", 2893 | "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" 2894 | }, 2895 | "@types/node": { 2896 | "version": "14.14.20", 2897 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", 2898 | "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==" 2899 | }, 2900 | "bluebird": { 2901 | "version": "3.7.2", 2902 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 2903 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 2904 | }, 2905 | "cls-bluebird": { 2906 | "version": "2.1.0", 2907 | "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", 2908 | "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", 2909 | "requires": { 2910 | "is-bluebird": "^1.0.2", 2911 | "shimmer": "^1.1.0" 2912 | } 2913 | }, 2914 | "debug": { 2915 | "version": "3.2.6", 2916 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 2917 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 2918 | "requires": { 2919 | "ms": "^2.1.1" 2920 | } 2921 | }, 2922 | "depd": { 2923 | "version": "1.1.2", 2924 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 2925 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 2926 | }, 2927 | "dottie": { 2928 | "version": "2.0.2", 2929 | "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", 2930 | "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" 2931 | }, 2932 | "generic-pool": { 2933 | "version": "3.7.1", 2934 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.7.1.tgz", 2935 | "integrity": "sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w==" 2936 | }, 2937 | "inflection": { 2938 | "version": "1.12.0", 2939 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", 2940 | "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" 2941 | }, 2942 | "is-bluebird": { 2943 | "version": "1.0.2", 2944 | "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", 2945 | "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" 2946 | }, 2947 | "lodash": { 2948 | "version": "4.17.20", 2949 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 2950 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" 2951 | }, 2952 | "moment": { 2953 | "version": "2.29.1", 2954 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 2955 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" 2956 | }, 2957 | "moment-timezone": { 2958 | "version": "0.5.32", 2959 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", 2960 | "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", 2961 | "requires": { 2962 | "moment": ">= 2.9.0" 2963 | } 2964 | }, 2965 | "ms": { 2966 | "version": "2.1.1", 2967 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 2968 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 2969 | }, 2970 | "retry-as-promised": { 2971 | "version": "2.3.2", 2972 | "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", 2973 | "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", 2974 | "requires": { 2975 | "bluebird": "^3.4.6", 2976 | "debug": "^2.6.9" 2977 | }, 2978 | "dependencies": { 2979 | "debug": { 2980 | "version": "2.6.9", 2981 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2982 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2983 | "requires": { 2984 | "ms": "2.0.0" 2985 | } 2986 | }, 2987 | "ms": { 2988 | "version": "2.0.0", 2989 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2990 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2991 | } 2992 | } 2993 | }, 2994 | "semver": { 2995 | "version": "5.7.1", 2996 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2997 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 2998 | }, 2999 | "shimmer": { 3000 | "version": "1.2.1", 3001 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", 3002 | "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" 3003 | }, 3004 | "terraformer": { 3005 | "version": "1.0.12", 3006 | "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.12.tgz", 3007 | "integrity": "sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==", 3008 | "requires": { 3009 | "@types/geojson": "^7946.0.0 || ^1.0.0" 3010 | } 3011 | }, 3012 | "terraformer-wkt-parser": { 3013 | "version": "1.2.1", 3014 | "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz", 3015 | "integrity": "sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==", 3016 | "requires": { 3017 | "@types/geojson": "^1.0.0", 3018 | "terraformer": "~1.0.5" 3019 | } 3020 | }, 3021 | "toposort-class": { 3022 | "version": "1.0.1", 3023 | "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 3024 | "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" 3025 | }, 3026 | "uuid": { 3027 | "version": "3.4.0", 3028 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 3029 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 3030 | }, 3031 | "validator": { 3032 | "version": "10.11.0", 3033 | "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", 3034 | "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" 3035 | }, 3036 | "wkx": { 3037 | "version": "0.4.8", 3038 | "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", 3039 | "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", 3040 | "requires": { 3041 | "@types/node": "*" 3042 | } 3043 | } 3044 | } 3045 | }, 3046 | "serve-static": { 3047 | "version": "1.13.2", 3048 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 3049 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 3050 | "requires": { 3051 | "encodeurl": "~1.0.2", 3052 | "escape-html": "~1.0.3", 3053 | "parseurl": "~1.3.2", 3054 | "send": "0.16.2" 3055 | }, 3056 | "dependencies": { 3057 | "debug": { 3058 | "version": "2.6.9", 3059 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 3060 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 3061 | "requires": { 3062 | "ms": "2.0.0" 3063 | } 3064 | }, 3065 | "depd": { 3066 | "version": "1.1.2", 3067 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 3068 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 3069 | }, 3070 | "destroy": { 3071 | "version": "1.0.4", 3072 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 3073 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 3074 | }, 3075 | "ee-first": { 3076 | "version": "1.1.1", 3077 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 3078 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 3079 | }, 3080 | "encodeurl": { 3081 | "version": "1.0.2", 3082 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 3083 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 3084 | }, 3085 | "escape-html": { 3086 | "version": "1.0.3", 3087 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 3088 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 3089 | }, 3090 | "etag": { 3091 | "version": "1.8.1", 3092 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 3093 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 3094 | }, 3095 | "fresh": { 3096 | "version": "0.5.2", 3097 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 3098 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 3099 | }, 3100 | "http-errors": { 3101 | "version": "1.6.3", 3102 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 3103 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 3104 | "requires": { 3105 | "depd": "~1.1.2", 3106 | "inherits": "2.0.3", 3107 | "setprototypeof": "1.1.0", 3108 | "statuses": ">= 1.4.0 < 2" 3109 | } 3110 | }, 3111 | "inherits": { 3112 | "version": "2.0.3", 3113 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 3114 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 3115 | }, 3116 | "mime": { 3117 | "version": "1.4.1", 3118 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 3119 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 3120 | }, 3121 | "ms": { 3122 | "version": "2.0.0", 3123 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 3124 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 3125 | }, 3126 | "on-finished": { 3127 | "version": "2.3.0", 3128 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 3129 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 3130 | "requires": { 3131 | "ee-first": "1.1.1" 3132 | } 3133 | }, 3134 | "parseurl": { 3135 | "version": "1.3.3", 3136 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 3137 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 3138 | }, 3139 | "range-parser": { 3140 | "version": "1.2.1", 3141 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 3142 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 3143 | }, 3144 | "send": { 3145 | "version": "0.16.2", 3146 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 3147 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 3148 | "requires": { 3149 | "debug": "2.6.9", 3150 | "depd": "~1.1.2", 3151 | "destroy": "~1.0.4", 3152 | "encodeurl": "~1.0.2", 3153 | "escape-html": "~1.0.3", 3154 | "etag": "~1.8.1", 3155 | "fresh": "0.5.2", 3156 | "http-errors": "~1.6.2", 3157 | "mime": "1.4.1", 3158 | "ms": "2.0.0", 3159 | "on-finished": "~2.3.0", 3160 | "range-parser": "~1.2.0", 3161 | "statuses": "~1.4.0" 3162 | } 3163 | }, 3164 | "setprototypeof": { 3165 | "version": "1.1.0", 3166 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 3167 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 3168 | }, 3169 | "statuses": { 3170 | "version": "1.4.0", 3171 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 3172 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 3173 | } 3174 | } 3175 | } 3176 | } 3177 | } 3178 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "server.js", 3 | "scripts": { 4 | "start": "node server.js" 5 | }, 6 | "dependencies": { 7 | "body-parser": "^1.13.3", 8 | "connect-ensure-login": "^0.1.1", 9 | "connect-session-sequelize": "^4.1.0", 10 | "cookie-parser": "^1.3.5", 11 | "express": "^4.13.4", 12 | "express-session": "^1.11.3", 13 | "morgan": "*", 14 | "oauth": "^0.9.14", 15 | "nunjucks": "^1.3.4", 16 | "passport": "^0.2.2", 17 | "passport-twitter": "^1.0.4", 18 | "serve-static": "*", 19 | "sequelize": "*" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /scripts/deploy.sh: -------------------------------------------------------------------------------- 1 | set -eux 2 | ssh root@dynamicsites 'cd /deploy/turn-off-retweets; git pull' 3 | ssh root@dynamicsites 'cd /deploy/turn-off-retweets; systemctl restart turn-off-retweets' 4 | ssh root@dynamicsites 'journalctl -u turn-off-retweets -n 10' 5 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | // taken from https://github.com/passport/express-4.x-twitter-example/blob/master/server.js#L87 2 | var express = require('express'); 3 | var passport = require('passport'); 4 | var Strategy = require('passport-twitter').Strategy; 5 | var serveStatic = require('serve-static') 6 | 7 | 8 | passport.use(new Strategy({ 9 | consumerKey: process.env.TWITTER_CONSUMER_KEY, 10 | consumerSecret: process.env.TWITTER_CONSUMER_SECRET, 11 | // use CALLBACK_URL if it's in the env, otherwise prod url 12 | callbackURL: process.env.CALLBACK_URL || 'https://turn-off-retweets.jvns.ca/login/twitter/return', 13 | }, 14 | function(token, tokenSecret, profile, cb) { 15 | // In this example, the user's Twitter profile is supplied as the user 16 | // record. In a production-quality application, the Twitter profile should 17 | // be associated with a user record in the application's database, which 18 | // allows for account linking and authentication with other identity 19 | // providers. 20 | profile.token = token; 21 | profile.tokenSecret = tokenSecret; 22 | return cb(null, profile); 23 | })); 24 | 25 | 26 | // Configure Passport authenticated session persistence. 27 | // 28 | // In order to restore authentication state across HTTP requests, Passport needs 29 | // to serialize users into and deserialize users out of the session. In a 30 | // production-quality application, this would typically be as simple as 31 | // supplying the user ID when serializing, and querying the user record by ID 32 | // from the database when deserializing. However, due to the fact that this 33 | // example does not have a database, the complete Twitter profile is serialized 34 | // and deserialized. 35 | passport.serializeUser(function(user, cb) { 36 | cb(null, user); 37 | }); 38 | 39 | passport.deserializeUser(function(obj, cb) { 40 | cb(null, obj); 41 | }); 42 | 43 | 44 | // Create a new Express application. 45 | var app = express(); 46 | 47 | // Configure view engine to render nunjucks templates. 48 | var nunjucks = require('nunjucks'); 49 | nunjucks.configure('views', { 50 | autoescape: true, 51 | express: app 52 | }); 53 | 54 | app.use(serveStatic('static')) 55 | 56 | // Use application-level middleware for common functionality, including 57 | // logging, parsing, and session handling. 58 | app.use(require('morgan')('combined')); 59 | app.use(require('cookie-parser')()); 60 | app.use(require('body-parser').urlencoded({ extended: true })); 61 | app.use(require('express-session')({ secret: process.env.SESSION_SECRET, resave: true, saveUninitialized: true })); 62 | 63 | // Initialize Passport and restore authentication state, if any, from the 64 | // session. 65 | app.use(passport.initialize()); 66 | app.use(passport.session()); 67 | 68 | app.get('/login', 69 | function(req, res){ 70 | res.redirect('/'); 71 | }); 72 | 73 | app.get('/logout', 74 | function(req, res){ 75 | req.logout(); 76 | res.redirect('/'); 77 | }); 78 | 79 | app.get('/login/twitter', 80 | passport.authenticate('twitter')); 81 | 82 | app.get('/login/twitter/return', 83 | passport.authenticate('twitter', { failureRedirect: '/login' }), 84 | function(req, res) { 85 | res.redirect('/'); 86 | }); 87 | 88 | ensure_logged_in = require('connect-ensure-login').ensureLoggedIn; 89 | 90 | // Define routes. 91 | app.get('/', 92 | function(req, res) { 93 | res.render('index.html', { 94 | title: 'Welcome', 95 | user: req.user 96 | }); 97 | }); 98 | 99 | app.get('/profile', 100 | ensure_logged_in(), 101 | function(req, res) { 102 | res.render('profile.html', { 103 | title: 'Profile', 104 | user: req.user 105 | }); 106 | }); 107 | 108 | app.get('/no_retweets.json', 109 | ensure_logged_in(), 110 | function(req, res) { 111 | var url = "friendships/no_retweets/ids.json?stringify_ids=true"; 112 | oauthGet(oauth, url, req.user.token, req.user.tokenSecret, function(data) { 113 | res.send(data); 114 | } 115 | ) 116 | }); 117 | 118 | 119 | app.get('/update_friendship', 120 | ensure_logged_in(), 121 | function(req, res) { 122 | var postData = { 123 | 'screen_name': req.query.screen_name 124 | }; 125 | var queryString = "?screen_name=" + req.query.screen_name 126 | if (req.query.retweets == 'true') { 127 | queryString += "&retweets=true" 128 | } 129 | if (req.query.retweets == 'false') { 130 | queryString += "&retweets=false" 131 | } 132 | var url = "friendships/update.json" + queryString; 133 | var body = {}; 134 | oauthPost(oauth, url, body, req.user.token, req.user.tokenSecret, 135 | function(data) { 136 | res.send(data); 137 | } 138 | ) 139 | }); 140 | 141 | function getIdBatches(ids) { 142 | if (ids.length == 0) { 143 | return [] 144 | } else { 145 | var arr = getIdBatches(ids.slice(100)) 146 | arr.push(ids.slice(0, 100)); 147 | return arr 148 | } 149 | } 150 | 151 | app.get('/users.json', 152 | ensure_logged_in(), 153 | function(req, res) { 154 | var url = "friends/ids.json"; 155 | oauthGet(oauth, url, req.user.token, req.user.tokenSecret, 156 | function(data) { 157 | var ids = JSON.parse(data)["ids"]; 158 | var batches = getIdBatches(ids); 159 | var responses = []; 160 | var completed_requests = 0; 161 | var all_users = [] 162 | for (var i = 0; i < batches.length; i++) { 163 | var batch_ids = batches[i].join(','); 164 | var url = "users/lookup.json?user_id=" + batch_ids; 165 | oauthGet(oauth, url, req.user.token, req.user.tokenSecret, 166 | function(data) { 167 | responses = responses.concat(JSON.parse(data)); 168 | completed_requests++; 169 | if (completed_requests == batches.length) { 170 | res.send(JSON.stringify(responses)); 171 | } 172 | 173 | }); 174 | 175 | } 176 | 177 | } 178 | ) 179 | }); 180 | 181 | // default routes 182 | app.use(function(req, res, next) { 183 | // This handler appears after all the other routes, 184 | // so it will run any time the route is not found 185 | res 186 | .status(404) 187 | .render('error.html', { 188 | err: "Can't find " + req.originalUrl, 189 | title: 'Not found!' 190 | }); 191 | }); 192 | app.use(function(err, req, res, next) { 193 | // This handler takes 4 parameters; `err` will contain 194 | // the exception thrown by previous handlers 195 | res 196 | .status(500) 197 | .render('error.html', { 198 | err: err, 199 | title: "Internal Server Error!" 200 | }); 201 | }); 202 | 203 | var listener = app.listen(process.env.PORT, function() { 204 | console.log('Your app is listening on port ' + listener.address().port); 205 | }); 206 | 207 | ////////////////////////////////////////////////////////////// 208 | // oauth stuff ////////////////// 209 | ////////////////////////// 210 | // 211 | var OAuth = require('oauth'); 212 | 213 | var oauth = new OAuth.OAuth( 214 | 'https://api.twitter.com/oauth/request_token', 215 | 'https://api.twitter.com/oauth/access_token', 216 | process.env.TWITTER_CONSUMER_KEY, 217 | process.env.TWITTER_CONSUMER_SECRET, 218 | '1.0A', 219 | process.env.PROJECT_URL + '/login/twitter/return', 220 | 'HMAC-SHA1' 221 | ); 222 | 223 | function oauthPost(oauth, url, postBody, token, tokenSecret, callback) { 224 | oauth.post( 225 | "https://api.twitter.com/1.1/" + url, 226 | token, 227 | tokenSecret, 228 | postBody, 229 | function(error, data, res) { 230 | if (error) { 231 | } else { 232 | callback(data); 233 | } 234 | } 235 | ) 236 | } 237 | 238 | function oauthGet(oauth, url, token, tokenSecret, callback) { 239 | oauth.get( 240 | "https://api.twitter.com/1.1/" + url, 241 | token, 242 | tokenSecret, 243 | function(error, data, res) { 244 | if (error) { 245 | } else { 246 | callback(data); 247 | } 248 | } 249 | ) 250 | } 251 | 252 | -------------------------------------------------------------------------------- /static/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jvns/turn-off-retweets/d611a18a523dd53d762a041a68c06180fa15922a/static/images/loading.gif -------------------------------------------------------------------------------- /static/images/turn-off-retweets-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jvns/turn-off-retweets/d611a18a523dd53d762a041a68c06180fa15922a/static/images/turn-off-retweets-screenshot.png -------------------------------------------------------------------------------- /static/js/profile.js: -------------------------------------------------------------------------------- 1 | var app4; 2 | var tl; 3 | Vue.config.delimiters = ['${', '}'] 4 | 5 | function makeSet(ids) { 6 | var set = {}; 7 | for (var i = 0; i < ids.length; i++) { 8 | set[ids[i]] = 1; 9 | } 10 | return set; 11 | } 12 | 13 | function clearCache() { 14 | localStorage.removeItem("no_retweets"); 15 | localStorage.removeItem("friends"); 16 | window.location.reload(false); 17 | } 18 | 19 | function sortByFunction(list, f) { 20 | list.sort(function(a, b) { 21 | f(a) - f(b) 22 | }) 23 | } 24 | 25 | function displayFriends(friends, no_retweets, app4) { 26 | var no_retweets = makeSet(no_retweets); 27 | friends = friends.sort(function(a, b) { 28 | var c1 = a.statuses_count; 29 | var c2 = b.statuses_count; 30 | if (c1 == null) { 31 | return 1 32 | } else if (c2 == null) { 33 | return -1 34 | } else if (c1 > c2) { 35 | return -1; 36 | } else if (c1 < c2) { 37 | return 1; 38 | } else { 39 | return 0; 40 | } 41 | }); 42 | app4.friends = friends; 43 | app4.no_retweets = no_retweets; 44 | return app4; 45 | 46 | } 47 | 48 | function deserialize(data) { 49 | data = JSON.parse(data); 50 | if (data && data['updated'] >= (+new Date()) - 15 * 60 * 1000) { 51 | return data['data']; 52 | } 53 | } 54 | 55 | function serialize(data) { 56 | return JSON.stringify({ 57 | updated: (+new Date()), 58 | data: data 59 | }) 60 | } 61 | 62 | function getOrCache(cacheId, url, callback, transform) { 63 | var stored = deserialize(localStorage.getItem(cacheId)); 64 | if (stored) { 65 | callback(stored); 66 | } else { 67 | $.get(url, function(resp) { 68 | friends = JSON.parse(resp); 69 | if (transform) { 70 | friends = transform(friends); 71 | } 72 | localStorage.setItem(cacheId, serialize(friends)); 73 | callback(friends); 74 | }) 75 | } 76 | } 77 | 78 | function toggleRetweets(target) { 79 | var i; 80 | for (i = 0; i < app4.friends.length; i++) { 81 | app4.updateRetweets(target, app4.friends[i].screen_name); 82 | } 83 | } 84 | 85 | function filterTimeline(timeline) { 86 | var tweets_24h = 0 87 | var tweets_week = 0; 88 | for (var i = 0; i < timeline.length; i++) { 89 | created = Date.parse(timeline[i].created_at) 90 | if (created > (+new Date()) - 24 * 60 * 60 * 1000) { 91 | tweets_24h += 1; 92 | } 93 | if (created > (+new Date()) - 7 * 24 * 60 * 60 * 1000) { 94 | tweets_week += 1; 95 | } 96 | } 97 | return { 98 | count_24h: tweets_24h, 99 | count_week: tweets_week 100 | } 101 | } 102 | 103 | function getTimelines(app4, friends) { 104 | for (var i = 0; i < friends.length; i++) { 105 | var friend = friends[i]; 106 | getOrCache("timeline_" + friend.screen_name, "/user_timeline.json?screen_name=" + friend.screen_name, function(data) { 107 | Vue.set(app4.tweet_info, friend.screen_name, data); 108 | sortByFunction(app4.friends, function(x) { 109 | return 0; 110 | }) 111 | }, filterTimeline); 112 | } 113 | } 114 | 115 | function main() { 116 | app4 = new Vue({ 117 | el: '#app-4', 118 | delimiters: ['${', '}'], 119 | data: { 120 | friends: null, 121 | message: 5, 122 | no_retweets: null, 123 | retweets_change: {} 124 | }, 125 | methods: { 126 | updateRetweets: function(status, screen_name) { 127 | var self = this; 128 | $.get('/update_friendship?retweets=' + status + '&screen_name=' + screen_name, function() { 129 | Vue.set(self.retweets_change, screen_name, true) 130 | console.log(self.retweets_change); 131 | }) 132 | 133 | } 134 | } 135 | }); 136 | 137 | getOrCache("friends", "/users.json", function(friends) { 138 | getOrCache("no_retweets", "/no_retweets.json", function(no_retweets) { 139 | 140 | displayFriends(friends, no_retweets, app4); 141 | }) 142 | }) 143 | } 144 | $(document).ready(main) 145 | -------------------------------------------------------------------------------- /static/js/vue-2.3.0.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Vue.js v2.3.0 3 | * (c) 2014-2017 Evan You 4 | * Released under the MIT License. 5 | */ 6 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Vue=t()}(this,function(){"use strict";function e(e){return void 0===e||null===e}function t(e){return void 0!==e&&null!==e}function n(e){return!0===e}function r(e){return"string"==typeof e||"number"==typeof e}function i(e){return null!==e&&"object"==typeof e}function o(e){return"[object Object]"===Ai.call(e)}function a(e){return"[object RegExp]"===Ai.call(e)}function s(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function c(e){var t=parseFloat(e);return isNaN(t)?e:t}function u(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}function f(e,t){return Si.call(e,t)}function p(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function d(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function v(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function h(e,t){for(var n in t)e[n]=t[n];return e}function m(e){for(var t={},n=0;n=0&&$o[n].id>e.id;)n--;$o.splice(Math.max(n,Ao)+1,0,e)}else $o.push(e);Co||(Co=!0,ro($e))}}function Ae(e){To.clear(),Oe(e,To)}function Oe(e,t){var n,r,o=Array.isArray(e);if((o||i(e))&&Object.isExtensible(e)){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)Oe(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)Oe(e[r[n]],t)}}function Se(e,t,n){Eo.get=function(){return this[t][n]},Eo.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Eo)}function Te(e){e._watchers=[];var t=e.$options;t.props&&Ee(e,t.props),t.methods&&Me(e,t.methods),t.data?je(e):E(e._data={},!0),t.computed&&Le(e,t.computed),t.watch&&Pe(e,t.watch)}function Ee(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[],o=!e.$parent;lo.shouldConvert=o;for(var a in t)!function(o){i.push(o);var a=U(o,t,n,e);j(r,o,a),o in e||Se(e,"_props",o)}(a);lo.shouldConvert=!0}function je(e){var t=e.$options.data;t=e._data="function"==typeof t?Ne(t,e):t||{},o(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,i=n.length;i--;)r&&f(r,n[i])||$(n[i])||Se(e,"_data",n[i]);E(t,!0)}function Ne(e,t){try{return e.call(t)}catch(e){return C(e,t,"data()"),{}}}function Le(e,t){var n=e._computedWatchers=Object.create(null);for(var r in t){var i=t[r],o="function"==typeof i?i:i.get;n[r]=new So(e,o,g,jo),r in e||Ie(e,r,i)}}function Ie(e,t,n){"function"==typeof n?(Eo.get=De(t),Eo.set=g):(Eo.get=n.get?!1!==n.cache?De(t):n.get:g,Eo.set=n.set?n.set:g),Object.defineProperty(e,t,Eo)}function De(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),oo.target&&t.depend(),t.value}}function Me(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?g:d(t[n],e)}function Pe(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i=0||n.indexOf(e[i])<0)&&r.push(e[i]);return r}return e}function pt(e){this._init(e)}function dt(e){e.use=function(e){if(!e.installed){var t=v(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):"function"==typeof e&&e.apply(null,t),e.installed=!0,this}}}function vt(e){e.mixin=function(e){this.options=B(this.options,e)}}function ht(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,i=e._Ctor||(e._Ctor={});if(i[r])return i[r];var o=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=B(n.options,e),a.super=n,a.options.props&&mt(a),a.options.computed&>(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Di.forEach(function(e){a[e]=n[e]}),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=h({},a.options),i[r]=a,a}}function mt(e){var t=e.options.props;for(var n in t)Se(e.prototype,"_props",n)}function gt(e){var t=e.options.computed;for(var n in t)Ie(e.prototype,n,t[n])}function yt(e){Di.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&o(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function _t(e){return e&&(e.Ctor.options.name||e.tag)}function bt(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:!!a(e)&&e.test(t)}function $t(e,t,n){for(var r in e){var i=e[r];if(i){var o=_t(i.componentOptions);o&&!n(o)&&(i!==t&&xt(i),e[r]=null)}}}function xt(e){e&&e.componentInstance.$destroy()}function wt(e){for(var n=e.data,r=e,i=e;t(i.componentInstance);)i=i.componentInstance._vnode,i.data&&(n=Ct(i.data,n));for(;t(r=r.parent);)r.data&&(n=Ct(n,r.data));return kt(n)}function Ct(e,n){return{staticClass:At(e.staticClass,n.staticClass),class:t(e.class)?[e.class,n.class]:n.class}}function kt(e){var n=e.class,r=e.staticClass;return t(r)||t(n)?At(r,Ot(n)):""}function At(e,t){return e?t?e+" "+t:e:t||""}function Ot(n){if(e(n))return"";if("string"==typeof n)return n;var r="";if(Array.isArray(n)){for(var o,a=0,s=n.length;a-1?ua[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:ua[e]=/HTMLUnknownElement/.test(t.toString())}function Et(e){if("string"==typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function jt(e,t){var n=document.createElement(e);return"select"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function Nt(e,t){return document.createElementNS(ia[e],t)}function Lt(e){return document.createTextNode(e)}function It(e){return document.createComment(e)}function Dt(e,t,n){e.insertBefore(t,n)}function Mt(e,t){e.removeChild(t)}function Pt(e,t){e.appendChild(t)}function Rt(e){return e.parentNode}function Ft(e){return e.nextSibling}function Bt(e){return e.tagName}function Ht(e,t){e.textContent=t}function Ut(e,t,n){e.setAttribute(t,n)}function Vt(e,t){var n=e.data.ref;if(n){var r=e.context,i=e.componentInstance||e.elm,o=r.$refs;t?Array.isArray(o[n])?l(o[n],i):o[n]===i&&(o[n]=void 0):e.data.refInFor?Array.isArray(o[n])&&o[n].indexOf(i)<0?o[n].push(i):o[n]=[i]:o[n]=i}}function zt(e,n){return e.key===n.key&&e.tag===n.tag&&e.isComment===n.isComment&&t(e.data)===t(n.data)&&Jt(e,n)}function Jt(e,n){if("input"!==e.tag)return!0;var r;return(t(r=e.data)&&t(r=r.attrs)&&r.type)===(t(r=n.data)&&t(r=r.attrs)&&r.type)}function Kt(e,n,r){var i,o,a={};for(i=n;i<=r;++i)o=e[i].key,t(o)&&(a[o]=i);return a}function qt(e,t){(e.data.directives||t.data.directives)&&Wt(e,t)}function Wt(e,t){var n,r,i,o=e===pa,a=t===pa,s=Zt(e.data.directives,e.context),c=Zt(t.data.directives,t.context),u=[],l=[];for(n in c)r=s[n],i=c[n],r?(i.oldValue=r.value,Yt(i,"update",t,e),i.def&&i.def.componentUpdated&&l.push(i)):(Yt(i,"bind",t,e),i.def&&i.def.inserted&&u.push(i));if(u.length){var f=function(){for(var n=0;n=0&&" "===(m=e.charAt(h));h--);m&&_a.test(m)||(l=!0)}}else void 0===o?(v=i+1,o=e.slice(0,i).trim()):t();if(void 0===o?o=e.slice(0,i).trim():0!==v&&t(),a)for(i=0;i=Bo}function gn(e){return 34===e||39===e}function yn(e){var t=1;for(zo=Vo;!mn();)if(e=hn(),gn(e))_n(e);else if(91===e&&t++,93===e&&t--,0===t){Jo=Vo;break}}function _n(e){for(var t=e;!mn()&&(e=hn())!==t;);}function bn(e,t,n){Ko=n;var r=t.value,i=t.modifiers,o=e.tag,a=e.attrsMap.type;if("select"===o)wn(e,r,i);else if("input"===o&&"checkbox"===a)$n(e,r,i);else if("input"===o&&"radio"===a)xn(e,r,i);else if("input"===o||"textarea"===o)Cn(e,r,i);else if(!Pi.isReservedTag(o))return pn(e,r,i),!1;return!0}function $n(e,t,n){var r=n&&n.number,i=ln(e,"value")||"null",o=ln(e,"true-value")||"true",a=ln(e,"false-value")||"false";an(e,"checked","Array.isArray("+t+")?_i("+t+","+i+")>-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),un(e,$a,"var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$c){$$i<0&&("+t+"=$$a.concat($$v))}else{$$i>-1&&("+t+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+dn(t,"$$c")+"}",null,!0)}function xn(e,t,n){var r=n&&n.number,i=ln(e,"value")||"null";i=r?"_n("+i+")":i,an(e,"checked","_q("+t+","+i+")"),un(e,$a,dn(t,i),null,!0)}function wn(e,t,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",o="var $$selectedVal = "+i+";";o=o+" "+dn(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),un(e,"change",o,null,!0)}function Cn(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?ba:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=dn(t,l);c&&(f="if($event.target.composing)return;"+f),an(e,"value","("+t+")"),un(e,u,f,null,!0),(s||a||"number"===r)&&un(e,"blur","$forceUpdate()")}function kn(e){var n;t(e[ba])&&(n=zi?"change":"input",e[n]=[].concat(e[ba],e[n]||[]),delete e[ba]),t(e[$a])&&(n=Zi?"click":"change",e[n]=[].concat(e[$a],e[n]||[]),delete e[$a])}function An(e,t,n,r,i){if(n){var o=t,a=qo;t=function(n){null!==(1===arguments.length?o(n):o.apply(null,arguments))&&On(e,t,r,a)}}qo.addEventListener(e,t,Gi?{capture:r,passive:i}:r)}function On(e,t,n,r){(r||qo).removeEventListener(e,t,n)}function Sn(t,n){if(!e(t.data.on)||!e(n.data.on)){var r=n.data.on||{},i=t.data.on||{};qo=n.elm,kn(r),G(r,i,An,On,n.context)}}function Tn(n,r){if(!e(n.data.domProps)||!e(r.data.domProps)){var i,o,a=r.elm,s=n.data.domProps||{},c=r.data.domProps||{};t(c.__ob__)&&(c=r.data.domProps=h({},c));for(i in s)e(c[i])&&(a[i]="");for(i in c)if(o=c[i],"textContent"!==i&&"innerHTML"!==i||(r.children&&(r.children.length=0),o!==s[i]))if("value"===i){a._value=o;var u=null==o?"":String(o);En(a,r,u)&&(a.value=u)}else a[i]=o}}function En(e,t,n){return!e.composing&&("option"===t.tag||jn(e,n)||Nn(e,n))}function jn(e,t){return document.activeElement!==e&&e.value!==t}function Nn(e,n){var r=e.value,i=e._vModifiers;return t(i)&&i.number||"number"===e.type?c(r)!==c(n):t(i)&&i.trim?r.trim()!==n.trim():r!==n}function Ln(e){var t=In(e.style);return e.staticStyle?h(e.staticStyle,t):t}function In(e){return Array.isArray(e)?m(e):"string"==typeof e?Ca(e):e}function Dn(e,t){var n,r={};if(t)for(var i=e;i.componentInstance;)i=i.componentInstance._vnode,i.data&&(n=Ln(i.data))&&h(r,n);(n=Ln(e.data))&&h(r,n);for(var o=e;o=o.parent;)o.data&&(n=Ln(o.data))&&h(r,n);return r}function Mn(n,r){var i=r.data,o=n.data;if(!(e(i.staticStyle)&&e(i.style)&&e(o.staticStyle)&&e(o.style))){var a,s,c=r.elm,u=o.staticStyle,l=o.normalizedStyle||o.style||{},f=u||l,p=In(r.data.style)||{};r.data.normalizedStyle=t(p.__ob__)?h({},p):p;var d=Dn(r,!0);for(s in f)e(d[s])&&Oa(c,s,"");for(s in d)(a=d[s])!==f[s]&&Oa(c,s,null==a?"":a)}}function Pn(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Rn(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t);else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");e.setAttribute("class",n.trim())}}function Fn(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&h(t,ja(e.name||"v")),h(t,e),t}return"string"==typeof e?ja(e):void 0}}function Bn(e){Fa(function(){Fa(e)})}function Hn(e,t){(e._transitionClasses||(e._transitionClasses=[])).push(t),Pn(e,t)}function Un(e,t){e._transitionClasses&&l(e._transitionClasses,t),Rn(e,t)}function Vn(e,t,n){var r=zn(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===La?Ma:Ra,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=La,l=a,f=o.length):t===Ia?u>0&&(n=Ia,l=u,f=c.length):(l=Math.max(a,u),n=l>0?a>u?La:Ia:null,f=n?n===La?o.length:c.length:0),{type:n,timeout:l,propCount:f,hasTransform:n===La&&Ba.test(r[Da+"Property"])}}function Jn(e,t){for(;e.length1}function Yn(e,t){!0!==t.data.show&&qn(t)}function Qn(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,c=e.options.length;s-1,a.selected!==o&&(a.selected=o);else if(y(er(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Xn(e,t){for(var n=0,r=t.length;n=0&&a[i].lowerCasedTag!==s;i--);else i=0;if(i>=0){for(var c=a.length-1;c>=i;c--)t.end&&t.end(a[c].tag,n,r);a.length=i,o=i&&a[i-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,r):"p"===s&&(t.start&&t.start(e,[],!1,n,r),t.end&&t.end(e,n,r))}for(var i,o,a=[],s=t.expectHTML,c=t.isUnaryTag||Ni,u=t.canBeLeftOpenTag||Ni,l=0;e;){if(i=e,o&&Ns(o)){var f=o.toLowerCase(),p=Ls[f]||(Ls[f]=new RegExp("([\\s\\S]*?)(]*>)","i")),d=0,v=e.replace(p,function(e,n,r){return d=r.length,Ns(f)||"noscript"===f||(n=n.replace(//g,"$1").replace(//g,"$1")),t.chars&&t.chars(n),""});l+=e.length-v.length,e=v,r(f,l-d,l)}else{var h=e.indexOf("<");if(0===h){if(fs.test(e)){var m=e.indexOf("--\x3e");if(m>=0){n(m+3);continue}}if(ps.test(e)){var g=e.indexOf("]>");if(g>=0){n(g+2);continue}}var y=e.match(ls);if(y){n(y[0].length);continue}var _=e.match(us);if(_){var b=l;n(_[0].length),r(_[1],b,l);continue}var $=function(){var t=e.match(ss);if(t){var r={tagName:t[1],attrs:[],start:l};n(t[0].length);for(var i,o;!(i=e.match(cs))&&(o=e.match(os));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=l,r}}();if($){!function(e){var n=e.tagName,i=e.unarySlash;s&&("p"===o&&rs(n)&&r(o),u(n)&&o===n&&r(n));for(var l=c(n)||"html"===n&&"head"===o||!!i,f=e.attrs.length,p=new Array(f),d=0;d=0){for(w=e.slice(h);!(us.test(w)||ss.test(w)||fs.test(w)||ps.test(w)||(C=w.indexOf("<",1))<0);)h+=C,w=e.slice(h);x=e.substring(0,h),n(h)}h<0&&(x=e,e=""),t.chars&&x&&t.chars(x)}if(e===i){t.chars&&t.chars(e);break}}r()}function mr(e,t){var n=t?Rs(t):Ps;if(n.test(e)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(e);){i=r.index,i>a&&o.push(JSON.stringify(e.slice(a,i)));var s=tn(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a0,Ki=Vi&&Vi.indexOf("edge/")>0,qi=Vi&&Vi.indexOf("android")>0,Wi=Vi&&/iphone|ipad|ipod|ios/.test(Vi),Zi=Vi&&/chrome\/\d+/.test(Vi)&&!Ki,Gi=!1;if(Ui)try{var Yi={};Object.defineProperty(Yi,"passive",{get:function(){Gi=!0}}),window.addEventListener("test-passive",null,Yi)}catch(e){}var Qi,Xi,eo=function(){return void 0===Qi&&(Qi=!Ui&&"undefined"!=typeof global&&"server"===global.process.env.VUE_ENV),Qi},to=Ui&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,no="undefined"!=typeof Symbol&&k(Symbol)&&"undefined"!=typeof Reflect&&k(Reflect.ownKeys),ro=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t1?v(n):n;for(var r=v(arguments,1),i=0,o=n.length;i1&&(t[n[0].trim()]=n[1].trim())}}),t}),ka=/^--/,Aa=/\s*!important$/,Oa=function(e,t,n){if(ka.test(t))e.style.setProperty(t,n);else if(Aa.test(n))e.style.setProperty(t,n.replace(Aa,""),"important");else{var r=Ta(t);if(Array.isArray(n))for(var i=0,o=n.length;iv?(f=e(i[g+1])?null:i[g+1].elm,y(n,f,i,d,g,o)):d>g&&b(n,r,p,v)}function w(r,i,o,a){if(r!==i){if(n(i.isStatic)&&n(r.isStatic)&&i.key===r.key&&(n(i.isCloned)||n(i.isOnce)))return i.elm=r.elm,void(i.componentInstance=r.componentInstance);var s,c=i.data;t(c)&&t(s=c.hook)&&t(s=s.prepatch)&&s(r,i);var u=i.elm=r.elm,l=r.children,f=i.children;if(t(c)&&h(i)){for(s=0;s',n.innerHTML.indexOf(t)>0}("\n"," "),ts=u("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),ns=u("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),rs=u("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),is=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],os=new RegExp("^\\s*"+/([^\s"'<>\/=]+)/.source+"(?:\\s*("+/(?:=)/.source+")\\s*(?:"+is.join("|")+"))?"),as="[a-zA-Z_][\\w\\-\\.]*",ss=new RegExp("^<((?:"+as+"\\:)?"+as+")"),cs=/^\s*(\/?)>/,us=new RegExp("^<\\/((?:"+as+"\\:)?"+as+")[^>]*>"),ls=/^]+>/i,fs=/^ 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Turn off retweets! 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 47 | 51 | 52 | 53 | 65 | 66 |
67 |
68 | 69 | {% block header %} 70 | 71 | {% endblock %} 72 |
73 |
74 |
75 |
76 | {% block content %} 77 | 78 | {% endblock %} 79 |
80 |
81 | 82 | {% block scripts %} 83 | 84 | {% endblock %} 85 | 86 | 87 | -------------------------------------------------------------------------------- /views/error.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block header %} 4 |

{{ err }}

5 | {% endblock %} 6 | 7 | {% block content %} 8 |
 9 |   {{ err.stack }}
10 | 
11 | {% endblock %} -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 | {% if user %} 6 | 7 | 8 |
9 |

Hi @{{user.username}}!

10 |

11 | Here's a list of everyone you follow on Twitter, mostly. They're sorted by lifetime tweet count. You can click "turn off retweets" and it'll use 12 | the Twitter API to turn off retweets. You can either do it for everyone at once ("Turn off ALL 13 | retweets") or one person at a time. 14 |

15 |

16 | This app uses a cache to avoid hitting Twitter API rate limits. To get up-to-date information 17 | (for example after turning off retweets for a few people) you can clear the cache. 18 |

19 |

20 |

21 | Clear the cache 22 |
23 |
24 |

25 |
26 | 27 |
28 |
29 | 33 |

34 | Friends with retweets turned on 35 |

36 | 37 | 38 | 39 | 46 | 47 |
40 | 41 | @${friend.screen_name} 42 | ${ friend.statuses_count || 0 } tweets 43 | Turn off retweets 44 | ❤ done ❤ 45 |
48 | 49 |

50 | Friends with retweets turned off 51 |

52 | 53 | 54 | 61 | 62 | 63 |
55 | 56 | @${friend.screen_name} 57 | ${ friend.statuses_count || 0 } tweets 58 | Turn on retweets 59 | ❤ done ❤ 60 |
64 |
65 |
66 | {% else %} 67 |
68 |

69 | 72 |

73 | Tired of seeing retweets on Twitter? 74 |

75 | 76 |

77 |
78 |
79 | Me too! Luckily, Twitter has a feature that lets you turn off retweets for someone you follow! Here's how you do it: 80 |
    81 | 82 |
  1. Go to the person's Twitter profile
  2. 83 |
  3. Click "..." and then "Turn off retweets".
  4. 84 |
85 |
86 |
87 | 88 |
89 |
90 | 91 |

92 | But!! Twitter only lets you do this one person at a time. Going to everyone you follow's Twitter profile and clicking "turn off retweets" for each one of them takes FOREVER. 93 |

94 | 95 | So this app helps you do it more quickly! It's very simple, it just uses the Twitter API. 96 |

97 |

98 | To get started, click "Sign in with Twitter!". 99 |

100 | 101 |

102 | Why do I have to give this app permission to post Tweets? 103 |

104 |

105 | I don't like it either. The reason you need to give it permission to post tweets is that Twitter only has 2 levels of permission apps can get: "read-only" and "read and write". So because this site needs to do writes (to turn off retweets), it also needs permission to do every other write action, like posting tweets. 106 |

107 |

108 | You can revoke access in your Twitter application settings when you're done with it. 109 |

110 |

111 | This app will never post tweets for you. You can read the source. The only thing it will ever do is turn off retweets for some of the people you follow. It can also turn them back on. 112 | . It won't turn off retweets for anyone unless you ask it to. 113 |

114 | 115 | 118 | 119 |
120 | {% endif %} 121 | {% endblock %} 122 | --------------------------------------------------------------------------------