diff --git a/index.js b/index.js index 7c010f0..693461d 100644 --- a/index.js +++ b/index.js @@ -8,7 +8,11 @@ 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('/list', require('./routes/list')); app.get('/bilibili', require('./routes/bilibili')); -app.get('/video/bilibili', require('./routes/video-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 diff --git a/package.json b/package.json index b10e7ef..e6b42c8 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,12 @@ "license": "MIT", "devDependencies": {}, "dependencies": { - "blueimp-md5": "^2.10.0", - "express": "^4.15.4", - "log4js": "^2.3.3", - "mongoose": "^4.11.10", - "node-fetch": "^1.7.2", - "redis": "^2.8.0", - "xml2js": "^0.4.19" + "blueimp-md5": "2.10.0", + "express": "4.16.2", + "log4js": "2.4.1", + "mongoose": "4.13.9", + "node-fetch": "1.7.3", + "redis": "2.8.0", + "xml2js": "0.4.19" } } diff --git a/routes/all.js b/routes/all.js index 5f97ccb..ad574da 100644 --- a/routes/all.js +++ b/routes/all.js @@ -5,7 +5,7 @@ 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": "Rejected for black referer."}`); + res.send(`{"code": 6, "msg": "black referer"}`); return; } diff --git a/routes/v2/bilibili.js b/routes/v2/bilibili.js new file mode 100644 index 0000000..75b973f --- /dev/null +++ b/routes/v2/bilibili.js @@ -0,0 +1,122 @@ +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, + 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, + 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 new file mode 100644 index 0000000..4c4ebdf --- /dev/null +++ b/routes/v2/get.js @@ -0,0 +1,53 @@ +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); + + res.send(JSON.stringify({ + code: 0, + danmaku: max ? data.slice(0, max) : data + })); + } + 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, + 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 new file mode 100644 index 0000000..2d328da --- /dev/null +++ b/routes/v2/post.js @@ -0,0 +1,117 @@ +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/yarn.lock b/yarn.lock index f8d02c7..8161006 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -accepts@~1.3.3: +accepts@~1.3.4: version "1.3.4" resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" dependencies: @@ -20,9 +20,14 @@ agent-base@2: extend "~3.0.0" semver "~5.0.1" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" ansi-regex@^2.0.0: version "2.1.1" @@ -49,15 +54,21 @@ assert-plus@^0.2.0: resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" ast-types@0.x.x: - version "0.9.12" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.9.12.tgz#b136300d67026625ae15326982ca9918e5db73c9" + version "0.10.1" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" -async@2.1.4, async@~2.1.2: +async@2.1.4: version "2.1.4" resolved "https://registry.npmjs.org/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" dependencies: lodash "^4.14.0" +async@~2.1.2: + version "2.1.5" + resolved "https://registry.npmjs.org/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" + 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" @@ -66,7 +77,11 @@ aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" @@ -88,20 +103,47 @@ bl@~1.1.2: dependencies: readable-stream "~2.0.5" -bluebird@2.10.2: - version "2.10.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz#024a5517295308857f14f91f1106fc3b555f446b" +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: +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" 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" + bson@~1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c" @@ -122,14 +164,18 @@ buildmail@4.0.1: nodemailer-shared "1.1.0" punycode "1.4.1" -bytes@2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz#4c9423ea2d252c270c41b2bdefeff9bb6b62c06a" +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" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + chalk@^1.1.1: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -140,6 +186,14 @@ 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" + +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" @@ -151,16 +205,16 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: delayed-stream "~1.0.0" commander@^2.9.0: - version "2.11.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + version "2.13.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" content-disposition@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" -content-type@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" cookie-signature@1.0.6: version "1.0.6" @@ -180,6 +234,12 @@ cryptiles@2.x.x: dependencies: boom "2.x.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" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -190,13 +250,19 @@ 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" -date-format@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/date-format/-/date-format-1.1.0.tgz#be7df68ec270fd9ec78482bd85be68c8fb8fbebc" +date-format@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" + +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" + dependencies: + ms "2.0.0" -debug@2, debug@2.6.8, debug@^2.2.0, debug@^2.6.8: - version "2.6.8" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" +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" @@ -222,10 +288,6 @@ delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" -depd@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" - depd@1.1.1, depd@~1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" @@ -271,77 +333,87 @@ escape-string-regexp@^1.0.2: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@1.x.x: - version "1.8.1" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + version "1.9.0" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" + esprima "^3.1.3" + estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.2.0" + source-map "~0.5.6" -esprima@3.x.x: +esprima@3.x.x, esprima@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" -esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" esutils@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" -express@^4.15.4: - version "4.15.4" - resolved "https://registry.npmjs.org/express/-/express-4.15.4.tgz#032e2253489cf8fce02666beca3d11ed7a2daed1" +express@4.16.2: + version "4.16.2" + resolved "https://registry.npmjs.org/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" dependencies: - accepts "~1.3.3" + accepts "~1.3.4" array-flatten "1.1.1" + body-parser "1.18.2" content-disposition "0.5.2" - content-type "~1.0.2" + content-type "~1.0.4" cookie "0.3.1" cookie-signature "1.0.6" - debug "2.6.8" + debug "2.6.9" depd "~1.1.1" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.8.0" - finalhandler "~1.0.4" - fresh "0.5.0" + 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.1" + parseurl "~1.3.2" path-to-regexp "0.1.7" - proxy-addr "~1.1.5" - qs "6.5.0" + proxy-addr "~2.0.2" + qs "6.5.1" range-parser "~1.2.0" - send "0.15.4" - serve-static "1.12.4" - setprototypeof "1.0.3" + 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.0" - vary "~1.1.1" + utils-merge "1.0.1" + vary "~1.1.2" -extend@3, extend@^3.0.0, extend@~3.0.0: +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, extsprintf@^1.2.0: +extsprintf@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +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-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -350,15 +422,15 @@ 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.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz#18574f2e7c4b98b8ae3b230c21f201f31bdb3fb7" +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" dependencies: - debug "2.6.8" + debug "2.6.9" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.1" + parseurl "~1.3.2" statuses "~1.3.1" unpipe "~1.0.0" @@ -388,13 +460,21 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -forwarded@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" -fresh@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" +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" @@ -430,6 +510,10 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" @@ -439,6 +523,13 @@ har-validator@~2.0.6: is-my-json-valid "^2.12.4" 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" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -454,6 +545,15 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +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" + hipchat-notifier@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" @@ -465,20 +565,15 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hooks-fixed@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" -http-errors@1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" - dependencies: - depd "1.1.0" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" +hooks-fixed@2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz#20076daa07e77d8a6106883ce3f1722e051140b0" -http-errors@~1.6.2: +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" dependencies: @@ -503,6 +598,14 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +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" + httpntlm@1.6.1: version "1.6.1" resolved "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" @@ -526,7 +629,11 @@ iconv-lite@0.4.15: version "0.4.15" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" -iconv-lite@0.4.18, iconv-lite@~0.4.13: +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +iconv-lite@~0.4.13: version "0.4.18" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" @@ -546,17 +653,17 @@ ip@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590" -ip@^1.1.2: +ip@^1.1.2, ip@^1.1.4: version "1.1.5" resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" -ipaddr.js@1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" +ipaddr.js@1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" is-my-json-valid@^2.12.4: - version "2.16.1" - resolved "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" + version "2.17.1" + resolved "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" @@ -591,6 +698,10 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +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" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -639,18 +750,23 @@ libqp@1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" +lodash.get@4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + 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" -log4js@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/log4js/-/log4js-2.3.3.tgz#18bac0b5b1052d1078d25e7d9b0cf298f499d915" +log4js@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/log4js/-/log4js-2.4.1.tgz#b0c4e88133e0e3056afdc6f91f7f377576158778" dependencies: - date-format "^1.1.0" - debug "^2.6.8" + circular-json "^0.4.0" + date-format "^1.2.0" + debug "^3.1.0" semver "^5.3.0" - streamroller "^0.5.2" + streamroller "^0.7.0" optionalDependencies: axios "^0.15.3" hipchat-notifier "^1.1.0" @@ -709,15 +825,15 @@ mime-db@~1.30.0: version "1.30.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.7: +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" dependencies: mime-db "~1.30.0" -mime@1.3.4: - version "1.3.4" - resolved "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +mime@1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" minimist@0.0.8: version "0.0.8" @@ -729,35 +845,36 @@ mkdirp@^0.5.1: dependencies: minimist "0.0.8" -mongodb-core@2.1.15: - version "2.1.15" - resolved "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.15.tgz#841f53b87ffff4c7458189c35c8ae827e1169764" +mongodb-core@2.1.18: + version "2.1.18" + resolved "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz#4c46139bdf3a1f032ded91db49f38eec01659050" dependencies: bson "~1.0.4" require_optional "~1.0.0" -mongodb@2.2.31: - version "2.2.31" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-2.2.31.tgz#1940445c661e19217bb3bf8245d9854aaef548db" +mongodb@2.2.34: + version "2.2.34" + resolved "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz#a34f59bbeb61754aec432de72c3fe21526a44c1a" dependencies: es6-promise "3.2.1" - mongodb-core "2.1.15" + mongodb-core "2.1.18" readable-stream "2.2.7" -mongoose@^4.11.10: - version "4.11.10" - resolved "https://registry.npmjs.org/mongoose/-/mongoose-4.11.10.tgz#f68b131df09893b9f0073f46d5dcab0116789f56" +mongoose@4.13.9: + version "4.13.9" + resolved "https://registry.npmjs.org/mongoose/-/mongoose-4.13.9.tgz#ca4d99aed6e36e87854c2295387e7ea17966cfe3" dependencies: async "2.1.4" bson "~1.0.4" - hooks-fixed "2.0.0" + hooks-fixed "2.0.2" kareem "1.5.0" - mongodb "2.2.31" + lodash.get "4.4.2" + mongodb "2.2.34" mpath "0.3.0" mpromise "0.5.5" - mquery "2.3.1" + mquery "2.3.3" ms "2.0.0" - muri "1.2.2" + muri "1.3.0" regexp-clone "0.0.1" sliced "1.0.1" @@ -769,12 +886,12 @@ mpromise@0.5.5: version "0.5.5" resolved "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" -mquery@2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/mquery/-/mquery-2.3.1.tgz#9ab36749714800ff0bb53a681ce4bc4d5f07c87b" +mquery@2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz#221412e5d4e7290ca5582dd16ea8f190a506b518" dependencies: - bluebird "2.10.2" - debug "2.6.8" + bluebird "3.5.0" + debug "2.6.9" regexp-clone "0.0.1" sliced "0.0.5" @@ -786,9 +903,9 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -muri@1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/muri/-/muri-1.2.2.tgz#63198132650db08a04cc79ccd00dd389afd2631c" +muri@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz#aeccf3db64c56aa7c5b34e00f95b7878527a4721" negotiator@0.6.1: version "0.6.1" @@ -798,9 +915,9 @@ netmask@~1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" -node-fetch@^1.7.2: - version "1.7.2" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" +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" @@ -858,7 +975,7 @@ nodemailer@^2.5.0: nodemailer-smtp-transport "2.7.2" socks "1.1.9" -oauth-sign@~0.8.1: +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" @@ -903,9 +1020,9 @@ pac-resolver@~2.0.0: netmask "~1.0.4" thunkify "~2.1.1" -parseurl@~1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" +parseurl@~1.3.2: + 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" @@ -917,6 +1034,10 @@ 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" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -935,12 +1056,12 @@ 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@~1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" +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.0" - ipaddr.js "1.4.0" + forwarded "~0.1.2" + ipaddr.js "1.5.2" proxy-agent@~2.0.0: version "2.0.0" @@ -963,9 +1084,9 @@ q@~1.4.0: version "1.4.1" resolved "https://registry.npmjs.org/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qs@6.5.0: - version "6.5.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" +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" @@ -975,13 +1096,13 @@ range-parser@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -raw-body@2: - version "2.3.0" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.3.0.tgz#f79ce1acacaba5b6362d33454d785d7129f4bc67" +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" dependencies: - bytes "2.5.0" - http-errors "1.6.1" - iconv-lite "0.4.18" + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" unpipe "1.0.0" readable-stream@1.1.x: @@ -1036,7 +1157,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.7.1, redis@^2.8.0: +redis@2.8.0, redis@^2.7.1: version "2.8.0" resolved "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" dependencies: @@ -1048,7 +1169,7 @@ 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, request@^2.0.0, request@^2.74.0: +request@2.75.x: version "2.75.0" resolved "https://registry.npmjs.org/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" dependencies: @@ -1074,6 +1195,33 @@ request@2.75.x, request@^2.0.0, request@^2.74.0: 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" @@ -1094,7 +1242,7 @@ 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.0, safe-buffer@~5.1.1: +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: version "5.1.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -1110,37 +1258,41 @@ semver@~5.0.1: version "5.0.3" resolved "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" -send@0.15.4: - version "0.15.4" - resolved "https://registry.npmjs.org/send/-/send-0.15.4.tgz#985faa3e284b0273c793364a35c6737bd93905b9" +send@0.16.1: + version "0.16.1" + resolved "https://registry.npmjs.org/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" dependencies: - debug "2.6.8" + debug "2.6.9" depd "~1.1.1" destroy "~1.0.4" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.8.0" - fresh "0.5.0" + etag "~1.8.1" + fresh "0.5.2" http-errors "~1.6.2" - mime "1.3.4" + mime "1.4.1" ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" statuses "~1.3.1" -serve-static@1.12.4: - version "1.12.4" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz#9b6aa98eeb7253c4eedc4c1f6fdbca609901a961" +serve-static@1.13.1: + version "1.13.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.15.4" + parseurl "~1.3.2" + send "0.16.1" setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + slack-node@~0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" @@ -1155,7 +1307,7 @@ sliced@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" -smart-buffer@^1.0.4: +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" @@ -1172,6 +1324,12 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +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" + socks-proxy-agent@2: version "2.1.1" resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3" @@ -1180,18 +1338,23 @@ socks-proxy-agent@2: extend "3" socks "~1.1.5" -socks@1.1.9, socks@~1.1.5: +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" -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" +socks@~1.1.5: + version "1.1.10" + resolved "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" dependencies: - amdefine ">=0.0.4" + 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" @@ -1207,16 +1370,20 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -"statuses@>= 1.3.1 < 2", statuses@~1.3.1: +"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.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/streamroller/-/streamroller-0.5.2.tgz#2bfe650c25b6a90ab25515a90bb5b9b94e398f0f" +streamroller@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b" dependencies: - date-format "^1.1.0" - debug "^2.6.8" + date-format "^1.2.0" + debug "^3.1.0" mkdirp "^0.5.1" readable-stream "^2.3.0" @@ -1230,7 +1397,7 @@ string_decoder@~1.0.0, string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -1252,9 +1419,9 @@ timespan@2.3.x: version "2.3.0" resolved "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +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" dependencies: punycode "^1.4.1" @@ -1262,6 +1429,12 @@ tsscmp@~1.0.0: version "1.0.5" resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" +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" + tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" @@ -1295,13 +1468,17 @@ 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.0: - version "1.0.0" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -vary@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" +uuid@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" verror@1.10.0: version "1.10.0" @@ -1319,7 +1496,7 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -xml2js@^0.4.19: +xml2js@0.4.19: version "0.4.19" resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" dependencies: