diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..56e88f4 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,58 @@ +{ + "extends": ["eslint:recommended", "plugin:prettier/recommended"], + "plugins": ["prettier"], + "parserOptions": { + "ecmaVersion": 2017, + "sourceType": "module", + "ecmaFeatures": { + "experimentalObjectRestSpread": true + } + }, + "env": { + "node": true, + "es6": true + }, + "rules": { + "no-console": 0, + "block-scoped-var": 1, + "curly": 1, + "eqeqeq": 1, + "no-global-assign": 1, + "no-implicit-globals": 1, + "no-labels": 1, + "no-multi-str": 1, + "comma-spacing": 1, + "comma-style": 1, + "func-call-spacing": 1, + "keyword-spacing": 1, + "linebreak-style": 1, + "lines-around-comment": 1, + "no-multiple-empty-lines": 1, + "space-infix-ops": 1, + "arrow-spacing": 1, + "no-var": 1, + "prefer-const": 1, + "no-unsafe-negation": 1, + "array-callback-return": 1, + "dot-notation": 1, + "no-eval": 1, + "no-extend-native": 1, + "no-extra-label": 1, + "semi": 1, + "space-before-blocks": 1, + "space-in-parens": 1, + "space-unary-ops": 1, + "spaced-comment": 1, + "arrow-body-style": 1, + "arrow-parens": 1, + "no-restricted-imports": 1, + "no-duplicate-imports": 1, + "no-useless-computed-key": 1, + "no-useless-rename": 1, + "rest-spread-spacing": 1, + "no-trailing-spaces": 1, + "quotes": [1, "single"], + "no-control-regex": 0, + "prettier/prettier": 0 + } +} diff --git a/.gitignore b/.gitignore index 81f35fc..aefa2a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -logs/DPlayer.log* \ No newline at end of file +error.log +combined.log \ No newline at end of file diff --git a/README.md b/README.md index 02497e3..c1db582 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# DPlayer backend +# DPlayer node > Node.js backend for [DPlayer](https://github.com/DIYgod/DPlayer) @@ -42,30 +42,9 @@ docker-compose stop [Telegram Group](https://t.me/adplayer) -[QQ Group: 415835947](https://shang.qq.com/wpa/qunwpa?idkey=bf22213ae0028a82e5adf3f286dfd4f01e0997dc9f1dcd8e831a0a85e799be17) +## Author -## Related Projects +**DPlayer-node** © [DIYgod](https://github.com/DIYgod), Released under the [MIT](./LICENSE) License.
+Authored and maintained by DIYgod with help from contributors ([list](https://github.com/MoePlayer/DPlayer-node/contributors)). -- [DPlayer](https://github.com/DIYgod/DPlayer) - -- [DPlayer-data(weekly backup for api.prprpr.me/dplayer)](https://github.com/DIYgod/DPlayer-data) - -- [DPlayer-for-typecho](https://github.com/volio/DPlayer-for-typecho) - -- [Hexo-tag-dplayer](https://github.com/NextMoe/hexo-tag-dplayer) - -- [DPlayer_for_Z-BlogPHP](https://github.com/fghrsh/DPlayer_for_Z-BlogPHP) - -- [纸飞机视频区插件(DPlayer for Discuz!)](https://coding.net/u/Click_04/p/video/git) - -- [dplayer_py_backend](https://github.com/dixyes/dplayer_py_backend) - -- [dplayer_lua_backend](https://github.com/dixyes/dplayer_lua_backend) - -- [DPlayer for WordPress](https://github.com/BlueCocoa/DPlayer-WordPress) - -- [Vue-DPlayer](https://github.com/sinchang/vue-dplayer) - -## LICENSE - -[The Star And Thank Author License (SATA)](https://github.com/DIYgod/DPlayer/blob/master/LICENSE) \ No newline at end of file +> Blog [@DIYgod](https://diygod.me) · GitHub [@DIYgod](https://github.com/DIYgod) · Twitter [@DIYgod](https://twitter.com/DIYgod) · Telegram Channel [@awesomeDIYgod](https://t.me/awesomeDIYgod) diff --git a/blacklist b/blacklist deleted file mode 100644 index 0ff919a..0000000 --- a/blacklist +++ /dev/null @@ -1,7 +0,0 @@ -Can be username and IP and referer -username -0.0.0.0 -175.180.108.110 -219.133.201.230 -llj22.com -190fl.cc \ No newline at end of file diff --git a/config.js b/config.js new file mode 100644 index 0000000..eb548ba --- /dev/null +++ b/config.js @@ -0,0 +1,15 @@ +module.exports = { + port: process.env.PORT || 1207, + mongodb: { + username: process.env.MONGO_USERNAME || null, + password: process.env.MONGO_PASSWORD || null, + host: process.env.MONGO_HOST || '127.0.0.1', + port: process.env.MONGO_PORT || '27017', + database: process.env.MONGO_DATABASE || 'danmaku', + }, + redis: { + host: process.env.REDIS_HOST || '127.0.0.1', + port: process.env.REDIS_PORT || '6379', + password: process.env.REDIS_PASSWORD || null, + } +}; diff --git a/docker-compose.yml b/docker-compose.yml index 83818ec..083ca7e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,11 +22,11 @@ services: ports: - 1207:1207 environment: - REDIS_PORT_6379_TCP_ADDR: "redis" - REDIS_PORT_6379_TCP_PORT: 6379 - MONGO_PORT_27017_TCP_ADDR: "mongo" - MONGO_PORT_27017_TCP_PORT: 27017 - MONGO_INSTANCE_NAME: "danmaku" + REDIS_HOST: "redis" + REDIS_PORT: 6379 + MONGO_HOST: "mongo" + MONGO_PORT: 27017 + MONGO_DATABASE: "danmaku" volumes: - ~/dplayer/logs:/usr/src/app/logs - ~/dplayer/pm2logs:/root/.pm2/logs \ No newline at end of file diff --git a/index.js b/index.js index 693461d..6a9c4e4 100644 --- a/index.js +++ b/index.js @@ -1,18 +1,34 @@ -var express = require('express'); -var logger = require('./tools/logger'); -require('./tools/mongodb'); - -logger.info(`🍻 DPlayer start! Cheers!`); - -var app = express(); -app.all('*', require('./routes/all')); -app.get('/', require('./routes/get')); -app.post('/', require('./routes/post')); -// app.get('/list', require('./routes/list')); -app.get('/bilibili', require('./routes/bilibili')); -// app.get('/video/bilibili', require('./routes/video-bilibili')); - -app.get('/v2', require('./routes/v2/get')); -app.post('/v2', require('./routes/v2/post')); -app.get('/v2/bilibili', require('./routes/v2/bilibili')); -app.listen(1207); \ No newline at end of file +const Koa = require('koa'); +const bodyParser = require('koa-bodyparser'); + +const logger = require('./utils/logger'); +const config = require('./config'); + +const mongodb = require('./utils/mongodb'); +const redis = require('./utils/redis'); + +const onerror = require('./middleware/onerror'); +const header = require('./middleware/header.js'); +const accessControl = require('./middleware/access-control.js'); + +const router = require('./router'); + +process.on('uncaughtException', (e) => { + logger.error('uncaughtException: ' + e); +}); + +logger.info('🎉 DPlayer start! Cheers!'); + +const app = new Koa(); +app.proxy = true; +app.context.mongodb = mongodb; +app.context.redis = redis; + +app.use(bodyParser()); +app.use(onerror); +app.use(header); +app.use(accessControl); +app.use(router.routes()).use(router.allowedMethods()); + +app.listen(config.port); +logger.info('Listening Port ' + config.port); \ No newline at end of file diff --git a/middleware/access-control.js b/middleware/access-control.js new file mode 100644 index 0000000..2333e51 --- /dev/null +++ b/middleware/access-control.js @@ -0,0 +1,21 @@ +const blacklist = (process.env.BLACKLIST && process.env.BLACKLIST.split(',')) || []; +const whitelist = process.env.WHITELIST && process.env.WHITELIST.split(','); + +module.exports = async (ctx, next) => { + const ip = ctx.ips[0] || ctx.ip; + const referer = ctx.request.headers.referer; + + const refererAllowed = (whitelist && whitelist.indexOf(referer) !== -1) || blacklist.indexOf(referer) === -1; + const ipAllowed = (whitelist && whitelist.indexOf(ip) !== -1) || blacklist.indexOf(ip) === -1; + + if (refererAllowed && ipAllowed) { + await next(); + } else { + ctx.response.status = 403; + + ctx.body = JSON.stringify({ + code: 1, + msg: `${!refererAllowed ? '该站点' : '你的 IP '}没有访问权限`, + }); + } +}; diff --git a/middleware/header.js b/middleware/header.js new file mode 100644 index 0000000..5d7fc52 --- /dev/null +++ b/middleware/header.js @@ -0,0 +1,14 @@ +const logger = require('../utils/logger'); +const headers = { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild', + 'Access-Control-Allow-Methods': 'PUT, POST, GET, DELETE, OPTIONS', + 'Content-Type': 'application/json; charset=UTF-8', + 'Cache-Control': 'no-cache', +}; + +module.exports = async (ctx, next) => { + logger.info(`${ctx.url}, user IP: ${ctx.ips[0] || ctx.ip}`); + ctx.set(headers); + await next(); +}; diff --git a/middleware/onerror.js b/middleware/onerror.js new file mode 100644 index 0000000..a5a9fb1 --- /dev/null +++ b/middleware/onerror.js @@ -0,0 +1,14 @@ +const logger = require('../utils/logger'); + +module.exports = async (ctx, next) => { + try { + await next(); + } catch (err) { + logger.error('Promise error: ' + (err instanceof Error ? err.stack : err)); + ctx.set({ + 'Content-Type': 'text/html; charset=UTF-8', + }); + ctx.body = `DPlayer-node 发生了一些意外:
${err instanceof Error ? err.stack : err}
`; + ctx.status = 500; + } +}; diff --git a/models/danmaku.js b/models/danmaku.js deleted file mode 100644 index 6b0512b..0000000 --- a/models/danmaku.js +++ /dev/null @@ -1,16 +0,0 @@ -var mongoose = require('../tools/mongodb'); -var danmakuSchema = new mongoose.Schema({ - player: { - type: [String], index: true - }, - author: String, - time: Number, - text: String, - color: String, - type: String, - ip: String, - referer: String -}); -var danmaku = mongoose.model('dan', danmakuSchema); - -module.exports = danmaku; \ No newline at end of file diff --git a/package.json b/package.json index e6b42c8..2189408 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,18 @@ "main": "index.js", "author": "DIYgod", "license": "MIT", - "devDependencies": {}, + "devDependencies": { + "eslint": "5.0.1", + "eslint-config-prettier": "2.9.0", + "eslint-plugin-prettier": "2.6.1" + }, "dependencies": { - "blueimp-md5": "2.10.0", - "express": "4.16.2", - "log4js": "2.4.1", - "mongoose": "4.13.9", - "node-fetch": "1.7.3", + "koa": "2.5.1", + "koa-bodyparser": "4.2.1", + "koa-router": "7.4.0", + "mongoose": "5.1.7", "redis": "2.8.0", + "winston": "3.0.0", "xml2js": "0.4.19" } } diff --git a/router.js b/router.js new file mode 100644 index 0000000..a080869 --- /dev/null +++ b/router.js @@ -0,0 +1,7 @@ +const Router = require('koa-router'); +const router = new Router(); + +router.get('/', require('./routes/get')); +router.post('/', require('./routes/post')); + +module.exports = router; \ No newline at end of file diff --git a/routes/all.js b/routes/all.js deleted file mode 100644 index ad574da..0000000 --- a/routes/all.js +++ /dev/null @@ -1,23 +0,0 @@ -var logger = require('../tools/logger'); -var blank = require('../tools/blank'); - -module.exports = function (req, res, next) { - - if (req.headers.referer && blank(req.headers.referer)) { - logger.info(`Reject all form ${req.headers.referer} for black referer.`); - res.send(`{"code": 6, "msg": "black referer"}`); - return; - } - - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'); - res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS'); - res.header('Cache-control', 'no-cache'); - - if (req.method == 'OPTIONS') { - res.send(200); - } - else { - next(); - } -}; \ No newline at end of file diff --git a/routes/bilibili.js b/routes/bilibili.js deleted file mode 100644 index 296290d..0000000 --- a/routes/bilibili.js +++ /dev/null @@ -1,134 +0,0 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var redis = require('../tools/redis'); -var fetch = require('node-fetch'); -var parseString = require('xml2js').parseString; - -module.exports = function (req, res) { - res.header('content-type', 'application/json; charset=utf-8'); - - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url,true).query; - var aid = query.aid; - var cid = query.cid; - - function addZero(str, length){ - return new Array(Math.max(length - str.length + 1, 0)).join("0") + str; - } - - if (cid) { - redis.client.get(`bilibilicid2dan${cid}`, function(err, reply) { - if (reply) { - logger.info(`Bilibili cid2dan ${cid} form redis, IP: ${ip}`); - res.send(reply); - } - else { - logger.info(`Bilibili cid2dan ${cid} form origin, IP: ${ip}`); - - var dan = { - code: 1, - danmaku: [] - }; - - fetch(`http://comment.bilibili.com/${cid}.xml`).then( - response => response.text() - ).then((data) => { - parseString(data, function (err, result) { - var danOriginal = result.i.d; - for (var i = 0; i < danOriginal.length; i++) { - var info = danOriginal[i].$.p.split(','); - var type = ''; - if (info[1] === '4') { - type = 'bottom'; - } - else if (info[1] === '5') { - type = 'top'; - } - else { - type = 'right'; - } - var danOne = { - author: 'bilibili' + info[6], - time: info[0], - text: danOriginal[i]._, - color: '#' + addZero(parseInt(info[3]).toString(16), 6), - type: type - }; - dan.danmaku.push(danOne); - } - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`bilibilicid2dan${cid}`, sendDan); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting danmaku", e) - ); - } - }); - } - else { - redis.client.get(`bilibiliaid2dan${aid}`, function(err, reply) { - if (reply) { - logger.info(`Bilibili aid2dan ${aid} form redis, IP: ${ip}`); - res.send(reply); - } - else { - logger.info(`Bilibili aid2dan ${aid} form origin, IP: ${ip}`); - - var dan = { - code: 1, - danmaku: [] - }; - - fetch(`http://www.bilibili.com/widget/getPageList?aid=${aid}`).then( - response => response.json() - ).then((data) => { - fetch(`http://comment.bilibili.com/${data[0].cid}.xml`).then( - response => response.text() - ).then((data) => { - parseString(data, function (err, result) { - var danOriginal = result.i.d; - for (var i = 0; i < danOriginal.length; i++) { - var info = danOriginal[i].$.p.split(','); - var type = ''; - if (info[1] === '4') { - type = 'bottom'; - } - else if (info[1] === '5') { - type = 'top'; - } - else { - type = 'right'; - } - var danOne = { - author: 'bilibili' + info[6], - time: info[0], - text: danOriginal[i]._, - color: '#' + addZero(parseInt(info[3]).toString(16), 6), - type: type - }; - dan.danmaku.push(danOne); - } - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`bilibiliaid2dan${aid}`, sendDan); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting danmaku", e) - ); - } - ).catch( - e => logger.error("Bilibilib Error: getting cid", e) - ); - } - }); - } -}; \ No newline at end of file diff --git a/routes/get.js b/routes/get.js index 7b1160b..5c36128 100644 --- a/routes/get.js +++ b/routes/get.js @@ -1,43 +1,32 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var danmaku = require('../models/danmaku'); -var redis = require('../tools/redis'); +function htmlEncode (str) { + return str.replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/\//g, '/'); +} -module.exports = function (req, res) { - res.header('content-type', 'application/json; charset=utf-8'); +module.exports = async (ctx) => { + const { id, limit } = ctx.request.query; - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url,true).query; - var id = query.id; - var max = query.max; - - redis.client.get(`dplayer${id}`, function(err, reply) { - if (reply) { - logger.info(`DPlayer id ${id} form redis, IP: ${ip}`); - res.send(reply); + let data = await ctx.redis.get(`danmaku${id}`); + if (data) { + data = JSON.parse(data); + if (limit) { + data = data.slice(-1 * parseInt(limit)); } - else { - logger.info(`DPlayer id ${id} form mongodb, IP: ${ip}`); - - danmaku.find({player: id}, function (err, data) { - if (err) { - logger.error(err); - } - - var dan = { - code: 1, - danmaku: [] - }; - dan.danmaku = max ? data.slice(0, max) : data; - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`dplayer${id}`, sendDan); - }) + ctx.response.set('X-Koa-Redis', 'true'); + } else { + data = await ctx.mongodb.find({ id }) || []; + ctx.redis.set(`danmaku${id}`, JSON.stringify(data)); + if (limit) { + data = data.slice(-1 * parseInt(limit)); } + ctx.response.set('X-Koa-Mongodb', 'true'); + } + ctx.body = JSON.stringify({ + code: 0, + data: data.map((item) => [item.time || 0, item.type || 0, item.color || 16777215, htmlEncode(item.author) || 'DPlayer', htmlEncode(item.text) || '']), }); }; \ No newline at end of file diff --git a/routes/list.js b/routes/list.js deleted file mode 100644 index 1f4146e..0000000 --- a/routes/list.js +++ /dev/null @@ -1,17 +0,0 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var danmaku = require('../models/danmaku'); - -module.exports = function (req, res) { - danmaku.distinct('player', function (err, data) { - if (err) { - logger.error(err); - } - - var json = ``; - for (var i = 0; i < data.length; i++) { - json += data[i] + `
`; - } - res.send(json); - }) -}; \ No newline at end of file diff --git a/routes/post.js b/routes/post.js index 643cac0..e2fd862 100644 --- a/routes/post.js +++ b/routes/post.js @@ -1,117 +1,32 @@ -var logger = require('../tools/logger'); -var danmaku = require('../models/danmaku'); -var redis = require('../tools/redis'); -var blank = require('../tools/blank'); - -function htmlEncode(str) { - return str.replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'") - .replace(/\//g, "/"); -} - -var postIP = []; - -module.exports = function (req, res) { - var body = ''; - var jsonStr = {}; - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - // check black ip - if (blank(ip)) { - logger.info(`Reject POST form ${ip} for black ip.`); - res.send(`{"code": -1, "msg": "Rejected for black ip."}`); - return; - } - - // frequency limitation - if (postIP.indexOf(ip) !== -1) { - logger.info(`Reject POST form ${ip} for frequent operation.`); - res.send(`{"code": -2, "msg": "Rejected for frequent operation."}`); - return; - } - else { - postIP.push(ip); - setTimeout(function () { - postIP.splice(0, 1); - }, 1000); - } - - req.on('data', dataListener); - req.on('end', endListener); - - function dataListener (chunk) { - body += chunk; - } - function endListener () { - cleanListener(); - try { - jsonStr = JSON.parse(body); - } catch (err) { - jsonStr = {}; - } - - // check data - if (jsonStr.player === undefined - || jsonStr.author === undefined - || jsonStr.time === undefined - || jsonStr.text === undefined - || jsonStr.color === undefined - || jsonStr.type === undefined - || jsonStr.text.length >= 30) { - logger.info(`Reject POST form ${ip} for illegal data: ${JSON.stringify(jsonStr)}`); - res.send(`{"code": -3, "msg": "Rejected for illegal data"}`); - return; - } - - // check token: set it yourself - function checkToken (token) { - return true; - } - if (!checkToken(jsonStr.token)) { - logger.info(`Rejected POST form ${ip} for illegal token: ${jsonStr.token}`); - res.send(`{"code": -4, "msg": "Rejected for illegal token: ${jsonStr.token}"}`); - return; +const logger = require('../utils/logger'); + +module.exports = async (ctx) => { + const body = ctx.request.body; + + const dan = new ctx.mongodb({ + id: body.id, + author: body.author, + time: body.time, + text: body.text, + color: body.color, + type: body.type, + ip: ctx.ips[0] || ctx.ip, + referer: ctx.headers.referer + }); + dan.save((err, data) => { + if (err) { + logger.error(err); + ctx.body = JSON.stringify({ + code: 1, + msg: 'Database error', + }); } - - // check black username - if (blank(jsonStr.author)) { - logger.info(`Reject POST form ${jsonStr.author} for black user.`); - res.send(`{"code": -5, "msg": "Rejected for black user."}`); - return; + else { + ctx.body = JSON.stringify({ + code: 0, + data, + }); + ctx.redis.del(`danmaku${data.id}`); } - - logger.info(`POST form ${ip}, data: ${JSON.stringify(jsonStr)}`); - - var dan = new danmaku({ - player: htmlEncode(jsonStr.player), - author: htmlEncode(jsonStr.author), - time: jsonStr.time, - text: htmlEncode(jsonStr.text), - color: htmlEncode(jsonStr.color), - type: htmlEncode(jsonStr.type), - ip: ip, - referer: req.headers.referer - }); - dan.save(function (err, d) { - if (err) { - logger.error(err); - res.send(`{"code": 0, "msg": "Error happens, please contact system administrator."}`); - } - else { - res.send(`{"code": 1, "data": ${JSON.stringify(d)}}`); - redis.client.del(`dplayer${htmlEncode(jsonStr.player)}`); - } - }); - } - - function cleanListener () { - req.removeListener('data', dataListener); - req.removeListener('end', endListener); - } + }); }; \ No newline at end of file diff --git a/routes/v2/bilibili.js b/routes/v2/bilibili.js deleted file mode 100644 index 67c97c7..0000000 --- a/routes/v2/bilibili.js +++ /dev/null @@ -1,124 +0,0 @@ -var url = require('url'); -var logger = require('../../tools/logger'); -var redis = require('../../tools/redis'); -var fetch = require('node-fetch'); -var parseString = require('xml2js').parseString; - -module.exports = function (req, res) { - res.header('content-type', 'application/json; charset=utf-8'); - - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url, true).query; - var aid = query.aid; - var cid = query.cid; - - function addZero (str, length) { - return new Array(Math.max(length - str.length + 1, 0)).join("0") + str; - } - - if (cid) { - redis.client.get(`v2bilibilicid2dan${cid}`, function (err, reply) { - if (reply) { - logger.info(`v2: Bilibili cid2dan ${cid} form redis, IP: ${ip}`); - res.send(reply); - } - else { - logger.info(`v2: Bilibili cid2dan ${cid} form origin, IP: ${ip}`); - - var dan = { - code: 0, - version: 2, - danmaku: [] - }; - - fetch(`http://comment.bilibili.com/${cid}.xml`).then( - response => response.text() - ).then((data) => { - parseString(data, function (err, result) { - var danOriginal = result.i.d; - for (var i = 0; i < danOriginal.length; i++) { - var info = danOriginal[i].$.p.split(','); - var type = ''; - if (info[1] === '4') { - type = 2; - } - else if (info[1] === '5') { - type = 1; - } - else { - type = 0; - } - var danOne = [parseInt(info[0]), type, '#' + addZero(parseInt(info[3]).toString(16), 6), 'bilibili' + info[6], danOriginal[i]._]; - dan.danmaku.push(danOne); - } - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`v2bilibilicid2dan${cid}`, sendDan); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting danmaku", e) - ); - } - }); - } - else { - redis.client.get(`v2bilibiliaid2dan${aid}`, function (err, reply) { - if (reply) { - logger.info(`v2: Bilibili aid2dan ${aid} form redis, IP: ${ip}`); - res.send(reply); - } - else { - logger.info(`v2: Bilibili aid2dan ${aid} form origin, IP: ${ip}`); - - var dan = { - code: 0, - version: 2, - danmaku: [] - }; - - fetch(`http://www.bilibili.com/widget/getPageList?aid=${aid}`).then( - response => response.json() - ).then((data) => { - fetch(`http://comment.bilibili.com/${data[0].cid}.xml`).then( - response => response.text() - ).then((data) => { - parseString(data, function (err, result) { - var danOriginal = result.i.d; - for (var i = 0; i < danOriginal.length; i++) { - var info = danOriginal[i].$.p.split(','); - var type = ''; - if (info[1] === '4') { - type = 2; - } - else if (info[1] === '5') { - type = 1; - } - else { - type = 0; - } - var danOne = [parseInt(info[0]), type, '#' + addZero(parseInt(info[3]).toString(16), 6), 'bilibili' + info[6], danOriginal[i]._]; - dan.danmaku.push(danOne); - } - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`v2bilibiliaid2dan${aid}`, sendDan); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting danmaku", e) - ); - } - ).catch( - e => logger.error("Bilibilib Error: getting cid", e) - ); - } - }); - } -}; \ No newline at end of file diff --git a/routes/v2/get.js b/routes/v2/get.js deleted file mode 100644 index ee13c4d..0000000 --- a/routes/v2/get.js +++ /dev/null @@ -1,63 +0,0 @@ -var url = require('url'); -var logger = require('../../tools/logger'); -var danmaku = require('../../models/danmaku'); -var redis = require('../../tools/redis'); - -module.exports = function (req, res) { - res.header('content-type', 'application/json; charset=utf-8'); - - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url, true).query; - var id = query.id; - var max = query.max; - - redis.client.get(`v2get${id}`, function (err, reply) { - if (reply) { - logger.info(`v2: DPlayer id ${id} form redis, IP: ${ip}`); - - var data = JSON.parse(reply); - - var data = max ? data.slice(data.length - max, data.length) : data; - - var typeMap = { - 'right': 0, - 'top': 1, - 'bottom': 2 - } - - res.send(JSON.stringify({ - code: 0, - version: 2, - danmaku: data.map(item => [item.time, typeMap[item.type], item.color, item.author, item.text]) - })); - } - else { - logger.info(`v2: DPlayer id ${id} form mongodb, IP: ${ip}`); - - danmaku.find({ player: id }, function (err, data) { - if (err) { - logger.error(err); - } - - redis.set(`v2get${id}`, JSON.stringify(data)); - - var data = max ? data.slice(data.length - max, data.length) : data; - - var typeMap = { - 'right': 0, - 'top': 1, - 'bottom': 2 - } - res.send(JSON.stringify({ - code: 0, - version: 2, - danmaku: data.map(item => [item.time, typeMap[item.type], item.color, item.author, item.text]) - })); - }) - } - }); -}; \ No newline at end of file diff --git a/routes/v2/post.js b/routes/v2/post.js deleted file mode 100644 index 2d328da..0000000 --- a/routes/v2/post.js +++ /dev/null @@ -1,117 +0,0 @@ -var logger = require('../../tools/logger'); -var danmaku = require('../../models/danmaku'); -var redis = require('../../tools/redis'); -var blank = require('../../tools/blank'); - -function htmlEncode (str) { - return str.replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'") - .replace(/\//g, "/"); -} - -var postIP = []; - -module.exports = function (req, res) { - var body = ''; - var jsonStr = {}; - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - // check black ip - if (blank(ip)) { - logger.info(`v2: Reject POST form ${ip} for black ip.`); - res.send(`{"code": 1, "msg": "black ip"}`); - return; - } - - // frequency limitation - if (postIP.indexOf(ip) !== -1) { - logger.info(`v2: Reject POST form ${ip} for frequent operation.`); - res.send(`{"code": 2, "msg": "frequent operation"}`); - return; - } - else { - postIP.push(ip); - setTimeout(function () { - postIP.splice(0, 1); - }, 5000); - } - - req.on('data', dataListener); - req.on('end', endListener); - - function dataListener (chunk) { - body += chunk; - } - function endListener () { - cleanListener(); - try { - jsonStr = JSON.parse(body); - } catch (err) { - jsonStr = {}; - } - - // check data - if (jsonStr.player === undefined - || jsonStr.author === undefined - || jsonStr.time === undefined - || jsonStr.text === undefined - || jsonStr.color === undefined - || jsonStr.type === undefined - || jsonStr.text.length >= 30) { - logger.info(`v2: Reject POST form ${ip} for illegal data: ${JSON.stringify(jsonStr)}`); - res.send(`{"code": 3, "msg": "illegal data"}`); - return; - } - - // check token: set it yourself - function checkToken (token) { - return true; - } - if (!checkToken(jsonStr.token)) { - logger.info(`v2: Rejected POST form ${ip} for illegal token: ${jsonStr.token}`); - res.send(`{"code": 4, "msg": "illegal token: ${jsonStr.token}"}`); - return; - } - - // check black username - if (blank(jsonStr.author)) { - logger.info(`v2: Reject POST form ${jsonStr.author} for black user.`); - res.send(`{"code": 5, "msg": "black user"}`); - return; - } - - logger.info(`v2: POST form ${ip}, data: ${JSON.stringify(jsonStr)}`); - - var dan = new danmaku({ - player: htmlEncode(jsonStr.player), - author: htmlEncode(jsonStr.author), - time: jsonStr.time, - text: htmlEncode(jsonStr.text), - color: htmlEncode(jsonStr.color), - type: htmlEncode(jsonStr.type), - ip: ip, - referer: req.headers.referer - }); - dan.save(function (err, d) { - if (err) { - logger.error(err); - res.send(`{"code": -1, "msg": "Database error"}`); - } - else { - res.send(`{"code": 0, "data": ${JSON.stringify(d)}}`); - redis.client.del(`v2get${htmlEncode(jsonStr.player)}`); - } - }); - } - - function cleanListener () { - req.removeListener('data', dataListener); - req.removeListener('end', endListener); - } -}; \ No newline at end of file diff --git a/routes/video-bilibili.js b/routes/video-bilibili.js deleted file mode 100644 index b418e88..0000000 --- a/routes/video-bilibili.js +++ /dev/null @@ -1,72 +0,0 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var redis = require('../tools/redis'); -var fetch = require('node-fetch'); -var md5 = require('blueimp-md5'); -var xml2js = require('xml2js'); -var parseString = xml2js.parseString; - -var appkey = 'f3bb208b3d081dc8'; -var secret = '1c15888dc316e05a15fdd0a02ed6584f'; -function getData(cid, res, type) { - var para = `cid=${cid}&from=miniplay&player=1&quality=2&type=mp4`; - var sign = md5(`${para}${secret}`); - var api = `http://interface.bilibili.com/playurl?${para}&sign=${sign}`; - - if (type === '1') { - res.send(api); - } - else { - fetch(api, { - headers: {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36'}, - }).then( - response => response.text() - ).then((data) => { - parseString(data, { explicitArray: false }, function (err, result) { - // res.send(result.video.durl.url.replace('http://', 'https://')); - res.redirect(301, result.video.durl.url.replace('http://', 'https://')); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting data", e) - ); - } -} - -module.exports = function (req, res) { - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url,true).query; - var aid = query.aid; - var cid = query.cid; - var type = query.type; - - if (cid) { - logger.info(`Bilibili cid2video ${cid}, IP: ${ip}`); - getData(cid, res, type); - } - else { - redis.client.get(`bilibiliaid2cid${aid}`, function(err, reply) { - if (reply) { - logger.info(`Bilibili aid2video ${aid} form redis, IP: ${ip}`); - getData(reply, res, type); - } - else { - logger.info(`Bilibili aid2video ${aid} form origin, IP: ${ip}`); - - fetch(`http://www.bilibili.com/widget/getPageList?aid=${aid}`).then( - response => response.json() - ).then((data) => { - redis.set(`bilibiliaid2cid${aid}`, data[0].cid); - getData(data[0].cid, res, type); - } - ).catch( - e => logger.error("Bilibili aid2video Error: getting cid", e) - ); - } - }); - } -}; \ No newline at end of file diff --git a/tools/blank.js b/tools/blank.js deleted file mode 100644 index 8c0be5a..0000000 --- a/tools/blank.js +++ /dev/null @@ -1,11 +0,0 @@ -var fs = require('fs'); -var blanklist = fs.readFileSync('blacklist').toString().split('\n'); - -module.exports = function (text) { - for (var i = 0; i < blanklist.length; i++) { - if (new RegExp(blanklist[i]).test(text)) { - return true; - } - } - return false; -} \ No newline at end of file diff --git a/tools/logger.js b/tools/logger.js deleted file mode 100644 index b1d9969..0000000 --- a/tools/logger.js +++ /dev/null @@ -1,19 +0,0 @@ -var log4js = require('log4js'); -log4js.configure({ - appenders: { - DPlayer: { - type: 'file', - filename: 'logs/DPlayer.log', - maxLogSize: 20480, - backups: 3, - compress: true - }, - console: { - type: 'console' - } - }, - categories: { default: { appenders: ['DPlayer', 'console'], level: 'INFO' } } -}); -var logger = log4js.getLogger('DPlayer'); - -module.exports = logger; \ No newline at end of file diff --git a/tools/mongodb.js b/tools/mongodb.js deleted file mode 100644 index 6e82245..0000000 --- a/tools/mongodb.js +++ /dev/null @@ -1,13 +0,0 @@ -var mongoose = require('mongoose'); -var mongodbUrl; -if (process.env.MONGO_PORT_27017_TCP_ADDR && process.env.MONGO_PORT_27017_TCP_PORT && process.env.MONGO_INSTANCE_NAME) { - mongodbUrl = 'mongodb://' + process.env.MONGO_PORT_27017_TCP_ADDR + ':' + process.env.MONGO_PORT_27017_TCP_PORT + '/' + process.env.MONGO_INSTANCE_NAME; -} -else { - mongodbUrl = 'mongodb://127.0.0.1:27017/danmaku'; -} -mongoose.connect(mongodbUrl, { - useMongoClient: true, -}); - -module.exports = mongoose; \ No newline at end of file diff --git a/tools/redis.js b/tools/redis.js deleted file mode 100644 index 145c096..0000000 --- a/tools/redis.js +++ /dev/null @@ -1,26 +0,0 @@ -var logger = require('./logger'); -var redis = require("redis"); -var client; -if (process.env.REDIS_PORT_6379_TCP_ADDR && process.env.REDIS_PORT_6379_TCP_PORT) { - client = redis.createClient({ - host: process.env.REDIS_PORT_6379_TCP_ADDR, - port: process.env.REDIS_PORT_6379_TCP_PORT - }); -} -else { - client = redis.createClient(); -} - - -client.on("error", function (err) { - logger.error('Redis Error ' + err); -}); - -module.exports = { - set: function (key, value) { - client.set(key, value, redis.print); - client.expire(key, 86400); - logger.info('Set redis: ' + key); - }, - client: client -}; \ No newline at end of file diff --git a/utils/logger.js b/utils/logger.js new file mode 100644 index 0000000..4805887 --- /dev/null +++ b/utils/logger.js @@ -0,0 +1,29 @@ +const winston = require('winston'); + +const logger = winston.createLogger({ + level: 'info', + format: winston.format.json(), + transports: [ + // + // - Write to all logs with level `info` and below to `combined.log` + // - Write all logs error (and below) to `error.log`. + // + new winston.transports.File({ + filename: 'logs/error.log', + level: 'error', + }), + new winston.transports.File({ filename: 'logs/combined.log' }), + ], +}); + +// +// If we're not in production then log to the `console` with the format: +// `${info.level}: ${info.message} JSON.stringify({ ...rest }) ` +// +logger.add( + new winston.transports.Console({ + format: winston.format.combine(winston.format.colorize(), winston.format.simple()), + }) +); + +module.exports = logger; diff --git a/utils/mongodb.js b/utils/mongodb.js new file mode 100644 index 0000000..90206fd --- /dev/null +++ b/utils/mongodb.js @@ -0,0 +1,30 @@ +const mongoose = require('mongoose'); +const config = require('../config'); +const logger = require('./logger'); + +mongoose.connect(`mongodb://${(config.mongodb.username && config.mongodb.password) ? `${config.mongodb.username}:${config.mongodb.password}@` : ''}${config.mongodb.host}:${config.mongodb.port}/${config.mongodb.database}`); + +const db = mongoose.connection; +db.on('error', (e) => { + logger.error('Mongodb error: ', e); +}); +db.once('open', () => { + logger.info('Mongodb connected'); +}); + +const danmakuSchema = new mongoose.Schema({ + id: { + type: String, + index: true, + }, + author: String, + time: Number, + text: String, + color: Number, + type: Number, + ip: String, + referer: String, +}); +const danmaku = mongoose.model('dan', danmakuSchema); + +module.exports = danmaku; \ No newline at end of file diff --git a/utils/redis.js b/utils/redis.js new file mode 100644 index 0000000..65395e5 --- /dev/null +++ b/utils/redis.js @@ -0,0 +1,35 @@ +const logger = require('./logger'); +const config = require('../config'); +const redis = require('redis'); +const { promisify } = require('util'); + +const options = { + host: config.redis.host, + port: config.redis.port, + password: config.redis.password, +}; +if (!options.password) { + delete options.password; +} +const client = redis.createClient(options); + +client.on('error', (e) => { + logger.error('Redis error: ', e); +}); + +client.on('connect', () => { + logger.info('Redis connected'); +}); + +const getAsync = promisify(client.get).bind(client); + +module.exports = { + set: (key, value) => { + logger.info('Set redis: ' + key); + client.set(key, value); + }, + get: async (key) => await getAsync(key), + del: (key) => { + client.del(key); + }, +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8161006..7213c37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,181 +2,134 @@ # yarn lockfile v1 -accepts@~1.3.4: - version "1.3.4" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" +accepts@^1.2.2: + version "1.3.5" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" dependencies: - mime-types "~2.1.16" + mime-types "~2.1.18" negotiator "0.6.1" -addressparser@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" - -agent-base@2: - version "2.1.1" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" +acorn-jsx@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" dependencies: - extend "~3.0.0" - semver "~5.0.1" + acorn "^5.0.3" + +acorn@^5.0.3, acorn@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" -ajv@^5.1.0: - version "5.5.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" +ajv-keywords@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + +ajv@^6.0.1, ajv@^6.5.0: + version "6.5.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" + fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.1" + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" -ast-types@0.x.x: - version "0.10.1" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" +any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" -async@2.1.4: - version "2.1.4" - resolved "https://registry.npmjs.org/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: - lodash "^4.14.0" + sprintf-js "~1.0.2" -async@~2.1.2: - version "2.1.5" - resolved "https://registry.npmjs.org/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" dependencies: - lodash "^4.14.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + array-uniq "^1.0.1" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" -aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -axios@^0.15.3: - version "0.15.3" - resolved "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" +async@2.6.1, async@^2.6.0: + version "2.6.1" + resolved "https://registry.npmjs.org/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: - follow-redirects "1.0.0" + lodash "^4.17.10" -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: - tweetnacl "^0.14.3" + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" bluebird@3.5.0: version "3.5.0" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" -blueimp-md5@2.10.0: - version "2.10.0" - resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.10.0.tgz#02f0843921f90dca14f5b8920a38593201d6964d" - -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" + balanced-match "^1.0.0" + concat-map "0.0.1" bson@~1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c" -buffer-shims@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -buildmail@4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" - dependencies: - addressparser "1.0.1" - libbase64 "0.1.0" - libmime "3.0.0" - libqp "1.1.0" - nodemailer-fetch "1.6.0" - nodemailer-shared "1.1.0" - punycode "1.4.1" +bson@~1.0.5: + version "1.0.9" + resolved "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz#12319f8323b1254739b7c6bef8d3e89ae05a2f57" bytes@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" -chalk@^1.1.1: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -186,168 +139,336 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -circular-json@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.4.0.tgz#c448ea998b7fe31ecf472ec29c6b608e2e2a62fd" +chalk@^2.0.0, chalk@^2.1.0: + version "2.4.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +co-body@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/co-body/-/co-body-6.0.0.tgz#965b9337d7f5655480787471f4237664820827e3" + dependencies: + inflation "^2.0.0" + qs "^6.5.2" + raw-body "^2.3.3" + type-is "^1.6.16" co@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" -co@~3.0.6: - version "3.0.6" - resolved "https://registry.npmjs.org/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda" +color-convert@^0.5.0: + version "0.5.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +color-convert@^1.9.0: + version "1.9.2" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" dependencies: - delayed-stream "~1.0.0" + color-name "1.1.1" -commander@^2.9.0: - version "2.13.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +color-name@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" +color-name@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" +color@0.8.x: + version "0.8.0" + resolved "https://registry.npmjs.org/color/-/color-0.8.0.tgz#890c07c3fd4e649537638911cf691e5458b6fca5" + dependencies: + color-convert "^0.5.0" + color-string "^0.3.0" -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +colornames@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/colornames/-/colornames-0.0.2.tgz#d811fd6c84f59029499a8ac4436202935b92be31" -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +colors@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz#5f20c9fef6945cb1134260aab33bfbdc8295e04e" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" +colorspace@1.0.x: + version "1.0.1" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.0.1.tgz#c99c796ed31128b9876a52e1ee5ee03a4a719749" dependencies: - boom "2.x.x" + color "0.8.x" + text-hex "0.0.x" -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +content-disposition@~0.5.0: + version "0.5.2" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" +content-type@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookies@~0.7.0: + version "0.7.1" + resolved "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" dependencies: - assert-plus "^1.0.0" + depd "~1.1.1" + keygrip "~1.0.2" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" +copy-to@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" -date-format@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -debug@2, debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: - ms "2.0.0" + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" -debug@^3.1.0: +debug@*, debug@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: - ms "0.7.1" + ms "2.0.0" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -degenerator@~1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" + foreach "^2.0.5" + object-keys "^1.0.8" -delayed-stream@~1.0.0: +del@^2.0.2: + version "2.2.2" + resolved "https://registry.npmjs.org/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delegates@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@^1.1.0, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" -depd@1.1.1, depd@~1.1.1: +depd@~1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" -destroy@~1.0.4: +destroy@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +diagnostics@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.0.tgz#e1090900b49523e8527be20f081275205f2ae36a" + dependencies: + colorspace "1.0.x" + enabled "1.0.x" + kuler "0.0.x" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + double-ended-queue@^2.1.0-0: version "2.1.0-0" resolved "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +enabled@1.0.x: + version "1.0.2" + resolved "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93" + dependencies: + env-variable "0.0.x" + +env-variable@0.0.x: + version "0.0.4" + resolved "https://registry.npmjs.org/env-variable/-/env-variable-0.0.4.tgz#0d6280cf507d84242befe35a512b5ae4be77c54e" + +error-inject@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" +es-abstract@^1.10.0: + version "1.12.0" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" dependencies: - iconv-lite "~0.4.13" + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" -es6-promise@3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" -escape-html@~1.0.3: +escape-html@~1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.x.x: - version "1.9.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" +eslint-config-prettier@2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + dependencies: + get-stdin "^5.0.1" + +eslint-plugin-prettier@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.1.tgz#de902b4a66b7bca24296429a59a1cc04020ccbbd" + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + +eslint@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eslint/-/eslint-5.0.1.tgz#109b90ab7f7a736f54e0f341c8bb9d09777494c3" + dependencies: + ajv "^6.5.0" + babel-code-frame "^6.26.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^4.0.0" + eslint-visitor-keys "^1.0.0" + espree "^4.0.0" + esquery "^1.0.1" esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.5.6" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.5.0" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^5.2.0" + is-resolvable "^1.1.0" + js-yaml "^3.11.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.5" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.1.0" + require-uncached "^1.0.3" + semver "^5.5.0" + string.prototype.matchall "^2.0.0" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^4.0.3" + text-table "^0.2.0" + +espree@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" + dependencies: + acorn "^5.6.0" + acorn-jsx "^4.1.1" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + dependencies: + estraverse "^4.0.0" -esprima@3.x.x, esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" -estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -355,60 +476,21 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -express@4.16.2: - version "4.16.2" - resolved "https://registry.npmjs.org/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" - dependencies: - accepts "~1.3.4" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.1" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.0" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.2" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" - setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +external-editor@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" -fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-diff@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" fast-json-stable-stringify@^2.0.0: version "2.0.0" @@ -418,117 +500,89 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -follow-redirects@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" - dependencies: - debug "^2.2.0" +fast-safe-stringify@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.4.tgz#4fe828718aa61dbcf9119c3c24e79cc4dea973b2" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" +fecha@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" -form-data@~2.0.0: +figures@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" + escape-string-regexp "^1.0.5" -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + flat-cache "^1.2.1" + object-assign "^4.0.1" -form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" -fresh@0.5.2: +fresh@^0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-uri@2: - version "2.0.1" - resolved "https://registry.npmjs.org/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59" - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "3" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.5.0: + version "11.7.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" pinkie-promise "^2.0.0" -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" has-ansi@^2.0.0: version "2.0.0" @@ -536,151 +590,136 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" -hipchat-notifier@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" +has@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: - lodash "^4.0.0" - request "^2.0.0" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - -hooks-fixed@2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz#20076daa07e77d8a6106883ce3f1722e051140b0" + function-bind "^1.1.1" -http-errors@1.6.2, http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" +http-assert@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" + deep-equal "~1.0.1" + http-errors "~1.6.1" -http-proxy-agent@1: - version "1.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a" +http-errors@1.6.3, http-errors@^1.2.8, http-errors@^1.3.1, http-errors@~1.6.1: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" dependencies: - agent-base "2" - debug "2" - extend "3" + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" +iconv-lite@0.4.23, iconv-lite@^0.4.17: + version "0.4.23" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + safer-buffer ">= 2.1.2 < 3" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" +ignore@^3.3.3: + version "3.3.10" + resolved "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" -httpntlm@1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" - dependencies: - httpreq ">=0.4.22" - underscore "~1.7.0" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -httpreq@>=0.4.22: - version "0.4.24" - resolved "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" +inflation@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" -https-proxy-agent@1: - version "1.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: - agent-base "2" - debug "2" - extend "3" + once "^1.3.0" + wrappy "1" -iconv-lite@0.4.15: - version "0.4.15" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +inherits@2, inherits@2.0.3, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +inquirer@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.1.0" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^5.5.2" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -iconv-lite@~0.4.13: - version "0.4.18" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" -inflection@~1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" -inflection@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e" +is-generator-function@^1.0.3: + version "1.0.7" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" -inherits@2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" -ip@1.0.1: +is-path-in-cwd@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + dependencies: + is-path-inside "^1.0.0" -ip@^1.1.2, ip@^1.1.4: - version "1.1.5" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" -ipaddr.js@1.5.2: - version "1.5.2" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-my-json-valid@^2.12.4: - version "2.17.1" - resolved "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" + has "^1.0.1" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" +is-resolvable@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" isarray@0.0.1: version "0.0.1" @@ -690,150 +729,167 @@ isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +js-yaml@^3.11.0: + version "3.12.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" -json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" +kareem@2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/kareem/-/kareem-2.2.1.tgz#9950809415aa3cde62ab43b4f7b919d99816e015" -kareem@1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/kareem/-/kareem-1.5.0.tgz#e3e4101d9dcfde299769daf4b4db64d895d17448" +keygrip@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" +koa-bodyparser@4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.2.1.tgz#4d7dacb5e6db1106649b595d9e5ccb158b6f3b29" dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -libbase64@0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" + co-body "^6.0.0" + copy-to "^2.0.1" -libmime@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" +koa-compose@^3.0.0: + version "3.2.1" + resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" dependencies: - iconv-lite "0.4.15" - libbase64 "0.1.0" - libqp "1.1.0" + any-promise "^1.1.0" -libqp@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" +koa-compose@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" -lodash.get@4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" +koa-convert@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0: - version "4.17.4" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +koa-is-json@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" -log4js@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/log4js/-/log4js-2.4.1.tgz#b0c4e88133e0e3056afdc6f91f7f377576158778" +koa-router@7.4.0: + version "7.4.0" + resolved "https://registry.npmjs.org/koa-router/-/koa-router-7.4.0.tgz#aee1f7adc02d5cb31d7d67465c9eacc825e8c5e0" dependencies: - circular-json "^0.4.0" - date-format "^1.2.0" debug "^3.1.0" - semver "^5.3.0" - streamroller "^0.7.0" - optionalDependencies: - axios "^0.15.3" - hipchat-notifier "^1.1.0" - loggly "^1.1.0" - mailgun-js "^0.7.0" - nodemailer "^2.5.0" - redis "^2.7.1" - slack-node "~0.2.0" - -loggly@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee" + http-errors "^1.3.1" + koa-compose "^3.0.0" + methods "^1.0.1" + path-to-regexp "^1.1.1" + urijs "^1.19.0" + +koa@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/koa/-/koa-2.5.1.tgz#79f8b95f8d72d04fe9a58a8da5ebd6d341103f9c" + dependencies: + accepts "^1.2.2" + content-disposition "~0.5.0" + content-type "^1.0.0" + cookies "~0.7.0" + debug "*" + delegates "^1.0.0" + depd "^1.1.0" + destroy "^1.0.3" + error-inject "~1.0.0" + escape-html "~1.0.1" + fresh "^0.5.2" + http-assert "^1.1.0" + http-errors "^1.2.8" + is-generator-function "^1.0.3" + koa-compose "^4.0.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + mime-types "^2.0.7" + on-finished "^2.1.0" + only "0.0.2" + parseurl "^1.3.0" + statuses "^1.2.0" + type-is "^1.5.5" + vary "^1.0.0" + +kuler@0.0.x: + version "0.0.0" + resolved "https://registry.npmjs.org/kuler/-/kuler-0.0.0.tgz#b66bb46b934e550f59d818848e0abba4f7f5553c" + dependencies: + colornames "0.0.2" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: - json-stringify-safe "5.0.x" - request "2.75.x" - timespan "2.3.x" + prelude-ls "~1.1.2" + type-check "~0.3.2" -lru-cache@~2.6.5: - version "2.6.5" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5" +lodash.get@4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" -mailcomposer@4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" - dependencies: - buildmail "4.0.1" - libmime "3.0.0" +lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.10" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" -mailgun-js@^0.7.0: - version "0.7.15" - resolved "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.7.15.tgz#ee366a20dac64c3c15c03d6c1b3e0ed795252abb" +logform@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/logform/-/logform-1.9.1.tgz#58b29d7b11c332456d7a217e17b48a13ad69d60a" dependencies: - async "~2.1.2" - debug "~2.2.0" - form-data "~2.1.1" - inflection "~1.10.0" - is-stream "^1.1.0" - path-proxy "~1.0.0" - proxy-agent "~2.0.0" - q "~1.4.0" - tsscmp "~1.0.0" + colors "^1.2.1" + fast-safe-stringify "^2.0.4" + fecha "^2.3.3" + ms "^2.1.1" + triple-beam "^1.2.0" media-typer@0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -methods@~1.1.2: +methods@^1.0.1: version "1.1.2" resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" +mime-types@^2.0.7, mime-types@~2.1.18: + version "2.1.18" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: - mime-db "~1.30.0" + mime-db "~1.33.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" @@ -845,147 +901,111 @@ mkdirp@^0.5.1: dependencies: minimist "0.0.8" -mongodb-core@2.1.18: - version "2.1.18" - resolved "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz#4c46139bdf3a1f032ded91db49f38eec01659050" +mongodb-core@3.0.9: + version "3.0.9" + resolved "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.9.tgz#8327410c88811013fb3e4ac7c4c670f324349be1" dependencies: bson "~1.0.4" - require_optional "~1.0.0" + require_optional "^1.0.1" -mongodb@2.2.34: - version "2.2.34" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz#a34f59bbeb61754aec432de72c3fe21526a44c1a" +mongodb@3.0.10: + version "3.0.10" + resolved "https://registry.npmjs.org/mongodb/-/mongodb-3.0.10.tgz#f948cb9595adcbfcad7444f6b24a040b653b23e8" dependencies: - es6-promise "3.2.1" - mongodb-core "2.1.18" - readable-stream "2.2.7" + mongodb-core "3.0.9" + +mongoose-legacy-pluralize@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" -mongoose@4.13.9: - version "4.13.9" - resolved "https://registry.npmjs.org/mongoose/-/mongoose-4.13.9.tgz#ca4d99aed6e36e87854c2295387e7ea17966cfe3" +mongoose@5.1.7: + version "5.1.7" + resolved "https://registry.npmjs.org/mongoose/-/mongoose-5.1.7.tgz#b13463278cc455b3e19031b96cde9c2010095f6c" dependencies: - async "2.1.4" - bson "~1.0.4" - hooks-fixed "2.0.2" - kareem "1.5.0" + async "2.6.1" + bson "~1.0.5" + kareem "2.2.1" lodash.get "4.4.2" - mongodb "2.2.34" - mpath "0.3.0" - mpromise "0.5.5" - mquery "2.3.3" + mongodb "3.0.10" + mongoose-legacy-pluralize "1.0.2" + mpath "0.4.1" + mquery "3.0.0" ms "2.0.0" - muri "1.3.0" regexp-clone "0.0.1" sliced "1.0.1" -mpath@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz#7a58f789e9b5fd3c94520634157960f26bd5ef44" - -mpromise@0.5.5: - version "0.5.5" - resolved "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" +mpath@0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/mpath/-/mpath-0.4.1.tgz#ed10388430380bf7bbb5be1391e5d6969cb08e89" -mquery@2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz#221412e5d4e7290ca5582dd16ea8f190a506b518" +mquery@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz#e5f387dbabc0b9b69859e550e810faabe0ceabb0" dependencies: bluebird "3.5.0" debug "2.6.9" regexp-clone "0.0.1" sliced "0.0.5" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -muri@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz#aeccf3db64c56aa7c5b34e00f95b7878527a4721" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" negotiator@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" -netmask@~1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - -node-fetch@1.7.3: - version "1.7.3" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - -nodemailer-direct-transport@3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" - dependencies: - nodemailer-shared "1.1.0" - smtp-connection "2.12.0" +nice-try@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" -nodemailer-fetch@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -nodemailer-shared@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" - dependencies: - nodemailer-fetch "1.6.0" +object-keys@^1.0.8: + version "1.0.12" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" -nodemailer-smtp-pool@2.8.2: - version "2.8.2" - resolved "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" +on-finished@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" + ee-first "1.1.1" -nodemailer-smtp-transport@2.7.2: - version "2.7.2" - resolved "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" + wrappy "1" -nodemailer-wellknown@0.1.10: - version "0.1.10" - resolved "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" +one-time@0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e" -nodemailer@^2.5.0: - version "2.7.2" - resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" dependencies: - libmime "3.0.0" - mailcomposer "4.0.1" - nodemailer-direct-transport "3.3.2" - nodemailer-shared "1.1.0" - nodemailer-smtp-pool "2.8.2" - nodemailer-smtp-transport "2.7.2" - socks "1.1.9" - -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + mimic-fn "^1.0.0" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" +only@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" -optionator@^0.8.1: +optionator@^0.8.2: version "0.8.2" resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -996,47 +1016,35 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" -pac-proxy-agent@1: - version "1.1.0" - resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d" - dependencies: - agent-base "2" - debug "2" - extend "3" - get-uri "2" - http-proxy-agent "1" - https-proxy-agent "1" - pac-resolver "~2.0.0" - raw-body "2" - socks-proxy-agent "2" - -pac-resolver@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd" - dependencies: - co "~3.0.6" - degenerator "~1.0.2" - ip "1.0.1" - netmask "~1.0.4" - thunkify "~2.1.1" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -parseurl@~1.3.2: +parseurl@^1.3.0: version "1.3.2" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" -path-proxy@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e" - dependencies: - inflection "~1.3.0" +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-to-regexp@^1.1.1: + version "1.7.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" pinkie-promise@^2.0.0: version "2.0.1" @@ -1048,105 +1056,49 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -proxy-addr@~2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.5.2" +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" -proxy-agent@~2.0.0: +progress@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499" - dependencies: - agent-base "2" - debug "2" - extend "3" - http-proxy-agent "1" - https-proxy-agent "1" - lru-cache "~2.6.5" - pac-proxy-agent "1" - socks-proxy-agent "2" - -punycode@1.4.1, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -q@~1.4.0: - version "1.4.1" - resolved "https://registry.npmjs.org/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - -qs@6.5.1, qs@~6.5.1: - version "6.5.1" - resolved "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~6.2.0: - version "6.2.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" -raw-body@2, raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" +qs@^6.5.2: + version "6.5.2" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +raw-body@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" dependencies: bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" + http-errors "1.6.3" + iconv-lite "0.4.23" unpipe "1.0.0" -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@2, readable-stream@^2.3.0: - version "2.3.3" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" +readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" + process-nextick-args "~2.0.0" safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@2.2.7: - version "2.2.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1" - dependencies: - buffer-shims "~1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~1.0.0" - util-deprecate "~1.0.1" - -readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" + string_decoder "~1.1.1" util-deprecate "~1.0.1" redis-commands@^1.2.0: @@ -1157,7 +1109,7 @@ redis-parser@^2.6.0: version "2.6.0" resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" -redis@2.8.0, redis@^2.7.1: +redis@2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" dependencies: @@ -1169,135 +1121,106 @@ regexp-clone@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" -request@2.75.x: - version "2.75.0" - resolved "https://registry.npmjs.org/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@^2.0.0, request@^2.74.0: - version "2.83.0" - resolved "https://registry.npmjs.org/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -requestretry@^1.2.2: - version "1.12.2" - resolved "https://registry.npmjs.org/requestretry/-/requestretry-1.12.2.tgz#13ce38a4ce4e809f3c9ec6d4ca3b7b9ba4acf26c" - dependencies: - extend "^3.0.0" - lodash "^4.15.0" - request "^2.74.0" - when "^3.7.7" - -require_optional@~1.0.0: +regexp.prototype.flags@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" + dependencies: + define-properties "^1.1.2" + +regexpp@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +require_optional@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" dependencies: resolve-from "^2.0.0" semver "^5.1.0" +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +rimraf@^2.2.8: + version "2.6.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rxjs@^5.5.2: + version "5.5.11" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" + dependencies: + symbol-observable "1.0.1" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + sax@>=0.6.0: version "1.2.4" resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -semver@^5.1.0, semver@^5.3.0: +semver@^5.1.0: version "5.4.1" resolved "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -semver@~5.0.1: - version "5.0.3" - resolved "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" +semver@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -send@0.16.1: - version "0.16.1" - resolved "https://registry.npmjs.org/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" - dependencies: - debug "2.6.9" - depd "~1.1.1" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" dependencies: - encodeurl "~1.0.1" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.1" + shebang-regex "^1.0.0" -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" +signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -slack-node@~0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" dependencies: - requestretry "^1.2.2" + is-fullwidth-code-point "^2.0.0" sliced@0.0.5: version "0.0.5" @@ -1307,141 +1230,103 @@ sliced@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" -smart-buffer@^1.0.13, smart-buffer@^1.0.4: - version "1.1.15" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - -smtp-connection@2.12.0: - version "2.12.0" - resolved "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" - dependencies: - httpntlm "1.6.1" - nodemailer-shared "1.1.0" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" +"statuses@>= 1.4.0 < 2", statuses@^1.2.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" -socks-proxy-agent@2: +string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: - agent-base "2" - extend "3" - socks "~1.1.5" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" -socks@1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" - dependencies: - ip "^1.1.2" - smart-buffer "^1.0.4" - -socks@~1.1.5: - version "1.1.10" - resolved "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - -source-map@~0.5.6: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -"statuses@>= 1.3.1 < 2": - version "1.4.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -streamroller@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b" +string.prototype.matchall@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz#2af8fe3d2d6dc53ca2a59bd376b089c3c152b3c8" dependencies: - date-format "^1.2.0" - debug "^3.1.0" - mkdirp "^0.5.1" - readable-stream "^2.3.0" + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + has-symbols "^1.0.0" + regexp.prototype.flags "^1.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string_decoder@~1.0.0, string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-json-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -thunkify@~2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" +supports-color@^5.3.0: + version "5.4.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" -timespan@2.3.x: - version "2.3.0" - resolved "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" -tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" +table@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" dependencies: - punycode "^1.4.1" + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" -tsscmp@~1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" +text-hex@0.0.x: + version "0.0.0" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz#578fbc85a6a92636e42dd17b41d0218cce9eb2b3" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +triple-beam@^1.2.0, triple-beam@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" type-check@~0.3.2: version "0.3.2" @@ -1449,53 +1334,76 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.15: - version "1.6.15" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" +type-is@^1.5.5, type-is@^1.6.16: + version "1.6.16" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" dependencies: media-typer "0.3.0" - mime-types "~2.1.15" + mime-types "~2.1.18" -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +uri-js@^4.2.1: + version "4.2.2" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + +urijs@^1.19.0: + version "1.19.1" + resolved "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - -vary@~1.1.2: +vary@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + isexe "^2.0.0" -when@^3.7.7: - version "3.7.8" - resolved "https://registry.npmjs.org/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" +winston-transport@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.2.0.tgz#a20be89edf2ea2ca39ba25f3e50344d73e6520e5" + dependencies: + readable-stream "^2.3.6" + triple-beam "^1.2.0" + +winston@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/winston/-/winston-3.0.0.tgz#1f0b24a96586798bcf0cd149fb07ed47cb01a1b2" + dependencies: + async "^2.6.0" + diagnostics "^1.0.1" + is-stream "^1.1.0" + logform "^1.9.0" + one-time "0.0.4" + readable-stream "^2.3.6" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.2.0" wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + xml2js@0.4.19: version "0.4.19" resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" @@ -1506,11 +1414,3 @@ xml2js@0.4.19: xmlbuilder@~9.0.1: version "9.0.4" resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f" - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"