diff --git a/api/api.js b/api/api.js index 36c35e0..2ba505a 100644 --- a/api/api.js +++ b/api/api.js @@ -11,12 +11,12 @@ var faker = require('faker'); //database stuff var ObjectID = require('mongodb').ObjectID; -var mongo = require('mongodb').MongoClient; +var MongoClient = require('mongodb').MongoClient; var Logger = require('mongodb').Logger; //file uploading stuff var multer = require('multer'); -var upload = multer ({ dest: 'uploads/'}); +var upload = multer ({ dest: __dirname + '/uploads/'}); //include config file var config = require('./server.conf'); @@ -28,6 +28,11 @@ var jwt = require('jsonwebtoken'); var swaggerJSDoc = require('swagger-jsdoc'); +// var dbname = 'mongodb://localhost:27017/Pixidb'; +var dbname = 'mongodb://pixidb:27017/Pixidb'; +var mongo = new MongoClient(dbname, { useNewUrlParser: true, useUnifiedTopology: true }); +var db; + //create express server and register global middleware var app = express(); @@ -51,21 +56,17 @@ app.listen(8080, function(){ }); // test db connection -mongo.connect("mongodb://pixidb:27017/Pixidb", function(err, db) { +mongo.connect(function(err, client) { if(!err) { console.log("We are connected"); } + db = client.db(); }); // functions -function api_authenticate(user, pass, req, res){ - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ +function api_authenticate(user, pass, req, res){ //Logger.setLevel('debug'); - if(err){ - console.log('MongoDB connection error...'); - return err; - } console.log('user ' + user + ' pass ' + pass); db.collection('users').findOne({email: user, password: pass },function(err, result){ if(err){ @@ -84,19 +85,12 @@ function api_authenticate(user, pass, req, res){ else res.status(202).json({message: 'sorry pal, invalid login' }); - }); - - }); + }); } function api_register(user, pass, req, res){ console.log('in register'); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ //Logger.setLevel('debug'); - if(err){ - console.log('MongoDB connection error...'); - return err; - } console.log('user ' + user + ' pass ' + pass); user = user.toLowerCase(); db.collection('users').findOne({ email: user },function(err, result){ @@ -117,12 +111,12 @@ function api_register(user, pass, req, res){ name = name.join(''); console.log(name); db.collection("counters") - .findAndModify( + .findOneAndUpdate( { "_id": "userid" }, - [], { "$inc" : { "seq": 1 } }, + { upsert: true, returnOriginal: false }, function(err, doc){ - db.collection('users').insert({ + db.collection('users').insertOne({ _id: doc.value.seq, email: user, password: pass, @@ -149,7 +143,6 @@ function api_register(user, pass, req, res){ } // else }); //find one user - }); } @@ -208,7 +201,6 @@ function random_sentence() { // picture related. app.get('/api/pictures', api_token_check, function(req, res){ console.log('in pics'); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('pictures').find().sort({created_date: -1 }).toArray(function(err, pictures){ if(pictures) { console.log(pictures); @@ -216,13 +208,10 @@ app.get('/api/pictures', api_token_check, function(req, res){ } }) - }) - }); app.get('/api/picture/:pictureid', api_token_check, function(req, res){ console.log('in pics'); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('pictures').findOne({ _id : Number(req.params.pictureid) }, function(err, picture){ if(picture) { console.log(picture); @@ -230,8 +219,6 @@ app.get('/api/picture/:pictureid', api_token_check, function(req, res){ } }) - }) - }); app.delete('/api/picture/delete', api_token_check, function(req, res) { @@ -240,8 +227,7 @@ app.delete('/api/picture/delete', api_token_check, function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ - db.collection('pictures').remove( { _id : Number(req.query.picture_id) }, + db.collection('pictures').deleteOne( { _id : Number(req.query.picture_id) }, function(err, delete_photo){ if (err) { return err } //console.log(delete_photo); @@ -252,9 +238,7 @@ app.delete('/api/picture/delete', api_token_check, function(req, res) { res.json('Photo ' + req.query.picture_id + ' deleted!'); } }) - }) } - }); app.get('/api/picture/delete/:picture', function(req, res) { @@ -263,8 +247,7 @@ app.get('/api/picture/delete/:picture', function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ - db.collection('pictures').remove( { _id : Number(req.params.picture) }, + db.collection('pictures').deleteOne( { _id : Number(req.params.picture) }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -276,13 +259,11 @@ app.get('/api/picture/delete/:picture', function(req, res) { console.log(err); } }) - }) } }); app.get('/api/picture/:picture_id/likes', api_token_check, function(req, res){ console.log('pic id ' + req.params.picture_id); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('likes').find({ picture_id : Number(req.params.picture_id)}).toArray(function(err, likes){ if(err) { return err }; @@ -292,13 +273,11 @@ app.get('/api/picture/:picture_id/likes', api_token_check, function(req, res){ } }) - }) }); app.get('/api/picture/:picture_id/loves', api_token_check, function(req, res){ console.log('pic id ' + req.params.picture_id); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('loves').find({ picture_id : Number(req.params.picture_id)}).toArray(function(err, loves){ if(err) { return err }; @@ -308,7 +287,6 @@ app.get('/api/picture/:picture_id/loves', api_token_check, function(req, res){ } }) - }) }); @@ -320,7 +298,6 @@ app.get('/api/pictures/love', api_token_check, function(req, res){ } else { //db call- if like exists, delete it, if not exists, add it. - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ // see if user has money first. console.log(req.user.user.email); db.collection('users').findOne( { "email" : req.user.user.email }, function(err, usermoney) { @@ -328,7 +305,7 @@ app.get('/api/pictures/love', api_token_check, function(req, res){ console.log('account ' + JSON.stringify(usermoney)); if(usermoney.account_balance >= .05) { //give money to the photo console.log('in create query ' + JSON.stringify(usermoney)); - db.collection('loves').insert({ + db.collection('loves').insertOne({ 'user_id': req.user.user._id, 'picture_id': req.query.picture_id, 'amount': .05 @@ -344,8 +321,7 @@ app.get('/api/pictures/love', api_token_check, function(req, res){ }) console.log(req.user.user._id); db.collection('users') - .findAndModify( { "_id" : req.user.user._id }, - [], + .findOneAndUpdate( { "_id" : req.user.user._id }, { "$inc": { "account_balance" : -.05 } }, function(err, userupdate){ if(err) { return err } @@ -364,7 +340,6 @@ app.get('/api/pictures/love', api_token_check, function(req, res){ }) - }) } }); @@ -377,7 +352,6 @@ app.get('/api/pictures/like', api_token_check, function(req, res){ } else { //db call- if like exists, delete it, if not exists, add it. - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('likes').findOne( { 'user_id' : req.user.user._id, 'picture_id' : req.query.picture_id }, function(err, like) { @@ -385,7 +359,7 @@ app.get('/api/pictures/like', api_token_check, function(req, res){ if(err) { return err }; if(!like) { //brand new like console.log('in create query ' + like); - db.collection('likes').insert({ + db.collection('likes').insertOne({ 'user_id': req.user.user._id, 'picture_id': req.query.picture_id }, function(err, new_like) { @@ -408,7 +382,7 @@ app.get('/api/pictures/like', api_token_check, function(req, res){ else if(like) { //remove old like console.log('in delete query ' + like); //res.json('already liked'); - db.collection('likes').remove({ + db.collection('likes').deleteOne({ 'user_id': req.user.user._id, 'picture_id': req.query.picture_id }, function(err, remove_like){ @@ -429,8 +403,6 @@ app.get('/api/pictures/like', api_token_check, function(req, res){ } }) - - }) } }); app.post('/api/picture/upload', api_token_check, upload.single('file'), function(req, res, next){ @@ -443,16 +415,15 @@ app.post('/api/picture/upload', api_token_check, upload.single('file'), function console.log(req.file); console.log(req.file.originalname) var description = random_sentence(); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ var name = randomWords({ exactly: 2 }); name = name.join(' '); db.collection("counters") - .findAndModify( + .findOneAndUpdate( { "_id": "pictureid" }, - [], { "$inc" : { "seq": 1 } }, + { upsert: true, returnOriginal: false }, function(err, doc) { - db.collection('pictures').insert( { + db.collection('pictures').insertOne( { '_id' : doc.value.seq, 'title' : req.file.originalname, 'image_url': req.file.path, @@ -473,8 +444,6 @@ app.post('/api/picture/upload', api_token_check, upload.single('file'), function } }) // photo insert }) //sequence call back - }) //db - } //else }); @@ -508,14 +477,12 @@ app.get('/api/user/info', api_token_check, function(req, res){ } else { console.log('user id ' + req.user.user._id); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('users').find( { _id : req.user.user._id }).toArray(function(err, users){ if (err) { return err } if(users) { res.status(200).json(users); } }) - }); } }); @@ -537,7 +504,6 @@ app.put('/api/user/edit_info', api_token_check, function(req, res){ var setObj = { objForUpdate } console.log(setObj); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('users').findOneAndUpdate( { _id : Number(req.user.user._id) }, { $set: objForUpdate },function(err, userupdate){ if (err) { return err } @@ -546,13 +512,11 @@ app.put('/api/user/edit_info', api_token_check, function(req, res){ res.status(200).json({"message": "User Successfully Updated"}); } }) - }); } }); app.get('/api/other_user_info', api_token_check, function(req, res){ if (!req.query.user_id) { res.status(202).json({ 'error' : ' missing user_id '});} - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('users').find( { _id : Number(req.query.user_id) }).toArray(function(err, user){ if (err) { return err } if(user) { @@ -566,13 +530,10 @@ app.get('/api/other_user_info', api_token_check, function(req, res){ } }) - }); - }); app.get('/api/user/pictures', api_token_check, function(req, res){ - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('pictures').find({ creator_id : req.user.user._id}).toArray(function(err, pictures){ if(err) { return err }; @@ -582,13 +543,11 @@ app.get('/api/user/pictures', api_token_check, function(req, res){ } }) - }) }); app.get('/api/user/likes', api_token_check, function(req, res){ console.log('like id ' + req.user._id); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('likes').find({ user_id : req.user.user._id}).toArray(function(err, likes){ if(err) { return err }; @@ -598,12 +557,10 @@ app.get('/api/user/likes', api_token_check, function(req, res){ } }) - }) }); app.get('/api/user/loves', api_token_check, function(req, res){ console.log('love id ' + req.user.user._id); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('loves').find({ user_id : req.user.user._id}).toArray(function(err, loves){ if(err) { return err }; @@ -613,7 +570,6 @@ app.get('/api/user/loves', api_token_check, function(req, res){ } }) - }) }); @@ -631,17 +587,14 @@ app.get('/about', function(req, res){ app.get('/api/admin/all_users', api_token_check, function(req, res){ //res.json(req.user); - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('users').find().toArray(function(err, all_users){ if (err) { return err } if(all_users) { res.json(all_users); } }) - }); }); app.get('/api/admin/total_money', api_token_check, function(req, res){ - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ db.collection('loves').find().toArray(function(err, loves){ if (err) { return err } if(loves) { @@ -649,7 +602,6 @@ app.get('/api/admin/total_money', api_token_check, function(req, res){ res.json(total); } }) - }); }) @@ -680,8 +632,7 @@ app.delete('/api/delete_photo', api_token_check, function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ - db.collection('pictures').remove( { _id : req.query.picture_id }, + db.collection('pictures').deleteOne( { _id : req.query.picture_id }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -691,7 +642,6 @@ app.delete('/api/delete_photo', api_token_check, function(req, res) { res.json('Photo ' + req.query.picture_id + ' deleted!'); } }) - }) } }); @@ -703,8 +653,7 @@ app.get('/user_delete_photo/', function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect('mongodb://pixidb:27017/Pixidb', function(err, db){ - db.collection('pictures').remove( { _id : Number(req.query.picture_id) }, + db.collection('pictures').deleteOne( { _id : Number(req.query.picture_id) }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -716,7 +665,6 @@ app.get('/user_delete_photo/', function(req, res) { console.log(err); } }) - }) } }); diff --git a/api/package.json b/api/package.json index 8631663..4bba2ba 100644 --- a/api/package.json +++ b/api/package.json @@ -22,7 +22,7 @@ "image-downloader": "^3.2.2", "jsonwebtoken": "^7.4.1", "mongo-sequence": "^0.1.5", - "mongodb": "^2.2.11", + "mongodb": "^3.4.1", "multer": "^1.3.0", "nodemon": "^1.11.0", "passport": "^0.3.2", diff --git a/app/package-lock.json b/app/package-lock.json index 3660da2..9da932d 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -2,7 +2,13 @@ "name": "Pixi", "version": "1.0.0", "lockfileVersion": 1, + "requires": true, "dependencies": { + "JSONSelect": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", + "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=" + }, "abbrev": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", @@ -11,12 +17,20 @@ "accepts": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=" + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "~2.1.11", + "negotiator": "0.6.1" + } }, "ajv": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=" + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } }, "ansi-regex": { "version": "2.1.1", @@ -31,12 +45,19 @@ "anymatch": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=" + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "requires": { + "arrify": "^1.0.0", + "micromatch": "^2.1.5" + } }, "apparatus": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/apparatus/-/apparatus-0.0.9.tgz", - "integrity": "sha1-N9zSWDStC2UQdllikduCPusZCL0=" + "integrity": "sha1-N9zSWDStC2UQdllikduCPusZCL0=", + "requires": { + "sylvester": ">= 0.0.8" + } }, "append-field": { "version": "0.1.0", @@ -47,6 +68,10 @@ "version": "0.1.16", "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "requires": { + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" + }, "dependencies": { "underscore": { "version": "1.7.0", @@ -58,7 +83,10 @@ "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=" + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "^1.0.1" + } }, "arr-flatten": { "version": "1.1.0", @@ -98,7 +126,10 @@ "async": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==" + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "requires": { + "lodash": "^4.14.0" + } }, "async-each": { "version": "1.0.1", @@ -149,7 +180,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } }, "binary-extensions": { "version": "1.8.0", @@ -159,37 +193,69 @@ "bl": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=" + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "requires": { + "readable-stream": "^2.0.5" + } }, "body-parser": { "version": "1.17.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=" + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "requires": { + "bytes": "2.4.0", + "content-type": "~1.0.2", + "debug": "2.6.7", + "depd": "~1.1.0", + "http-errors": "~1.6.1", + "iconv-lite": "0.4.15", + "on-finished": "~2.3.0", + "qs": "6.4.0", + "raw-body": "~2.2.0", + "type-is": "~1.6.15" + } }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=" + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.x.x" + } }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=" + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=" + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } }, "bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", - "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz", + "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg==" }, "buffer": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=" + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "requires": { + "base64-js": "0.0.8", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } }, "buffer-crc32": { "version": "0.2.13", @@ -201,15 +267,14 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, "busboy": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -219,7 +284,13 @@ "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } }, "string_decoder": { "version": "0.10.31", @@ -246,22 +317,47 @@ "caw": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.0.tgz", - "integrity": "sha1-Efi93C+AFGmVLV4yJbqYSVovoP8=" + "integrity": "sha1-Efi93C+AFGmVLV4yJbqYSVovoP8=", + "requires": { + "get-proxy": "^1.0.1", + "tunnel-agent": "^0.4.0" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=" + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } }, "client-sessions": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/client-sessions/-/client-sessions-0.7.0.tgz", - "integrity": "sha1-FyHn6N9t39UDafZvnbitoMxIAnA=" + "integrity": "sha1-FyHn6N9t39UDafZvnbitoMxIAnA=", + "requires": { + "cookies": "0.5.0" + } }, "co": { "version": "4.6.0", @@ -276,12 +372,18 @@ "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "~1.0.0" + } }, "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=" + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } }, "concat-map": { "version": "0.0.1", @@ -291,12 +393,27 @@ "concat-stream": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=" + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } }, "configstore": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.1", + "os-tmpdir": "^1.0.0", + "osenv": "^0.1.0", + "uuid": "^2.0.1", + "write-file-atomic": "^1.1.2", + "xdg-basedir": "^2.0.0" + }, "dependencies": { "uuid": { "version": "2.0.3", @@ -323,7 +440,11 @@ "cookie-parser": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=" + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } }, "cookie-signature": { "version": "1.0.6", @@ -333,7 +454,10 @@ "cookies": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.5.0.tgz", - "integrity": "sha1-FkysRqHTyjs7h0J0FMJJMdg4ECU=" + "integrity": "sha1-FkysRqHTyjs7h0J0FMJJMdg4ECU=", + "requires": { + "keygrip": "~1.0.0" + } }, "core-util-is": { "version": "1.0.2", @@ -343,22 +467,41 @@ "cryptiles": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=" + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.x.x" + } }, "csrf": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", - "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=" + "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=", + "requires": { + "rndm": "1.2.0", + "tsscmp": "1.0.5", + "uid-safe": "2.1.4" + } }, "csurf": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.9.0.tgz", "integrity": "sha1-SdLGkl/87Ht95VlZfBU/pTM2QTM=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "csrf": "~3.0.3", + "http-errors": "~1.5.0" + }, "dependencies": { "http-errors": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", - "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=" + "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "requires": { + "inherits": "2.0.3", + "setprototypeof": "1.0.2", + "statuses": ">= 1.3.1 < 2" + } }, "setprototypeof": { "version": "1.0.2", @@ -371,6 +514,9 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -382,12 +528,25 @@ "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "requires": { + "ms": "2.0.0" + } }, "decompress": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, "dependencies": { "pify": { "version": "2.3.0", @@ -399,12 +558,20 @@ "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=" + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } }, "decompress-tar": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.0.tgz", "integrity": "sha1-HwkqtphEBVjHL8eOd9JG0+y0U7A=", + "requires": { + "file-type": "^3.8.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, "dependencies": { "file-type": { "version": "3.9.0", @@ -417,6 +584,14 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.0.tgz", "integrity": "sha1-+6tY1d5z8/0hPKw68cGDNPUcuJE=", + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^3.8.0", + "is-stream": "^1.1.0", + "pify": "^2.3.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, "dependencies": { "file-type": { "version": "3.9.0", @@ -434,6 +609,11 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.0.tgz", "integrity": "sha1-R1ucQGvmIa6DYnSALZsl+ZE+rVk=", + "requires": { + "decompress-tar": "^4.0.0", + "file-type": "^4.3.0", + "is-stream": "^1.1.0" + }, "dependencies": { "file-type": { "version": "4.4.0", @@ -446,6 +626,12 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, "dependencies": { "file-type": { "version": "3.9.0", @@ -455,7 +641,11 @@ "get-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=" + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } }, "pify": { "version": "2.3.0", @@ -488,6 +678,10 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -497,7 +691,13 @@ "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } }, "string_decoder": { "version": "0.10.31", @@ -509,12 +709,29 @@ "doctrine": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=" + "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } }, "download": { "version": "6.2.5", "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==" + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + } }, "duplexer": { "version": "0.1.1", @@ -530,16 +747,28 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", + "requires": { + "end-of-stream": "1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, "dependencies": { "end-of-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", - "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=" + "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", + "requires": { + "once": "~1.3.0" + } }, "once": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=" + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "requires": { + "wrappy": "1" + } } } }, @@ -552,12 +781,19 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } }, "ecdsa-sig-formatter": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", - "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=" + "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", + "requires": { + "base64url": "^2.0.0", + "safe-buffer": "^5.0.1" + } }, "ee-first": { "version": "1.1.1", @@ -572,7 +808,10 @@ "end-of-stream": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=" + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "requires": { + "once": "^1.4.0" + } }, "es6-promise": { "version": "3.2.1", @@ -592,7 +831,12 @@ "escodegen": { "version": "0.0.21", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.21.tgz", - "integrity": "sha1-U9ZSz6EDA4gnlFilJmxf/HCcY8M=" + "integrity": "sha1-U9ZSz6EDA4gnlFilJmxf/HCcY8M=", + "requires": { + "esprima": "~1.0.2", + "estraverse": "~0.0.4", + "source-map": ">= 0.1.2" + } }, "esprima": { "version": "1.0.4", @@ -617,22 +861,67 @@ "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=" + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=" + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "^0.1.0" + } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=" + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "^2.1.0" + } }, "express": { "version": "4.15.3", "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", - "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=" + "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", + "requires": { + "accepts": "~1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "~1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.7", + "depd": "~1.1.0", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.0", + "finalhandler": "~1.0.3", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "~1.1.4", + "qs": "6.4.0", + "range-parser": "~1.2.0", + "send": "0.15.3", + "serve-static": "1.12.3", + "setprototypeof": "1.0.3", + "statuses": "~1.3.1", + "type-is": "~1.6.15", + "utils-merge": "1.0.0", + "vary": "~1.1.1" + } }, "express-unless": { "version": "0.3.0", @@ -643,6 +932,9 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + }, "dependencies": { "mime-db": { "version": "1.28.0", @@ -654,7 +946,11 @@ "ext-name": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==" + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } }, "extend": { "version": "3.0.1", @@ -664,7 +960,10 @@ "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=" + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "^1.0.0" + } }, "extsprintf": { "version": "1.0.2", @@ -679,7 +978,10 @@ "fd-slicer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=" + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } }, "fibers": { "version": "1.0.15", @@ -704,17 +1006,38 @@ "filenamify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.0.0.tgz", - "integrity": "sha1-vRYiYsC26Uv7zc8Zo7uzdk94VpU=" + "integrity": "sha1-vRYiYsC26Uv7zc8Zo7uzdk94VpU=", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } }, "fill-range": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=" + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } }, "finalhandler": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", - "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=" + "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", + "requires": { + "debug": "2.6.7", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.1", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } }, "for-in": { "version": "1.0.2", @@ -724,7 +1047,10 @@ "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=" + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "^1.0.1" + } }, "forever-agent": { "version": "0.6.1", @@ -734,7 +1060,12 @@ "form-data": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=" + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } }, "forwarded": { "version": "0.1.0", @@ -761,6 +1092,10 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", "optional": true, + "requires": { + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.36" + }, "dependencies": { "abbrev": { "version": "1.1.0", @@ -770,11 +1105,16 @@ "ajv": { "version": "4.11.8", "bundled": true, - "optional": true + "optional": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.1.1", @@ -784,7 +1124,11 @@ "are-we-there-yet": { "version": "1.1.4", "bundled": true, - "optional": true + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } }, "asn1": { "version": "0.2.3", @@ -813,28 +1157,46 @@ }, "balanced-match": { "version": "0.4.2", - "bundled": true + "bundled": true, + "optional": true }, "bcrypt-pbkdf": { "version": "1.0.1", "bundled": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } }, "block-stream": { "version": "0.0.9", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "inherits": "~2.0.0" + } }, "boom": { "version": "2.10.1", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } }, "brace-expansion": { "version": "1.1.7", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } }, "buffer-shims": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "caseless": { "version": "0.12.0", @@ -848,33 +1210,47 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "combined-stream": { "version": "1.0.5", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "delayed-stream": "~1.0.0" + } }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "cryptiles": { "version": "2.0.5", "bundled": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.x.x" + } }, "dashdash": { "version": "1.14.1", "bundled": true, "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -886,7 +1262,10 @@ "debug": { "version": "2.6.8", "bundled": true, - "optional": true + "optional": true, + "requires": { + "ms": "2.0.0" + } }, "deep-extend": { "version": "0.4.2", @@ -895,7 +1274,8 @@ }, "delayed-stream": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "delegates": { "version": "1.0.0", @@ -905,7 +1285,10 @@ "ecc-jsbn": { "version": "0.1.1", "bundled": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } }, "extend": { "version": "3.0.1", @@ -914,7 +1297,8 @@ }, "extsprintf": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "forever-agent": { "version": "0.6.1", @@ -924,30 +1308,61 @@ "form-data": { "version": "2.1.4", "bundled": true, - "optional": true + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "fstream": { "version": "1.0.11", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } }, "fstream-ignore": { "version": "1.0.5", "bundled": true, - "optional": true + "optional": true, + "requires": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + } }, "gauge": { "version": "2.7.4", "bundled": true, - "optional": true + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } }, "getpass": { "version": "0.1.7", "bundled": true, "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -958,11 +1373,21 @@ }, "glob": { "version": "7.1.2", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "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" + } }, "graceful-fs": { "version": "4.1.11", - "bundled": true + "bundled": true, + "optional": true }, "har-schema": { "version": "1.0.5", @@ -972,7 +1397,11 @@ "har-validator": { "version": "4.2.1", "bundled": true, - "optional": true + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } }, "has-unicode": { "version": "2.0.1", @@ -982,24 +1411,42 @@ "hawk": { "version": "3.1.3", "bundled": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } }, "hoek": { "version": "2.16.3", - "bundled": true + "bundled": true, + "optional": true }, "http-signature": { "version": "1.1.1", "bundled": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } }, "inflight": { "version": "1.0.6", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.4", @@ -1008,7 +1455,11 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-typedarray": { "version": "1.0.0", @@ -1017,7 +1468,8 @@ }, "isarray": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "isstream": { "version": "0.1.2", @@ -1027,7 +1479,10 @@ "jodid25519": { "version": "1.0.2", "bundled": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } }, "jsbn": { "version": "0.1.1", @@ -1042,7 +1497,10 @@ "json-stable-stringify": { "version": "1.0.1", "bundled": true, - "optional": true + "optional": true, + "requires": { + "jsonify": "~0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -1058,6 +1516,12 @@ "version": "1.4.0", "bundled": true, "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1068,23 +1532,37 @@ }, "mime-db": { "version": "1.27.0", - "bundled": true + "bundled": true, + "optional": true }, "mime-types": { "version": "2.1.15", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "mime-db": "~1.27.0" + } }, "minimatch": { "version": "3.0.4", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "mkdirp": { "version": "0.5.1", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -1094,21 +1572,43 @@ "node-pre-gyp": { "version": "0.6.36", "bundled": true, - "optional": true + "optional": true, + "requires": { + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "request": "^2.81.0", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" + } }, "nopt": { "version": "4.0.1", "bundled": true, - "optional": true + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } }, "npmlog": { "version": "4.1.0", "bundled": true, - "optional": true + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -1122,7 +1622,11 @@ }, "once": { "version": "1.4.0", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } }, "os-homedir": { "version": "1.0.2", @@ -1137,11 +1641,16 @@ "osenv": { "version": "0.1.4", "bundled": true, - "optional": true + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "performance-now": { "version": "0.2.0", @@ -1150,7 +1659,8 @@ }, "process-nextick-args": { "version": "1.0.7", - "bundled": true + "bundled": true, + "optional": true }, "punycode": { "version": "1.4.1", @@ -1166,6 +1676,12 @@ "version": "1.2.1", "bundled": true, "optional": true, + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -1176,20 +1692,59 @@ }, "readable-stream": { "version": "2.2.9", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "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" + } }, "request": { "version": "2.81.0", "bundled": true, - "optional": true + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "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", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } }, "rimraf": { "version": "2.6.1", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } }, "safe-buffer": { "version": "5.0.1", - "bundled": true + "bundled": true, + "optional": true }, "semver": { "version": "5.3.0", @@ -1209,12 +1764,26 @@ "sntp": { "version": "1.0.9", "bundled": true, - "optional": true + "optional": true, + "requires": { + "hoek": "2.x.x" + } }, "sshpk": { "version": "1.13.0", "bundled": true, "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1223,13 +1792,23 @@ } } }, - "string_decoder": { - "version": "1.0.1", - "bundled": true - }, "string-width": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "stringstream": { "version": "0.0.5", @@ -1238,7 +1817,11 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } }, "strip-json-comments": { "version": "2.0.1", @@ -1247,22 +1830,44 @@ }, "tar": { "version": "2.2.1", - "bundled": true + "bundled": true, + "optional": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } }, "tar-pack": { "version": "3.4.0", "bundled": true, - "optional": true + "optional": true, + "requires": { + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" + } }, "tough-cookie": { "version": "2.3.2", "bundled": true, - "optional": true + "optional": true, + "requires": { + "punycode": "^1.4.1" + } }, "tunnel-agent": { "version": "0.6.0", "bundled": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -1276,7 +1881,8 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "uuid": { "version": "3.0.1", @@ -1286,16 +1892,23 @@ "verror": { "version": "1.3.6", "bundled": true, - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } }, "wide-align": { "version": "1.1.2", "bundled": true, - "optional": true + "optional": true, + "requires": { + "string-width": "^1.0.2" + } }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true } } }, @@ -1307,12 +1920,18 @@ "generate-object-property": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=" + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "requires": { + "is-property": "^1.0.0" + } }, "get-proxy": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", - "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=" + "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "requires": { + "rc": "^1.1.2" + } }, "get-stream": { "version": "3.0.0", @@ -1323,6 +1942,9 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1334,27 +1956,61 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "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" + } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=" + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=" + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "^2.0.0" + } }, "glutils": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/glutils/-/glutils-0.2.0.tgz", - "integrity": "sha1-xkj0Ph5nZe3gGD/PJj7l+xdmVZw=" + "integrity": "sha1-xkj0Ph5nZe3gGD/PJj7l+xdmVZw=", + "requires": { + "fibers": "~1.0.1" + } }, "got": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==" + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } }, "graceful-fs": { "version": "4.1.11", @@ -1374,12 +2030,19 @@ "har-validator": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=" + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "has-symbol-support-x": { "version": "1.3.0", @@ -1389,12 +2052,21 @@ "has-to-string-tag-x": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.3.0.tgz", - "integrity": "sha512-Fu9Nwv8/VNJMvKjkldzXHO+yeX+TCelwUQ9dGW2LrAfHfHi6zVqQt+Qjilf0qGHvpl6Fap6o8aDhWhMt5hY/1g==" + "integrity": "sha512-Fu9Nwv8/VNJMvKjkldzXHO+yeX+TCelwUQ9dGW2LrAfHfHi6zVqQt+Qjilf0qGHvpl6Fap6o8aDhWhMt5hY/1g==", + "requires": { + "has-symbol-support-x": "^1.3.0" + } }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=" + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } }, "hoek": { "version": "2.16.3", @@ -1404,12 +2076,23 @@ "http-errors": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=" + "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } }, "http-signature": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=" + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } }, "iconv-lite": { "version": "0.4.15", @@ -1429,7 +2112,10 @@ "image-downloader": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/image-downloader/-/image-downloader-3.2.2.tgz", - "integrity": "sha1-a9JSVFM4uYyzLhPB4+8C7rLL1PA=" + "integrity": "sha1-a9JSVFM4uYyzLhPB4+8C7rLL1PA=", + "requires": { + "request": "^2.81.0" + } }, "imurmurhash": { "version": "0.1.4", @@ -1444,7 +2130,11 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, "inherits": { "version": "2.0.3", @@ -1464,7 +2154,10 @@ "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } }, "is-buffer": { "version": "1.1.5", @@ -1479,7 +2172,10 @@ "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=" + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "^2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -1494,17 +2190,29 @@ "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=" + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=" + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } }, "is-my-json-valid": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=" + "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } }, "is-natural-number": { "version": "4.0.1", @@ -1519,7 +2227,10 @@ "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=" + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "^3.0.2" + } }, "is-object": { "version": "1.0.1", @@ -1579,7 +2290,10 @@ "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } }, "isstream": { "version": "0.1.2", @@ -1589,32 +2303,62 @@ "isurl": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==" + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } }, "jison": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/jison/-/jison-0.4.4.tgz", - "integrity": "sha1-hrA7Ze/sAHqR9JPs6r5W+QqmtDk=" + "integrity": "sha1-hrA7Ze/sAHqR9JPs6r5W+QqmtDk=", + "requires": { + "JSONSelect": "0.4.0", + "ebnf-parser": "0.1.x", + "escodegen": "0.0.21", + "esprima": "1.0.x", + "jison-lex": "0.2.x", + "lex-parser": "0.1.x", + "nomnom": "1.5.2" + } }, "jison-lex": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/jison-lex/-/jison-lex-0.2.1.tgz", - "integrity": "sha1-rEuBXozOUTLrErXfz+jXB7iETf4=" + "integrity": "sha1-rEuBXozOUTLrErXfz+jXB7iETf4=", + "requires": { + "lex-parser": "0.1.x", + "nomnom": "1.5.2" + } }, "joi": { "version": "6.10.1", "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", - "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=" + "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "requires": { + "hoek": "2.x.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" + } }, "js-yaml": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, "dependencies": { "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=" + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "requires": { + "sprintf-js": "~1.0.2" + } }, "esprima": { "version": "4.0.0", @@ -1637,12 +2381,22 @@ "json-schema-ref-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-1.4.1.tgz", - "integrity": "sha1-wMLkOL8HlnI7AkUbrovH3Qs3/tA=" + "integrity": "sha1-wMLkOL8HlnI7AkUbrovH3Qs3/tA=", + "requires": { + "call-me-maybe": "^1.0.1", + "debug": "^2.2.0", + "es6-promise": "^3.0.2", + "js-yaml": "^3.4.6", + "ono": "^2.0.1" + } }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=" + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -1659,20 +2413,28 @@ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" }, - "JSONSelect": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", - "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=" - }, "jsonwebtoken": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", - "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=" + "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", + "requires": { + "joi": "^6.10.1", + "jws": "^3.1.4", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } }, "jsprim": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1684,12 +2446,23 @@ "jwa": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", - "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=" + "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", + "requires": { + "base64url": "2.0.0", + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.9", + "safe-buffer": "^5.0.1" + } }, "jws": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", - "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=" + "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", + "requires": { + "base64url": "^2.0.0", + "jwa": "^1.1.4", + "safe-buffer": "^5.0.1" + } }, "keygrip": { "version": "1.0.1", @@ -1699,12 +2472,18 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } }, "latest-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", - "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=" + "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", + "requires": { + "package-json": "^1.0.0" + } }, "lex": { "version": "1.7.4", @@ -1724,7 +2503,11 @@ "lodash._baseassign": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=" + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } }, "lodash._basecopy": { "version": "3.0.1", @@ -1739,7 +2522,12 @@ "lodash._createassigner": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=" + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "requires": { + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" + } }, "lodash._getnative": { "version": "3.9.1", @@ -1754,12 +2542,21 @@ "lodash.assign": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=" + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" + } }, "lodash.defaults": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=" + "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", + "requires": { + "lodash.assign": "^3.0.0", + "lodash.restparam": "^3.0.0" + } }, "lodash.get": { "version": "4.4.2", @@ -1784,7 +2581,12 @@ "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=" + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } }, "lodash.once": { "version": "4.1.1", @@ -1805,6 +2607,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "requires": { + "pify": "^2.3.0" + }, "dependencies": { "pify": { "version": "2.3.0", @@ -1823,6 +2628,12 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -1836,7 +2647,22 @@ "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=" + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } }, "mime": { "version": "1.3.4", @@ -1851,7 +2677,10 @@ "mime-types": { "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=" + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "~1.27.0" + } }, "mimic-response": { "version": "1.0.0", @@ -1861,7 +2690,10 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } }, "minimist": { "version": "1.2.0", @@ -1872,6 +2704,9 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -1888,25 +2723,29 @@ "mongo-sequence": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/mongo-sequence/-/mongo-sequence-0.1.5.tgz", - "integrity": "sha1-u8eUOUPtKfXsIB1JqD5XKT2AxoI=" + "integrity": "sha1-u8eUOUPtKfXsIB1JqD5XKT2AxoI=", + "requires": { + "glutils": "~0.2.0" + } }, "mongodb": { - "version": "2.2.30", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.30.tgz", - "integrity": "sha1-jM2AH2dsgXIEDC8rR+lgKg1WNKs=", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.1.tgz", + "integrity": "sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==", + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + }, "dependencies": { - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=" + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" } } }, - "mongodb-core": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.14.tgz", - "integrity": "sha1-E8uidkImtb49GJkq8Mljzl6g8P0=" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1916,6 +2755,16 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz", "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=", + "requires": { + "append-field": "^0.1.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.0", + "mkdirp": "^0.5.1", + "object-assign": "^3.0.0", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, "dependencies": { "object-assign": { "version": "3.0.0", @@ -1934,6 +2783,11 @@ "version": "0.1.29", "resolved": "https://registry.npmjs.org/natural/-/natural-0.1.29.tgz", "integrity": "sha1-WaN6bNhtVekEtlbTudpD/S3J4Eo=", + "requires": { + "apparatus": ">= 0.0.6", + "sylvester": ">= 0.0.12", + "underscore": ">=1.3.1" + }, "dependencies": { "underscore": { "version": "1.8.3", @@ -1950,27 +2804,52 @@ "nested-error-stacks": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", - "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=" + "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", + "requires": { + "inherits": "~2.0.1" + } }, "nodemon": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz", - "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=" + "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=", + "requires": { + "chokidar": "^1.4.3", + "debug": "^2.2.0", + "es6-promise": "^3.0.2", + "ignore-by-default": "^1.0.0", + "lodash.defaults": "^3.1.2", + "minimatch": "^3.0.0", + "ps-tree": "^1.0.1", + "touch": "1.0.0", + "undefsafe": "0.0.3", + "update-notifier": "0.5.0" + } }, "nomnom": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz", - "integrity": "sha1-9DRUSKhTz71cDSYyDyR3qwUm/i8=" + "integrity": "sha1-9DRUSKhTz71cDSYyDyR3qwUm/i8=", + "requires": { + "colors": "0.5.x", + "underscore": "1.1.x" + } }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=" + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, "number-is-nan": { "version": "1.0.1", @@ -1990,17 +2869,27 @@ "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=" + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } }, "ono": { "version": "2.2.5", @@ -2020,7 +2909,11 @@ "osenv": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=" + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } }, "p-cancelable": { "version": "0.3.0", @@ -2030,7 +2923,10 @@ "p-event": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=" + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "requires": { + "p-timeout": "^1.1.1" + } }, "p-finally": { "version": "1.0.0", @@ -2040,17 +2936,36 @@ "p-timeout": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.0.tgz", - "integrity": "sha1-mCD5lDTFgXhotPNICe5SkWYNW2w=" + "integrity": "sha1-mCD5lDTFgXhotPNICe5SkWYNW2w=", + "requires": { + "p-finally": "^1.0.0" + } }, "package-json": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", + "requires": { + "got": "^3.2.0", + "registry-url": "^3.0.0" + }, "dependencies": { "got": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", - "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=" + "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", + "requires": { + "duplexify": "^3.2.0", + "infinity-agent": "^2.0.0", + "is-redirect": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "nested-error-stacks": "^1.0.0", + "object-assign": "^3.0.0", + "prepend-http": "^1.0.0", + "read-all-stream": "^3.0.0", + "timed-out": "^2.0.0" + } }, "object-assign": { "version": "3.0.0", @@ -2067,7 +2982,13 @@ "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=" + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } }, "parseurl": { "version": "1.3.1", @@ -2077,17 +2998,28 @@ "passport": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", - "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=" + "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } }, "passport-jwt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-2.2.1.tgz", - "integrity": "sha1-DgBMlAcTGdZz2dm8/RV0qGgBFSc=" + "integrity": "sha1-DgBMlAcTGdZz2dm8/RV0qGgBFSc=", + "requires": { + "jsonwebtoken": "^7.0.0", + "passport-strategy": "^1.0.0" + } }, "passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", - "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=" + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.x.x" + } }, "passport-strategy": { "version": "1.0.0", @@ -2097,7 +3029,11 @@ "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=" + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } }, "path-is-absolute": { "version": "1.0.1", @@ -2117,7 +3053,10 @@ "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=" + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "requires": { + "through": "~2.3" + } }, "pend": { "version": "1.2.0", @@ -2142,7 +3081,10 @@ "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } }, "prepend-http": { "version": "1.0.4", @@ -2172,12 +3114,19 @@ "proxy-addr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", - "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=" + "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", + "requires": { + "forwarded": "~0.1.0", + "ipaddr.js": "1.3.0" + } }, "ps-tree": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=" + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "requires": { + "event-stream": "~3.3.0" + } }, "punycode": { "version": "1.4.1", @@ -2203,30 +3152,46 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } } } }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } } } }, "randy": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/randy/-/randy-1.5.1.tgz", - "integrity": "sha1-59wIag7Li+99ZzVmQs0qM/liRlw=" + "integrity": "sha1-59wIag7Li+99ZzVmQs0qM/liRlw=", + "requires": { + "prng-well1024a": "~1.0.0" + } }, "range-parser": { "version": "1.2.0", @@ -2236,27 +3201,57 @@ "raw-body": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=" + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.15", + "unpipe": "1.0.0" + } }, "rc": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=" + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } }, "read-all-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=" + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "requires": { + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" + } }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==" + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=" + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } }, "recursive-iterator": { "version": "2.0.3", @@ -2266,22 +3261,39 @@ "regex": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/regex/-/regex-0.1.1.tgz", - "integrity": "sha1-BYCZXRhGxTdqdiudNYuDBo0geu8=" + "integrity": "sha1-BYCZXRhGxTdqdiudNYuDBo0geu8=", + "requires": { + "augment": "3.2.1", + "jison": "0.4.4", + "lex": "1.7.4", + "statemachines": "0.1.0" + } }, "regex-cache": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=" + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "requires": { + "is-equal-shallow": "^0.1.3", + "is-primitive": "^2.0.0" + } }, "registry-url": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=" + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } }, "remarkable": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.6.2.tgz", - "integrity": "sha1-79kesGVnnogody96LHeGtqt5ndw=" + "integrity": "sha1-79kesGVnnogody96LHeGtqt5ndw=", + "requires": { + "argparse": "~0.1.15", + "autolinker": "~0.15.0" + } }, "remove-trailing-separator": { "version": "1.0.2", @@ -2301,17 +3313,47 @@ "repeating": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=" + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "requires": { + "is-finite": "^1.0.0" + } }, "request": { "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "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", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, "dependencies": { "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } } } }, @@ -2319,11 +3361,18 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/request-json/-/request-json-0.6.2.tgz", "integrity": "sha1-KMdtBdYMU8nhjUCXywFyO5UGkyI=", + "requires": { + "depd": "1.1.0", + "request": "2.74.0" + }, "dependencies": { "bl": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=" + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "requires": { + "readable-stream": "~2.0.5" + } }, "caseless": { "version": "0.11.0", @@ -2338,12 +3387,23 @@ "form-data": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=" + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "requires": { + "async": "^2.0.1", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" + } }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=" + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "requires": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + } }, "node-uuid": { "version": "1.4.8", @@ -2358,12 +3418,43 @@ "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=" + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "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", + "util-deprecate": "~1.0.1" + } }, "request": { "version": "2.74.0", "resolved": "https://registry.npmjs.org/request/-/request-2.74.0.tgz", - "integrity": "sha1-dpPKdou7DqXIzgjAhKRe+gW4kqs=" + "integrity": "sha1-dpPKdou7DqXIzgjAhKRe+gW4kqs=", + "requires": { + "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": "~1.0.0-rc4", + "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" + } }, "string_decoder": { "version": "0.10.31", @@ -2375,7 +3466,11 @@ "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==" + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } }, "resolve-from": { "version": "2.0.0", @@ -2392,10 +3487,22 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "seek-bzip": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=" + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "~2.8.1" + } }, "semver": { "version": "5.3.0", @@ -2405,17 +3512,41 @@ "semver-diff": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=" + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "^5.0.3" + } }, "send": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", - "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=" + "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", + "requires": { + "debug": "2.6.7", + "depd": "~1.1.0", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.0", + "fresh": "0.5.0", + "http-errors": "~1.6.1", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" + } }, "sentencer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/sentencer/-/sentencer-0.1.5.tgz", "integrity": "sha1-HDURWBoAsiNhJ/+yH94X9PSGWeI=", + "requires": { + "articles": "~0.2.1", + "lodash": "~2.4.1", + "natural": "~0.1.28", + "randy": "~1.5.1" + }, "dependencies": { "lodash": { "version": "2.4.2", @@ -2427,7 +3558,13 @@ "serve-static": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", - "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=" + "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", + "requires": { + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "parseurl": "~1.3.1", + "send": "0.15.3" + } }, "set-immediate-shim": { "version": "1.0.1", @@ -2447,17 +3584,26 @@ "sntp": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=" + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.x.x" + } }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=" + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } }, "sort-keys-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=" + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + } }, "sorted-array": { "version": "1.1.0", @@ -2470,10 +3616,22 @@ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", "optional": true }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=" + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "requires": { + "through": "2" + } }, "sprintf-js": { "version": "1.0.3", @@ -2484,6 +3642,16 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2495,7 +3663,11 @@ "statemachines": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/statemachines/-/statemachines-0.1.0.tgz", - "integrity": "sha1-tUX9PYpVKA8wK4aW8ZwKEcTjOt4=" + "integrity": "sha1-tUX9PYpVKA8wK4aW8ZwKEcTjOt4=", + "requires": { + "augment": "3.2.1", + "sorted-array": "1.1.0" + } }, "statuses": { "version": "1.3.1", @@ -2505,7 +3677,10 @@ "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=" + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "requires": { + "duplexer": "~0.1.1" + } }, "stream-shift": { "version": "1.0.0", @@ -2517,15 +3692,21 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==" - }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=" + "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "requires": { + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" + } }, "stringstream": { "version": "0.0.5", @@ -2535,12 +3716,18 @@ "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "strip-dirs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.0.0.tgz", - "integrity": "sha1-YQzbKSggDaAAT0HcuQ/JXNkZoLY=" + "integrity": "sha1-YQzbKSggDaAAT0HcuQ/JXNkZoLY=", + "requires": { + "is-natural-number": "^4.0.1" + } }, "strip-json-comments": { "version": "2.0.1", @@ -2550,7 +3737,10 @@ "strip-outer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", - "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=" + "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "requires": { + "escape-string-regexp": "^1.0.2" + } }, "supports-color": { "version": "2.0.0", @@ -2561,6 +3751,15 @@ "version": "1.9.5", "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-1.9.5.tgz", "integrity": "sha1-xT9iWNmCKjwnLsheXBhOB5fP28A=", + "requires": { + "chokidar": "^1.7.0", + "commander": "^2.9.0", + "doctrine": "^2.0.0", + "glob": "^7.1.2", + "js-yaml": "^3.8.4", + "recursive-iterator": "^2.0.3", + "swagger-parser": "^3.4.1" + }, "dependencies": { "commander": { "version": "2.11.0", @@ -2577,7 +3776,17 @@ "swagger-parser": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-3.4.1.tgz", - "integrity": "sha1-ApBSnbriVNF4tEKpXfYNI9FCMB0=" + "integrity": "sha1-ApBSnbriVNF4tEKpXfYNI9FCMB0=", + "requires": { + "call-me-maybe": "^1.0.1", + "debug": "^2.2.0", + "es6-promise": "^3.0.2", + "json-schema-ref-parser": "^1.4.1", + "ono": "^2.0.1", + "swagger-methods": "^1.0.0", + "swagger-schema-official": "2.0.0-bab6bed", + "z-schema": "^3.16.1" + } }, "swagger-schema-official": { "version": "2.0.0-bab6bed", @@ -2592,7 +3801,13 @@ "tar-stream": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=" + "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "requires": { + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.0" + } }, "through": { "version": "2.3.8", @@ -2607,22 +3822,34 @@ "topo": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=" + "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "requires": { + "hoek": "2.x.x" + } }, "touch": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=" + "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", + "requires": { + "nopt": "~1.0.10" + } }, "tough-cookie": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=" + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "^1.4.1" + } }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=" + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } }, "tsscmp": { "version": "1.0.5", @@ -2643,7 +3870,11 @@ "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=" + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.15" + } }, "typedarray": { "version": "0.0.6", @@ -2653,12 +3884,19 @@ "uid-safe": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz", - "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=" + "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=", + "requires": { + "random-bytes": "~1.0.0" + } }, "unbzip2-stream": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.4.tgz", - "integrity": "sha1-jITITVtMwo/B+fV3IDu9PLhgoWo=" + "integrity": "sha1-jITITVtMwo/B+fV3IDu9PLhgoWo=", + "requires": { + "buffer": "^3.0.1", + "through": "^2.3.6" + } }, "undefsafe": { "version": "0.0.3", @@ -2683,12 +3921,24 @@ "update-notifier": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", - "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=" + "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", + "requires": { + "chalk": "^1.0.0", + "configstore": "^1.0.0", + "is-npm": "^1.0.0", + "latest-version": "^1.0.0", + "repeating": "^1.1.2", + "semver-diff": "^2.0.0", + "string-length": "^1.0.0" + } }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=" + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } }, "url-to-options": { "version": "1.0.1", @@ -2699,6 +3949,9 @@ "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -2735,7 +3988,10 @@ "verror": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=" + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "requires": { + "extsprintf": "1.0.2" + } }, "wrappy": { "version": "1.0.2", @@ -2745,12 +4001,20 @@ "write-file-atomic": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=" + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } }, "xdg-basedir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=" + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "requires": { + "os-homedir": "^1.0.0" + } }, "xtend": { "version": "4.0.1", @@ -2760,12 +4024,22 @@ "yauzl": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz", - "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=" + "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.0.1" + } }, "z-schema": { "version": "3.18.2", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.2.tgz", - "integrity": "sha1-5CIZa17+YLRq3vPD8q7y3qqREWE=" + "integrity": "sha1-5CIZa17+YLRq3vPD8q7y3qqREWE=", + "requires": { + "commander": "^2.7.1", + "lodash.get": "^4.1.2", + "lodash.isequal": "^4.4.0", + "validator": "^6.0.0" + } } } -} \ No newline at end of file +} diff --git a/app/package.json b/app/package.json index 8631663..4bba2ba 100644 --- a/app/package.json +++ b/app/package.json @@ -22,7 +22,7 @@ "image-downloader": "^3.2.2", "jsonwebtoken": "^7.4.1", "mongo-sequence": "^0.1.5", - "mongodb": "^2.2.11", + "mongodb": "^3.4.1", "multer": "^1.3.0", "nodemon": "^1.11.0", "passport": "^0.3.2", diff --git a/app/server.js b/app/server.js index ec4131e..a506a79 100644 --- a/app/server.js +++ b/app/server.js @@ -10,13 +10,13 @@ var faker = require('faker'); //database stuff var ObjectID = require('mongodb').ObjectID; -var mongo = require('mongodb').MongoClient; +var MongoClient = require('mongodb').MongoClient; var Logger = require('mongodb').Logger; //file uploading stuff var multer = require('multer'); -var upload = multer ({ dest: 'uploads/'}); +var upload = multer ({ dest: __dirname + '/uploads/'}); //include config file var config = require('./server.conf'); @@ -26,8 +26,10 @@ var session = require('client-sessions'); var csurf = require('csurf'); var jwt = require('jsonwebtoken'); -//var dbname = 'mongodb://localhost:27017/Pixidb'; +// var dbname = 'mongodb://localhost:27017/Pixidb'; var dbname = 'mongodb://pixidb:27017/Pixidb'; +var mongo = new MongoClient(dbname, { useNewUrlParser: true, useUnifiedTopology: true }); +var db; //create express server and register global middleware var api = express(); api.use(bodyParser.json()); @@ -50,22 +52,17 @@ api.listen(8090, function(){ }); // test db connection -mongo.connect(dbname, function(err, db) { +mongo.connect(function(err, client) { if(!err) { console.log("We are connected"); } + db = client.db(); }); // functions function api_authenticate(user, pass, req, res){ - mongo.connect(dbname, function(err, db){ - //Logger.setLevel('debug'); - if(err){ - console.log('MongoDB connection error...'); - return err; - } - console.log('user ' + user + ' pass ' + pass); + console.log('user ' + user + ' pass ' + pass); db.collection('users').findOne({email: user, password: pass },function(err, result){ if(err){ console.log('Query error...'); @@ -84,19 +81,11 @@ function api_authenticate(user, pass, req, res){ else res.status(202).json({message: 'sorry pal, invalid login' }); }); - - }); } function api_register(user, pass, req, res){ console.log('in register'); - mongo.connect(dbname, function(err, db){ - //Logger.setLevel('debug'); - if(err){ - console.log('MongoDB connection error...'); - return err; - } - console.log('user ' + user + ' pass ' + pass); + console.log('user ' + user + ' pass ' + pass); user = user.toLowerCase(); db.collection('users').findOne({ email: user },function(err, result){ if(err){ return err; } @@ -116,12 +105,12 @@ function api_register(user, pass, req, res){ name = name.join(''); console.log(name); db.collection("counters") - .findAndModify( + .findOneAndUpdate( { "_id": "userid" }, - [], - { "$inc" : { "seq": 1 } }, + { "$inc" : { "seq": 1 } }, + { upsert: true, returnOriginal: false }, function(err, doc){ - db.collection('users').insert({ + db.collection('users').insertOne({ _id: doc.value.seq, email: user, password: pass, @@ -148,7 +137,6 @@ function api_register(user, pass, req, res){ } // else }); //find one user - }); } @@ -205,7 +193,6 @@ function random_sentence() { api.get('/api/search', function(req, res){ //console.log('in search ' + req.query.query); if(req.query.query) { - mongo.connect(dbname, function(err, db){ db.collection('pictures').find({ $text : { $search: req.query.query } }) .toArray(function(err, search){ if(err) { return err }; @@ -219,7 +206,6 @@ api.get('/api/search', function(req, res){ console.log('no pics matched'); } }) - }) } else { res.status(202).json("You need to search something, /search?query=string"); @@ -229,7 +215,6 @@ api.get('/api/search', function(req, res){ // picture related. api.get('/api/pictures', api_token_check, function(req, res){ console.log('in pics'); - mongo.connect(dbname, function(err, db){ db.collection('pictures').find().sort({created_date: -1 }).toArray(function(err, pictures){ if(pictures) { console.log(pictures); @@ -237,13 +222,10 @@ api.get('/api/pictures', api_token_check, function(req, res){ } }) - }) - }); api.get('/api/picture/:pictureid', api_token_check, function(req, res){ console.log('in pics'); - mongo.connect(dbname, function(err, db){ db.collection('pictures').findOne({ _id : Number(req.params.pictureid) }, function(err, picture){ if(picture) { console.log(picture); @@ -251,8 +233,6 @@ api.get('/api/picture/:pictureid', api_token_check, function(req, res){ } }) - }) - }); api.delete('/api/picture/delete', api_token_check, function(req, res) { @@ -261,8 +241,7 @@ api.delete('/api/picture/delete', api_token_check, function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect(dbname, function(err, db){ - db.collection('pictures').remove( { _id : Number(req.query.picture_id) }, + db.collection('pictures').deleteOne( { _id : Number(req.query.picture_id) }, function(err, delete_photo){ if (err) { return err } //console.log(delete_photo); @@ -273,9 +252,7 @@ api.delete('/api/picture/delete', api_token_check, function(req, res) { res.json('Photo ' + req.query.picture_id + ' deleted!'); } }) - }) } - }); api.get('/api/picture/delete/:picture', api_token_check, function(req, res) { @@ -284,15 +261,13 @@ api.get('/api/picture/delete/:picture', api_token_check, function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - - mongo.connect(dbname, function(err, db){ db.collection('pictures').findOne({ _id: Number(req.params.picture) }, function(err, result) { if (result){ console.log(result.creator_id); console.log(req.user.user._id); if (req.user.user._id == result.creator_id) { - db.collection('pictures').remove( { _id : Number(req.params.picture_id) }, + db.collection('pictures').deleteOne( { _id : Number(req.params.picture_id) }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -313,7 +288,6 @@ api.get('/api/picture/delete/:picture', api_token_check, function(req, res) { res.json('Sorry invalid request'); } }) - }) } }) @@ -325,7 +299,6 @@ api.get('/api/picture/:picture_id/likes', api_token_check, function(req, res){ res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect(dbname, function(err, db){ db.collection('likes').find({ picture_id : Number(req.params.picture_id)}).toArray(function(err, likes){ if(err) { return err }; @@ -335,14 +308,12 @@ api.get('/api/picture/:picture_id/likes', api_token_check, function(req, res){ } }) - }) } }); api.get('/api/picture/:picture_id/loves', api_token_check, function(req, res){ console.log('pic id ' + req.params.picture_id); - mongo.connect(dbname, function(err, db){ db.collection('loves').find({ picture_id : Number(req.params.picture_id)}).toArray(function(err, loves){ if(err) { return err }; @@ -352,7 +323,6 @@ api.get('/api/picture/:picture_id/loves', api_token_check, function(req, res){ } }) - }) }); @@ -364,7 +334,6 @@ api.get('/api/pictures/love', api_token_check, function(req, res){ } else { //db call- if like exists, delete it, if not exists, add it. - mongo.connect(dbname, function(err, db){ // see if user has money first. console.log(req.user.user.email); db.collection('users').findOne( { "email" : req.user.user.email }, function(err, usermoney) { @@ -372,14 +341,14 @@ api.get('/api/pictures/love', api_token_check, function(req, res){ console.log('account ' + JSON.stringify(usermoney)); if(usermoney.account_balance >= .05) { //give money to the photo console.log('in create query ' + JSON.stringify(usermoney)); - db.collection('loves').insert({ + db.collection('loves').insertOne({ 'user_id': req.user.user._id, 'picture_id': req.query.picture_id, 'amount': .05 }, function(err, new_love) { db.collection('pictures') .findOneAndUpdate( { _id : Number(req.query.picture_id) }, - { $inc: { money_made : .05 } }, + { $inc: { money_made : .05 }, $set: { updated_date: new Date() } }, function(err, picupdate){ if(err) { return err } else { @@ -388,8 +357,7 @@ api.get('/api/pictures/love', api_token_check, function(req, res){ }) console.log(req.user.user._id); db.collection('users') - .findAndModify( { "_id" : req.user.user._id }, - [], + .findOneAndUpdate( { "_id" : req.user.user._id }, { "$inc": { "account_balance" : -.05 } }, function(err, userupdate){ if(err) { return err } @@ -407,8 +375,6 @@ api.get('/api/pictures/love', api_token_check, function(req, res){ } }) - - }) } }); @@ -421,7 +387,6 @@ api.get('/api/pictures/like', api_token_check, function(req, res){ } else { //db call- if like exists, delete it, if not exists, add it. - mongo.connect(dbname, function(err, db){ db.collection('likes').findOne( { 'user_id' : req.user.user._id, 'picture_id' : req.query.picture_id }, function(err, like) { @@ -429,13 +394,13 @@ api.get('/api/pictures/like', api_token_check, function(req, res){ if(err) { return err }; if(!like) { //brand new like console.log('in create query ' + like); - db.collection('likes').insert({ + db.collection('likes').insertOne({ 'user_id': req.user.user._id, 'picture_id': req.query.picture_id }, function(err, new_like) { db.collection('pictures') .findOneAndUpdate( { _id : Number(req.query.picture_id) }, - { $inc: { likes : 1 } }, + { $inc: { likes : 1 }, $set: { updated_date: new Date() } }, function(err, picupdate){ if(err) { return err } else { @@ -452,13 +417,13 @@ api.get('/api/pictures/like', api_token_check, function(req, res){ else if(like) { //remove old like console.log('in delete query ' + like); //res.json('already liked'); - db.collection('likes').remove({ + db.collection('likes').deleteOne({ 'user_id': req.user.user._id, 'picture_id': req.query.picture_id }, function(err, remove_like){ db.collection('pictures') .findOneAndUpdate( { _id : Number(req.query.picture_id) }, - { $inc: { likes : -1} }, + { $inc: { likes : -1 }, $set: { updated_date: new Date() } }, function(err, picupdate){ if(err) { return err } else { @@ -473,8 +438,6 @@ api.get('/api/pictures/like', api_token_check, function(req, res){ } }) - - }) } }); api.post('/api/picture/upload', api_token_check, upload.single('file'), function(req, res, next){ @@ -487,16 +450,15 @@ api.post('/api/picture/upload', api_token_check, upload.single('file'), function console.log(req.file); console.log(req.file.originalname) var description = random_sentence(); - mongo.connect(dbname, function(err, db){ var name = randomWords({ exactly: 2 }); name = name.join(' '); db.collection("counters") - .findAndModify( + .findOneAndUpdate( { "_id": "pictureid" }, - [], { "$inc" : { "seq": 1 } }, + { upsert: true, returnOriginal: false }, function(err, doc) { - db.collection('pictures').insert( { + db.collection('pictures').insertOne( { '_id' : doc.value.seq, 'title' : req.file.originalname, 'image_url': req.file.path, @@ -517,7 +479,6 @@ api.post('/api/picture/upload', api_token_check, upload.single('file'), function } }) // photo insert }) //sequence call back - }) //db } //else @@ -552,14 +513,12 @@ api.get('/api/user/info', api_token_check, function(req, res){ } else { console.log('user id ' + req.user.user._id); - mongo.connect(dbname, function(err, db){ db.collection('users').find( { _id : req.user.user._id }).toArray(function(err, users){ if (err) { return err } if(users) { res.status(200).json(users); } }) - }); } }); @@ -581,7 +540,6 @@ api.put('/api/user/edit_info', api_token_check, function(req, res){ var setObj = { objForUpdate } console.log(setObj); - mongo.connect(dbname, function(err, db){ db.collection('users').findOneAndUpdate( { _id : Number(req.user.user._id) }, { $set: objForUpdate },function(err, userupdate){ if (err) { return err } @@ -590,13 +548,11 @@ api.put('/api/user/edit_info', api_token_check, function(req, res){ res.status(200).json({"message": "User Successfully Updated"}); } }) - }); } }); api.get('/api/other_user_info', api_token_check, function(req, res){ if (!req.query.user_id) { res.status(202).json({ 'error' : ' missing user_id '});} - mongo.connect(dbname, function(err, db){ db.collection('users').find( { _id : Number(req.query.user_id) }).toArray(function(err, user){ if (err) { return err } if(user) { @@ -610,13 +566,10 @@ api.get('/api/other_user_info', api_token_check, function(req, res){ } }) - }); - }); api.get('/api/user/pictures', api_token_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('pictures').find({ creator_id : req.user.user._id}).toArray(function(err, pictures){ if(err) { return err }; @@ -626,13 +579,11 @@ api.get('/api/user/pictures', api_token_check, function(req, res){ } }) - }) }); api.get('/api/user/likes', api_token_check, function(req, res){ console.log('like id ' + req.user._id); - mongo.connect(dbname, function(err, db){ db.collection('likes').find({ user_id : req.user.user._id}).toArray(function(err, likes){ if(err) { return err }; @@ -642,12 +593,10 @@ api.get('/api/user/likes', api_token_check, function(req, res){ } }) - }) }); api.get('/api/user/loves', api_token_check, function(req, res){ console.log('love id ' + req.user.user._id); - mongo.connect(dbname, function(err, db){ db.collection('loves').find({ user_id : req.user.user._id}).toArray(function(err, loves){ if(err) { return err }; @@ -657,7 +606,6 @@ api.get('/api/user/loves', api_token_check, function(req, res){ } }) - }) }); @@ -675,17 +623,14 @@ api.get('/about', function(req, res){ api.get('/api/admin/all_users', api_token_check, function(req, res){ //res.json(req.user); - mongo.connect(dbname, function(err, db){ db.collection('users').find().toArray(function(err, all_users){ if (err) { return err } if(all_users) { res.json(all_users); } }) - }); }); api.get('/api/admin/total_money', api_token_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('loves').find().toArray(function(err, loves){ if (err) { return err } if(loves) { @@ -693,7 +638,6 @@ api.get('/api/admin/total_money', api_token_check, function(req, res){ res.json(total); } }) - }); }) @@ -729,8 +673,7 @@ api.delete('/api/delete_photo', api_token_check, function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect(dbname, function(err, db){ - db.collection('pictures').remove( { _id : req.query.picture_id }, + db.collection('pictures').deleteOne( { _id : req.query.picture_id }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -740,7 +683,6 @@ api.delete('/api/delete_photo', api_token_check, function(req, res) { res.json('Photo ' + req.query.picture_id + ' deleted!'); } }) - }) } }); @@ -752,8 +694,7 @@ api.get('/user_delete_photo/', api_token_check, function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect(dbname, function(err, db){ - db.collection('pictures').remove( { _id : Number(req.query.picture_id) }, + db.collection('pictures').deleteOne( { _id : Number(req.query.picture_id) }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -765,7 +706,6 @@ api.get('/user_delete_photo/', api_token_check, function(req, res) { console.log(err); } }) - }) } }); @@ -843,19 +783,17 @@ app.listen(8000, function(){ console.log("Server running on pixidb, port %d in %s mode.", this.address().port, process.env.NODE_ENV); }); -mongo.connect("mongodb://pixidb:27017/Pixidb", function(err, db) { - if(!err) { - console.log("We are connected"); - } -}); +//mongo.connect("mongodb://pixidb:27017/Pixidb", function(err, client) { +// mongo.connect(function(err, client) { +// if(!err) { +// console.log("We are connected"); +// } +// }); function app_authenticate(user, pass, req, res){ console.log(user); - mongo.connect(dbname, function(err, db){ - if(err){ return err; } - - user = user.toLowerCase(); + user = user.toLowerCase(); db.collection('users').findOne({email: user, password: pass },function(err, authuser){ console.log(user); if(err){ return err; } @@ -870,8 +808,6 @@ function app_authenticate(user, pass, req, res){ else res.redirect('/login?user=' + user); }); - - }); } function random_sentence() { @@ -934,7 +870,6 @@ app.get('/admin/', function(req, res){ app.get('/admin/users/search', function(req, res){ console.log(req.query.search); - mongo.connect(dbname, function(err, db){ //db.collection('users').find({ $text : { $search: req.query.search} }) .toArray(function(err, search){ db.collection('users').find( {$or: [ { name: req.query.search }, { email : req.query.search } ] } ).toArray(function(err, search){ @@ -950,13 +885,10 @@ app.get('/admin/users/search', function(req, res){ console.log('no pics matched'); } }) - }) - }) app.get('/admin/likes/search', function(req, res){ console.log(req.query.search); - mongo.connect(dbname, function(err, db){ //db.collection('users').find({ $text : { $search: req.query.search} }) .toArray(function(err, search){ db.collection('likes').find( {$or: [ { picture_id: req.query.search }, { user_id : req.query.search } ] } ).toArray(function(err, search){ @@ -972,13 +904,10 @@ app.get('/admin/likes/search', function(req, res){ console.log('no pics matched'); } }) - }) - }) app.get('/admin/loves/search', function(req, res){ console.log(req.query.search); - mongo.connect(dbname, function(err, db){ //db.collection('users').find({ $text : { $search: req.query.search} }) .toArray(function(err, search){ db.collection('likes').find( {$or: [ { picture_id: req.query.search }, { user_id : req.query.search } ] } ).toArray(function(err, search){ @@ -994,15 +923,12 @@ app.get('/admin/loves/search', function(req, res){ console.log('no pics matched'); } }) - }) - }) app.post('/admin/money', function(req, res){ console.log(req.body.userid) - mongo.connect(dbname, function(err, db){ //db.collection('users').find({ $text : { $search: req.query.search} }) .toArray(function(err, search){ //db.collection('users').find( {email : req.query.search } ).toArray(function(err, search){ db.collection('users').findOneAndUpdate( @@ -1022,18 +948,12 @@ app.post('/admin/money', function(req, res){ } }) - }) }) app.post('/register', function(req, res){ if ((req.body.email) && (req.body.password)) { - mongo.connect(dbname, function(err, db){ - if(err){ - console.log('MongoDB connection error...'); - return err; - } - console.log('user ' + req.body.email + ' pass ' + req.body.password); + console.log('user ' + req.body.email + ' pass ' + req.body.password); var user = req.body.email; user = user.toLowerCase(); db.collection('users').findOne({ @@ -1047,12 +967,12 @@ app.post('/register', function(req, res){ var name = randomWords({ exactly: 2 }); name = name.join(''); db.collection("counters") - .findAndModify( - { "_id": "userid" }, - [], - { "$inc" : { "seq": 1 } }, + .findOneAndUpdate( + { "_id": "userid" }, + { "$inc" : { "seq": 1 } }, + { upsert: true, returnOriginal: false }, function(err, doc){ - db.collection('users').insert({ + db.collection('users').insertOne({ _id : doc.value.seq, email: user, password: req.body.password, @@ -1078,8 +998,6 @@ app.post('/register', function(req, res){ } // else }); //find one user - }); - } else { res.redirect('/register?user=' + req.body.email); @@ -1104,16 +1022,15 @@ app.post('/upload_photo', login_check, upload.single('file'), function(req, res, console.log(description); //res.json() - mongo.connect(dbname, function(err, db){ var name = randomWords({ exactly: 2 }); name = name.join(' '); db.collection("counters") - .findAndModify( - { "_id": "pictureid" }, - [], - { "$inc" : { "seq": 1 } }, + .findOneAndUpdate( + { "_id": "pictureid" }, + { "$inc" : { "seq": 1 } }, + { upsert: true, returnOriginal: false }, function(err, doc) { - db.collection('pictures').insert( { + db.collection('pictures').insertOne( { '_id' : doc.value.seq, 'title' : req.file.originalname, 'image_url' : req.file.path, @@ -1135,8 +1052,6 @@ app.post('/upload_photo', login_check, upload.single('file'), function(req, res, } }) // photo insert }) //sequence call back - }) //db - } //else }); @@ -1147,7 +1062,6 @@ app.post('/upload_photo', login_check, upload.single('file'), function(req, res, app.get('/search', function(req, res){ console.log('in search ' + req.query.query); - mongo.connect(dbname, function(err, db){ db.collection('pictures').find({ $text : { $search: req.query.query } }) .toArray(function(err, search){ if(err) { return err }; @@ -1161,19 +1075,15 @@ app.get('/search', function(req, res){ console.log('no pics matched'); } }) - }) }); app.get('/user_info', login_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('users').find( { _id : req.session.user._id }).toArray(function(err, users){ if (err) { return err } if(users) { res.json(users); } }) - }); - }); @@ -1192,7 +1102,6 @@ app.get('/user_profile/:userid', login_check, function(req, res){ app.get('/other_users_profile/:id', login_check, function(req, res) { console.log('in fxn ' + req.params.id); - mongo.connect(dbname, function(err, db){ db.collection('users').find( { _id : Number(req.params.id) }).toArray(function(err, user){ if (err) { return err } if(user) { @@ -1207,11 +1116,9 @@ app.get('/other_users_profile/:id', login_check, function(req, res) { } }) - }); }); app.get('/other_users_pictures/:id', login_check, function(req, res) { - mongo.connect(dbname, function(err, db){ db.collection('pictures').find( { creator_id : Number(req.params.id) }).toArray(function(err, pictures){ if (err) { return err } if(pictures) { @@ -1221,7 +1128,6 @@ app.get('/other_users_pictures/:id', login_check, function(req, res) { } }) - }); }); @@ -1238,7 +1144,6 @@ app.put('/user_info/:userid', login_check, function(req, res){ var setObj = { objForUpdate } console.log(setObj); - mongo.connect(dbname, function(err, db){ db.collection('users').findOneAndUpdate( { _id : Number(req.params.userid) }, { $set: objForUpdate },function(err, userupdate){ if (err) { return err } @@ -1247,14 +1152,11 @@ app.put('/user_info/:userid', login_check, function(req, res){ res.status(200).json(userupdate); } }) - }); - }); app.get('/user_pictures', login_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('pictures').find({ creator_id : req.session.user._id}).toArray(function(err, pictures){ if(err) { return err }; @@ -1264,11 +1166,9 @@ app.get('/user_pictures', login_check, function(req, res){ } }) - }) }); app.get('/user_likes', login_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('likes').find({ user_id : req.session.user._id}).toArray(function(err, likes){ if(err) { return err }; @@ -1278,12 +1178,10 @@ app.get('/user_likes', login_check, function(req, res){ } }) - }) }); app.get('/user_loves', login_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('loves').find({ user_id : req.session.user._id}).toArray(function(err, loves){ if(err) { return err }; @@ -1293,7 +1191,6 @@ app.get('/user_loves', login_check, function(req, res){ } }) - }) }); @@ -1337,7 +1234,6 @@ app.get('/pictures', function(req, res){ var json = {}; //queryMongo(res, 'Pixidb', 'pictures',"","") // = function(res, database, collectionName, field, value) - mongo.connect(dbname, function(err, db){ db.collection('pictures').find().sort({created_date: -1 }).toArray(function(err, pictures){ if(pictures) { //console.log(pictures); @@ -1346,39 +1242,31 @@ app.get('/pictures', function(req, res){ } }) - - }) - }); app.get('/admin/all_users', login_check, function(req, res){ //res.json(req.user); - mongo.connect(dbname, function(err, db){ db.collection('users').find().toArray(function(err, all_users){ if (err) { return err } if(all_users) { res.json(all_users); } }) - }); }); app.get('/all_users', login_check, function(req, res){ //res.json(req.user); - mongo.connect(dbname, function(err, db){ db.collection('users').find().toArray(function(err, all_users){ if (err) { return err } if(all_users) { res.json(all_users.length); } }) - }); }); app.get('/admin/total_money', login_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('loves').find().toArray(function(err, loves){ if (err) { return err } if(loves) { @@ -1386,11 +1274,9 @@ app.get('/admin/total_money', login_check, function(req, res){ res.json(total); } }) - }); }) app.get('/total_money', login_check, function(req, res){ - mongo.connect(dbname, function(err, db){ db.collection('loves').find().toArray(function(err, loves){ if (err) { return err } if(loves) { @@ -1398,13 +1284,11 @@ app.get('/total_money', login_check, function(req, res){ res.json(total); } }) - }); }) app.get('/picture/:picture_id/likes', login_check, function(req, res){ console.log('pic id ' + req.params.picture_id); //alert('ic'); - mongo.connect(dbname, function(err, db){ db.collection('likes').find({ picture_id : Number(req.params.picture_id)}).toArray(function(err, likes){ if(err) { return err }; @@ -1414,7 +1298,6 @@ app.get('/picture/:picture_id/likes', login_check, function(req, res){ } }) - }) }); app.get('/profile/:userid', login_check, function(req, res){ @@ -1431,7 +1314,6 @@ app.get('/like_photo/:picture_id', login_check, function(req, res){ } else { //db call- if like exists, delete it, if not exists, add it. - mongo.connect(dbname, function(err, db){ db.collection('likes').findOne( { 'user_id' : req.session.user._id, 'picture_id' : Number(req.params.picture_id) }, function(err, like) { @@ -1439,7 +1321,7 @@ app.get('/like_photo/:picture_id', login_check, function(req, res){ if(err) { return err }; if(!like) { //brand new like console.log('in create query ' + like); - db.collection('likes').insert({ + db.collection('likes').insertOne({ 'user_id': req.session.user._id, 'picture_id': Number(req.params.picture_id) }, function(err, new_like) { @@ -1464,7 +1346,7 @@ app.get('/like_photo/:picture_id', login_check, function(req, res){ else if(like) { //remove old like console.log('in delete query ' + like); //res.json('already liked'); - db.collection('likes').remove({ + db.collection('likes').deleteOne({ 'user_id': req.session.user._id, 'picture_id': Number(req.params.picture_id) }, function(err, remove_like){ @@ -1485,8 +1367,6 @@ app.get('/like_photo/:picture_id', login_check, function(req, res){ } }) - - }) } }); @@ -1498,23 +1378,21 @@ if(!req.params.picture_id) { } else { //db call- if like exists, delete it, if not exists, add it. - mongo.connect(dbname, function(err, db){ // see if user has money first. - console.log(req.session.user.email); + console.log(req.session.user.email); db.collection('users').findOne( { "email" : req.session.user.email }, function(err, usermoney) { if(err) { return err }; console.log('account ' + JSON.stringify(usermoney)); if(usermoney.account_balance >= .05) { //give money to the photo console.log('in create query ' + JSON.stringify(usermoney)); - db.collection('loves').insert({ + db.collection('loves').insertOne({ 'user_id': req.session.user._id, 'picture_id': req.params.picture_id, 'amount': .05 }, function(err, new_love) { db.collection('pictures') .findOneAndUpdate( { _id : Number(req.params.picture_id) }, - { $inc: { money_made : .05 } }, - { updated_date : new Date() }, + { $inc: { money_made : .05 }, $set: { updated_date: new Date() } }, function(err, picupdate){ if(err) { return err } else { @@ -1523,10 +1401,8 @@ if(!req.params.picture_id) { }) console.log(req.session.user._id); db.collection('users') - .findAndModify( { "_id" : req.session.user._id }, - [], + .findOneAndUpdate( { "_id" : req.session.user._id }, { "$inc": { "account_balance" : -.05 } }, - { updated_date : new Date() }, function(err, userupdate){ if(err) { return err } else { @@ -1543,8 +1419,6 @@ if(!req.params.picture_id) { } }) - - }) } }); @@ -1556,8 +1430,7 @@ app.delete('/user_delete_photo/:picture_id', login_check, function(req, res) { res.json('NO PICTURE SPECIFIED TO DELETE'); } else { - mongo.connect(dbname, function(err, db){ - db.collection('pictures').remove( { _id : Number(req.params.picture_id) }, + db.collection('pictures').deleteOne( { _id : Number(req.params.picture_id) }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -1569,7 +1442,6 @@ app.delete('/user_delete_photo/:picture_id', login_check, function(req, res) { console.log(err); } }) - }) } }); @@ -1580,14 +1452,13 @@ app.get('/user_delete_photo/:picture_id', login_check, function(req, res) { } else { - mongo.connect(dbname, function(err, db){ db.collection('pictures').findOne({ _id: Number(req.params.picture_id) }, function(err, result) { if (result){ console.log(result.creator_id); console.log(req.session.user._id); if (req.session.user._id == result.creator_id) { - db.collection('pictures').remove( { _id : Number(req.params.picture_id) }, + db.collection('pictures').deleteOne( { _id : Number(req.params.picture_id) }, function(err, delete_photo){ if (err) { return err } if (!delete_photo) { @@ -1608,7 +1479,6 @@ app.get('/user_delete_photo/:picture_id', login_check, function(req, res) { res.sendFile('./pixi.html', {root: __dirname}) } }) - }) } });