diff --git a/.gitignore b/.gitignore index c498a20..aa84c76 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ records/ node_modules/ client/.htpasswd log/ +log.js diff --git a/DlFactory.js b/DlFactory.js index 0a4ec2d..8f7889d 100644 --- a/DlFactory.js +++ b/DlFactory.js @@ -1,12 +1,14 @@ "use strict"; var { Writable, Duplex } = require("stream"); -var { log } = require("./log.js")("DlFactory"); +var { log } = require("./log.js")("DlF"); var cp = require("child_process"); var fs = require("fs"); -var { getMeta } = require("webradio-metadata"); var { StreamDl } = require("adblockradio-dl"); // TODO publish source ? -//var config = require("./config.js"); +const Metadata = require("webradio-metadata"); +//var { getMeta, setLog } = require("webradio-metadata"); + +Metadata.setLog(require("./log.js")("meta")); class Db { constructor(options) { @@ -403,7 +405,7 @@ module.exports = function(radio, options) { } if (options.fetchMetadata) { - getMeta(radio.country, radio.name, function(err, parsedMeta, corsEnabled) { + Metadata.getMeta(radio.country, radio.name, function(err, parsedMeta, corsEnabled) { if (err) return log.warn("getMeta: error fetching title meta for radio " + radio.country + "_" + radio.name + " err=" + err); //log.debug(radio.country + "_" + radio.name + " meta=" + JSON.stringify(parsedMeta)); if (options.saveAudio) { diff --git a/client/src/App.js b/client/src/App.js index e322620..aaf3982 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -25,6 +25,7 @@ import iconConfig from "./img/ads_135894.svg"; import playing from "./img/playing.gif"; /* global cordova */ +/* global Android */ var DELAYS = { @@ -53,6 +54,7 @@ class App extends Component { configEditMode: false, locale: "fr", stopUpdates: false, + communicationError: false, //doVisualUpdates: true isCordovaApp: document.URL.indexOf('http://') === -1 && document.URL.indexOf('https://') === -1, isAndroidApp: navigator.userAgent === "abr_android" @@ -94,29 +96,34 @@ class App extends Component { self.newTickInterval(document.hidden ? DELAYS.VISUALS_HIDDEN : DELAYS.VISUALS_ACTIVE); }); + var onHop = function (notification, eopts) { + if (self.state.config.radios.length > 1) { + var index = self.getRadioIndex(self.state.playingRadio); + var newIndex = (index + 1) % self.state.config.radios.length; + var newRadio = self.state.config.radios[newIndex].country + "_" + self.state.config.radios[newIndex].name; + self.play(newRadio, null, function() {}); + console.log("notification: next channel"); + } else { + console.log("notification: next channel but not possible"); + } + }; + + var onStop = function (notification, eopts) { + console.log("notification: stop playback"); + self.play(null, null, function() {}); + }; + if (this.state.isCordovaApp) { // set up notifications actions callbacks document.addEventListener("deviceready", function(){ self.setState({ isCordovaDeviceReady: true }); - - var onHop = function (notification, eopts) { - if (self.state.config.radios.length > 1) { - var index = self.getRadioIndex(self.state.playingRadio); - var newIndex = (index + 1) % self.state.config.radios.length; - var newRadio = self.state.config.radios[newIndex].country + "_" + self.state.config.radios[newIndex].name; - self.play(newRadio, null, function() {}); - console.log("notification: next channel"); - } else { - console.log("notification: next channel but not possible"); - } - }; cordova.plugins.notification.local.on('hop', onHop); - - var onStop = function (notification, eopts) { - console.log("notification: stop playback"); - self.play(null, null, function() {}); - }; cordova.plugins.notification.local.on('stop', onStop); }); + } else if (this.state.isAndroidApp) { + window.notificationHop = onHop; + window.notificationHop = window.notificationHop.bind(this); + window.notificationStop = onStop; + window.notificationStop = window.notificationStop.bind(this); } } @@ -138,9 +145,14 @@ class App extends Component { //console.log("refresh status"); var self = this; - refreshStatus(this.state.config.radios, options, function(resParsed) { + refreshStatus(this.state.config.radios, options, function(err, resParsed) { + if (err) { + self.play(null, null, function() {}); + return self.setState({ communicationError: true }); + } + //console.log("refresh status callback"); - var stateChange = {}; + var stateChange = { communicationError: false }; var types = ["class", "metadata", "volume"]; for (var i=0; i 1) { + actions.unshift({ id: 'hop', title: { en: "Change channel", fr: "Changer de station"}[lang] }); + } + Android.showNotification(notifTitle, notifText, actions); + } else { + Android.clearNotification(); + } + } + play(radio, delay, callback) { if (radio || delay) { radio = radio || this.state.playingRadio; @@ -479,7 +515,7 @@ class App extends Component { stateChange["playingRadio"] = radio; stateChange["playingDelay"] = delay; this.setState(stateChange, function() { - this.cordovaNotification(); + this.showNotification(); }); document.title = radio.split("_")[1] + " - Adblock Radio"; @@ -496,7 +532,7 @@ class App extends Component { playingRadio: null, playingDelay: null }, function() { - this.cordovaNotification(); + this.showNotification(); }); document.title = "Adblock Radio"; stop(); @@ -564,7 +600,7 @@ class App extends Component { return (

{{ en: "Oops, could not connect to server :(", fr: "Oops, problème de connexion au serveur :(" }[lang]}

-

{{ en: "Restart it then press reload this page", fr: "Redémarrez-le puis rechargez cette page" }[lang]}

+

{{ en: "Check your subscription is active then reload this page", fr: "Vérifiez que vous êtes toujours abonné puis rechargez cette page" }[lang]}

) } @@ -631,6 +667,11 @@ class App extends Component { } else { mainContents = ( + {self.state.communicationError && + +

{{ en: "The communication with the server is temporarily unavailable…", fr: "La connection au serveur est momentanément interrompue…" }[lang]}

+
+ } {config.radios.map(function(radioObj, i) { var radio = radioObj.country + "_" + radioObj.name; var playing = self.state.playingRadio === radio; diff --git a/client/src/DelaySVG.js b/client/src/DelaySVG.js index 24d8e13..6cd3c14 100644 --- a/client/src/DelaySVG.js +++ b/client/src/DelaySVG.js @@ -57,12 +57,11 @@ class DelaySVG extends Component { default: colorClass[i] = colors.GREY; } xStartClass[i] = Math.max(this.delayToX(this.props.width, +this.props.date-cl.validFrom), 0); - xStopClass[i] = Math.min(xStartClass[i], this.delayToX(this.props.width, cl.validTo ? (+this.props.date-cl.validTo) : 0)); + xStopClass[i] = Math.max(xStartClass[i], this.delayToX(this.props.width, cl.validTo ? (+this.props.date-cl.validTo) : 0)); //ctx.fillRect(xStart, 0.6*height, xStop, height); } } - var nLines = Math.floor(this.props.cacheLen/TICKS_INTERVAL*1000) var xLines = new Array(nLines); var offset = this.props.date % TICKS_INTERVAL; @@ -79,7 +78,7 @@ class DelaySVG extends Component { Math.round(cursorX-0.3*height) + ",0"; return ( - + {!isNaN(cursorX) && @@ -91,10 +90,8 @@ class DelaySVG extends Component { ) })} {xLines.map(function(x, i) { - return ( - x >= 0 && - - ) + if (x < 0) return null + return })} {!isNaN(cursorX) && diff --git a/client/src/audio.js b/client/src/audio.js index f8e975d..96bb394 100644 --- a/client/src/audio.js +++ b/client/src/audio.js @@ -35,14 +35,14 @@ if (isCordovaApp) { Android.playbackStart(url, callback); } stop = function() { - console.log("android: stop"); + //console.log("android: stop"); Android.playbackStop(); } setVolume = function(vol) { - console.log("android: set vol=" + vol); - Android.playbackSetVolume(vol); + //console.log("android: set vol=" + Math.round(vol*100) + "%"); + Android.playbackSetVolume("" + Math.round(vol*100)); } - + } else { audioElement = document.createElement('audio'); diff --git a/client/src/index.js b/client/src/index.js index 133ff01..04c7c21 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -11,3 +11,9 @@ var isCordovaApp = document.URL.indexOf('http://') === -1 && document.URL.indexO if (!isCordovaApp) { registerServiceWorker(); } + +/*window["isUpdateAvailable"].then(isAvailable => { + if (isAvailable) { + console.log("refresh to get new content"); + } +});*/ diff --git a/client/src/load.js b/client/src/load.js index f866574..8c4bea0 100644 --- a/client/src/load.js +++ b/client/src/load.js @@ -19,9 +19,16 @@ exports.load = function(path, callback) { } }; xhttp.onerror = function (e) { - callback("getHeaders: request failed: " + e, null); + callback("load: request failed: " + e.message, null); }; + xhttp.open("GET", HOST + path, true); + + xhttp.timeout = 5000; // Set timeout to 4 seconds (4000 milliseconds) + xhttp.ontimeout = function () { + callback("load: timed out", null); + } + xhttp.send(); } @@ -31,7 +38,8 @@ exports.refreshStatus = function(radios, options, callback) { var since = options.requestFullData ? "900" : "10"; exports.load("status/" + since + "?t=" + Math.round(Math.random()*1000000), function(err, res) { if (err) { - return console.log("refreshStatus: could not load status update for radios"); + console.log("refreshStatus: could not load status update for radios (" + err + ")"); + return callback(err, null); } var resParsed = {}; try { @@ -40,7 +48,7 @@ exports.refreshStatus = function(radios, options, callback) { console.log("problem parsing JSON from server: " + e.message); } - callback(resParsed); + callback(null, resParsed); }); } diff --git a/client/src/registerServiceWorker.js b/client/src/registerServiceWorker.js index 12542ba..597e49b 100644 --- a/client/src/registerServiceWorker.js +++ b/client/src/registerServiceWorker.js @@ -56,7 +56,8 @@ function registerValidSW(swUrl) { // the fresh content will have been added to the cache. // It's the perfect time to display a "New content is // available; please refresh." message in your web app. - console.log('New content is available; please refresh.'); + console.log('New content is available; refresh.'); + setTimeout(function() { window.location.reload(true); }, 2000); } else { // At this point, everything has been precached. // It's the perfect time to display a diff --git a/deploy.sh b/deploy.sh index f9ed423..4a230c5 100755 --- a/deploy.sh +++ b/deploy.sh @@ -5,6 +5,8 @@ scp ../adblockradio-dl/*.json dome:/home/alexandre/adblockradio-dl/. scp ../adblockradio-dl/*.js dome:/home/alexandre/adblockradio-dl/. scp *.js dome:/home/alexandre/buffer-server/. scp *.json dome:/home/alexandre/buffer-server/. +scp ../log/log.js dome:/home/alexandre/buffer-server/. +scp ../log/log.js dome:/home/alexandre/adblockradio-dl/log.js cd client/ npm run build scp -r build dome:/home/alexandre/buffer-server/client/. diff --git a/findDataFiles.js b/findDataFiles.js deleted file mode 100644 index bb5c206..0000000 --- a/findDataFiles.js +++ /dev/null @@ -1,139 +0,0 @@ -var fs = require("fs"); -var log = require("loglevel"); -log.setLevel("debug"); -var async = require("async"); -var consts = { - WLARRAY: ["0-ads", "1-speech", "2-music", "9-unsure", "mrs", "todo"] -} - -var getDirs = function(rootDir, cb) { - fs.readdir(rootDir, function(err, files) { - var dirs = []; - if (err) { - log.warn("getDirs: readdir error for " + rootDir + " err=" + err); - return cb(dirs); - } - //log.debug("getDirs: files found in " + rootDir + " : " + files); - - var f = function(i, callback) { - if (i >= files.length) return callback(); - - var filePath = rootDir + '/' + files[i]; - fs.stat(filePath, function(err, stat) { - if (err) { - log.warn("getDirs: stat error for " + filePath + " err=" + err); - } - if (stat.isDirectory()) { - dirs.push(files[i]); - } - f(i+1, callback); - }); - } - - f(0, function() { - return cb(dirs); - }); - }); -} - -var getFiles = function(path, after, before, cb) { - fs.readdir(path, function (err, files) { - if (err) { - log.warn("error listing files in path " + path + ". err=" + err); - return cb([]); - } - var list = {}; - - // only get files that have good date - for (var i=files.length-1; i>=0; i--) { - if ((after && files[i] < after) || // file names begin by ISO dates (24 characters) - (before && files[i] > before)) { - //log.debug("getFiles: remove " + files[i]); - files.splice(i, 1); - } else { - var spf = files[i].split("Z."); // end of the ISO date - if (spf.length != 2) log.warn("getFiles: malformed file: " + files[i]); - var path1 = path + "/" + spf[0] + "Z"; - if (!list[path1]) { - var ps = path.split("/"); - list[path1] = { class: ps[ps.length-1] }; - } - /*if (spf[1].slice(-5) == ".part") { - list[path1]["partial"] = true; - list[path1][spf[1].slice(spf[1].length-5)] = true; - } else {*/ - list[path1][spf[1]] = true; - //} - } - } - cb(list); - }); -} - -// finds all files in the subdirectory structure -// options: { -// radios: [country1_name1, country2_name2, ...] OR country: ... name: ... -// before/after: ISO Date, e.g. new Date().toISOString() -// path: __dirname/records/DATE/RADIO/CLASS/ISODATE.* -// } -var findDataFiles = function(options, callback) { - var targetRadios = (options && options.radios) ? options.radios : [options.country + "_" + options.name]; - var timeFrame = { - after: (options && options.after) ? options.after : null, - before: (options && options.before) ? options.before : null - }; - - var files = new Object(); - for (let i=0; i=0; i--) { - if (timeFrame.after && dateDirs[i] < timeFrame.after.slice(0,10)) dateDirs.splice(i, 1); - if (timeFrame.before && dateDirs[i] > timeFrame.before.slice(0,10)) dateDirs.splice(i, 1); - } - log.debug("findDataFiles: dateDirs:" + JSON.stringify(dateDirs)); - - async.forEachOf(dateDirs, function(dateDir, index, dateDirCallback) { - getDirs(options.path + "/records/" + dateDir, function(radioDirs) { - //log.debug("findDataFiles: radioDirs before = " + radioDirs); - for (let i=radioDirs.length-1; i>=0; i--) { - if (targetRadios.indexOf(radioDirs[i]) < 0) radioDirs.splice(i, 1); - } - log.debug("findDataFiles: radioDirs=" + radioDirs); - - async.forEachOf(radioDirs, function(radioDir, index, radioDirCallback) { - async.forEachOf(consts.WLARRAY, function(dataDir, index, dataDirCallback) { - var path = options.path + "/records/" + dateDir + "/" + radioDir + "/" + dataDir; - fs.stat(path, function(err, stat) { - if (stat && stat.isDirectory()) { - getFiles(path, timeFrame.after, timeFrame.before, function(partialFiles) { - log.debug("findDataFiles: " + dataDir + ": " + Object.keys(partialFiles).length + " files found"); - Object.assign(files[dataDir], partialFiles); // = files[dataDir].concat(fullPathFiles); - dataDirCallback(); - }); - } else { - dataDirCallback(); - } - }); - - }, function(err) { - if (err) log.error("findDataFiles: pb during data dir listing. err=" + err.message); - radioDirCallback(); - }); - - }, function(err) { - if (err) log.error("findDataFiles: pb during radio dir listing. err=" + err.message); - dateDirCallback(); - }); - }); - - }, function(err) { - if (err) log.error("findDataFiles: pb during date dir listing. err=" + err.message); - callback(files); - }); - }); -} - -module.exports = findDataFiles; diff --git a/index.js b/index.js index da8793c..9480489 100644 --- a/index.js +++ b/index.js @@ -3,12 +3,12 @@ "use strict"; -var { log, flushLog } = require("./log.js")("master"); -var cp = require("child_process"); -var findDataFiles = require("./findDataFiles.js"); -var DlFactory = require("./DlFactory.js"); -var abrsdk = require("adblockradio-sdk")(); -//var abrsdk = require("../adblockradio-sdk/libabr.js")(); +const { log, flushLog } = require("./log.js")("master"); +const cp = require("child_process"); +const findDataFiles = require("./findDataFiles.js"); +const DlFactory = require("./DlFactory.js"); +const abrsdk = require("adblockradio-sdk")(require("./log.js")("sdk").log); +//const abrsdk = require("../adblockradio-sdk/libabr.js")(require("./log.js")("sdk").log); const FETCH_METADATA = true; const SAVE_AUDIO = false; diff --git a/log.js b/log.js deleted file mode 100644 index 904659a..0000000 --- a/log.js +++ /dev/null @@ -1,60 +0,0 @@ -var log = require("loglevel"); -log.setLevel("debug"); -var prefix = require('loglevel-plugin-prefix'); -var chalk = require('chalk'); -var fs = require('fs'); -var util = require('util'); -var moment = require('moment'); - -// #### logging decoration #### -// see https://github.com/kutuluk/loglevel-plugin-prefix -const colors = { - TRACE: chalk.magenta, - DEBUG: chalk.cyan, - INFO: chalk.blue, - WARN: chalk.yellow, - ERROR: chalk.red, -}; - -prefix.reg(log); -log.enableAll(); - -prefix.apply(log, { - format(level, name, timestamp) { - return `${chalk.gray(`[${timestamp}]`)} ${colors[level.toUpperCase()](level)} ${chalk.green(`${name}:`)}`; - }, -}); - -const WRITE_LOG = true; - -var logBuf = ""; -function writeLog(callback) { - if (logBuf && WRITE_LOG) { - fs.appendFile("log/" + moment(new Date()).format("MM-DD"), logBuf, function(err) { - if (err) console.log("ERROR, could not write log to file log/" + moment(new Date()).format("MM-DD") + " : " + err); - if (callback) callback(); - }); - logBuf = ""; - } else if (callback) { - callback(); - } -} - -if (WRITE_LOG) { - var origLog = console.log; - console.log = function(msg, ...args) { // probably a bit dirty... - logBuf += util.format(msg, ...args) + "\n"; - return origLog(msg, ...args); - } - var writeLogInterval = setInterval(writeLog, 1000); -} - -module.exports = function(moduleName) { - return { - log: log.getLogger(moduleName || "root"), - flushLog: function(callback) { - clearInterval(writeLogInterval); - writeLog(callback); - } - } -} diff --git a/package-lock.json b/package-lock.json index 67dceb7..b9a640e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,18 +5,18 @@ "requires": true, "dependencies": { "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.17", + "mime-types": "2.1.18", "negotiator": "0.6.1" } }, "acorn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", - "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, "acorn-jsx": { @@ -39,16 +39,16 @@ "adblockradio-dl": { "version": "file:adblockradio-dl", "requires": { - "chalk": "2.3.0", + "chalk": "2.3.2", "loglevel": "1.6.1", "loglevel-plugin-prefix": "0.8.3", "m3u8": "0.0.7" } }, "adblockradio-sdk": { - "version": "git://github.com/dest4/adblockradio-sdk.git#52e27c7a8f38690fe16a5915c74bc23be29bebee", + "version": "git://github.com/dest4/adblockradio-sdk.git#3155a6845087bc99ee90096b847ead09e6581b15", "requires": { - "chalk": "2.3.0", + "chalk": "2.3.2", "loglevel": "1.6.1", "loglevel-plugin-prefix": "0.8.3", "socket.io-client": "2.0.4" @@ -66,7 +66,7 @@ "dev": true, "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -78,9 +78,9 @@ "dev": true }, "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, "ansi-regex": { @@ -96,9 +96,9 @@ "dev": true }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "1.0.3" @@ -231,13 +231,13 @@ "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.15" + "type-is": "1.6.16" } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "1.0.0", @@ -249,6 +249,12 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -274,35 +280,30 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.3.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "1.9.1" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } } } @@ -345,6 +346,22 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "color": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/color/-/color-0.8.0.tgz", + "integrity": "sha1-iQwHw/1OZJU3Y4kRz2keVFi2/KU=", + "requires": { + "color-convert": "0.5.3", + "color-string": "0.3.0" + }, + "dependencies": { + "color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=" + } + } + }, "color-convert": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", @@ -358,6 +375,33 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "requires": { + "color-name": "1.1.3" + } + }, + "colornames": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-0.0.2.tgz", + "integrity": "sha1-2BH9bIT1kClJmorEQ2ICk1uSvjE=" + }, + "colors": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==" + }, + "colorspace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.0.1.tgz", + "integrity": "sha1-yZx5btMRKLmHalLh7l7gOkpxl0k=", + "requires": { + "color": "0.8.0", + "text-hex": "0.0.0" + } + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -380,13 +424,14 @@ "dev": true }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.5", "typedarray": "0.0.6" } }, @@ -395,11 +440,6 @@ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, - "content-security-policy-builder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz", - "integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==" - }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -427,15 +467,15 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } }, - "dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, "debug": { "version": "2.6.9", @@ -459,7 +499,7 @@ "requires": { "globby": "5.0.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", @@ -476,10 +516,20 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "dns-prefetch-control": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", - "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" + "diagnostics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.0.tgz", + "integrity": "sha1-4QkJALSVI+hSe+IPCBJ1IF8q42o=", + "requires": { + "colorspace": "1.0.1", + "enabled": "1.0.2", + "kuler": "0.0.0" + } + }, + "diff": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.8.tgz", + "integrity": "sha1-NDJ2MI7Jkbe8giZ+1VvBQR+XFmY=" }, "doctrine": { "version": "2.1.0", @@ -490,11 +540,6 @@ "esutils": "2.0.2" } }, - "dont-sniff-mimetype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", - "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" - }, "ecdsa-sig-formatter": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", @@ -509,19 +554,27 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.4" + } + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "engine.io-client": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", - "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "2.6.9", + "debug": "3.1.0", "engine.io-parser": "2.1.2", "has-cors": "1.1.0", "indexof": "0.0.1", @@ -530,6 +583,16 @@ "ws": "3.3.3", "xmlhttprequest-ssl": "1.5.5", "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } } }, "engine.io-parser": { @@ -544,6 +607,11 @@ "has-binary2": "1.0.2" } }, + "env-variable": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.4.tgz", + "integrity": "sha512-+jpGxSWG4vr6gVxUHOc4p+ilPnql7NzZxOZBxNldsKGjCF+97df3CbuX7XMaDa5oAVkKQj4rKp38rYdC4VcpDg==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -555,32 +623,32 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.15.0.tgz", - "integrity": "sha512-zEO/Z1ZUxIQ+MhDVKkVTUYpIPDTEJLXGMrkID+5v1NeQHtCz6FZikWuFRgxE1Q/RV2V4zVl1u3xmpPADHhMZ6A==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { "ajv": "5.5.2", "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", + "chalk": "2.3.2", + "concat-stream": "1.6.2", "cross-spawn": "5.1.0", "debug": "3.1.0", "doctrine": "2.1.0", "eslint-scope": "3.7.1", "eslint-visitor-keys": "1.0.0", - "espree": "3.5.2", + "espree": "3.5.4", "esquery": "1.0.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", "functional-red-black-tree": "1.0.1", "glob": "7.1.2", - "globals": "11.1.0", + "globals": "11.4.0", "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", - "is-resolvable": "1.0.1", - "js-yaml": "3.10.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.4", @@ -591,8 +659,9 @@ "path-is-inside": "1.0.2", "pluralize": "7.0.0", "progress": "2.0.0", + "regexpp": "1.0.1", "require-uncached": "1.0.3", - "semver": "5.4.1", + "semver": "5.5.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", "table": "4.0.2", @@ -616,7 +685,7 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, @@ -627,12 +696,12 @@ "dev": true }, "espree": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", - "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.3.0", + "acorn": "5.5.3", "acorn-jsx": "3.0.1" } }, @@ -652,13 +721,12 @@ } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "4.2.0" } }, "estraverse": { @@ -678,17 +746,12 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "expect-ct": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.0.tgz", - "integrity": "sha1-UnNWeN4YUwiQ2Ne5XwrGNkCVgJQ=" - }, "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "1.3.4", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", @@ -700,22 +763,22 @@ "encodeurl": "1.0.2", "escape-html": "1.0.3", "etag": "1.8.1", - "finalhandler": "1.1.0", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "1.1.2", "on-finished": "2.3.0", "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", + "proxy-addr": "2.0.3", "qs": "6.5.1", "range-parser": "1.2.0", "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", + "send": "0.16.2", + "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", "vary": "1.1.2" } @@ -731,10 +794,15 @@ "tmp": "0.0.33" } }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-json-stable-stringify": { @@ -749,6 +817,11 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -768,17 +841,25 @@ "object-assign": "4.1.1" } }, + "file-stream-rotator": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.2.1.tgz", + "integrity": "sha1-DW/qGpp6uiWofP0xtuJp5E6PCvI=", + "requires": { + "moment": "2.21.0" + } + }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", "encodeurl": "1.0.2", "escape-html": "1.0.3", "on-finished": "2.3.0", "parseurl": "1.3.2", - "statuses": "1.3.1", + "statuses": "1.4.0", "unpipe": "1.0.0" } }, @@ -799,11 +880,6 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "frameguard": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", - "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -836,9 +912,9 @@ } }, "globals": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", - "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", "dev": true }, "globby": { @@ -884,55 +960,9 @@ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "helmet": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.10.0.tgz", - "integrity": "sha512-wVu5jSeImztLqNQPc4hqGr1DG0Ki2UJVmQ1KTugIrtl1f4Zw5SqVqh6QPyw5b6/Jo/iAnyTt+pcehB0RdEJsbw==", - "requires": { - "dns-prefetch-control": "0.1.0", - "dont-sniff-mimetype": "1.0.0", - "expect-ct": "0.1.0", - "frameguard": "3.0.0", - "helmet-csp": "2.7.0", - "hide-powered-by": "1.0.0", - "hpkp": "2.0.0", - "hsts": "2.1.0", - "ienoopen": "1.0.0", - "nocache": "2.0.0", - "referrer-policy": "1.1.0", - "x-xss-protection": "1.0.0" - } - }, - "helmet-csp": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.0.tgz", - "integrity": "sha512-IGIAkWnxjRbgMXFA2/kmDqSIrIaSfZ6vhMHlSHw7jm7Gm9nVVXqwJ2B1YEpYrJsLrqY+w2Bbimk7snux9+sZAw==", - "requires": { - "camelize": "1.0.0", - "content-security-policy-builder": "2.0.0", - "dasherize": "2.0.0", - "lodash.reduce": "4.6.0", - "platform": "1.3.5" - } - }, - "hide-powered-by": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", - "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" - }, - "hpkp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", - "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" - }, - "hsts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", - "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "http-errors": { "version": "1.6.2", @@ -942,7 +972,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "statuses": "1.4.0" }, "dependencies": { "depd": { @@ -962,11 +992,6 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, - "ienoopen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", - "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" - }, "ignore": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", @@ -1005,8 +1030,8 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", "cli-cursor": "2.1.0", "cli-width": "2.2.0", "external-editor": "2.1.0", @@ -1022,9 +1047,9 @@ } }, "ipaddr.js": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -1039,9 +1064,9 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { "is-path-inside": "1.0.1" @@ -1063,9 +1088,9 @@ "dev": true }, "is-resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz", - "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, "isarray": { @@ -1079,6 +1104,11 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -1086,12 +1116,12 @@ "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.9", + "argparse": "1.0.10", "esprima": "4.0.0" } }, @@ -1108,9 +1138,9 @@ "dev": true }, "jsonwebtoken": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.1.1.tgz", - "integrity": "sha512-+ijVOtfLMlCII8LJkvabaKX3+8tGrGjiCTfzoed2D1b/ebKTO1hIYBQUJHbd9dJ9Fa4kH+dhYEd1qDwyzDLUUw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.0.tgz", + "integrity": "sha512-1Wxh8ADP3cNyPl8tZ95WtraHXCAyXupgc0AhMHjU9er98BV+UcKsO7OJUjfhIu0Uba9A40n1oSx8dbJYrm+EoQ==", "requires": { "jws": "3.1.4", "lodash.includes": "4.3.0", @@ -1152,6 +1182,14 @@ "safe-buffer": "5.1.1" } }, + "kuler": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-0.0.0.tgz", + "integrity": "sha1-tmu0a5NOVQ9Z2BiEjgq7pPf1VTw=", + "requires": { + "colornames": "0.0.2" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -1202,10 +1240,14 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + "logform": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-1.4.0.tgz", + "integrity": "sha512-1NT2VkhmDcVZD8+IHz0tEwymjEQCbY5YFHPani8t5Lo5ZO2fI2a448gIZ+kWIzk69EBfC1S1u/TZ5AjcWW/NFA==", + "requires": { + "colors": "1.2.1", + "fecha": "2.3.3" + } }, "loglevel": { "version": "1.6.1", @@ -1218,9 +1260,9 @@ "integrity": "sha512-oFDEE3krjFTlyXfdT6shN4HsIlDrbPyleI2WIgRfn//oUEVfe8dP7goO9ktTSdOQC08CTKshKHHdZXe4Dy9TxQ==" }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -1256,22 +1298,22 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { @@ -1280,7 +1322,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -1299,9 +1341,9 @@ } }, "moment": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", - "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", + "integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ==" }, "ms": { "version": "2.0.0", @@ -1314,6 +1356,11 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, + "natives": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.2.tgz", + "integrity": "sha512-5bRASydE1gu6zPOenLN043++J8xj1Ob7ArkfdYO3JN4DF5rDmG7bMoiybkTyD+GnXQEMixVeDHMzuqm6kpBmiA==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -1325,11 +1372,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "nocache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", - "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1353,18 +1395,22 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1.0.2" } }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, "onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "optionator": { @@ -1446,11 +1492,6 @@ "pinkie": "2.0.4" } }, - "platform": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", - "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" - }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", @@ -1464,9 +1505,9 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "progress": { @@ -1476,12 +1517,12 @@ "dev": true }, "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" + "ipaddr.js": "1.6.0" } }, "pseudomap": { @@ -1512,15 +1553,15 @@ } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "1.0.7", + "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" @@ -1534,10 +1575,11 @@ } } }, - "referrer-policy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", - "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" + "regexpp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.0.1.tgz", + "integrity": "sha512-8Ph721maXiOYSLtaDGKVmDn5wdsNaF6Px85qFNeMPQq0r8K5Y10tgP6YuR65Ws35n4DvzFcCxEnRNBIXQunzLw==", + "dev": true }, "require-uncached": { "version": "1.0.3", @@ -1609,15 +1651,15 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", "depd": "1.1.2", @@ -1631,18 +1673,18 @@ "ms": "2.0.0", "on-finished": "2.3.0", "range-parser": "1.2.0", - "statuses": "1.3.1" + "statuses": "1.4.0" } }, "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { "encodeurl": "1.0.2", "escape-html": "1.0.3", "parseurl": "1.3.2", - "send": "0.16.1" + "send": "0.16.2" } }, "setprototypeof": { @@ -1665,6 +1707,11 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -1690,25 +1737,35 @@ "component-bind": "1.0.0", "component-emitter": "1.2.1", "debug": "2.6.9", - "engine.io-client": "3.1.4", + "engine.io-client": "3.1.6", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "3.1.2", + "socket.io-parser": "3.1.3", "to-array": "0.1.4" } }, "socket.io-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", - "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", "requires": { "component-emitter": "1.2.1", - "debug": "2.6.9", + "debug": "3.1.0", "has-binary2": "1.0.2", "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } } }, "sprintf-js": { @@ -1717,10 +1774,15 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "string-width": { "version": "2.1.1", @@ -1778,12 +1840,17 @@ "requires": { "ajv": "5.5.2", "ajv-keywords": "2.1.1", - "chalk": "2.3.0", + "chalk": "2.3.2", "lodash": "4.17.4", "slice-ansi": "1.0.0", "string-width": "2.1.1" } }, + "text-hex": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz", + "integrity": "sha1-V4+8haapJjbkLdF7QdAhjM6esrM=" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -1810,6 +1877,11 @@ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, + "triple-beam": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.1.0.tgz", + "integrity": "sha1-KsOHyMS9BL0mxh34kaYHn4WS/hA=" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -1820,12 +1892,12 @@ } }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.17" + "mime-types": "2.1.18" } }, "typedarray": { @@ -1860,14 +1932,57 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "webradio-metadata": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/webradio-metadata/-/webradio-metadata-0.1.9.tgz", - "integrity": "sha512-60PwuIZS2KEXm5Ij9ccdFzZdZwesNM21jluBeHjFiq2IzGDvGZHqBJG86DZV+AiEGrzR9QoMAeemb+xXQRLDTw==", + "vows": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/vows/-/vows-0.8.1.tgz", + "integrity": "sha1-4J6YjOWUygWgjXKrzKNOiNtVkTE=", "requires": { - "chalk": "2.3.0", - "express": "4.16.2", - "helmet": "3.10.0", + "diff": "1.0.8", + "eyes": "0.1.8", + "glob": "4.0.6" + }, + "dependencies": { + "glob": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.0.6.tgz", + "integrity": "sha1-aVxQvdTi+1xdNwsJHziNNwfikac=", + "requires": { + "graceful-fs": "3.0.11", + "inherits": "2.0.3", + "minimatch": "1.0.0", + "once": "1.4.0" + } + }, + "graceful-fs": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "requires": { + "natives": "1.1.2" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "minimatch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", + "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + } + } + }, + "webradio-metadata": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/webradio-metadata/-/webradio-metadata-0.1.12.tgz", + "integrity": "sha512-uKOCKmsN1tCUzhgSEH0rXyB+t573UkMeaFXxO9/WWm+qh/tY7N1GA5Nkt6RbvYyRfeQe0ZUqBcEvo05SvuG+VQ==", + "requires": { + "chalk": "2.3.2", "loglevel": "1.6.1", "loglevel-plugin-prefix": "0.8.3", "xml2js": "0.4.19" @@ -1882,6 +1997,53 @@ "isexe": "2.0.0" } }, + "winston": { + "version": "3.0.0-rc3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.0.0-rc3.tgz", + "integrity": "sha512-KPvs53IB5m6wMHAm4j5DgL8MkgfXZKjwNqzTr3IA8SijHTXeN6l8ebyR24rlCSVotuqtXhooFHvYLbA3fAViSw==", + "requires": { + "async": "2.6.0", + "diagnostics": "1.1.0", + "isstream": "0.1.2", + "logform": "1.4.0", + "one-time": "0.0.4", + "stack-trace": "0.0.10", + "triple-beam": "1.1.0", + "winston-transport": "3.0.1" + } + }, + "winston-compat": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.0.tgz", + "integrity": "sha512-EO4TiFrWGizbzSx0rF3jIeU4Lo2MlrtpnxOR8bKjckmlWdqDifl55nqDOqkFAFPsHRTvleD49hrBfZCWSnxwMw==", + "requires": { + "cycle": "1.0.3", + "vows": "0.8.1" + } + }, + "winston-daily-rotate-file": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.0.1.tgz", + "integrity": "sha512-yUbP40cVxjbvyalvHO81/PnylRqpcdXRh50W240fhCmNKTzOgHJfeK2SDM5GGhBTvY1s3BfjCgHPx9zLSMjBbA==", + "requires": { + "file-stream-rotator": "0.2.1", + "semver": "5.5.0", + "triple-beam": "1.1.0", + "winston-compat": "0.1.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + } + } + }, + "winston-transport": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-3.0.1.tgz", + "integrity": "sha1-gAixXu9WYMT7P6CU1YzL0IUoxY0=" + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -1891,8 +2053,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "0.2.1", @@ -1913,24 +2074,19 @@ "ultron": "1.1.1" } }, - "x-xss-protection": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.0.0.tgz", - "integrity": "sha1-iYr7k4abJGYc+cUvnujbjtB2Tdk=" - }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "requires": { "sax": "1.2.4", - "xmlbuilder": "9.0.4" + "xmlbuilder": "9.0.7" } }, "xmlbuilder": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=" + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlhttprequest-ssl": { "version": "1.5.5", diff --git a/package.json b/package.json index 4be7014..799ae95 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,15 @@ "adblockradio-dl": "./adblockradio-dl", "adblockradio-sdk": "git://github.com/dest4/adblockradio-sdk.git#master", "async": "^2.6.0", - "chalk": "^2.3.0", - "jsonwebtoken": "^8.1.1", - "loglevel": "^1.6.1", - "loglevel-plugin-prefix": "^0.8.3", - "moment": "^2.20.1", - "webradio-metadata": "0.1.x" + "chalk": "^2.3.2", + "express": "^4.16.3", + "jsonwebtoken": "^8.2.0", + "moment": "^2.21.0", + "webradio-metadata": "^0.1.x", + "winston": "^3.0.0-rc3", + "winston-daily-rotate-file": "^3.0.1" }, "devDependencies": { - "eslint": "^4.15.0" + "eslint": "^4.19.1" } }