diff --git a/api/controllers/application.js b/api/controllers/application.js index 94b0555..d64d3fb 100644 --- a/api/controllers/application.js +++ b/api/controllers/application.js @@ -6,52 +6,126 @@ var Actions = require('../helpers/actions'); var Utils = require('../helpers/utils'); var request = require('request'); -var DEFAULT_PAGESIZE = 100; -var MAX_LIMIT = 1000; +var getSanitizedFields = function (fields) { + return _.remove(fields, function (f) { + return (_.indexOf(['_proponent', + 'agency', + 'areaHectares', + 'businessUnit', + 'centroid', + 'cl_file', + 'client', + 'description', + 'internal', + 'legalDescription', + 'location', + 'name', + 'publishDate', + 'purpose', + 'status', + 'subpurpose', + 'subtype', + 'tantalisID', + 'tenureStage', + 'type'], f) !== -1); + }); +} exports.protectedOptions = function (args, res, rest) { res.status(200).send(); } +exports.publicHead = function (args, res, next) { + // Build match query if on appId route + var query = {}; + var skip = null; + var limit = null; + + if (args.swagger.params.appId) { + query = Utils.buildQuery("_id", args.swagger.params.appId.value, query); + } else { + // Could be a bunch of results - enable pagination + var processedParameters = Utils.getSkipLimitParameters(args.swagger.params.pageSize, args.swagger.params.pageNum); + skip = processedParameters.skip; + limit = processedParameters.limit; + + if (args.swagger.params.tantalisId && args.swagger.params.tantalisId.value !== undefined) { + _.assignIn(query, { tantalisID: args.swagger.params.tantalisId.value }); + } + if (args.swagger.params.cl_file && args.swagger.params.cl_file.value !== undefined) { + _.assignIn(query, { cl_file: args.swagger.params.cl_file.value }); + } + } + + _.assignIn(query, { isDeleted: false }); + + Utils.runDataQuery('Application', + ['public'], + query, + ['_id', + 'tags'], // Fields + null, // sort warmup + null, // sort + skip, // skip + limit, // limit + true) // count + .then(function (data) { + // /api/comment/ route, return 200 OK with 0 items if necessary + if (!(args.swagger.params.appId && args.swagger.params.appId.value) || (data && data.length > 0)) { + res.setHeader('x-total-count', data && data.length > 0 ? data[0].total_items: 0); + return Actions.sendResponse(res, 200, data); + } else { + return Actions.sendResponse(res, 404, data); + } + }); +}; + exports.publicGet = function (args, res, next) { // Build match query if on appId route - var query = {}; - var skip = null; - var limit = null; + var query = {}; + var skip = null; + var limit = null; if (args.swagger.params.appId) { query = Utils.buildQuery("_id", args.swagger.params.appId.value, query); } else { // Could be a bunch of results - enable pagination - var pageSize = DEFAULT_PAGESIZE; - if (args.swagger.params.pageSize && args.swagger.params.pageSize.value !== undefined) { - if (args.swagger.params.pageSize.value > 0) { - pageSize = args.swagger.params.pageSize.value; - } + var processedParameters = Utils.getSkipLimitParameters(args.swagger.params.pageSize, args.swagger.params.pageNum); + skip = processedParameters.skip; + limit = processedParameters.limit; + + if (args.swagger.params.tantalisId && args.swagger.params.tantalisId.value !== undefined) { + _.assignIn(query, { tantalisID: args.swagger.params.tantalisId.value }); } - if (args.swagger.params.pageNum && args.swagger.params.pageNum.value !== undefined) { - if (args.swagger.params.pageNum.value >= 0) { - skip = (args.swagger.params.pageNum.value * pageSize); - limit = pageSize; - } + if (args.swagger.params.cl_file && args.swagger.params.cl_file.value !== undefined) { + _.assignIn(query, { cl_file: args.swagger.params.cl_file.value }); } } + _.assignIn(query, { isDeleted: false }); - getApplications(['public'], query, args.swagger.params.fields.value, skip, limit) + Utils.runDataQuery('Application', + ['public'], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + skip, // skip + limit, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); }; + exports.protectedGet = function(args, res, next) { var self = this; - self.scopes = args.swagger.params.auth_payload.scopes; var skip = null; var limit = null; var Application = mongoose.model('Application'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); // Build match query if on appId route var query = {}; @@ -59,22 +133,18 @@ exports.protectedGet = function(args, res, next) { query = Utils.buildQuery("_id", args.swagger.params.appId.value, query); } else { // Could be a bunch of results - enable pagination - var pageSize = DEFAULT_PAGESIZE; - if (args.swagger.params.pageSize && args.swagger.params.pageSize.value !== undefined) { - if (args.swagger.params.pageSize.value > 0) { - pageSize = args.swagger.params.pageSize.value; - } + var processedParameters = Utils.getSkipLimitParameters(args.swagger.params.pageSize, args.swagger.params.pageNum); + skip = processedParameters.skip; + limit = processedParameters.limit; + + if (args.swagger.params.tantalisId && args.swagger.params.tantalisId.value !== undefined) { + _.assignIn(query, { tantalisID: args.swagger.params.tantalisId.value }); } - if (args.swagger.params.pageNum && args.swagger.params.pageNum.value !== undefined) { - if (args.swagger.params.pageNum.value >= 0) { - skip = (args.swagger.params.pageNum.value * pageSize); - limit = pageSize; - } + if (args.swagger.params.cl_file && args.swagger.params.cl_file.value !== undefined) { + _.assignIn(query, { cl_file: args.swagger.params.cl_file.value }); } } - if (args.swagger.params.tantalisId && args.swagger.params.tantalisId.value !== undefined) { - _.assignIn(query, { tantalisID: args.swagger.params.tantalisId.value }); - } + // Unless they specifically ask for it, hide deleted results. if (args.swagger.params.isDeleted && args.swagger.params.isDeleted.value !== undefined) { _.assignIn(query, { isDeleted: args.swagger.params.isDeleted.value }); @@ -82,12 +152,64 @@ exports.protectedGet = function(args, res, next) { _.assignIn(query, { isDeleted: false }); } - getApplications(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value, skip, limit) + Utils.runDataQuery('Application', + args.swagger.operation["x-security-scopes"], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + skip, // skip + limit, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); }; +exports.protectedHead = function (args, res, next) { + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); + + // Build match query if on appId route + var query = {}; + if (args.swagger.params.appId) { + query = Utils.buildQuery("_id", args.swagger.params.appId.value, query); + } else { + if (args.swagger.params.tantalisId && args.swagger.params.tantalisId.value !== undefined) { + _.assignIn(query, { tantalisID: args.swagger.params.tantalisId.value }); + } + if (args.swagger.params.cl_file && args.swagger.params.cl_file.value !== undefined) { + _.assignIn(query, { cl_file: args.swagger.params.cl_file.value }); + } + } + + // Unless they specifically ask for it, hide deleted results. + if (args.swagger.params.isDeleted && args.swagger.params.isDeleted.value !== undefined) { + _.assignIn(query, { isDeleted: args.swagger.params.isDeleted.value }); + } else { + _.assignIn(query, { isDeleted: false }); + } + + Utils.runDataQuery('Application', + args.swagger.operation["x-security-scopes"], + query, + ['_id', + 'tags'], // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + true) // count + .then(function (data) { + // /api/comment/ route, return 200 OK with 0 items if necessary + if (!(args.swagger.params.appId && args.swagger.params.appId.value) || (data && data.length > 0)) { + res.setHeader('x-total-count', data && data.length > 0 ? data[0].total_items: 0); + return Actions.sendResponse(res, 200, data); + } else { + return Actions.sendResponse(res, 404, data); + } + }); +}; + exports.protectedDelete = function (args, res, next) { var appId = args.swagger.params.appId.value; defaultLog.info("Delete Application:", appId); @@ -178,7 +300,7 @@ exports.protectedPost = function (args, res, next) { // Define security tag defaults app.tags = [['sysadmin']]; app.internal.tags = [['sysadmin']]; - app._addedBy = args.swagger.params.auth_payload.userID; + app._addedBy = args.swagger.params.auth_payload.preferred_username.value; app.save() .then(function (savedApp) { // Get the shapes from BCGW for this DISPOSITION and save them into the feature collection @@ -335,76 +457,3 @@ exports.protectedUnPublish = function (args, res, next) { } }); }; -var getApplications = function (role, query, fields, skip, limit) { - return new Promise(function (resolve, reject) { - var Application = mongoose.model('Application'); - var projection = {}; - - // Fields we always return - var defaultFields = ['_id', - 'code', - 'tags']; - _.each(defaultFields, function (f) { - projection[f] = 1; - }); - - // Add requested fields - sanitize first by including only those that we can/want to return - var sanitizedFields = _.remove(fields, function (f) { - return (_.indexOf(['_proponent', - 'agency', - 'areaHectares', - 'businessUnit', - 'centroid', - 'cl_file', - 'client', - 'description', - 'internal', - 'legalDescription', - 'location', - 'name', - 'publishDate', - 'purpose', - 'status', - 'subpurpose', - 'subtype', - 'tantalisID', - 'tenureStage', - 'type'], f) !== -1); - }); - _.each(sanitizedFields, function (f) { - projection[f] = 1; - }); - - Application.aggregate([ - { - "$match": query - }, - { - "$project": projection - }, - { - $redact: { - $cond: { - if: { - $anyElementTrue: { - $map: { - input: "$tags" , - as: "fieldTag", - in: { $setIsSubset: [ "$$fieldTag", role ] } - } - } - }, - then: "$$DESCEND", - else: "$$PRUNE" - } - } - }, - { $skip: skip || 0 }, - { $limit: limit || MAX_LIMIT } - ]).exec() - .then(function (data) { - defaultLog.info("data:", data); - resolve(data); - }); - }); -}; diff --git a/api/controllers/comment.js b/api/controllers/comment.js index 7fca9b8..2de022e 100644 --- a/api/controllers/comment.js +++ b/api/controllers/comment.js @@ -5,8 +5,35 @@ var mongoose = require('mongoose'); var Actions = require('../helpers/actions'); var Utils = require('../helpers/utils'); -var DEFAULT_PAGESIZE = 100; -var MAX_LIMIT = 1000; +var getSanitizedFields = function (fields) { + return _.remove(fields, function (f) { + return (_.indexOf(['name', + 'commentNumber', + 'comment', + 'internal', + 'dateAdded', + 'commentAuthor', + 'review', + '_addedBy', + '_commentPeriod', + 'review', + 'commentStatus', + 'isDeleted'], f) !== -1); + }); +} + +// Function 'warms up' the query so that we can project the field that we're sorting on +// extract 'contactName' and lower-case it +var sortWarmUp = function (sort, fields) { + if (sort) { + var projection = {}; + _.each(fields, function (f) { + projection[f] = 1; + }); + return sort.contactName ? { $project: Object.assign({ contactName: { $toLower: "$commentAuthor.contactName" } }, projection) } : null; + } + return null; +} exports.protectedOptions = function (args, res, rest) { res.status(200).send(); @@ -42,30 +69,67 @@ exports.publicGet = function (args, res, next) { }, this); } - var pageSize = DEFAULT_PAGESIZE; - if (args.swagger.params.pageSize && args.swagger.params.pageSize.value !== undefined) { - if (args.swagger.params.pageSize.value > 0) { - pageSize = args.swagger.params.pageSize.value; - } - } - if (args.swagger.params.pageNum && args.swagger.params.pageNum.value !== undefined) { - if (args.swagger.params.pageNum.value >= 0) { - skip = (args.swagger.params.pageNum.value * pageSize); - limit = pageSize; - } - } + var processedParameters = Utils.getSkipLimitParameters(args.swagger.params.pageSize, args.swagger.params.pageNum); + skip = processedParameters.skip; + limit = processedParameters.limit; } - // defaultLog.info("query:", query); - getComments(['public'], query, args.swagger.params.fields.value, sort, skip, limit) + const fields = getSanitizedFields(args.swagger.params.fields.value); + + Utils.runDataQuery('Comment', + ['public'], + query, + fields, // Fields + sortWarmUp(sort, fields), + sort, // sort + skip, // skip + limit, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); }; -exports.protectedGet = function (args, res, next) { - // defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); +exports.protectedHead = function (args, res, next) { + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); + + // Build match query if on CommentPeriodId route + var query = {}; + if (args.swagger.params.CommentId && args.swagger.params.CommentId.value) { + query = Utils.buildQuery("_id", args.swagger.params.CommentId.value, query); + } + if (args.swagger.params._commentPeriod && args.swagger.params._commentPeriod.value) { + query = Utils.buildQuery("_commentPeriod", args.swagger.params._commentPeriod.value, query); + } + // Unless they specifically ask for it, hide deleted results. + if (args.swagger.params.isDeleted && args.swagger.params.isDeleted.value != undefined) { + _.assignIn(query, { isDeleted: args.swagger.params.isDeleted.value }); + } else { + _.assignIn(query, { isDeleted: false }); + } + + Utils.runDataQuery('Comment', + args.swagger.operation["x-security-scopes"], + query, + ['_id', + 'tags'], // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + true) // count + .then(function (data) { + // /api/comment/ route, return 200 OK with 0 items if necessary + if (!(args.swagger.params.CommentId && args.swagger.params.CommentId.value) || (data && data.length > 0)) { + res.setHeader('x-total-count', data && data.length > 0 ? data[0].total_items: 0); + return Actions.sendResponse(res, 200, data); + } else {s + return Actions.sendResponse(res, 404, data); + } + }); +}; +exports.protectedGet = function (args, res, next) { var query = {}, sort = {}; var skip = null, limit = null; @@ -95,26 +159,26 @@ exports.protectedGet = function (args, res, next) { case 'contactName': sort[sort_by] = order_by; break; - } + } }, this); } - var pageSize = DEFAULT_PAGESIZE; - if (args.swagger.params.pageSize && args.swagger.params.pageSize.value !== undefined) { - if (args.swagger.params.pageSize.value > 0) { - pageSize = args.swagger.params.pageSize.value; - } - } - if (args.swagger.params.pageNum && args.swagger.params.pageNum.value !== undefined) { - if (args.swagger.params.pageNum.value >= 0) { - skip = (args.swagger.params.pageNum.value * pageSize); - limit = pageSize; - } - } + var processedParameters = Utils.getSkipLimitParameters(args.swagger.params.pageSize, args.swagger.params.pageNum); + skip = processedParameters.skip; + limit = processedParameters.limit; } - // defaultLog.info("query:", query); - getComments(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value, sort, skip, limit) + const fields = getSanitizedFields(args.swagger.params.fields.value); + + Utils.runDataQuery('Comment', + args.swagger.operation["x-security-scopes"], + query, + fields, // Fields + sortWarmUp(sort, fields), + sort, // sort + skip, // skip + limit, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -147,7 +211,7 @@ exports.unProtectedPost = function (args, res, next) { comment.commentAuthor.internal.tags = [['sysadmin']]; // Not needed until we tie user profiles in. - // comment._addedBy = args.swagger.params.auth_payload.userID; + // comment._addedBy = args.swagger.params.auth_payload.preferred_username.value; comment.save() .then(function (c) { @@ -258,71 +322,3 @@ exports.protectedUnPublish = function (args, res, next) { } }); }; - -var getComments = function (role, query, fields, sort, skip, limit) { - return new Promise(function (resolve, reject) { - var Comment = mongoose.model('Comment'); - var projection = {}; - - // Fields we always return - var defaultFields = ['_id', - 'tags']; - _.each(defaultFields, function (f) { - projection[f] = 1; - }); - - // Add requested fields - sanitize first by including only those that we can/want to return - var sanitizedFields = _.remove(fields, function (f) { - return (_.indexOf(['name', - 'commentNumber', - 'comment', - 'internal', - 'dateAdded', - 'commentAuthor', - 'review', - '_addedBy', - '_commentPeriod', - 'review', - 'commentStatus', - 'isDeleted'], f) !== -1); - }); - _.each(sanitizedFields, function (f) { - projection[f] = 1; - }); - - // use compact() to remove null elements - var aggregations = _.compact([ - { $match: query }, - { $project: projection }, - { $redact: { - $cond: { - if: { - $anyElementTrue: { - $map: { - input: "$tags" , - as: "fieldTag", - in: { $setIsSubset: [ "$$fieldTag", role ] } - } - } - }, - then: "$$DESCEND", - else: "$$PRUNE" - } - } - }, - // extract 'contactName' and lower-case it so we can sort on it - sort && sort.contactName ? { $project: Object.assign({ contactName: { $toLower: "$commentAuthor.contactName" } }, projection) } : null, - !_.isEmpty(sort) ? { $sort: sort } : null, - // project with original keys to exclude 'contactName' - sort && sort.contactName ? { $project: projection } : null, - { $skip: skip || 0 }, - { $limit: limit || MAX_LIMIT } - ]); - - Comment.aggregate(aggregations).exec() - .then(function (data) { - defaultLog.info("data:", data); - resolve(data); - }); - }); -}; diff --git a/api/controllers/commentperiod.js b/api/controllers/commentperiod.js index 6d965ee..dad1462 100644 --- a/api/controllers/commentperiod.js +++ b/api/controllers/commentperiod.js @@ -5,6 +5,19 @@ var mongoose = require('mongoose'); var Actions = require('../helpers/actions'); var Utils = require('../helpers/utils'); +var getSanitizedFields = function (fields) { + return _.remove(fields, function (f) { + return (_.indexOf(['name', + 'startDate', + 'endDate', + 'description', + '_addedBy', + '_application', + 'internal', + 'isDeleted'], f) !== -1); + }); +} + exports.protectedOptions = function (args, res, rest) { res.status(200).send(); } @@ -20,15 +33,63 @@ exports.publicGet = function (args, res, next) { } _.assignIn(query, { isDeleted: false }); - getComments(['public'], query, args.swagger.params.fields.value) + Utils.runDataQuery('CommentPeriod', + ['public'], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); }; + +exports.protectedHead = function (args, res, next) { + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); + + // Build match query if on CommentPeriodId route + var query = {}; + if (args.swagger.params.CommentPeriodId && args.swagger.params.CommentPeriodId.value) { + query = Utils.buildQuery("_id", args.swagger.params.CommentPeriodId.value, query); + } + if (args.swagger.params._application && args.swagger.params._application.value) { + query = Utils.buildQuery("_application", args.swagger.params._application.value, query); + } + // Unless they specifically ask for it, hide deleted results. + if (args.swagger.params.isDeleted && args.swagger.params.isDeleted.value != undefined) { + _.assignIn(query, { isDeleted: args.swagger.params.isDeleted.value }); + } else { + _.assignIn(query, { isDeleted: false }); + } + + Utils.runDataQuery('CommentPeriod', + args.swagger.operation["x-security-scopes"], + query, + ['_id', + 'tags'], // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + true) // count + .then(function (data) { + // /api/commentperiod/ route, return 200 OK with 0 items if necessary + if (!(args.swagger.params.CommentPeriodId && args.swagger.params.CommentPeriodId.value) || (data && data.length > 0)) { + res.setHeader('x-total-count', data && data.length > 0 ? data[0].total_items: 0); + return Actions.sendResponse(res, 200, data); + } else { + return Actions.sendResponse(res, 404, data); + } + }); +} + exports.protectedGet = function(args, res, next) { var Comment = mongoose.model('CommentPeriod'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); // Build match query if on CommentPeriodId route var query = {}; @@ -45,7 +106,15 @@ exports.protectedGet = function(args, res, next) { _.assignIn(query, { isDeleted: false }); } - getComments(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value) + Utils.runDataQuery('CommentPeriod', + args.swagger.operation["x-security-scopes"], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -55,11 +124,12 @@ exports.protectedGet = function(args, res, next) { exports.protectedPost = function (args, res, next) { var obj = args.swagger.params._commentPeriod.value; defaultLog.info("Incoming new object:", obj); + defaultLog.info("args.swagger.params.auth_payload:", args.swagger.params.auth_payload); if (!obj.internal) { obj.internal = {}; } - obj.internal._addedBy = mongoose.Types.ObjectId(args.swagger.params.auth_payload.userID.value); - obj._addedBy = mongoose.Types.ObjectId(args.swagger.params.auth_payload.userID.value); + obj.internal._addedBy = args.swagger.params.auth_payload.preferred_username.value; + obj._addedBy = args.swagger.params.auth_payload.preferred_username.value; var CommentPeriod = mongoose.model('CommentPeriod'); var commentperiod = new CommentPeriod(obj); @@ -67,7 +137,8 @@ exports.protectedPost = function (args, res, next) { // Define security tag defaults commentperiod.tags = [['sysadmin']]; commentperiod.internal.tags = [['sysadmin']]; - commentperiod._addedBy = args.swagger.params.auth_payload.userID; + commentperiod.internal._addedBy = args.swagger.params.auth_payload.preferred_username; + commentperiod._addedBy = args.swagger.params.auth_payload.preferred_username; commentperiod.save() .then(function (c) { // defaultLog.info("Saved new CommentPeriod object:", c); @@ -180,62 +251,3 @@ exports.protectedUnPublish = function (args, res, next) { } }); }; -var getComments = function (role, query, fields) { - return new Promise(function (resolve, reject) { - var commentperiod = mongoose.model('CommentPeriod'); - var projection = {}; - - // Fields we always return - var defaultFields = ['_id', - 'code', - 'tags']; - _.each(defaultFields, function (f) { - projection[f] = 1; - }); - - // Add requested fields - sanitize first by including only those that we can/want to return - var sanitizedFields = _.remove(fields, function (f) { - return (_.indexOf(['name', - 'startDate', - 'endDate', - 'description', - '_addedBy', - '_application', - 'internal', - 'isDeleted'], f) !== -1); - }); - _.each(sanitizedFields, function (f) { - projection[f] = 1; - }); - - commentperiod.aggregate([ - { - "$match": query - }, - { - "$project": projection - }, - { - $redact: { - $cond: { - if: { - $anyElementTrue: { - $map: { - input: "$tags" , - as: "fieldTag", - in: { $setIsSubset: [ "$$fieldTag", role ] } - } - } - }, - then: "$$DESCEND", - else: "$$PRUNE" - } - } - } - ]).exec() - .then(function (data) { - defaultLog.info("data:", data); - resolve(data); - }); - }); -}; \ No newline at end of file diff --git a/api/controllers/decision.js b/api/controllers/decision.js index 42aabd6..8bac84b 100644 --- a/api/controllers/decision.js +++ b/api/controllers/decision.js @@ -5,6 +5,17 @@ var mongoose = require('mongoose'); var Actions = require('../helpers/actions'); var Utils = require('../helpers/utils'); +var getSanitizedFields = function (fields) { + return _.remove(fields, function (f) { + return (_.indexOf(['name', + '_addedBy', + '_application', + 'description', + 'decisionDate', + 'code'], f) !== -1); + }); +} + exports.protectedOptions = function (args, res, rest) { res.status(200).send(); } @@ -20,18 +31,65 @@ exports.publicGet = function (args, res, next) { } _.assignIn(query, { isDeleted: false }); - getDecisions(['public'], query, args.swagger.params.fields.value) + Utils.runDataQuery('Decision', + ['public'], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); }; -exports.protectedGet = function(args, res, next) { - var self = this; - self.scopes = args.swagger.params.auth_payload.scopes; +exports.protectedHead = function (args, res, next) { + var Decision = mongoose.model('Decision'); + + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); + + // Build match query if on decisionId route + var query = {}; + if (args.swagger.params.decisionId) { + query = Utils.buildQuery("_id", args.swagger.params.decisionId.value, query); + } + if (args.swagger.params._application && args.swagger.params._application.value) { + query = Utils.buildQuery("_application", args.swagger.params._application.value, query); + } + // Unless they specifically ask for it, hide deleted results. + if (args.swagger.params.isDeleted && args.swagger.params.isDeleted.value != undefined) { + _.assignIn(query, { isDeleted: args.swagger.params.isDeleted.value }); + } else { + _.assignIn(query, { isDeleted: false }); + } + + Utils.runDataQuery('Decision', + args.swagger.operation["x-security-scopes"], + query, + ['_id', + 'tags'], // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + true) // count + .then(function (data) { + // /api/commentperiod/ route, return 200 OK with 0 items if necessary + if (!(args.swagger.params.decisionId && args.swagger.params.decisionId.value) || (data && data.length > 0)) { + res.setHeader('x-total-count', data && data.length > 0 ? data[0].total_items: 0); + return Actions.sendResponse(res, 200, data); + } else { + return Actions.sendResponse(res, 404, data); + } + }); +} + +exports.protectedGet = function(args, res, next) { var Decision = mongoose.model('Decision'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); // Build match query if on decisionId route var query = {}; @@ -48,7 +106,15 @@ exports.protectedGet = function(args, res, next) { _.assignIn(query, { isDeleted: false }); } - getDecisions(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value) + Utils.runDataQuery('Decision', + args.swagger.operation["x-security-scopes"], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -166,61 +232,3 @@ exports.protectedUnPublish = function (args, res, next) { } }); }; -var getDecisions = function (role, query, fields) { - return new Promise(function (resolve, reject) { - var Decision = mongoose.model('Decision'); - var projection = {}; - - // Fields we always return - var defaultFields = ['_id', - 'code', - 'name', - 'tags']; - _.each(defaultFields, function (f) { - projection[f] = 1; - }); - - // Add requested fields - sanitize first by including only those that we can/want to return - var sanitizedFields = _.remove(fields, function (f) { - return (_.indexOf(['name', - '_addedBy', - '_application', - 'description', - 'decisionDate', - 'code'], f) !== -1); - }); - _.each(sanitizedFields, function (f) { - projection[f] = 1; - }); - - Decision.aggregate([ - { - "$match": query - }, - { - "$project": projection - }, - { - $redact: { - $cond: { - if: { - $anyElementTrue: { - $map: { - input: "$tags" , - as: "fieldTag", - in: { $setIsSubset: [ "$$fieldTag", role ] } - } - } - }, - then: "$$DESCEND", - else: "$$PRUNE" - } - } - } - ]).exec() - .then(function (data) { - defaultLog.info("data:", data); - resolve(data); - }); - }); -}; \ No newline at end of file diff --git a/api/controllers/document.js b/api/controllers/document.js index ca15287..7774b65 100644 --- a/api/controllers/document.js +++ b/api/controllers/document.js @@ -12,6 +12,16 @@ var fs = require('fs'); var uploadDir = process.env.UPLOAD_DIRECTORY || "./uploads/"; var ENABLE_VIRUS_SCANNING = process.env.ENABLE_VIRUS_SCANNING || false; +var getSanitizedFields = function (fields) { + return _.remove(fields, function (f) { + return (_.indexOf(['displayName', + 'internalURL', + 'passedAVCheck', + 'documentFileName', + 'internalMime'], f) !== -1); + }); +} + exports.protectedOptions = function (args, res, rest) { res.status(200).send(); } @@ -33,7 +43,15 @@ exports.publicGet = function (args, res, next) { } _.assignIn(query, { isDeleted: false }); - getDocuments(['public'], query, args.swagger.params.fields.value) + Utils.runDataQuery('Document', + ['public'], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -91,13 +109,61 @@ exports.unProtectedPost = function(args, res, next) { return Actions.sendResponse(res, 400, e); } }; + +exports.protectedHead = function (args, res, next) { + var Document = mongoose.model('Document'); + + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); + + // Build match query if on docId route + var query = {}; + if (args.swagger.params.docId) { + query = Utils.buildQuery("_id", args.swagger.params.docId.value, query); + } + if (args.swagger.params._application && args.swagger.params._application.value) { + query = Utils.buildQuery("_application", args.swagger.params._application.value, query); + } + if (args.swagger.params._comment && args.swagger.params._comment.value) { + query = Utils.buildQuery("_comment", args.swagger.params._comment.value, query); + } + if (args.swagger.params._decision && args.swagger.params._decision.value) { + query = Utils.buildQuery("_decision", args.swagger.params._decision.value, query); + } + // Unless they specifically ask for it, hide deleted results. + if (args.swagger.params.isDeleted && args.swagger.params.isDeleted.value != undefined) { + _.assignIn(query, { isDeleted: args.swagger.params.isDeleted.value }); + } else { + _.assignIn(query, { isDeleted: false }); + } + + Utils.runDataQuery('Document', + args.swagger.operation["x-security-scopes"], + query, + ['_id', + 'tags'], // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + true) // count + .then(function (data) { + // /api/commentperiod/ route, return 200 OK with 0 items if necessary + if (!(args.swagger.params.docId && args.swagger.params.docId.value) || (data && data.length > 0)) { + res.setHeader('x-total-count', data && data.length > 0 ? data[0].total_items: 0); + return Actions.sendResponse(res, 200, data); + } else { + return Actions.sendResponse(res, 404, data); + } + }); +} + exports.protectedGet = function(args, res, next) { var self = this; - self.scopes = args.swagger.params.auth_payload.scopes; + self.scopes = args.swagger.operation["x-security-scopes"]; var Document = mongoose.model('Document'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); // Build match query if on docId route var query = {}; @@ -120,7 +186,15 @@ exports.protectedGet = function(args, res, next) { _.assignIn(query, { isDeleted: false }); } - getDocuments(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value) + Utils.runDataQuery('Document', + args.swagger.operation["x-security-scopes"], + query, + getSanitizedFields(args.swagger.params.fields.value), // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -137,7 +211,15 @@ exports.publicDownload = function(args, res, next) { return Actions.sendResponse(res, 404, {}); } - getDocuments(['public'], query, ["internalURL", "documentFileName", "internalMime"]) + Utils.runDataQuery('Document', + ['public'], + query, + ["internalURL", "documentFileName", "internalMime"], // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { if (data && data.length === 1) { var blob = data[0]; @@ -157,11 +239,11 @@ exports.publicDownload = function(args, res, next) { exports.protectedDownload = function(args, res, next) { var self = this; - self.scopes = args.swagger.params.auth_payload.scopes; + self.scopes = args.swagger.operation["x-security-scopes"]; var Document = mongoose.model('Document'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); // Build match query if on docId route var query = {}; @@ -169,7 +251,15 @@ exports.protectedDownload = function(args, res, next) { query = Utils.buildQuery("_id", args.swagger.params.docId.value, query); } - getDocuments(args.swagger.params.auth_payload.scopes, query, ["internalURL", "documentFileName", "internalMime"]) + Utils.runDataQuery('Document', + args.swagger.operation["x-security-scopes"], + query, + ["internalURL", "documentFileName", "internalMime"], // Fields + null, // sort warmup + null, // sort + null, // skip + null, // limit + false) // count .then(function (data) { if (data && data.length === 1) { var blob = data[0]; @@ -227,7 +317,7 @@ exports.protectedPost = function (args, res, next) { doc.internalURL = uploadDir+guid+"."+ext; doc.passedAVCheck = true; // Update who did this? - doc._addedBy = args.swagger.params.auth_payload.userID; + doc._addedBy = args.swagger.params.auth_payload.preferred_username.value; doc.save() .then(function (d) { defaultLog.info("Saved new document object:", d._id); @@ -350,7 +440,7 @@ exports.protectedPut = function (args, res, next) { // Update file location obj.internalURL = uploadDir+guid+"."+ext; // Update who did this? - obj._addedBy = args.swagger.params.auth_payload.userID; + obj._addedBy = args.swagger.params.auth_payload.preferred_username.value; doc._application = _application; doc._comment = _comment; doc._decision = _decision; @@ -375,59 +465,3 @@ exports.protectedPut = function (args, res, next) { return Actions.sendResponse(res, 400, e); } } - -var getDocuments = function (role, query, fields) { - return new Promise(function (resolve, reject) { - var Document = mongoose.model('Document'); - var projection = {}; - - // Fields we always return - var defaultFields = ['_id', - 'tags']; - _.each(defaultFields, function (f) { - projection[f] = 1; - }); - - // Add requested fields - sanitize first by including only those that we can/want to return - var sanitizedFields = _.remove(fields, function (f) { - return (_.indexOf(['displayName', - 'internalURL', - 'passedAVCheck', - 'documentFileName', - 'internalMime'], f) !== -1); - }); - _.each(sanitizedFields, function (f) { - projection[f] = 1; - }); - - Document.aggregate([ - { - "$match": query - }, - { - "$project": projection - }, - { - $redact: { - $cond: { - if: { - $anyElementTrue: { - $map: { - input: "$tags" , - as: "fieldTag", - in: { $setIsSubset: [ "$$fieldTag", role ] } - } - } - }, - then: "$$DESCEND", - else: "$$PRUNE" - } - } - } - ]).exec() - .then(function (data) { - defaultLog.info("data:", data); - resolve(data); - }); - }); -}; \ No newline at end of file diff --git a/api/controllers/feature.js b/api/controllers/feature.js index 92a9cfa..989922a 100644 --- a/api/controllers/feature.js +++ b/api/controllers/feature.js @@ -40,11 +40,11 @@ exports.publicGet = function (args, res, next) { }; exports.protectedGet = function(args, res, next) { var self = this; - self.scopes = args.swagger.params.auth_payload.scopes; + self.scopes = args.swagger.operation["x-security-scopes"]; var Feature = mongoose.model('Feature'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); var query = {}; // Build match query if on featureId route @@ -74,7 +74,7 @@ exports.protectedGet = function(args, res, next) { _.assignIn(query, { isDeleted: false }); } - getFeatures(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value) + getFeatures(args.swagger.operation["x-security-scopes"], query, args.swagger.params.fields.value) .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -82,7 +82,7 @@ exports.protectedGet = function(args, res, next) { exports.protectedDelete = function (args, res, next) { defaultLog.info("Deleting a Feature(s)"); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); var Feature = mongoose.model('Feature'); var query = {}; diff --git a/api/controllers/organization.js b/api/controllers/organization.js index be656f4..1fa9b43 100644 --- a/api/controllers/organization.js +++ b/api/controllers/organization.js @@ -23,11 +23,11 @@ exports.publicGet = function (args, res, next) { }; exports.protectedGet = function(args, res, next) { var self = this; - self.scopes = args.swagger.params.auth_payload.scopes; + self.scopes = args.swagger.operation["x-security-scopes"]; var Organization = mongoose.model('Organization'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); // Build match query if on orgId route var query = {}; @@ -35,7 +35,7 @@ exports.protectedGet = function(args, res, next) { query = Utils.buildQuery("_id", args.swagger.params.orgId.value, query); } - getOrganizations(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value) + getOrganizations(args.swagger.operation["x-security-scopes"], query, args.swagger.params.fields.value) .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -51,7 +51,7 @@ exports.protectedPost = function (args, res, next) { // Define security tag defaults app.tags = [['sysadmin']]; // Update who did this? - app._addedBy = args.swagger.params.auth_payload.userID; + app._addedBy = args.swagger.params.auth_payload.preferred_username.value; app.save() .then(function (a) { // defaultLog.info("Saved new organization object:", a); diff --git a/api/controllers/user.js b/api/controllers/user.js index b529df0..ba41086 100644 --- a/api/controllers/user.js +++ b/api/controllers/user.js @@ -11,11 +11,11 @@ exports.protectedOptions = function (args, res, rest) { exports.protectedGet = function(args, res, next) { var self = this; - self.scopes = args.swagger.params.auth_payload.scopes; + self.scopes = args.swagger.operation["x-security-scopes"]; var User = mongoose.model('User'); - defaultLog.info("args.swagger.params:", args.swagger.params.auth_payload.scopes); + defaultLog.info("args.swagger.params:", args.swagger.operation["x-security-scopes"]); // Build match query if on userId route var query = {}; @@ -23,7 +23,7 @@ exports.protectedGet = function(args, res, next) { query = Utils.buildQuery("_id", args.swagger.params.userId.value, query); } - getUsers(args.swagger.params.auth_payload.scopes, query, args.swagger.params.fields.value) + getUsers(args.swagger.operation["x-security-scopes"], query, args.swagger.params.fields.value) .then(function (data) { return Actions.sendResponse(res, 200, data); }); @@ -33,6 +33,7 @@ exports.protectedGet = function(args, res, next) { exports.protectedPost = function (args, res, next) { var obj = args.swagger.params.user.value; defaultLog.info("Incoming new object:", obj); + console.log("Incoming updated object:", obj); var User = mongoose.model('User'); var user = new User(obj); @@ -54,6 +55,8 @@ exports.protectedPut = function (args, res, next) { var objId = args.swagger.params.userId.value; defaultLog.info("ObjectID:", args.swagger.params.userId.value); + this.scopes = args.swagger.operation["x-security-scopes"]; + var obj = args.swagger.params.user.value; // NB: Don't strip security tags on protectedPut. Only sysadmins // Can call this route. diff --git a/api/helpers/auth.js b/api/helpers/auth.js index 0408ed0..415add1 100644 --- a/api/helpers/auth.js +++ b/api/helpers/auth.js @@ -1,14 +1,18 @@ "use strict"; var jwt = require("jsonwebtoken"); -var ISSUER = "nrts-prc-api"; +const jwksClient = require('jwks-rsa'); + +var ISSUER = process.env.SSO_ISSUER || "https://sso-dev.pathfinder.gov.bc.ca/auth/realms/prc"; +var JWKSURI = process.env.SSO_JWKSURI || "https://sso-dev.pathfinder.gov.bc.ca/auth/realms/prc/protocol/openid-connect/certs"; var JWT_SIGN_EXPIRY = process.env.JWT_SIGN_EXPIRY || "1440"; // 24 hours in minutes. var SECRET = process.env.SECRET || "defaultSecret"; +var KEYCLOAK_ENABLED = process.env.KEYCLOAK_ENABLED || "false"; var winston = require('winston'); var defaultLog = winston.loggers.get('default'); exports.verifyToken = function(req, authOrSecDef, token, callback) { - defaultLog.info("verifying token"); + defaultLog.info("verifying token", token); // scopes/roles defined for the current endpoint var currentScopes = req.swagger.operation["x-security-scopes"]; function sendError() { @@ -20,53 +24,82 @@ exports.verifyToken = function(req, authOrSecDef, token, callback) { if (token && token.indexOf("Bearer ") == 0) { var tokenString = token.split(" ")[1]; - jwt.verify(tokenString, SECRET, function( - verificationError, - decodedToken - ) { - // check if the JWT was verified correctly - if ( - verificationError == null && - Array.isArray(currentScopes) && - decodedToken && - decodedToken.scopes - ) { - defaultLog.info("JWT decoded:", decodedToken); - // MBL: TODO - Check if JTI is revoked from other service? - - // check if the role is valid for this endpoint - var roleMatch = currentScopes.some(r=> decodedToken.scopes.indexOf(r) >= 0) - defaultLog.info("currentScopes", currentScopes); - defaultLog.info("decodedToken.scopes", decodedToken.scopes); - defaultLog.info("role match", roleMatch); - - // check if the issuer matches - var issuerMatch = decodedToken.iss == ISSUER; - defaultLog.info("decodedToken.iss", decodedToken.iss); - defaultLog.info("ISSUER", ISSUER); - defaultLog.info("issuerMatch", issuerMatch); - - if (roleMatch && issuerMatch) { - // add the token to the request so that we can access it in the endpoint code if necessary - req.swagger.params.auth_payload = decodedToken; - defaultLog.info("JWT Verified."); - return callback(); + // If Keycloak is enabled, get the JWKSURI and process accordingly. Else + // use local environment JWT configuration. + if (KEYCLOAK_ENABLED === "true") { + defaultLog.info("Keycloak Enabled, remote JWT verification."); + const client = jwksClient({ + strictSsl: true, // Default value + jwksUri: JWKSURI + }); + + const kid = jwt.decode(tokenString, { complete: true }).header.kid; + + client.getSigningKey(kid, (err, key) => { + if (err) { + defaultLog.error("Signing Key Error:", err); + callback(sendError()); } else { - defaultLog.info("JWT Role/Issuer mismatch."); - return callback(sendError()); + const signingKey = key.publicKey || key.rsaPublicKey; + + _verifySecret(currentScopes, tokenString, signingKey, req, callback, sendError); } - } else { - // return the error in the callback if the JWT was not verified - defaultLog.info("JWT Verification Err:", verificationError); - return callback(sendError()); - } - }); + }); + } else { + defaultLog.info("proceeding with local JWT verification:", tokenString); + _verifySecret(currentScopes, tokenString, SECRET, req, callback, sendError); + } } else { - defaultLog.info("Authorization Header Error."); + defaultLog.error("Token didn't have a bearer."); return callback(sendError()); } }; +function _verifySecret (currentScopes, tokenString, secret, req, callback, sendError) { + jwt.verify(tokenString, secret, function( + verificationError, + decodedToken + ) { + // defaultLog.info("verificationError:", verificationError); + // defaultLog.info("decodedToken:", decodedToken); + + // check if the JWT was verified correctly + if (verificationError == null && + Array.isArray(currentScopes) && + decodedToken && + decodedToken.realm_access.roles + ) { + defaultLog.info("JWT decoded:", decodedToken); + + // check if the role is valid for this endpoint + var roleMatch = currentScopes.some(r=> decodedToken.realm_access.roles.indexOf(r) >= 0) + defaultLog.info("currentScopes", currentScopes); + defaultLog.info("decodedToken.realm_access.roles", decodedToken.realm_access.roles); + defaultLog.info("role match", roleMatch); + + // check if the dissuer matches + var issuerMatch = decodedToken.iss == ISSUER; + defaultLog.info("decodedToken.iss", decodedToken.iss); + defaultLog.info("ISSUER", ISSUER); + defaultLog.info("issuerMatch", issuerMatch); + + if (roleMatch && issuerMatch) { + // add the token to the request so that we can access it in the endpoint code if necessary + req.swagger.params.auth_payload = decodedToken; + defaultLog.info("JWT Verified."); + return callback(null); + } else { + defaultLog.info("JWT Role/Issuer mismatch."); + return callback(sendError()); + } + } else { + // return the error in the callback if the JWT was not verified + defaultLog.info("JWT Verification Err:", verificationError); + return callback(sendError()); + } + }); +} + exports.issueToken = function(user, deviceId, scopes) { @@ -79,12 +112,15 @@ exports.issueToken = function(user, defaultLog.info("JTI:", jti); var payload = { - username: user.username, + name: user.username, + preferred_username: user.username, userID: user._id, deviceId: deviceId, jti: jti, iss: ISSUER, - scopes: scopes + realm_access: { + roles: scopes + } }; var token = jwt.sign(payload, diff --git a/api/helpers/models/application.js b/api/helpers/models/application.js index 3f134c9..b8425c7 100644 --- a/api/helpers/models/application.js +++ b/api/helpers/models/application.js @@ -1,5 +1,5 @@ module.exports = require ('../models')('Application', { - _addedBy : { type:'ObjectId', ref:'User', default:null }, + _addedBy : { type: String, default:null }, _proponent : { type:'ObjectId', ref:'Organization', default:null }, agency : { type:String, default: '' }, diff --git a/api/helpers/models/comment.js b/api/helpers/models/comment.js index 6470e47..d326d92 100644 --- a/api/helpers/models/comment.js +++ b/api/helpers/models/comment.js @@ -1,5 +1,5 @@ module.exports = require('../models')('Comment', { - _addedBy : { type: 'ObjectId', ref: 'User', default: null }, + _addedBy : { type: String, default: null }, _commentPeriod : { type: 'ObjectId', ref: 'CommentPeriod', default: null, index: true }, // Note: Default on tag property is purely for display only, they have no real effect on the model // This must be done in the code. diff --git a/api/helpers/models/commentperiod.js b/api/helpers/models/commentperiod.js index 451a29e..bc9b0a4 100644 --- a/api/helpers/models/commentperiod.js +++ b/api/helpers/models/commentperiod.js @@ -1,5 +1,5 @@ module.exports = require('../models')('CommentPeriod', { - _addedBy : { type: 'ObjectId', ref: 'User', default: null }, + _addedBy : { type: String, default: null }, _application : { type: 'ObjectId', ref: 'Application', default: null, index: true }, // Note: Default on tag property is purely for display only, they have no real effect on the model // This must be done in the code. @@ -12,7 +12,7 @@ module.exports = require('../models')('CommentPeriod', { description : { type: String, default: '' }, internal : { notes : { type: String, default: ''}, - _addedBy : { type: 'ObjectId', ref: 'User', default: null }, + _addedBy : { type: String, default: null }, tags : [[{ type: String, trim: true, default: '[["sysadmin"]]' }]], }, isDeleted : { type: Boolean, default: false } diff --git a/api/helpers/models/decision.js b/api/helpers/models/decision.js index b8dc3bc..b09876d 100644 --- a/api/helpers/models/decision.js +++ b/api/helpers/models/decision.js @@ -1,5 +1,5 @@ module.exports = require ('../models')('Decision', { - _addedBy : { type:'ObjectId', ref:'User', default:null }, + _addedBy : { type: String, default:null }, _review : { type:'ObjectId', ref:'Review', default:null }, _application : { type:'ObjectId', ref:'Application', default:null }, // Note: Default on tag property is purely for display only, they have no real effect on the model diff --git a/api/helpers/models/document.js b/api/helpers/models/document.js index e8c0e3a..270dae7 100644 --- a/api/helpers/models/document.js +++ b/api/helpers/models/document.js @@ -1,5 +1,5 @@ module.exports = require ('../models')('Document', { - _addedBy : { type:'ObjectId', ref:'User', default:null }, + _addedBy : { type: String, default:null }, _application : { type:'ObjectId', ref:'Application', default:null }, _decision : { type:'ObjectId', ref:'Decision', default:null }, _comment : { type:'ObjectId', ref:'CommentPeriod', default:null }, diff --git a/api/helpers/models/organization.js b/api/helpers/models/organization.js index 30ff604..3f96e0f 100644 --- a/api/helpers/models/organization.js +++ b/api/helpers/models/organization.js @@ -1,5 +1,5 @@ module.exports = require ('../models')('Organization', { - _addedBy : { type:'ObjectId', ref:'User', default:null }, + _addedBy : { type: String, default:null }, // Note: Default on tag property is purely for display only, they have no real effect on the model // This must be done in the code. tags : [[{ type: String, trim: true, default: '[["sysadmin"]]' }]], diff --git a/api/helpers/models/review.js b/api/helpers/models/review.js index eba57d4..fbd2b26 100644 --- a/api/helpers/models/review.js +++ b/api/helpers/models/review.js @@ -1,5 +1,5 @@ module.exports = require ('../models')('Review', { - _addedBy : { type:'ObjectId', ref:'User', default:null }, + _addedBy : { type: String, default:null }, // Reviews map to possibly more than one application _applications : [{ type:'ObjectId', ref:'Application', default:null }], // Note: Default on tag property is purely for display only, they have no real effect on the model diff --git a/api/helpers/utils.js b/api/helpers/utils.js index e92c302..d93ebe7 100644 --- a/api/helpers/utils.js +++ b/api/helpers/utils.js @@ -6,6 +6,9 @@ var clamav = require('clamav.js'); var fs = require('fs'); var _serviceHost = process.env.CLAMAV_SERVICE_HOST || '127.0.0.1'; var _servicePort = process.env.CLAMAV_SERVICE_PORT || '3310'; +var MAX_LIMIT = 1000; + +var DEFAULT_PAGESIZE = 100; exports.buildQuery = function (property, values, query) { var oids = []; @@ -55,4 +58,94 @@ exports.avScan = function (buffer) { } }); }); -} \ No newline at end of file +} + +exports.getSkipLimitParameters = function (pageSize, pageNum) { + const params = {}; + + var ps = DEFAULT_PAGESIZE; // Default + if (pageSize && pageSize.value !== undefined) { + if (pageSize.value > 0) { + ps = pageSize.value; + } + } + if (pageNum && pageNum.value !== undefined) { + if (pageNum.value >= 0) { + params.skip = (pageNum.value * ps); + params.limit = ps; + } + } + return params; +}; + +exports.runDataQuery = function (modelType, role, query, fields, sortWarmUp, sort, skip, limit, count) { + return new Promise(function (resolve, reject) { + var theModel = mongoose.model(modelType); + var projection = {}; + + // Don't project unecessary fields if we are only counting objects. + if (count) { + projection._id = 1; + projection.tags = 1; + } else { + // Fields we always return + var defaultFields = ['_id', + 'code', + 'tags']; + _.each(defaultFields, function (f) { + projection[f] = 1; + }); + + // Add requested fields - sanitize first by including only those that we can/want to return + _.each(fields, function (f) { + projection[f] = 1; + }); + } + + var aggregations = _.compact([ + { + "$match": query + }, + { + "$project": projection + }, + { + $redact: { + $cond: { + if: { + $anyElementTrue: { + $map: { + input: "$tags" , + as: "fieldTag", + in: { $setIsSubset: [ "$$fieldTag", role ] } + } + } + }, + then: "$$DESCEND", + else: "$$PRUNE" + } + } + }, + + sortWarmUp, // Used to setup the sort if a temporary projection is needed. + + !_.isEmpty(sort) ? { $sort: sort } : null, + + sort ? { $project: projection } : null, // Reset the projection just in case the sortWarmUp changed it. + + // Do this only if they ask for it. + count && { + $group: { + _id: null, + total_items : { $sum : 1 } + } + }, + { $skip: skip || 0 }, + { $limit: limit || MAX_LIMIT } + ]); + + theModel.aggregate(aggregations) + .exec() + .then(resolve, reject); + }); +}; diff --git a/api/swagger/swagger.yaml b/api/swagger/swagger.yaml index 64a6c55..7ca2bb2 100644 --- a/api/swagger/swagger.yaml +++ b/api/swagger/swagger.yaml @@ -451,6 +451,61 @@ paths: description: "Access Denied" schema: $ref: "#/definitions/Error" + head: + tags: + - application + summary: "Retrieve META associated with an application." + operationId: protectedHead + description: "Get META from the request, without returning the payload in question." + security: + - Bearer: [] + x-security-scopes: + - sysadmin + - user + parameters: + - in: query + name: fields + description: "Application fields to return." + required: false + type: array + collectionFormat: pipes + items: + type: string + enum: *applicationFields + - in: query + name: isDeleted + type: boolean + required: false + description: "Applications that are deleted or not" + - in: query + name: pageNum + type: number + required: false + description: "Page number (100 results each)." + - in: query + name: pageSize + type: number + required: false + description: "Number of results per page (if 'pageNum' is specified)." + - in: query + name: tantalisId + type: number + required: false + description: "Get an Application that contain this specific disposition." + - in: query + name: cl_file + type: number + required: false + description: "Get an Application that relates to this crown lands file." + responses: + "200": + description: "Success" + schema: + $ref: "#/definitions/AppObject" + "403": + description: "Access Denied" + schema: + $ref: "#/definitions/Error" get: tags: - application @@ -492,6 +547,11 @@ paths: type: number required: false description: "Get an Application that contain this specific disposition." + - in: query + name: cl_file + type: number + required: false + description: "Get an Application that relates to this crown lands file." responses: "200": description: "Success" @@ -524,6 +584,46 @@ paths: description: "Access Denied" schema: $ref: "#/definitions/Error" + head: + tags: + - application + summary: "Retrieve META associated with an application." + operationId: protectedHead + description: "Get META from the request, without returning the payload in question." + security: + - Bearer: [] + x-security-scopes: + - sysadmin + - user + parameters: + - name: appId + in: path + description: "ID of application to get" + required: true + type: "string" + - in: query + name: fields + description: "Application fields to return." + required: false + type: array + collectionFormat: pipes + items: + type: string + enum: *applicationFields + - in: query + name: isDeleted + type: boolean + required: false + description: "Applications that are deleted or not" + responses: + "200": + description: "Success" + schema: + $ref: "#/definitions/AppObject" + "403": + description: "Access Denied" + schema: + $ref: "#/definitions/Error" get: tags: - application @@ -742,6 +842,51 @@ paths: description: "Access Denied" schema: $ref: "#/definitions/Error" + head: + tags: + - application + summary: "Retrieve META associated with applications" + operationId: publicHead + description: "Get META from the request, without returning the payload in question." + parameters: + - in: query + name: fields + description: "Application fields to return." + required: false + type: array + collectionFormat: pipes + items: + type: string + enum: *applicationFields + - in: query + name: pageNum + type: number + required: false + description: "Page number." + - in: query + name: pageSize + type: number + required: false + description: "Number of results per page." + - in: query + name: tantalisId + type: number + required: false + description: "Get an Application that contain this specific disposition." + - in: query + name: cl_file + type: number + required: false + description: "Get an Application that relates to this crown lands file." + responses: + "200": + description: "Success" + schema: + $ref: "#/definitions/AppObject" + "403": + description: "Access Denied" + schema: + $ref: "#/definitions/Error" get: tags: - application @@ -768,6 +913,16 @@ paths: type: number required: false description: "Number of results per page." + - in: query + name: tantalisId + type: number + required: false + description: "Get an Application that contain this specific disposition." + - in: query + name: cl_file + type: number + required: false + description: "Get an Application that relates to this crown lands file." responses: "200": description: "Success" @@ -3053,6 +3208,67 @@ paths: description: "Access Denied" schema: $ref: "#/definitions/Error" + head: + tags: + - comment + summary: "Retrieve META associated with a comment ." + operationId: protectedHead + description: "Get META from the request, without returning the payload in question." + security: + - Bearer: [] + x-security-scopes: + - sysadmin + - user + parameters: + - in: query + name: _commentPeriod + description: "Comments relating to a particular Comment Period" + type: array + required: false + collectionFormat: pipes + items: + type: string + - in: query + name: isDeleted + type: boolean + required: false + description: "Comments that are deleted or not" + - in: query + name: fields + description: "Comment fields to return." + required: false + type: array + collectionFormat: pipes + items: + type: string + enum: *commentFields + - in: query + name: pageNum + type: number + required: false + description: "Page number (100 results each)." + - in: query + name: pageSize + type: number + required: false + description: "Number of results per page (if 'pageNum' is specified)." + - in: query + name: sortBy + description: "Comment fields to sort by." + required: false + type: array + items: + type: string + enum: *commentSortByFields + responses: + "200": + description: "Success" + schema: + $ref: "#/definitions/CommentObject" + "403": + description: "Access Denied" + schema: + $ref: "#/definitions/Error" get: tags: - comment @@ -3558,6 +3774,45 @@ paths: description: "Access Denied" schema: $ref: "#/definitions/Error" + head: + tags: + - commentperiod + summary: "Retrieve META associated with a comment period." + operationId: protectedHead + description: "Get META from the request, without returning the payload in question." + security: + - Bearer: [] + x-security-scopes: + - sysadmin + - user + parameters: + - name: CommentPeriodId + in: path + description: "ID of commentperiod to get" + required: true + type: "string" + - in: query + name: _application + description: "CommentPeriods relating to a particular Application(s)" + type: array + required: false + collectionFormat: pipes + items: + type: string + - in: query + name: isDeleted + type: boolean + required: false + description: "CommentPeriods that are deleted or not" + responses: + "200": + description: "Success" + schema: + $ref: "#/definitions/CommentPeriodObject" + "403": + description: "Access Denied" + schema: + $ref: "#/definitions/Error" get: tags: - commentperiod diff --git a/app.js b/app.js index 2d7830b..e6d0d31 100644 --- a/app.js +++ b/app.js @@ -41,8 +41,9 @@ app.use(bodyParser.urlencoded({limit: '10mb', extended: true})); app.use(function (req, res, next) { defaultLog.info(req.method, req.url); res.setHeader('Access-Control-Allow-Origin', '*'); - res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE, HEAD'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Authorization,responseType'); + res.setHeader('Access-Control-Expose-Headers', 'x-total-count'); res.setHeader('Access-Control-Allow-Credentials', true); res.setHeader('Cache-Control', 'private, no-cache, no-store, must-revalidate'); res.setHeader('Expires', '-1'); diff --git a/package.json b/package.json index d96e83c..a147aa8 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "clamav.js": "^0.12.0", "express": "^4.16.0", "flake-idgen": "^1.1.0", - "jsonwebtoken": "^8.0.0", + "jsonwebtoken": "8.0.0", + "jwks-rsa": "^1.3.0", "mongoose": "^4.13.17", "nconf": "^0.9.1", "passport": "^0.4.0", diff --git a/yarn.lock b/yarn.lock index 6e0eff0..8f3100c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,7 @@ "@turf/along@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/along/-/along-5.1.5.tgz#61d6e6a6584acddab56ac5584e07bf8cbe5f8beb" + integrity sha1-YdbmplhKzdq1asVYTge/jL5fi+s= dependencies: "@turf/bearing" "^5.1.5" "@turf/destination" "^5.1.5" @@ -14,6 +15,7 @@ "@turf/area@5.1.x", "@turf/area@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/area/-/area-5.1.5.tgz#efd899bfd260cdbd1541b2a3c155f8a5d2eefa1d" + integrity sha1-79iZv9Jgzb0VQbKjwVX4pdLu+h0= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -21,6 +23,7 @@ "@turf/bbox-clip@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/bbox-clip/-/bbox-clip-5.1.5.tgz#3364b5328dff9f3cf41d9e02edaff374d150cc84" + integrity sha1-M2S1Mo3/nzz0HZ4C7a/zdNFQzIQ= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -29,12 +32,14 @@ "@turf/bbox-polygon@5.1.x", "@turf/bbox-polygon@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/bbox-polygon/-/bbox-polygon-5.1.5.tgz#6aeba4ed51d85d296e0f7c38b88c339f01eee024" + integrity sha1-auuk7VHYXSluD3w4uIwznwHu4CQ= dependencies: "@turf/helpers" "^5.1.5" "@turf/bbox@5.1.x", "@turf/bbox@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-5.1.5.tgz#3051df514ad4c50f4a4f9b8a2d15fd8b6840eda3" + integrity sha1-MFHfUUrUxQ9KT5uKLRX9i2hA7aM= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -42,6 +47,7 @@ "@turf/bearing@5.1.x", "@turf/bearing@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-5.1.5.tgz#7a0b790136c4ef4797f0246305d45cbe2d27b3f7" + integrity sha1-egt5ATbE70eX8CRjBdRcvi0ns/c= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -49,6 +55,7 @@ "@turf/bearing@6.x": version "6.0.1" resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-6.0.1.tgz#8da5d17092e571f170cde7bfb2e5b0d74923c92d" + integrity sha512-mXY1NozqV9EFfBTbUItujwfqfQF0G/Xe2fzvnZle90ekPEUfhi4Dgf5JswJTd96J9LiT8kcd6Jonp5khnx0wIg== dependencies: "@turf/helpers" "6.x" "@turf/invariant" "6.x" @@ -56,6 +63,7 @@ "@turf/bezier-spline@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/bezier-spline/-/bezier-spline-5.1.5.tgz#59a27bba5d7b97ef15ab3fd5a40fbd2387049bca" + integrity sha1-WaJ7ul17l+8Vqz/VpA+9I4cEm8o= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -63,6 +71,7 @@ "@turf/boolean-clockwise@5.1.x", "@turf/boolean-clockwise@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-clockwise/-/boolean-clockwise-5.1.5.tgz#3302b7dac62c5e291a0789e29af7283387fa9deb" + integrity sha1-MwK32sYsXikaB4nimvcoM4f6nes= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -70,6 +79,7 @@ "@turf/boolean-contains@5.1.x", "@turf/boolean-contains@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-contains/-/boolean-contains-5.1.5.tgz#596d63aee636f7ad53ee99f9ff24c96994a0ef14" + integrity sha1-WW1jruY2961T7pn5/yTJaZSg7xQ= dependencies: "@turf/bbox" "^5.1.5" "@turf/boolean-point-in-polygon" "^5.1.5" @@ -80,6 +90,7 @@ "@turf/boolean-crosses@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-crosses/-/boolean-crosses-5.1.5.tgz#01bfaea2596f164de4a4d325094dc7c255c715d6" + integrity sha1-Ab+uollvFk3kpNMlCU3HwlXHFdY= dependencies: "@turf/boolean-point-in-polygon" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -90,6 +101,7 @@ "@turf/boolean-disjoint@5.1.x": version "5.1.6" resolved "https://registry.yarnpkg.com/@turf/boolean-disjoint/-/boolean-disjoint-5.1.6.tgz#3fbd87084b269133f5fd15725deb3c6675fb8a9d" + integrity sha512-KHvUS6SBNYHBCLIJEJrg04pF5Oy+Fqn8V5G9U+9pti5vI9tyX7Ln2g7RSB7iJ1Cxsz8QAi6OukhXjEF2/8ZpGg== dependencies: "@turf/boolean-point-in-polygon" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -100,6 +112,7 @@ "@turf/boolean-equal@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-equal/-/boolean-equal-5.1.5.tgz#29f8f6d60bb84507dfd765b32254db8e72c938a4" + integrity sha1-Kfj21gu4RQff12WzIlTbjnLJOKQ= dependencies: "@turf/clean-coords" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -109,6 +122,7 @@ "@turf/boolean-overlap@5.1.x", "@turf/boolean-overlap@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-overlap/-/boolean-overlap-5.1.5.tgz#0d4e64c52c770a28e93d9efcdf8a8b8373acce75" + integrity sha1-DU5kxSx3CijpPZ7834qLg3OsznU= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -120,6 +134,7 @@ "@turf/boolean-parallel@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-parallel/-/boolean-parallel-5.1.5.tgz#739358475ea5b65c7e1827a3c3e0e8a687d3a85d" + integrity sha1-c5NYR16ltlx+GCejw+DopofTqF0= dependencies: "@turf/clean-coords" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -129,6 +144,7 @@ "@turf/boolean-point-in-polygon@5.1.x", "@turf/boolean-point-in-polygon@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-5.1.5.tgz#f01cc194d1e030a548bfda981cba43cfd62941b7" + integrity sha1-8BzBlNHgMKVIv9qYHLpDz9YpQbc= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -136,6 +152,7 @@ "@turf/boolean-point-on-line@5.1.x", "@turf/boolean-point-on-line@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-point-on-line/-/boolean-point-on-line-5.1.5.tgz#f633c5ff802ad24bb8f158dadbaf6ff4a023dd7b" + integrity sha1-9jPF/4Aq0ku48Vja269v9KAj3Xs= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -143,6 +160,7 @@ "@turf/boolean-within@5.1.x", "@turf/boolean-within@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/boolean-within/-/boolean-within-5.1.5.tgz#47105d56d0752a9d0fbfcd43c36a5f9149dc8697" + integrity sha1-RxBdVtB1Kp0Pv81Dw2pfkUnchpc= dependencies: "@turf/bbox" "^5.1.5" "@turf/boolean-point-in-polygon" "^5.1.5" @@ -153,6 +171,7 @@ "@turf/buffer@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/buffer/-/buffer-5.1.5.tgz#841c9627cfb974b122ac4e1a956f0466bc0231c4" + integrity sha1-hByWJ8+5dLEirE4alW8EZrwCMcQ= dependencies: "@turf/bbox" "^5.1.5" "@turf/center" "^5.1.5" @@ -165,6 +184,7 @@ "@turf/center-mean@5.1.x", "@turf/center-mean@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/center-mean/-/center-mean-5.1.5.tgz#8c8e9875391e5f09f0e6e78f5d661b88b2108a0a" + integrity sha1-jI6YdTkeXwnw5uePXWYbiLIQigo= dependencies: "@turf/bbox" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -173,6 +193,7 @@ "@turf/center-median@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/center-median/-/center-median-5.1.5.tgz#bb461bfe7a2a48601d8a4727685718723a14a872" + integrity sha1-u0Yb/noqSGAdikcnaFcYcjoUqHI= dependencies: "@turf/center-mean" "^5.1.5" "@turf/centroid" "^5.1.5" @@ -183,6 +204,7 @@ "@turf/center-of-mass@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/center-of-mass/-/center-of-mass-5.1.5.tgz#4d3bd79d88498dbab8324d4f69f0322f6520b9ca" + integrity sha1-TTvXnYhJjbq4Mk1PafAyL2Uguco= dependencies: "@turf/centroid" "^5.1.5" "@turf/convex" "^5.1.5" @@ -193,6 +215,7 @@ "@turf/center@5.1.x", "@turf/center@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/center/-/center-5.1.5.tgz#44ab2cd954f63c0d37757f7158a99c3ef5114b80" + integrity sha1-RKss2VT2PA03dX9xWKmcPvURS4A= dependencies: "@turf/bbox" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -200,6 +223,7 @@ "@turf/centroid@5.1.x", "@turf/centroid@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/centroid/-/centroid-5.1.5.tgz#778ada74216335021ad8fd0e7a65a8349d53c769" + integrity sha1-d4radCFjNQIa2P0OemWoNJ1Tx2k= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -207,6 +231,7 @@ "@turf/circle@5.1.x", "@turf/circle@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/circle/-/circle-5.1.5.tgz#9b1577835508ab52fb1c10b2a5065cba2b87b6a5" + integrity sha1-mxV3g1UIq1L7HBCypQZcuiuHtqU= dependencies: "@turf/destination" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -214,6 +239,7 @@ "@turf/clean-coords@5.1.x", "@turf/clean-coords@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/clean-coords/-/clean-coords-5.1.5.tgz#12800a98a78c9a452a72ec428493c43acf2ada1f" + integrity sha1-EoAKmKeMmkUqcuxChJPEOs8q2h8= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -221,18 +247,21 @@ "@turf/clone@5.1.x", "@turf/clone@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/clone/-/clone-5.1.5.tgz#253e8d35477181976e33adfab50a0f02a7f0e367" + integrity sha1-JT6NNUdxgZduM636tQoPAqfw42c= dependencies: "@turf/helpers" "^5.1.5" "@turf/clone@6.x": version "6.0.2" resolved "https://registry.yarnpkg.com/@turf/clone/-/clone-6.0.2.tgz#7563cebbb3e2e19f361599bb244467e0dcc205c9" + integrity sha512-UVpYPnW3wRj3bPncR6Z2PRbowBk+nEdVWgGewPxrKKLfvswtVtG9n/OIyvbU3E3ZOadBVxTH2uAMEMOz4800FA== dependencies: "@turf/helpers" "6.x" "@turf/clusters-dbscan@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/clusters-dbscan/-/clusters-dbscan-5.1.5.tgz#5781fb4e656c747a0b8e9937df73181c0309e26f" + integrity sha1-V4H7TmVsdHoLjpk333MYHAMJ4m8= dependencies: "@turf/clone" "^5.1.5" "@turf/distance" "^5.1.5" @@ -244,6 +273,7 @@ "@turf/clusters-kmeans@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/clusters-kmeans/-/clusters-kmeans-5.1.5.tgz#fd6dfea8b133ba8bdc2370ac3cacee1587a302f1" + integrity sha1-/W3+qLEzuovcI3CsPKzuFYejAvE= dependencies: "@turf/clone" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -254,6 +284,7 @@ "@turf/clusters@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/clusters/-/clusters-5.1.5.tgz#673a5e5f1b19c9cababc57c908eeadd682224dd4" + integrity sha1-ZzpeXxsZycq6vFfJCO6t1oIiTdQ= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -261,6 +292,7 @@ "@turf/collect@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/collect/-/collect-5.1.5.tgz#fe98c9a8c218ecf24ffc33d7029517b7c19b2a3e" + integrity sha1-/pjJqMIY7PJP/DPXApUXt8GbKj4= dependencies: "@turf/bbox" "^5.1.5" "@turf/boolean-point-in-polygon" "^5.1.5" @@ -270,6 +302,7 @@ "@turf/combine@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/combine/-/combine-5.1.5.tgz#bb14bdefa55504357195fc1a124cd7d53a8c8905" + integrity sha1-uxS976VVBDVxlfwaEkzX1TqMiQU= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -277,6 +310,7 @@ "@turf/concave@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/concave/-/concave-5.1.5.tgz#23bbaac387d034b96574a1bd70d059237a9d2110" + integrity sha1-I7uqw4fQNLlldKG9cNBZI3qdIRA= dependencies: "@turf/clone" "^5.1.5" "@turf/distance" "^5.1.5" @@ -290,6 +324,7 @@ "@turf/convex@5.1.x", "@turf/convex@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/convex/-/convex-5.1.5.tgz#0df9377dd002216ce9821b07f705e037dae3e01d" + integrity sha1-Dfk3fdACIWzpghsH9wXgN9rj4B0= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -298,6 +333,7 @@ "@turf/destination@5.1.x", "@turf/destination@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-5.1.5.tgz#ed35381bdce83bbddcbd07a2e2bce2bddffbcc26" + integrity sha1-7TU4G9zoO73cvQei4rzivd/7zCY= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -305,6 +341,7 @@ "@turf/difference@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/difference/-/difference-5.1.5.tgz#a24d690a7bca803f1090a9ee3b9d906fc4371f42" + integrity sha1-ok1pCnvKgD8QkKnuO52Qb8Q3H0I= dependencies: "@turf/area" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -315,6 +352,7 @@ "@turf/dissolve@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/dissolve/-/dissolve-5.1.5.tgz#2cf133a9021d2163831c3d7a958d6507f9d81938" + integrity sha1-LPEzqQIdIWODHD16lY1lB/nYGTg= dependencies: "@turf/boolean-overlap" "^5.1.5" "@turf/clone" "^5.1.5" @@ -329,6 +367,7 @@ "@turf/distance@5.1.x", "@turf/distance@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-5.1.5.tgz#39cf18204bbf87587d707e609a60118909156409" + integrity sha1-Oc8YIEu/h1h9cH5gmmARiQkVZAk= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -336,6 +375,7 @@ "@turf/distance@6.x": version "6.0.1" resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.0.1.tgz#0761f28784286e7865a427c4e7e3593569c2dea8" + integrity sha512-q7t7rWIWfkg7MP1Vt4uLjSEhe5rPfCO2JjpKmk7JC+QZKEQkuvHEqy3ejW1iC7Kw5ZcZNR3qdMGGz+6HnVwqvg== dependencies: "@turf/helpers" "6.x" "@turf/invariant" "6.x" @@ -343,6 +383,7 @@ "@turf/ellipse@5.1.x", "@turf/ellipse@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/ellipse/-/ellipse-5.1.5.tgz#d57cab853985920cde60228a78d80458025c54be" + integrity sha1-1XyrhTmFkgzeYCKKeNgEWAJcVL4= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -352,6 +393,7 @@ "@turf/envelope@5.1.x", "@turf/envelope@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/envelope/-/envelope-5.1.5.tgz#5013309c53fdd43dfaf4b588a65c3fed7dbc108a" + integrity sha1-UBMwnFP91D369LWIplw/7X28EIo= dependencies: "@turf/bbox" "^5.1.5" "@turf/bbox-polygon" "^5.1.5" @@ -360,6 +402,7 @@ "@turf/explode@5.1.x", "@turf/explode@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/explode/-/explode-5.1.5.tgz#b12b2f774004a1b48f62ba95b20a1c655a3de118" + integrity sha1-sSsvd0AEobSPYrqVsgocZVo94Rg= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -367,6 +410,7 @@ "@turf/flatten@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/flatten/-/flatten-5.1.5.tgz#da2927067133ed6169b0b9d607b9215688aa1358" + integrity sha1-2iknBnEz7WFpsLnWB7khVoiqE1g= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -374,6 +418,7 @@ "@turf/flip@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/flip/-/flip-5.1.5.tgz#436f643a722f0ca53b9fce638e4693db3608a68a" + integrity sha1-Q29kOnIvDKU7n85jjkaT2zYIpoo= dependencies: "@turf/clone" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -382,6 +427,7 @@ "@turf/great-circle@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/great-circle/-/great-circle-5.1.5.tgz#debfb671ce475509cb637301c15fcfccfa359a93" + integrity sha1-3r+2cc5HVQnLY3MBwV/PzPo1mpM= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -389,14 +435,17 @@ "@turf/helpers@*", "@turf/helpers@6.x", "@turf/helpers@^6.1.4": version "6.1.4" resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.1.4.tgz#d6fd7ebe6782dd9c87dca5559bda5c48ae4c3836" + integrity sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g== "@turf/helpers@5.1.x", "@turf/helpers@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-5.1.5.tgz#153405227ab933d004a5bb9641a9ed999fcbe0cf" + integrity sha1-FTQFInq5M9AEpbuWQantmZ/L4M8= "@turf/hex-grid@5.1.x", "@turf/hex-grid@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/hex-grid/-/hex-grid-5.1.5.tgz#9b7ba5fecf5051f1e85892f713fce5c550502a6a" + integrity sha1-m3ul/s9QUfHoWJL3E/zlxVBQKmo= dependencies: "@turf/distance" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -406,6 +455,7 @@ "@turf/interpolate@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/interpolate/-/interpolate-5.1.5.tgz#0f12f0ab756d6dd10afb290ca6e877bdef013eaa" + integrity sha1-DxLwq3VtbdEK+ykMpuh3ve8BPqo= dependencies: "@turf/bbox" "^5.1.5" "@turf/centroid" "^5.1.5" @@ -422,6 +472,7 @@ "@turf/intersect@5.1.x", "@turf/intersect@^5.1.5": version "5.1.6" resolved "https://registry.yarnpkg.com/@turf/intersect/-/intersect-5.1.6.tgz#13ffcceb7a529c2a7e5d6681ab3ba671f868e95f" + integrity sha512-KXyNv/GXdoGAOy03qZF53rgtXC2tNhF/4jLwTKiVRrBQH6kcEpipGStdJ+QkYIlarQPa8f7I9UlVAB19et4MfQ== dependencies: "@turf/clean-coords" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -432,24 +483,28 @@ "@turf/invariant@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-5.1.5.tgz#f59f4fefa09224b15dce1651f903c868d57a24e1" + integrity sha1-9Z9P76CSJLFdzhZR+QPIaNV6JOE= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant@6.x": version "6.1.2" resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.1.2.tgz#6013ed6219f9ac2edada9b31e1dfa5918eb0a2f7" + integrity sha512-WU08Ph8j0J2jVGlQCKChXoCtI50BB3yEH21V++V0T4cR1T27HKCxkehV2sYMwTierfMBgjwSwDIsxnR4/2mWXg== dependencies: "@turf/helpers" "6.x" "@turf/invariant@^5.1.5": version "5.2.0" resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-5.2.0.tgz#f0150ff7290b38577b73d088b7932c1ee0aa90a7" + integrity sha1-8BUP9ykLOFd7c9CIt5MsHuCqkKc= dependencies: "@turf/helpers" "^5.1.5" "@turf/isobands@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/isobands/-/isobands-5.1.5.tgz#6b44cef584d551a31304187af23b4a1582e3f08d" + integrity sha1-a0TO9YTVUaMTBBh68jtKFYLj8I0= dependencies: "@turf/area" "^5.1.5" "@turf/bbox" "^5.1.5" @@ -462,6 +517,7 @@ "@turf/isolines@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/isolines/-/isolines-5.1.5.tgz#8ab4e7f42bb3dfc54614e5bf155967f7e55d2de1" + integrity sha1-irTn9Cuz38VGFOW/FVln9+VdLeE= dependencies: "@turf/bbox" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -471,12 +527,14 @@ "@turf/kinks@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/kinks/-/kinks-5.1.5.tgz#8abb6961d9bb0107213baddf2c2c2640d0256980" + integrity sha1-irtpYdm7AQchO63fLCwmQNAlaYA= dependencies: "@turf/helpers" "^5.1.5" "@turf/length@5.1.x", "@turf/length@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/length/-/length-5.1.5.tgz#f3a5f864c2b996a8bb471794535a1faf12eebefb" + integrity sha1-86X4ZMK5lqi7RxeUU1ofrxLuvvs= dependencies: "@turf/distance" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -485,6 +543,7 @@ "@turf/line-arc@5.1.x", "@turf/line-arc@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-arc/-/line-arc-5.1.5.tgz#0078a7447835a12ae414a211f9a64d1186150e15" + integrity sha1-AHinRHg1oSrkFKIR+aZNEYYVDhU= dependencies: "@turf/circle" "^5.1.5" "@turf/destination" "^5.1.5" @@ -493,6 +552,7 @@ "@turf/line-chunk@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-chunk/-/line-chunk-5.1.5.tgz#910a85c05c06d9d0f9c38977a05e0818d5085c42" + integrity sha1-kQqFwFwG2dD5w4l3oF4IGNUIXEI= dependencies: "@turf/helpers" "^5.1.5" "@turf/length" "^5.1.5" @@ -502,6 +562,7 @@ "@turf/line-intersect@5.1.x", "@turf/line-intersect@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-5.1.5.tgz#0e29071ae403295e491723bc49f5cfac8d11ddf3" + integrity sha1-DikHGuQDKV5JFyO8SfXPrI0R3fM= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -512,6 +573,7 @@ "@turf/line-offset@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-offset/-/line-offset-5.1.5.tgz#2ab5b2f089f8c913e231d994378e79dca90b5a1e" + integrity sha1-KrWy8In4yRPiMdmUN4553KkLWh4= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -520,6 +582,7 @@ "@turf/line-overlap@5.1.x", "@turf/line-overlap@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-overlap/-/line-overlap-5.1.5.tgz#943c6f87a0386dc43dfac11d2b3ff9c112cd3f60" + integrity sha1-lDxvh6A4bcQ9+sEdKz/5wRLNP2A= dependencies: "@turf/boolean-point-on-line" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -532,6 +595,7 @@ "@turf/line-segment@5.1.x", "@turf/line-segment@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-5.1.5.tgz#3207aaee546ab24c3d8dc3cc63f91c770b8013e5" + integrity sha1-Mgeq7lRqskw9jcPMY/kcdwuAE+U= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -540,6 +604,7 @@ "@turf/line-slice-along@5.1.x", "@turf/line-slice-along@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-slice-along/-/line-slice-along-5.1.5.tgz#eddad0a21ef479f2968a11bd2dd7289a2132e9a5" + integrity sha1-7drQoh70efKWihG9LdcomiEy6aU= dependencies: "@turf/bearing" "^5.1.5" "@turf/destination" "^5.1.5" @@ -549,6 +614,7 @@ "@turf/line-slice@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-slice/-/line-slice-5.1.5.tgz#1ecfce1462a378579754cedf4464cde26829f2b5" + integrity sha1-Hs/OFGKjeFeXVM7fRGTN4mgp8rU= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -557,6 +623,7 @@ "@turf/line-split@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-split/-/line-split-5.1.5.tgz#5b2df4c37619b72ef725b5163cf9926d5540acb7" + integrity sha1-Wy30w3YZty73JbUWPPmSbVVArLc= dependencies: "@turf/bbox" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -572,6 +639,7 @@ "@turf/line-to-polygon@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/line-to-polygon/-/line-to-polygon-5.1.5.tgz#213cf41a68f8224778ba39d3187dec3e8b81865a" + integrity sha1-ITz0Gmj4Ikd4ujnTGH3sPouBhlo= dependencies: "@turf/bbox" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -580,6 +648,7 @@ "@turf/mask@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/mask/-/mask-5.1.5.tgz#9ab0fef1a272c98fe3ef492f9ffb618206b242d5" + integrity sha1-mrD+8aJyyY/j70kvn/thggayQtU= dependencies: "@turf/bbox" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -590,24 +659,28 @@ "@turf/meta@*", "@turf/meta@6.x": version "6.0.2" resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.0.2.tgz#eb92951126d24a613ac1b7b99d733fcc20fd30cf" + integrity sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA== dependencies: "@turf/helpers" "6.x" "@turf/meta@5.1.x": version "5.1.6" resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-5.1.6.tgz#c20a863eded0869fb28548dee889341bccb46a46" + integrity sha1-wgqGPt7Qhp+yhUje6Ik0G8y0akY= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta@^5.1.5": version "5.2.0" resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-5.2.0.tgz#3b1ad485ee0c3b0b1775132a32c384d53e4ba53d" + integrity sha1-OxrUhe4MOwsXdRMqMsOE1T5LpT0= dependencies: "@turf/helpers" "^5.1.5" "@turf/midpoint@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/midpoint/-/midpoint-5.1.5.tgz#e261f6b2b0ea8124cceff552a262dd465c9d05f0" + integrity sha1-4mH2srDqgSTM7/VSomLdRlydBfA= dependencies: "@turf/bearing" "^5.1.5" "@turf/destination" "^5.1.5" @@ -617,6 +690,7 @@ "@turf/nearest-point-on-line@5.1.x", "@turf/nearest-point-on-line@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-5.1.5.tgz#5606ae297f15947524bea51a2a9ef51ec1bf9c36" + integrity sha1-VgauKX8VlHUkvqUaKp71HsG/nDY= dependencies: "@turf/bearing" "^5.1.5" "@turf/destination" "^5.1.5" @@ -629,6 +703,7 @@ "@turf/nearest-point-to-line@5.1.x": version "5.1.6" resolved "https://registry.yarnpkg.com/@turf/nearest-point-to-line/-/nearest-point-to-line-5.1.6.tgz#d30b7606e56a3dce97f4db6d45d352470e0b3f88" + integrity sha512-ZSvDIEiHhifn/vNwLXZI/E8xmEz5yBPqfUR7BVHRZrB1cP7jLhKZvkbidjG//uW8Fr1Ulc+PFOXczLspIcx/lw== dependencies: "@turf/helpers" "6.x" "@turf/invariant" "6.x" @@ -639,6 +714,7 @@ "@turf/nearest-point@5.1.x", "@turf/nearest-point@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/nearest-point/-/nearest-point-5.1.5.tgz#12050de41c398443224c7978de0f6213900d34fb" + integrity sha1-EgUN5Bw5hEMiTHl43g9iE5ANNPs= dependencies: "@turf/clone" "^5.1.5" "@turf/distance" "^5.1.5" @@ -648,6 +724,7 @@ "@turf/planepoint@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/planepoint/-/planepoint-5.1.5.tgz#18bbdf006f759def5e42c6a006c9f9de81b2b7ff" + integrity sha1-GLvfAG91ne9eQsagBsn53oGyt/8= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -655,6 +732,7 @@ "@turf/point-grid@5.1.x", "@turf/point-grid@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/point-grid/-/point-grid-5.1.5.tgz#305141248f50bafe36ce7e66ba4b97e7ab236887" + integrity sha1-MFFBJI9Quv42zn5mukuX56sjaIc= dependencies: "@turf/boolean-within" "^5.1.5" "@turf/distance" "^5.1.5" @@ -664,6 +742,7 @@ "@turf/point-on-feature@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/point-on-feature/-/point-on-feature-5.1.5.tgz#30c7f032430277c6418d96d289e45b6bfb213fe7" + integrity sha1-MMfwMkMCd8ZBjZbSieRba/shP+c= dependencies: "@turf/boolean-point-in-polygon" "^5.1.5" "@turf/center" "^5.1.5" @@ -674,6 +753,7 @@ "@turf/point-to-line-distance@5.1.x", "@turf/point-to-line-distance@^5.1.5": version "5.1.6" resolved "https://registry.yarnpkg.com/@turf/point-to-line-distance/-/point-to-line-distance-5.1.6.tgz#954f6cb68546420a030d8480392503264970d2d8" + integrity sha512-PE3hiTeeDEi4ZLPtI8XAzFYW9nHo1EVsZGm/4ZVV8jo39d3X1oLVHxY3e1PkCmWwRapXy4QLqvnTQ7nU4wspNw== dependencies: "@turf/bearing" "6.x" "@turf/distance" "6.x" @@ -687,6 +767,7 @@ "@turf/points-within-polygon@5.1.x", "@turf/points-within-polygon@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/points-within-polygon/-/points-within-polygon-5.1.5.tgz#2b855a5df3aada57c2ee820a0754ab94928a2337" + integrity sha1-K4VaXfOq2lfC7oIKB1SrlJKKIzc= dependencies: "@turf/boolean-point-in-polygon" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -695,6 +776,7 @@ "@turf/polygon-tangents@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/polygon-tangents/-/polygon-tangents-5.1.5.tgz#2bf00991473025b178e250dc7cb9ae5409bbd652" + integrity sha1-K/AJkUcwJbF44lDcfLmuVAm71lI= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -702,6 +784,7 @@ "@turf/polygon-to-line@5.1.x", "@turf/polygon-to-line@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/polygon-to-line/-/polygon-to-line-5.1.5.tgz#23bb448d84dc4c651999ac611a36d91c5925036a" + integrity sha1-I7tEjYTcTGUZmaxhGjbZHFklA2o= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -709,6 +792,7 @@ "@turf/polygonize@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/polygonize/-/polygonize-5.1.5.tgz#0493fa11879f39d10b9ad02ce6a23e942d08aa32" + integrity sha1-BJP6EYefOdELmtAs5qI+lC0IqjI= dependencies: "@turf/boolean-point-in-polygon" "^5.1.5" "@turf/envelope" "^5.1.5" @@ -719,6 +803,7 @@ "@turf/projection@5.1.x", "@turf/projection@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/projection/-/projection-5.1.5.tgz#24517eeeb2f36816ba9f712e7ae6d6a368edf757" + integrity sha1-JFF+7rLzaBa6n3EueubWo2jt91c= dependencies: "@turf/clone" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -727,6 +812,7 @@ "@turf/projection@6.x": version "6.0.1" resolved "https://registry.yarnpkg.com/@turf/projection/-/projection-6.0.1.tgz#bde70ae8441b9cefddf26d71c7db74bc3d9792b1" + integrity sha512-Y3RvGT6I53MjYKLG69e9sMk45wJXcLbrEO1t6P3WQQQGqA2gYhhMJyV41vE2Z2llrJpvs2dDx/tIeQzGd0HHMQ== dependencies: "@turf/clone" "6.x" "@turf/helpers" "6.x" @@ -735,12 +821,14 @@ "@turf/random@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/random/-/random-5.1.5.tgz#b32efc934560ae8ba57e8ebb51f241c39fba2e7b" + integrity sha1-sy78k0Vgroulfo67UfJBw5+6Lns= dependencies: "@turf/helpers" "^5.1.5" "@turf/rewind@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/rewind/-/rewind-5.1.5.tgz#9ea3db4a68b73c1fd1dd11f57631b143cfefa1c9" + integrity sha1-nqPbSmi3PB/R3RH1djGxQ8/vock= dependencies: "@turf/boolean-clockwise" "^5.1.5" "@turf/clone" "^5.1.5" @@ -751,6 +839,7 @@ "@turf/rhumb-bearing@5.1.x", "@turf/rhumb-bearing@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/rhumb-bearing/-/rhumb-bearing-5.1.5.tgz#acf6a502427eb8c49e18cda6ae0effab0c5ddcd2" + integrity sha1-rPalAkJ+uMSeGM2mrg7/qwxd3NI= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -758,6 +847,7 @@ "@turf/rhumb-bearing@6.x": version "6.0.1" resolved "https://registry.yarnpkg.com/@turf/rhumb-bearing/-/rhumb-bearing-6.0.1.tgz#182c4c21fe951e097fb468ae128dc22ef6078f3f" + integrity sha512-MVBra8OVfjM4+/N0B3o6cBIYg9p/uRKzA9uk05RfrzasEbUL1vdD23LkTooVL74Yw4UxL8BQD9hS5Re2COJFDA== dependencies: "@turf/helpers" "6.x" "@turf/invariant" "6.x" @@ -765,6 +855,7 @@ "@turf/rhumb-destination@5.1.x", "@turf/rhumb-destination@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/rhumb-destination/-/rhumb-destination-5.1.5.tgz#b1b2aeb921547f2ac0c1a994b6a130f92463c742" + integrity sha1-sbKuuSFUfyrAwamUtqEw+SRjx0I= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -772,6 +863,7 @@ "@turf/rhumb-distance@5.1.x", "@turf/rhumb-distance@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/rhumb-distance/-/rhumb-distance-5.1.5.tgz#1806857625f4225384dad413e69f39538ff5f765" + integrity sha1-GAaFdiX0IlOE2tQT5p85U4/192U= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" @@ -779,6 +871,7 @@ "@turf/rhumb-distance@6.x": version "6.0.1" resolved "https://registry.yarnpkg.com/@turf/rhumb-distance/-/rhumb-distance-6.0.1.tgz#ae1c5c823b4b04f75cd7fc240f7f93647db8bdd4" + integrity sha512-3G45DQtQByzzfHFPcCyJdUZFwsd45zfZ7sAb1ddF7mhEj4G70+T2G3GKjInymqDNrbyh2gbG6wQiZSToC8Uf9g== dependencies: "@turf/helpers" "6.x" "@turf/invariant" "6.x" @@ -786,12 +879,14 @@ "@turf/sample@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/sample/-/sample-5.1.5.tgz#e9cb448a4789cc56ee3de2dd6781e2343435b411" + integrity sha1-6ctEikeJzFbuPeLdZ4HiNDQ1tBE= dependencies: "@turf/helpers" "^5.1.5" "@turf/sector@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/sector/-/sector-5.1.5.tgz#ac2bb94c13edd6034f6fdc2b67008135d20f5e07" + integrity sha1-rCu5TBPt1gNPb9wrZwCBNdIPXgc= dependencies: "@turf/circle" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -802,6 +897,7 @@ "@turf/shortest-path@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/shortest-path/-/shortest-path-5.1.5.tgz#854ae8096f6bc3e1300faca77f3e8f67d8f935ab" + integrity sha1-hUroCW9rw+EwD6ynfz6PZ9j5Nas= dependencies: "@turf/bbox" "^5.1.5" "@turf/bbox-polygon" "^5.1.5" @@ -816,6 +912,7 @@ "@turf/simplify@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/simplify/-/simplify-5.1.5.tgz#0ac8f27a2eb4218183edd9998c3275abe408b926" + integrity sha1-Csjyei60IYGD7dmZjDJ1q+QIuSY= dependencies: "@turf/clean-coords" "^5.1.5" "@turf/clone" "^5.1.5" @@ -825,6 +922,7 @@ "@turf/square-grid@5.1.x", "@turf/square-grid@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/square-grid/-/square-grid-5.1.5.tgz#1bd5f7b9eb14f0b60bc231fefe7351d1a32f1a51" + integrity sha1-G9X3uesU8LYLwjH+/nNR0aMvGlE= dependencies: "@turf/boolean-contains" "^5.1.5" "@turf/boolean-overlap" "^5.1.5" @@ -836,6 +934,7 @@ "@turf/square@5.1.x", "@turf/square@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/square/-/square-5.1.5.tgz#aa7b21e6033cc9252c3a5bd6f3d88dabd6fed180" + integrity sha1-qnsh5gM8ySUsOlvW89iNq9b+0YA= dependencies: "@turf/distance" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -843,6 +942,7 @@ "@turf/standard-deviational-ellipse@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-5.1.5.tgz#85cd283b5e1aca58f21bd66412e414b56d852324" + integrity sha1-hc0oO14ayljyG9ZkEuQUtW2FIyQ= dependencies: "@turf/center-mean" "^5.1.5" "@turf/ellipse" "^5.1.5" @@ -854,6 +954,7 @@ "@turf/tag@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/tag/-/tag-5.1.5.tgz#d1ee1a5088ecfd4a1411019c98239ccf2a497d20" + integrity sha1-0e4aUIjs/UoUEQGcmCOczypJfSA= dependencies: "@turf/boolean-point-in-polygon" "^5.1.5" "@turf/clone" "^5.1.5" @@ -863,6 +964,7 @@ "@turf/tesselate@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/tesselate/-/tesselate-5.1.5.tgz#32a594e9c21a00420a9f90d2c43df3e1166061cd" + integrity sha1-MqWU6cIaAEIKn5DSxD3z4RZgYc0= dependencies: "@turf/helpers" "^5.1.5" earcut "^2.0.0" @@ -870,12 +972,14 @@ "@turf/tin@5.1.x", "@turf/tin@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/tin/-/tin-5.1.5.tgz#28223eafc5fbe9ae9acca81cdcfea5d1424c917d" + integrity sha1-KCI+r8X76a6azKgc3P6l0UJMkX0= dependencies: "@turf/helpers" "^5.1.5" "@turf/transform-rotate@5.1.x", "@turf/transform-rotate@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/transform-rotate/-/transform-rotate-5.1.5.tgz#d096edd9e300fe315069d54d8e458c409221edfb" + integrity sha1-0Jbt2eMA/jFQadVNjkWMQJIh7fs= dependencies: "@turf/centroid" "^5.1.5" "@turf/clone" "^5.1.5" @@ -889,6 +993,7 @@ "@turf/transform-scale@5.1.x", "@turf/transform-scale@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/transform-scale/-/transform-scale-5.1.5.tgz#70fd3ae01856cf7bae9f15ad561cdfe8f89001b9" + integrity sha1-cP064BhWz3uunxWtVhzf6PiQAbk= dependencies: "@turf/bbox" "^5.1.5" "@turf/center" "^5.1.5" @@ -904,6 +1009,7 @@ "@turf/transform-translate@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/transform-translate/-/transform-translate-5.1.5.tgz#530a257fb1dc7268dadcab34e67901eb2a3dec63" + integrity sha1-Uwolf7Hccmja3Ks05nkB6yo97GM= dependencies: "@turf/clone" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -914,6 +1020,7 @@ "@turf/triangle-grid@5.1.x", "@turf/triangle-grid@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/triangle-grid/-/triangle-grid-5.1.5.tgz#7b36762108554c14f28caff3c48b1cfc82c8dc81" + integrity sha1-ezZ2IQhVTBTyjK/zxIsc/ILI3IE= dependencies: "@turf/distance" "^5.1.5" "@turf/helpers" "^5.1.5" @@ -923,6 +1030,7 @@ "@turf/truncate@5.1.x", "@turf/truncate@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/truncate/-/truncate-5.1.5.tgz#9eedfb3b18ba81f2c98d3ead09431cca1884ad89" + integrity sha1-nu37Oxi6gfLJjT6tCUMcyhiErYk= dependencies: "@turf/helpers" "^5.1.5" "@turf/meta" "^5.1.5" @@ -930,6 +1038,7 @@ "@turf/turf@^5.1.6": version "5.1.6" resolved "https://registry.yarnpkg.com/@turf/turf/-/turf-5.1.6.tgz#c3122592887ed234b75468b8a8c45bf886fbf8f6" + integrity sha1-wxIlkoh+0jS3VGi4qMRb+Ib7+PY= dependencies: "@turf/along" "5.1.x" "@turf/area" "5.1.x" @@ -1035,6 +1144,7 @@ "@turf/union@5.1.x", "@turf/union@^5.1.5": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/union/-/union-5.1.5.tgz#53285b6094047fc58d96aac0ea90865ec34d454b" + integrity sha1-UyhbYJQEf8WNlqrA6pCGXsNNRUs= dependencies: "@turf/helpers" "^5.1.5" turf-jsts "*" @@ -1042,6 +1152,7 @@ "@turf/unkink-polygon@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/unkink-polygon/-/unkink-polygon-5.1.5.tgz#7b01847c50fb574ae2579e19e44cba8526d213c3" + integrity sha1-ewGEfFD7V0riV54Z5Ey6hSbSE8M= dependencies: "@turf/area" "^5.1.5" "@turf/boolean-point-in-polygon" "^5.1.5" @@ -1052,21 +1163,100 @@ "@turf/voronoi@5.1.x": version "5.1.5" resolved "https://registry.yarnpkg.com/@turf/voronoi/-/voronoi-5.1.5.tgz#e856e9406dcc2f25d66ddc898584e27c2ebfca66" + integrity sha1-6FbpQG3MLyXWbdyJhYTifC6/ymY= dependencies: "@turf/helpers" "^5.1.5" "@turf/invariant" "^5.1.5" d3-voronoi "1.1.2" +"@types/body-parser@*": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" + integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.32" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" + integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== + dependencies: + "@types/node" "*" + +"@types/events@*": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" + integrity sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA== + +"@types/express-jwt@0.0.34": + version "0.0.34" + resolved "https://registry.yarnpkg.com/@types/express-jwt/-/express-jwt-0.0.34.tgz#fdbee4c6af5c0a246ef2a933f5519973c7717f02" + integrity sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI= + dependencies: + "@types/express" "*" + "@types/express-unless" "*" + +"@types/express-serve-static-core@*": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz#fdfe777594ddc1fe8eb8eccce52e261b496e43e7" + integrity sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w== + dependencies: + "@types/events" "*" + "@types/node" "*" + "@types/range-parser" "*" + +"@types/express-unless@*": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/express-unless/-/express-unless-0.0.32.tgz#783f3cc1fa5e67cc2ed30000f3e1f22501f75d50" + integrity sha512-6YpJyFNlDDnPnRjMOvJCoDYlSDDmG/OEEUsPk7yhNkL4G9hUYtgab6vi1CcWsGSSSM0CsvNlWTG+ywAGnvF03g== + dependencies: + "@types/express" "*" + +"@types/express@*": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.0.tgz#6d8bc42ccaa6f35cf29a2b7c3333cb47b5a32a19" + integrity sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/serve-static" "*" + +"@types/mime@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b" + integrity sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA== + +"@types/node@*": + version "10.9.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897" + integrity sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw== + +"@types/range-parser@*": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.2.tgz#fa8e1ad1d474688a757140c91de6dace6f4abc8d" + integrity sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw== + +"@types/serve-static@*": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" + integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q== + dependencies: + "@types/express-serve-static-core" "*" + "@types/mime" "*" + accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= dependencies: mime-types "~2.1.18" negotiator "0.6.1" -ajv@^5.1.0: +ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -1076,90 +1266,103 @@ ajv@^5.1.0: ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= append-field@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/append-field/-/append-field-0.1.0.tgz#6ddc58fa083c7bc545d3c5995b2830cc2366d44a" + integrity sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo= argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY= dependencies: sprintf-js "~1.0.2" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -async@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" +async@2.6.0, async@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + integrity sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw== dependencies: lodash "^4.14.0" async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" - dependencies: - lodash "^4.14.0" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= async@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + integrity sha1-+PwEyjoTeErenhZBr5hXjPvWR6k= asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64url@2.0.0, base64url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" + integrity sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs= bcrypt-nodejs@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz#c60917f26dc235661566c681061c303c2b28842b" + integrity sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs= bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40= dependencies: tweetnacl "^0.14.3" biguint-format@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/biguint-format/-/biguint-format-1.0.0.tgz#e1863f47dfdfed316cc95726e4cd9d1994fc8c5e" + integrity sha1-4YY/R9/f7TFsyVcm5M2dGZT8jF4= bluebird@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= body-parser@1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + integrity sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ= dependencies: bytes "3.0.0" content-type "~1.0.4" @@ -1175,6 +1378,7 @@ body-parser@1.18.2: body-parser@1.18.3, body-parser@^1.18.3: version "1.18.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= dependencies: bytes "3.0.0" content-type "~1.0.4" @@ -1187,21 +1391,10 @@ body-parser@1.18.3, body-parser@^1.18.3: raw-body "2.3.3" type-is "~1.6.16" -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI= dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -1209,18 +1402,22 @@ brace-expansion@^1.1.7: bson@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c" + integrity sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw= buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= buffer-shims@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= busboy@^0.2.11: version "0.2.14" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= dependencies: dicer "0.2.5" readable-stream "1.1.x" @@ -1228,22 +1425,27 @@ busboy@^0.2.11: bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= camelcase@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= clamav.js@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/clamav.js/-/clamav.js-0.12.0.tgz#f654ebd2d10c707cb5f7d4453885acd88d2731f7" + integrity sha1-9lTr0tEMcHy199RFOIWs2I0nMfc= cliui@^3.0.3: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -1252,40 +1454,61 @@ cliui@^3.0.3: co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +combined-stream@1.0.6, combined-stream@~1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + integrity sha1-cj599ugBrFYTETp+RFqbactjKBg= + dependencies: + delayed-stream "~1.0.0" -combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk= dependencies: delayed-stream "~1.0.0" commander@2: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.11.0, commander@^2.7.1: +commander@^2.7.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" + integrity sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA== + +commander@~2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== component-emitter@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc= dependencies: inherits "^2.0.3" readable-stream "^2.2.2" @@ -1294,6 +1517,7 @@ concat-stream@^1.5.0: concaveman@*: version "1.1.1" resolved "https://registry.yarnpkg.com/concaveman/-/concaveman-1.1.1.tgz#6c2482580b2523cef82fc2bec00a0415e6e68162" + integrity sha1-bCSCWAslI874L8K+wAoEFebmgWI= dependencies: monotone-convex-hull-2d "^1.0.1" point-in-polygon "^1.0.1" @@ -1304,100 +1528,115 @@ concaveman@*: content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= cookiejar@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a" + integrity sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o= core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cycle@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= d3-array@1: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== d3-geo@1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.7.1.tgz#44bbc7a218b1fd859f3d8fd7c443ca836569ce99" + integrity sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw== dependencies: d3-array "1" d3-voronoi@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" + integrity sha1-Fodmfo8TotFYyAwUgMWinLDYlzw= dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" -debug@2.6.9: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= deep-equal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= density-clustering@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/density-clustering/-/density-clustering-1.3.0.tgz#dc9f59c8f0ab97e1624ac64930fd3194817dcac5" + integrity sha1-3J9ZyPCrl+FiSsZJMP0xlIF9ysU= depd@1.1.1, depd@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k= depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= dicer@0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= dependencies: readable-stream "1.1.x" streamsearch "0.1.2" @@ -1405,16 +1644,19 @@ dicer@0.2.5: earcut@^2.0.0: version "2.1.3" resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.1.3.tgz#ca579545f351941af7c3d0df49c9f7d34af99b0c" + integrity sha512-AxdCdWUk1zzK/NuZ7e1ljj6IGC+VAdC3Qb7QQDsXpfNrc5IM8tL9nNXUmEGE6jRHTfZ10zhzRhtDmWVsR5pd3A== ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU= dependencies: jsbn "~0.1.0" ecdsa-sig-formatter@1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" + integrity sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE= dependencies: base64url "^2.0.0" safe-buffer "^5.0.1" @@ -1422,38 +1664,47 @@ ecdsa-sig-formatter@1.0.9: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= emitter-component@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.1.tgz#065e2dbed6959bf470679edabeaf7981d1003ab6" + integrity sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY= encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + integrity sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA= encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= es6-promise@3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" + integrity sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q= escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw== etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -express@^4.15.2: +express@^4.16.0: version "4.16.4" resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== dependencies: accepts "~1.3.5" array-flatten "1.1.1" @@ -1486,29 +1737,40 @@ express@^4.15.2: utils-merge "1.0.1" vary "~1.1.2" -extend@^3.0.0, extend@~3.0.1: +extend@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= eyes@0.1.x: version "0.1.8" resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + integrity sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8= fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= finalhandler@1.1.1: version "1.1.1" resolved "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== dependencies: debug "2.6.9" encodeurl "~1.0.2" @@ -1521,44 +1783,67 @@ finalhandler@1.1.1: flake-idgen@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/flake-idgen/-/flake-idgen-1.1.0.tgz#282c3ab567dfb486ed8be7ba62b12117661e843d" + integrity sha1-KCw6tWfftIbti+e6YrEhF2YehD0= forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@^2.3.1, form-data@~2.3.1: +form-data@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + integrity sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8= dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk= + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + formidable@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" + integrity sha1-lriIb3w8NQi5Mta9cMTTqI818ak= + +formidable@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" + integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg== forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= geojson-equality@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/geojson-equality/-/geojson-equality-0.1.6.tgz#a171374ef043e5d4797995840bae4648e0752d72" + integrity sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI= dependencies: deep-equal "^1.0.0" geojson-rbush@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-2.1.0.tgz#3bd73be391fc10b0ae693d9b8acea2aae0b83a8d" + integrity sha1-O9c745H8ELCuaT2bis6iquC4Oo0= dependencies: "@turf/helpers" "*" "@turf/meta" "*" @@ -1567,16 +1852,19 @@ geojson-rbush@2.1.0: get-closest@*: version "0.0.4" resolved "https://registry.yarnpkg.com/get-closest/-/get-closest-0.0.4.tgz#269ac776d1e6022aa0fd586dd708e8a7d32269af" + integrity sha1-JprHdtHmAiqg/Vht1wjop9Miaa8= getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" glob@^7.0.5: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1588,44 +1876,32 @@ glob@^7.0.5: graphlib@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.1.tgz#42352c52ba2f4d035cb566eb91f7395f76ebc951" + integrity sha1-QjUsUrovTQNctWbrkfc5X3bryVE= dependencies: lodash "^4.11.1" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + integrity sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA== dependencies: - ajv "^5.1.0" + ajv "^5.3.0" har-schema "^2.0.0" -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - hooks-fixed@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.2.tgz#20076daa07e77d8a6106883ce3f1722e051140b0" + integrity sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ== http-errors@1.6.2, http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= dependencies: depd "1.1.1" inherits "2.0.3" @@ -1635,6 +1911,7 @@ http-errors@1.6.2, http-errors@~1.6.2: http-errors@1.6.3, http-errors@~1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: depd "~1.1.2" inherits "2.0.3" @@ -1644,6 +1921,7 @@ http-errors@1.6.3, http-errors@~1.6.3: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -1652,74 +1930,74 @@ http-signature@~1.2.0: iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== iconv-lite@0.4.23: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== dependencies: safer-buffer ">= 2.1.2 < 3" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1: +inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= ipaddr.js@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4= is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isemail@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isstream@0.1.x, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -joi@^6.10.1: - version "6.10.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" - dependencies: - hoek "2.x.x" - isemail "1.x.x" - moment "2.x.x" - topo "1.x.x" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= js-yaml@^3.10.0, js-yaml@^3.3.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -1727,45 +2005,58 @@ js-yaml@^3.10.0, js-yaml@^3.3.1: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -json-refs@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/json-refs/-/json-refs-3.0.2.tgz#2143baeb3a5f85c215695bd4771893d97c737d65" +json-refs@^3.0.2: + version "3.0.12" + resolved "https://registry.yarnpkg.com/json-refs/-/json-refs-3.0.12.tgz#949435968974bcc9f4b515a97036aa912700d067" + integrity sha512-6RbO1Y3e0Hty/tEpXtQG6jUx7g1G8e39GIOuPugobPC8BX1gZ0OGZQpBn1FLWGkuWF35GRGADvhwdEIFpwIjyA== dependencies: - commander "^2.11.0" + commander "~2.11.0" graphlib "^2.1.1" js-yaml "^3.10.0" lodash "^4.17.4" native-promise-only "^0.8.1" - path-loader "^1.0.4" + path-loader "^1.0.5" slash "^1.0.0" uri-js "^3.0.2" json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -jsonwebtoken@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.3.0.tgz#85118d6a70e3fccdf14389f4e7a1c3f9c8a9fbba" +jsonwebtoken@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.0.0.tgz#7b241aa67c61b3d0b3e641254a9a6f5b66f550e8" + integrity sha1-eyQapnxhs9Cz5kElSppvW2b1UOg= dependencies: - joi "^6.10.1" jws "^3.1.4" + lodash.includes "^4.3.0" + lodash.isarray "^4.0.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" lodash.once "^4.0.0" - ms "^0.7.1" + ms "^2.0.0" xtend "^4.0.1" jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -1775,15 +2066,29 @@ jsprim@^1.2.2: jwa@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" + integrity sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU= dependencies: base64url "2.0.0" buffer-equal-constant-time "1.0.1" ecdsa-sig-formatter "1.0.9" safe-buffer "^5.0.1" +jwks-rsa@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-1.3.0.tgz#f37d2a6815af17a3b2e5898ab2a41ad8c168b295" + integrity sha512-9q+d5VffK/FvFAjuXoddrq7zQybFSINV4mcwJJExGKXGyjWWpTt3vsn/aX33aB0heY02LK0qSyicdtRK0gVTig== + dependencies: + "@types/express-jwt" "0.0.34" + debug "^2.2.0" + limiter "^1.1.0" + lru-memoizer "^1.6.0" + ms "^2.0.0" + request "^2.73.0" + jws@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" + integrity sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI= dependencies: base64url "^2.0.0" jwa "^1.1.4" @@ -1792,24 +2097,39 @@ jws@^3.1.4: kareem@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.5.0.tgz#e3e4101d9dcfde299769daf4b4db64d895d17448" + integrity sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg= lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" +limiter@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.3.tgz#32e2eb55b2324076943e5d04c1185ffb387968ef" + integrity sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw== + lineclip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/lineclip/-/lineclip-1.1.5.tgz#2bf26067d94354feabf91e42768236db5616fd13" + integrity sha1-K/JgZ9lDVP6r+R5CdoI221YW/RM= + +lock@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/lock/-/lock-0.1.4.tgz#fec7deaef17e7c3a0a55e1da042803e25d91745d" + integrity sha1-/sfervF+fDoKVeHaBCgD4l2RdF0= lodash._arraypool@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._arraypool/-/lodash._arraypool-2.4.1.tgz#e88eecb92e2bb84c9065612fd958a0719cd47f94" + integrity sha1-6I7suS4ruEyQZWEv2VigcZzUf5Q= lodash._basebind@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._basebind/-/lodash._basebind-2.4.1.tgz#e940b9ebdd27c327e0a8dab1b55916c5341e9575" + integrity sha1-6UC5690nwyfgqNqxtVkWxTQelXU= dependencies: lodash._basecreate "~2.4.1" lodash._setbinddata "~2.4.1" @@ -1819,6 +2139,7 @@ lodash._basebind@~2.4.1: lodash._baseclone@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-2.4.1.tgz#30f823e57e17e3735d383bd62b60b387543b4186" + integrity sha1-MPgj5X4X43NdODvWK2Czh1Q7QYY= dependencies: lodash._getarray "~2.4.1" lodash._releasearray "~2.4.1" @@ -1832,6 +2153,7 @@ lodash._baseclone@~2.4.1: lodash._basecreate@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz#f8e6f5b578a9e34e541179b56b8eeebf4a287e08" + integrity sha1-+Ob1tXip405UEXm1a47uv0oofgg= dependencies: lodash._isnative "~2.4.1" lodash.isobject "~2.4.1" @@ -1840,6 +2162,7 @@ lodash._basecreate@~2.4.1: lodash._basecreatecallback@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz#7d0b267649cb29e7a139d0103b7c11fae84e4851" + integrity sha1-fQsmdknLKeehOdAQO3wR+uhOSFE= dependencies: lodash._setbinddata "~2.4.1" lodash.bind "~2.4.1" @@ -1849,6 +2172,7 @@ lodash._basecreatecallback@~2.4.1: lodash._basecreatewrapper@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz#4d31f2e7de7e134fbf2803762b8150b32519666f" + integrity sha1-TTHy595+E0+/KAN2K4FQsyUZZm8= dependencies: lodash._basecreate "~2.4.1" lodash._setbinddata "~2.4.1" @@ -1858,6 +2182,7 @@ lodash._basecreatewrapper@~2.4.1: lodash._createwrapper@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz#51d6957973da4ed556e37290d8c1a18c53de1607" + integrity sha1-UdaVeXPaTtVW43KQ2MGhjFPeFgc= dependencies: lodash._basebind "~2.4.1" lodash._basecreatewrapper "~2.4.1" @@ -1867,24 +2192,29 @@ lodash._createwrapper@~2.4.1: lodash._getarray@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._getarray/-/lodash._getarray-2.4.1.tgz#faf1f7f810fa985a251c2187404481094839e5ee" + integrity sha1-+vH3+BD6mFolHCGHQESBCUg55e4= dependencies: lodash._arraypool "~2.4.1" lodash._isnative@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" + integrity sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw= lodash._maxpoolsize@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._maxpoolsize/-/lodash._maxpoolsize-2.4.1.tgz#9d482f463b8e66afbe59c2c14edb117060172334" + integrity sha1-nUgvRjuOZq++WcLBTtsRcGAXIzQ= lodash._objecttypes@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" + integrity sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE= lodash._releasearray@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._releasearray/-/lodash._releasearray-2.4.1.tgz#a6139630d76d1536b07ddc80962889b082f6a641" + integrity sha1-phOWMNdtFTawfdyAliiJsIL2pkE= dependencies: lodash._arraypool "~2.4.1" lodash._maxpoolsize "~2.4.1" @@ -1892,6 +2222,7 @@ lodash._releasearray@~2.4.1: lodash._setbinddata@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz#f7c200cd1b92ef236b399eecf73c648d17aa94d2" + integrity sha1-98IAzRuS7yNrOZ7s9zxkjReqlNI= dependencies: lodash._isnative "~2.4.1" lodash.noop "~2.4.1" @@ -1899,16 +2230,19 @@ lodash._setbinddata@~2.4.1: lodash._shimkeys@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" + integrity sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM= dependencies: lodash._objecttypes "~2.4.1" lodash._slice@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._slice/-/lodash._slice-2.4.1.tgz#745cf41a53597b18f688898544405efa2b06d90f" + integrity sha1-dFz0GlNZexj2iImFREBe+isG2Q8= lodash.assign@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-2.4.1.tgz#84c39596dd71181a97b0652913a7c9675e49b1aa" + integrity sha1-hMOVlt1xGBqXsGUpE6fJZ15Jsao= dependencies: lodash._basecreatecallback "~2.4.1" lodash._objecttypes "~2.4.1" @@ -1917,6 +2251,7 @@ lodash.assign@~2.4.1: lodash.bind@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-2.4.1.tgz#5d19fa005c8c4d236faf4742c7b7a1fcabe29267" + integrity sha1-XRn6AFyMTSNvr0dCx7eh/Kvikmc= dependencies: lodash._createwrapper "~2.4.1" lodash._slice "~2.4.1" @@ -1924,6 +2259,7 @@ lodash.bind@~2.4.1: lodash.clonedeep@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-2.4.1.tgz#f29203b40b12fee0a45d3631648259bebabc7868" + integrity sha1-8pIDtAsS/uCkXTYxZIJZvrq8eGg= dependencies: lodash._baseclone "~2.4.1" lodash._basecreatecallback "~2.4.1" @@ -1931,6 +2267,7 @@ lodash.clonedeep@^2.4.1: lodash.foreach@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-2.4.1.tgz#fe3fc3a34c86c94cab6f9522560282741e016309" + integrity sha1-/j/Do0yGyUyrb5UiVgKCdB4BYwk= dependencies: lodash._basecreatecallback "~2.4.1" lodash.forown "~2.4.1" @@ -1938,6 +2275,7 @@ lodash.foreach@~2.4.1: lodash.forown@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.forown/-/lodash.forown-2.4.1.tgz#78b41eafe1405fa966459ea4193fd502d084524b" + integrity sha1-eLQer+FAX6lmRZ6kGT/VAtCEUks= dependencies: lodash._basecreatecallback "~2.4.1" lodash._objecttypes "~2.4.1" @@ -1946,34 +2284,76 @@ lodash.forown@~2.4.1: lodash.get@4.4.2, lodash.get@^4.0.0: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= lodash.identity@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.identity/-/lodash.identity-2.4.1.tgz#6694cffa65fef931f7c31ce86c74597cf560f4f1" + integrity sha1-ZpTP+mX++TH3wxzobHRZfPVg9PE= + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isarray@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-4.0.0.tgz#2aca496b28c4ca6d726715313590c02e6ea34403" + integrity sha1-KspJayjEym1yZxUxNZDALm6jRAM= lodash.isarray@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-2.4.1.tgz#b52a326c1f62f6d7da73a31d5401df6ef44f0fa1" + integrity sha1-tSoybB9i9tfac6MdVAHfbvRPD6E= dependencies: lodash._isnative "~2.4.1" +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + lodash.isequal@^4.0.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= lodash.isfunction@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz#2cfd575c73e498ab57e319b77fa02adef13a94d1" + integrity sha1-LP1XXHPkmKtX4xm3f6Aq3vE6lNE= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= lodash.isobject@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" + integrity sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU= dependencies: lodash._objecttypes "~2.4.1" +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + lodash.keys@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" + integrity sha1-SN6kbfj/djKxDXBrissmWR4rNyc= dependencies: lodash._isnative "~2.4.1" lodash._shimkeys "~2.4.1" @@ -1982,103 +2362,135 @@ lodash.keys@~2.4.1: lodash.noop@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-2.4.1.tgz#4fb54f816652e5ae10e8f72f717a388c7326538a" + integrity sha1-T7VPgWZS5a4Q6PcvcXo4jHMmU4o= lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= lodash.support@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.support/-/lodash.support-2.4.1.tgz#320e0b67031673c28d7a2bb5d9e0331a45240515" + integrity sha1-Mg4LZwMWc8KNeiu12eAzGkUkBRU= dependencies: lodash._isnative "~2.4.1" lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= + +lru-cache@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + integrity sha1-HRdnnAac2l0ECZGgnbwsDbN35V4= + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +lru-memoizer@^1.6.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-1.12.0.tgz#efe65706cc8a9cc653f80f0d5a6ea38ad950e352" + integrity sha1-7+ZXBsyKnMZT+A8NWm6jitlQ41I= + dependencies: + lock "~0.1.2" + lodash "^4.17.4" + lru-cache "~4.0.0" + very-fast-args "^1.1.0" media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + integrity sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE= mime-db@~1.36.0: version "1.36.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" + integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw== -mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.17: +mime-types@^2.1.12, mime-types@~2.1.15: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + integrity sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo= dependencies: mime-db "~1.30.0" -mime-types@~2.1.18: +mime-types@~2.1.18, mime-types@~2.1.19: version "2.1.20" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" + integrity sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A== dependencies: mime-db "~1.36.0" mime@1.4.1, mime@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -moment@2.x.x: - version "2.19.3" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.3.tgz#bdb99d270d6d7fda78cc0fbace855e27fe7da69f" - -mongodb-core@2.1.17: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.17.tgz#a418b337a14a14990fb510b923dee6a813173df8" +mongodb-core@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.18.tgz#4c46139bdf3a1f032ded91db49f38eec01659050" + integrity sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA= dependencies: bson "~1.0.4" require_optional "~1.0.0" -mongodb@2.2.33: - version "2.2.33" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.33.tgz#b537c471d34a6651b48f36fdbf29750340e08b50" +mongodb@2.2.34: + version "2.2.34" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.34.tgz#a34f59bbeb61754aec432de72c3fe21526a44c1a" + integrity sha1-o09Zu+thdUrsQy3nLD/iFSakTBo= dependencies: es6-promise "3.2.1" - mongodb-core "2.1.17" + mongodb-core "2.1.18" readable-stream "2.2.7" -mongoose@^4.13.6: - version "4.13.6" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.13.6.tgz#48102f0b0d797a9bd273e581eef16d0505ef3d79" +mongoose@^4.13.17: + version "4.13.17" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.13.17.tgz#0af0396b1e5af027edf404518c62cc194de7d17a" + integrity sha512-VGeSP5O3k9HUXsNm9AocdAlVbfaHV/RHgHc8Jfvwr0D0ZyzgJ3JJ+MKSmz+omicNOhBsmpBEL1zVHM2uIj8tDQ== dependencies: - async "2.1.4" + async "2.6.0" bson "~1.0.4" hooks-fixed "2.0.2" kareem "1.5.0" lodash.get "4.4.2" - mongodb "2.2.33" - mpath "0.3.0" + mongodb "2.2.34" + mpath "0.5.1" mpromise "0.5.5" mquery "2.3.3" ms "2.0.0" @@ -2089,20 +2501,24 @@ mongoose@^4.13.6: monotone-convex-hull-2d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/monotone-convex-hull-2d/-/monotone-convex-hull-2d-1.0.1.tgz#47f5daeadf3c4afd37764baa1aa8787a40eee08c" + integrity sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw= dependencies: robust-orientation "^1.1.3" -mpath@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.3.0.tgz#7a58f789e9b5fd3c94520634157960f26bd5ef44" +mpath@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.5.1.tgz#17131501f1ff9e6e4fbc8ffa875aa7065b5775ab" + integrity sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg== mpromise@0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" + integrity sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY= mquery@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.3.3.tgz#221412e5d4e7290ca5582dd16ea8f190a506b518" + integrity sha512-NC8L14kn+qxJbbJ1gbcEMDxF0sC3sv+1cbRReXXwVvowcwY1y9KoVZFq0ebwARibsadu8lx8nWGvm3V0Pf0ZWQ== dependencies: bluebird "3.5.0" debug "2.6.9" @@ -2112,14 +2528,17 @@ mquery@2.3.3: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^0.7.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" +ms@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== multer@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/multer/-/multer-1.3.0.tgz#092b2670f6846fa4914965efc8cf94c20fec6cd2" + integrity sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI= dependencies: append-field "^0.1.0" busboy "^0.2.11" @@ -2133,14 +2552,17 @@ multer@^1.1.0: muri@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/muri/-/muri-1.3.0.tgz#aeccf3db64c56aa7c5b34e00f95b7878527a4721" + integrity sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg== native-promise-only@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" + integrity sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE= nconf@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/nconf/-/nconf-0.9.1.tgz#f11baf90f418aecef0cb484974b479fb4803fa6c" + integrity sha512-PdbVtjpTkCjGXRXgeKaz5lM/wq3i7RpYTinjXdMRaR8jnOLhonDY5SvB9jPt7NlqO3NFNC+v1XCYdqScMElDrw== dependencies: async "^1.4.0" ini "^1.3.0" @@ -2150,58 +2572,70 @@ nconf@^0.9.1: negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@*: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I= on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= dependencies: lcid "^1.0.0" parseurl@^1.3.0, parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= passport-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + integrity sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4= dependencies: passport-strategy "1.x.x" passport-strategy@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + integrity sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ= passport@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.0.tgz#c5095691347bd5ad3b5e180238c3914d16f05811" + integrity sha1-xQlWkTR71a07XhgCOMORTRbwWBE= dependencies: passport-strategy "1.x.x" pause "0.0.1" @@ -2209,72 +2643,103 @@ passport@^0.4.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-loader@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/path-loader/-/path-loader-1.0.4.tgz#107dc8b1b7c0f6a8a18e7749bdaf46a26c2d98b4" +path-loader@^1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/path-loader/-/path-loader-1.0.9.tgz#4f204ada1a477db2a572fce382029c3f24dc5237" + integrity sha512-pD37gArtr+/72Tst9oJoDB9k7gB9A09Efj7yyBi5HDUqaxqULXBWW8Rnw2TfNF+3sN7QZv0ZNdW1Qx2pFGW5Jg== dependencies: native-promise-only "^0.8.1" - superagent "^3.6.3" + superagent "^3.8.3" path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-to-regexp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.1.0.tgz#7e30f9f5b134bd6a28ffc2e3ef1e47075ac5259b" + integrity sha512-dZY7QPCPp5r9cnNuQ955mOv4ZFVDXY/yvqeV7Y1W2PJA3PEFcuow9xKFfJxbBj1pIjOAP+M2B4/7xubmykLrXw== pause@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10= performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= point-in-polygon@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.0.1.tgz#d59b64e8fee41c49458aac82b56718c5957b2af7" + integrity sha1-1Ztk6P7kHElFiqyCtWcYxZV7Kvc= process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== proxy-addr@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA== dependencies: forwarded "~0.1.2" ipaddr.js "1.8.0" +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= -qs@6.5.1, qs@^6.0.3, qs@^6.5.1, qs@~6.5.1: +qs@6.5.1, qs@^6.0.3, qs@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A== -qs@6.5.2: +qs@6.5.2, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== quickselect@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.1.1.tgz#852e412ce418f237ad5b660d70cffac647ae94c2" + integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= raw-body@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k= dependencies: bytes "3.0.0" http-errors "1.6.2" @@ -2284,6 +2749,7 @@ raw-body@2.3.2: raw-body@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== dependencies: bytes "3.0.0" http-errors "1.6.3" @@ -2293,12 +2759,14 @@ raw-body@2.3.3: rbush@*, rbush@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" + integrity sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA== dependencies: quickselect "^1.0.1" readable-stream@1.1.x: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -2308,6 +2776,7 @@ readable-stream@1.1.x: readable-stream@2.2.7, readable-stream@^2.0.5, readable-stream@^2.2.2: version "2.2.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1" + integrity sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE= dependencies: buffer-shims "~1.0.0" core-util-is "~1.0.0" @@ -2317,40 +2786,54 @@ readable-stream@2.2.7, readable-stream@^2.0.5, readable-stream@^2.2.2: string_decoder "~1.0.0" util-deprecate "~1.0.1" +readable-stream@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + regexp-clone@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" + integrity sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk= -request@^2.83.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" +request@^2.73.0, request@^2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" + form-data "~2.3.2" + har-validator "~5.1.0" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" require_optional@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== dependencies: resolve-from "^2.0.0" semver "^5.1.0" @@ -2358,10 +2841,12 @@ require_optional@~1.0.0: resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= robust-orientation@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/robust-orientation/-/robust-orientation-1.1.3.tgz#daff5b00d3be4e60722f0e9c0156ef967f1c2049" + integrity sha1-2v9bANO+TmByLw6cAVbvln8cIEk= dependencies: robust-scale "^1.0.2" robust-subtract "^1.0.0" @@ -2371,6 +2856,7 @@ robust-orientation@^1.1.3: robust-scale@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/robust-scale/-/robust-scale-1.0.2.tgz#775132ed09542d028e58b2cc79c06290bcf78c32" + integrity sha1-d1Ey7QlULQKOWLLMecBikLz3jDI= dependencies: two-product "^1.0.2" two-sum "^1.0.0" @@ -2378,34 +2864,42 @@ robust-scale@^1.0.2: robust-subtract@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/robust-subtract/-/robust-subtract-1.0.0.tgz#e0b164e1ed8ba4e3a5dda45a12038348dbed3e9a" + integrity sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo= robust-sum@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/robust-sum/-/robust-sum-1.0.0.tgz#16646e525292b4d25d82757a286955e0bbfa53d9" + integrity sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k= -safe-buffer@5.1.2: +safe-buffer@5.1.2, safe-buffer@^5.1.2, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0: +safe-buffer@^5.0.1, safe-buffer@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== secure-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/secure-keys/-/secure-keys-1.0.0.tgz#f0c82d98a3b139a8776a8808050b824431087fca" + integrity sha1-8MgtmKOxOah3aogIBQuCRDEIf8o= semver@^5.1.0: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== send@0.16.1: version "0.16.1" resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" + integrity sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A== dependencies: debug "2.6.9" depd "~1.1.1" @@ -2424,6 +2918,7 @@ send@0.16.1: send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== dependencies: debug "2.6.9" depd "~1.1.2" @@ -2442,6 +2937,7 @@ send@0.16.2: serve-static@1.13.2: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" @@ -2451,6 +2947,7 @@ serve-static@1.13.2: serve-static@^1.10.0: version "1.13.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" + integrity sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ== dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" @@ -2460,44 +2957,47 @@ serve-static@^1.10.0: setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== skmeans@0.9.7: version "0.9.7" resolved "https://registry.yarnpkg.com/skmeans/-/skmeans-0.9.7.tgz#72670cebb728508f56e29c0e10d11e623529ce5d" + integrity sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg== slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= sliced@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" + integrity sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8= sliced@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" + integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= spark-md5@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.0.tgz#3722227c54e2faf24b1dc6d933cc144e6f71bfef" + integrity sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8= sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + integrity sha1-US322mKHFEMW3EwY/hzx2UBzm+M= dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -2512,64 +3012,74 @@ sshpk@^1.7.0: stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= "statuses@>= 1.3.1 < 2", statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== stream@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stream/-/stream-0.0.2.tgz#7f5363f057f6592c5595f00bc80a27f5cec1f0ef" + integrity sha1-f1Nj8Ff2WSxVlfALyAon9c7B8O8= dependencies: emitter-component "^1.1.1" streamsearch@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string@^3.3.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0" - string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= string_decoder@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -superagent@^3.5.2, superagent@^3.6.3: +superagent@^3.5.2: version "3.8.2" resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.2.tgz#e4a11b9d047f7d3efeb3bbe536d9ec0021d16403" + integrity sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ== dependencies: component-emitter "^1.2.0" cookiejar "^2.1.0" @@ -2582,22 +3092,40 @@ superagent@^3.5.2, superagent@^3.6.3: qs "^6.5.1" readable-stream "^2.0.5" +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + swagger-converter@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/swagger-converter/-/swagger-converter-0.1.7.tgz#a097519c6f1ee4dd67e308d9b53ddc9c2b257f97" + integrity sha1-oJdRnG8e5N1n4wjZtT3cnCslf5c= dependencies: lodash.clonedeep "^2.4.1" -swagger-tools@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/swagger-tools/-/swagger-tools-0.10.3.tgz#edeccb45a8c5746bdbf2883cf17e4b85c802d772" +swagger-tools@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/swagger-tools/-/swagger-tools-0.10.4.tgz#2949b00ca17da0d4f91ad74c44027de250c4d849" + integrity sha512-VQpijIi8cpB/frUZOZlVpS7U3CrdSAZBfiHu448R1njiNXUnE7heF3Svz3qFBr5SYtaPvaqWpHMbvboirCXVzA== dependencies: async "^2.5.0" body-parser "1.18.2" - commander "^2.11.0" + commander "~2.11.0" debug "^3.1.0" js-yaml "^3.3.1" - json-refs "^3.0.1" + json-refs "^3.0.2" lodash "^4.17.4" multer "^1.1.0" parseurl "^1.3.0" @@ -2605,7 +3133,6 @@ swagger-tools@^0.10.3: qs "^6.0.3" serve-static "^1.10.0" spark-md5 "^3.0.0" - string "^3.3.0" superagent "^3.5.2" swagger-converter "^0.1.7" traverse "^0.6.6" @@ -2614,60 +3141,66 @@ swagger-tools@^0.10.3: tinyqueue@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-1.2.3.tgz#b6a61de23060584da29f82362e45df1ec7353f3d" - -topo@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" - dependencies: - hoek "2.x.x" + integrity sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA== topojson-client@3.x: version "3.0.0" resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.0.0.tgz#1f99293a77ef42a448d032a81aa982b73f360d2f" + integrity sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8= dependencies: commander "2" topojson-server@3.x: version "3.0.0" resolved "https://registry.yarnpkg.com/topojson-server/-/topojson-server-3.0.0.tgz#378e78e87c3972a7b5be2c5d604369b6bae69c5e" + integrity sha1-N4546Hw5cqe1vixdYENptrrmnF4= dependencies: commander "2" -tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: + psl "^1.1.24" punycode "^1.4.1" traverse@^0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" turf-jsts@*: version "1.2.3" resolved "https://registry.yarnpkg.com/turf-jsts/-/turf-jsts-1.2.3.tgz#59757f542afbff9a577bbf411f183b8f48d38aa4" + integrity sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA== tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= two-product@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/two-product/-/two-product-1.0.2.tgz#67d95d4b257a921e2cb4bd7af9511f9088522eaa" + integrity sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo= two-sum@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/two-sum/-/two-sum-1.0.0.tgz#31d3f32239e4f731eca9df9155e2b297f008ab64" + integrity sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q= type-is@^1.6.4, type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + integrity sha1-yrEPtJCeRByChC6v4a1kbIGARBA= dependencies: media-typer "0.3.0" mime-types "~2.1.15" @@ -2675,6 +3208,7 @@ type-is@^1.6.4, type-is@~1.6.15: type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== dependencies: media-typer "0.3.0" mime-types "~2.1.18" @@ -2682,60 +3216,78 @@ type-is@~1.6.16: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -underscore@^1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" +underscore@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= uri-js@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa" + integrity sha1-+QuFhQf4HepNz7s8TD2/orVX+qo= dependencies: punycode "^2.1.0" util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - -validator@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-7.0.0.tgz#c74deb8063512fac35547938e6f0b1504a282fd2" +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== validator@^9.0.0: version "9.1.2" resolved "https://registry.yarnpkg.com/validator/-/validator-9.1.2.tgz#5711b6413f78bd9d56003130c81b47c39e86546c" + integrity sha512-1Tml6crNdsSC61jHssWksQxq6C7MmSFCCmf99Eb+l/V/cwVlw4/Pg3YXBP1WKcHLsyqe3E+iJXUZgoTTQFcqQg== + +validator@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/validator/-/validator-9.4.1.tgz#abf466d398b561cd243050112c6ff1de6cc12663" + integrity sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA== vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" +very-fast-args@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/very-fast-args/-/very-fast-args-1.1.0.tgz#e16d1d1faf8a6e596a246421fd90a77963d0b396" + integrity sha1-4W0dH6+KbllqJGQh/ZCneWPQs5Y= + window-size@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= -winston@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.0.tgz#808050b93d52661ed9fb6c26b3f0c826708b0aee" +winston@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.4.tgz#a01e4d1d0a103cf4eada6fc1f886b3110d71c34b" + integrity sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q== dependencies: async "~1.0.0" colors "1.0.x" @@ -2747,6 +3299,7 @@ winston@^2.4.0: wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -2754,18 +3307,27 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= xtend@^4.0.0, xtend@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= y18n@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yamljs@0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.2.9.tgz#bd3bdaa62ac09deb2a2e1ce803eeb4217b52a82f" + integrity sha1-vTvapirAnesqLhzoA+60IXtSqC8= dependencies: argparse "^1.0.7" glob "^7.0.5" @@ -2773,6 +3335,7 @@ yamljs@0.2.9: yargs@^3.19.0: version "3.32.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= dependencies: camelcase "^2.0.1" cliui "^3.0.3" @@ -2785,6 +3348,7 @@ yargs@^3.19.0: z-schema@^3.15.4: version "3.19.0" resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.19.0.tgz#d86e90e5d02113c7b8824ae477dd57208d17a5a8" + integrity sha512-V94f3ODuluBS4kQLLjNhwoMek0dyIXCsvNu/A17dAyJ6sMhT5KkJQwSn07R0naByLIXJWMDk+ruMfI/3G3hS4Q== dependencies: lodash.get "^4.0.0" lodash.isequal "^4.0.0"