From 753f438649915d283af9fbc97342b1801797c412 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 18 Oct 2017 17:05:55 +0100 Subject: [PATCH 01/97] compare current device time against server time --- lib/core/api.js | 20 ++++++++++++++++ lib/driverManager.js | 36 ++++++++++++++++++++++++---- lib/drivers/insulet/insuletDriver.js | 1 + yarn.lock | 18 ++++---------- 4 files changed, 57 insertions(+), 18 deletions(-) diff --git a/lib/core/api.js b/lib/core/api.js index eff5cd8533..9fafc37a97 100644 --- a/lib/core/api.js +++ b/lib/core/api.js @@ -602,6 +602,26 @@ api.metrics.track = function(eventName, properties) { return tidepool.trackMetric(eventName, properties); }; +// ----- Server time ----- +api.getTime = function(cb) { + api.log('GET /time'); + tidepool.getTime(function(err, resp) { + if (err) { + if (!navigator.onLine) { + return cb(new Error(errorText.E_OFFLINE)); + } + return cb(err); + } + if (resp.data && resp.data.time) { + return cb(null, resp.data.time); + } else { + // the response is not in the right format, + // so we send nothing back + return cb(null, null); + } + }); +}; + // ----- Errors ----- api.errors = {}; diff --git a/lib/driverManager.js b/lib/driverManager.js index 48f5e59f92..1191d948d3 100644 --- a/lib/driverManager.js +++ b/lib/driverManager.js @@ -19,6 +19,8 @@ var async = require('async'); var statusManager = require('./statusManager.js'); var debug = require('bows')('DriverManager'); var isBrowser = typeof window !== 'undefined'; +var api = require('./core/api.js'); +var sundial = require('sundial'); module.exports = function (driverObjects, configs) { var drivers = {}; @@ -116,12 +118,36 @@ module.exports = function (driverObjects, configs) { } } function fetchData(data, next){ - try{ - drvr.fetchData(stat.progressForStep(3), data, next); - } catch (fetchDataError) { - fetchDataError.step = 'fetchData'; - return next(fetchDataError); + + if (data.currentDeviceTime != null) { + debug('Current device time:', data.currentDeviceTime); + } else { + debug('Current device time not provided by driver.'); } + + api.getTime(function (err, result) { + if (err) { + return next(err); + } + var serverTime = sundial.parseFromFormat(result); + var deviceTime = sundial.applyTimezone(data.currentDeviceTime, configs[driver].timezone); + debug('Server time:', serverTime); + debug('UTC device time:', deviceTime); + + var FIFTEEN_MINUTES = 15 * 60 * 1000; + if ( Math.abs(serverTime.valueOf()-deviceTime.valueOf()) > FIFTEEN_MINUTES ) { + // TODO: pop up a message + console.log('Difference larger than 15 minutes'); + } + + try{ + drvr.fetchData(stat.progressForStep(3), data, next); + } catch (fetchDataError) { + fetchDataError.step = 'fetchData'; + return next(fetchDataError); + } + + }); } function processData(data, next){ try{ diff --git a/lib/drivers/insulet/insuletDriver.js b/lib/drivers/insulet/insuletDriver.js index 7afbad987a..df24f0efe7 100644 --- a/lib/drivers/insulet/insuletDriver.js +++ b/lib/drivers/insulet/insuletDriver.js @@ -1547,6 +1547,7 @@ module.exports = function (config) { data.logDescriptions = getLogDescriptions(offset); offset += data.logDescriptions.packetlen; data.independent_offset = offset; + data.currentDeviceTime = data.logDescriptions.deviceTime; progress(100); return cb(null, data); diff --git a/yarn.lock b/yarn.lock index b5800fc191..047aaa179b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,9 +1930,11 @@ char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" -charm@0.1.x: - version "0.1.2" - resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" +charm@0.1.x, charm@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.1.tgz#68566a7a553d4fe91797030dd1852d0dd6efa82d" + dependencies: + inherits "^2.0.1" cheerio@^0.22.0: version "0.22.0" @@ -2699,10 +2701,6 @@ decompress@4.2.0: pify "^2.3.0" strip-dirs "^2.0.0" -deep-diff@0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.4.tgz#aac5c39952236abe5f037a2349060ba01b00ae48" - deep-eql@0.1.3, deep-eql@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" @@ -7735,12 +7733,6 @@ redux-form@5.3.4: is-promise "^2.1.0" react-lazy-cache "^3.0.1" -redux-logger@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.1.tgz#ae8ae4c3c55ed3dd7aa31509f0856c5d3751057a" - dependencies: - deep-diff "0.3.4" - redux-mock-store@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.2.3.tgz#1b3ad299da91cb41ba30d68e3b6f024475fb9e1b" From 9fa57dc92a6cf13189f45afa2b7574f3eb4969ae Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 19 Oct 2017 11:55:13 +0100 Subject: [PATCH 02/97] correctly take into account current device time not available --- lib/driverManager.js | 25 +++++++++++++------------ lib/drivers/insulet/insuletDriver.js | 2 ++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/driverManager.js b/lib/driverManager.js index 1191d948d3..49fd8aa4e0 100644 --- a/lib/driverManager.js +++ b/lib/driverManager.js @@ -119,25 +119,26 @@ module.exports = function (driverObjects, configs) { } function fetchData(data, next){ - if (data.currentDeviceTime != null) { - debug('Current device time:', data.currentDeviceTime); - } else { - debug('Current device time not provided by driver.'); - } - api.getTime(function (err, result) { if (err) { return next(err); } var serverTime = sundial.parseFromFormat(result); - var deviceTime = sundial.applyTimezone(data.currentDeviceTime, configs[driver].timezone); debug('Server time:', serverTime); - debug('UTC device time:', deviceTime); - var FIFTEEN_MINUTES = 15 * 60 * 1000; - if ( Math.abs(serverTime.valueOf()-deviceTime.valueOf()) > FIFTEEN_MINUTES ) { - // TODO: pop up a message - console.log('Difference larger than 15 minutes'); + if (data.currentDeviceTime != null) { + debug('Current device time:', data.currentDeviceTime); + var deviceTime = sundial.applyTimezone(data.currentDeviceTime, configs[driver].timezone); + + debug('UTC device time:', deviceTime); + + var FIFTEEN_MINUTES = 15 * 60 * 1000; + if ( Math.abs(serverTime.valueOf()-deviceTime.valueOf()) > FIFTEEN_MINUTES ) { + // TODO: pop up a message + console.log('Difference larger than 15 minutes'); + } + } else { + debug('Current device time not provided by driver.'); } try{ diff --git a/lib/drivers/insulet/insuletDriver.js b/lib/drivers/insulet/insuletDriver.js index df24f0efe7..79dfb1cdbd 100644 --- a/lib/drivers/insulet/insuletDriver.js +++ b/lib/drivers/insulet/insuletDriver.js @@ -1547,6 +1547,8 @@ module.exports = function (config) { data.logDescriptions = getLogDescriptions(offset); offset += data.logDescriptions.packetlen; data.independent_offset = offset; + + // this is required for comparing device time against server time data.currentDeviceTime = data.logDescriptions.deviceTime; progress(100); From e8265faabab0725efe102a9ba98547acc92e1475 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 19 Oct 2017 11:57:52 +0100 Subject: [PATCH 03/97] get current device time for tandem --- lib/drivers/tandem/tandemDriver.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/drivers/tandem/tandemDriver.js b/lib/drivers/tandem/tandemDriver.js index 12127cecab..f0251c424a 100644 --- a/lib/drivers/tandem/tandemDriver.js +++ b/lib/drivers/tandem/tandemDriver.js @@ -56,8 +56,8 @@ module.exports = function (config) { value: 81, name: 'Version Message', version: 36102, - format: '16Z16Z20.ii8Zi....8Z50.i', - fields: ['arm_sw_ver', 'msp_sw_ver', 'pump_sn', 'pump_part_no', 'pump_rev', 'pcba_sn', 'pcba_rev', 'model_no'] + format: '16Z16Z20.ii8Zi....8Z50.ii', + fields: ['arm_sw_ver', 'msp_sw_ver', 'pump_sn', 'pump_part_no', 'pump_rev', 'pcba_sn', 'pcba_rev', 'model_no', 'timestamp'] }, COMMAND_ACK: { value: 123, @@ -2219,6 +2219,12 @@ module.exports = function (config) { data.model_no = result.payload.model_no; data.pump_sn = result.payload.pump_sn; data.firmware_version = parseInt(result.payload.arm_sw_ver); + + // this is required for comparing device time against server time + var currentTime = {}; + addTimestamp(currentTime,result.payload.timestamp); + data.currentDeviceTime = currentTime.deviceTime; + cb(null, data); } }); From 3f5f44cc8d757a55df4e78e7a2f9dafc6ae16339 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 19 Oct 2017 14:25:53 +0100 Subject: [PATCH 04/97] fix endianness of timestamp --- lib/driverManager.js | 3 +-- lib/drivers/tandem/tandemDriver.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/driverManager.js b/lib/driverManager.js index 49fd8aa4e0..17853abb28 100644 --- a/lib/driverManager.js +++ b/lib/driverManager.js @@ -127,10 +127,9 @@ module.exports = function (driverObjects, configs) { debug('Server time:', serverTime); if (data.currentDeviceTime != null) { - debug('Current device time:', data.currentDeviceTime); var deviceTime = sundial.applyTimezone(data.currentDeviceTime, configs[driver].timezone); - debug('UTC device time:', deviceTime); + debug('Device time:', deviceTime); var FIFTEEN_MINUTES = 15 * 60 * 1000; if ( Math.abs(serverTime.valueOf()-deviceTime.valueOf()) > FIFTEEN_MINUTES ) { diff --git a/lib/drivers/tandem/tandemDriver.js b/lib/drivers/tandem/tandemDriver.js index f0251c424a..428761278c 100644 --- a/lib/drivers/tandem/tandemDriver.js +++ b/lib/drivers/tandem/tandemDriver.js @@ -56,7 +56,7 @@ module.exports = function (config) { value: 81, name: 'Version Message', version: 36102, - format: '16Z16Z20.ii8Zi....8Z50.ii', + format: '16Z16Z20.ii8Zi....8Z50.iI', fields: ['arm_sw_ver', 'msp_sw_ver', 'pump_sn', 'pump_part_no', 'pump_rev', 'pcba_sn', 'pcba_rev', 'model_no', 'timestamp'] }, COMMAND_ACK: { From 8057b18030393a710dca278a230f2f08cf8e4e75 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 19 Oct 2017 15:49:53 +0100 Subject: [PATCH 05/97] move device time check out of driver manager into common functions --- lib/commonFunctions.js | 28 ++++++++++++++++++++ lib/driverManager.js | 38 +++++----------------------- lib/drivers/insulet/insuletDriver.js | 10 ++++---- lib/drivers/tandem/tandemDriver.js | 6 +++-- 4 files changed, 43 insertions(+), 39 deletions(-) diff --git a/lib/commonFunctions.js b/lib/commonFunctions.js index d2f4539950..032d4b397d 100644 --- a/lib/commonFunctions.js +++ b/lib/commonFunctions.js @@ -17,7 +17,9 @@ var sundial = require('sundial'); +var debug = require('bows')('CommonFunctions'); var annotate = require('./eventAnnotations'); +var api = require('./core/api.js'); /** * Computes the number of milliseconds after midnight on the date specified. @@ -118,3 +120,29 @@ exports.finalScheduledBasal = function(currBasal, settings, source) { } return currBasal; }; + +exports.checkDeviceTime = function (currentDeviceTime, timezone, cb) { + api.getTime(function (err, result) { + if (err) { + return cb(err); + } + var serverTime = sundial.parseFromFormat(result); + debug('Server time:', serverTime); + + if (currentDeviceTime != null) { + var deviceTime = sundial.applyTimezone(currentDeviceTime, timezone); + + debug('Device time:', deviceTime); + + var FIFTEEN_MINUTES = 15 * 60 * 1000; + if ( Math.abs(serverTime.valueOf()-deviceTime.valueOf()) > FIFTEEN_MINUTES ) { + // TODO: pop up a message + console.log('Difference larger than 15 minutes'); + } + } else { + debug('Current device time not provided by driver.'); + } + + return cb(null); + }); +}; diff --git a/lib/driverManager.js b/lib/driverManager.js index 17853abb28..48f5e59f92 100644 --- a/lib/driverManager.js +++ b/lib/driverManager.js @@ -19,8 +19,6 @@ var async = require('async'); var statusManager = require('./statusManager.js'); var debug = require('bows')('DriverManager'); var isBrowser = typeof window !== 'undefined'; -var api = require('./core/api.js'); -var sundial = require('sundial'); module.exports = function (driverObjects, configs) { var drivers = {}; @@ -118,36 +116,12 @@ module.exports = function (driverObjects, configs) { } } function fetchData(data, next){ - - api.getTime(function (err, result) { - if (err) { - return next(err); - } - var serverTime = sundial.parseFromFormat(result); - debug('Server time:', serverTime); - - if (data.currentDeviceTime != null) { - var deviceTime = sundial.applyTimezone(data.currentDeviceTime, configs[driver].timezone); - - debug('Device time:', deviceTime); - - var FIFTEEN_MINUTES = 15 * 60 * 1000; - if ( Math.abs(serverTime.valueOf()-deviceTime.valueOf()) > FIFTEEN_MINUTES ) { - // TODO: pop up a message - console.log('Difference larger than 15 minutes'); - } - } else { - debug('Current device time not provided by driver.'); - } - - try{ - drvr.fetchData(stat.progressForStep(3), data, next); - } catch (fetchDataError) { - fetchDataError.step = 'fetchData'; - return next(fetchDataError); - } - - }); + try{ + drvr.fetchData(stat.progressForStep(3), data, next); + } catch (fetchDataError) { + fetchDataError.step = 'fetchData'; + return next(fetchDataError); + } } function processData(data, next){ try{ diff --git a/lib/drivers/insulet/insuletDriver.js b/lib/drivers/insulet/insuletDriver.js index 79dfb1cdbd..c78d4d80f3 100644 --- a/lib/drivers/insulet/insuletDriver.js +++ b/lib/drivers/insulet/insuletDriver.js @@ -23,6 +23,7 @@ var sundial = require('sundial'); var struct = require('../../struct.js')(); var annotate = require('../../eventAnnotations'); var common = require('./common'); +var commonFunctions = require('../../commonFunctions'); var logic = require('./objectBuildingLogic'); var insuletSimulatorMaker = require('./insuletSimulator'); @@ -1548,11 +1549,10 @@ module.exports = function (config) { offset += data.logDescriptions.packetlen; data.independent_offset = offset; - // this is required for comparing device time against server time - data.currentDeviceTime = data.logDescriptions.deviceTime; - - progress(100); - return cb(null, data); + commonFunctions.checkDeviceTime(data.logDescriptions.deviceTime, cfg.timezone, function(err) { + progress(100); + return cb(err, data); + }); }, fetchData: function (progress, data, cb) { diff --git a/lib/drivers/tandem/tandemDriver.js b/lib/drivers/tandem/tandemDriver.js index 428761278c..7fac9dfb79 100644 --- a/lib/drivers/tandem/tandemDriver.js +++ b/lib/drivers/tandem/tandemDriver.js @@ -25,6 +25,7 @@ var TZOUtil = require('../../TimezoneOffsetUtil'); var annotate = require('../../eventAnnotations'); var debug = require('bows')('TandemDriver'); var debugMode = require('../../../app/utils/debugMode'); +var common = require('../../commonFunctions'); module.exports = function (config) { var cfg = config; @@ -2223,9 +2224,10 @@ module.exports = function (config) { // this is required for comparing device time against server time var currentTime = {}; addTimestamp(currentTime,result.payload.timestamp); - data.currentDeviceTime = currentTime.deviceTime; - cb(null, data); + common.checkDeviceTime(currentTime.deviceTime, cfg.timezone, function(err) { + return cb(err, data); + }); } }); }; From 141c6fcbd7e8e4072c9a11f6b243f4fb7a909d3e Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 19 Oct 2017 15:57:05 +0100 Subject: [PATCH 06/97] check animas device time against server time --- lib/drivers/animas/animasDriver.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/drivers/animas/animasDriver.js b/lib/drivers/animas/animasDriver.js index 087dd6bdec..21f80af699 100644 --- a/lib/drivers/animas/animasDriver.js +++ b/lib/drivers/animas/animasDriver.js @@ -2102,23 +2102,28 @@ module.exports = function (config) { }; async.series({ + suspendResumeRecords: function(callback){ + readAllRecords(requestSuspendResume(), 10, function(err, data) { + // the device has to be suspended just before uploading, + // so the most recent suspend event is the closest what we + // have to a current device time :/ + common.checkDeviceTime(data[0].suspendDeviceTime, cfg.timezone, function(err) { + return callback(err, data); + }); + }); + }, bolusRecords : function(callback){ - readAllRecords(requestBolus(), 10, function(err, data) { + readAllRecords(requestBolus(), 20, function(err, data) { return callback(err,data); }); }, basalRecords: function(callback){ - readAllRecords(requestBasal(), 20, function(err, data) { + readAllRecords(requestBasal(), 30, function(err, data) { return callback(err,data); }); }, primeRewindRecords: function(callback){ - readAllRecords(requestPrimeRewind(), 30, function(err, data) { - return callback(err,data); - }); - }, - suspendResumeRecords: function(callback){ - readAllRecords(requestSuspendResume(), 40, function(err, data) { + readAllRecords(requestPrimeRewind(), 40, function(err, data) { return callback(err,data); }); }, From e7fc08e1db33cc6364a70176b4ba157f30642ef9 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 23 Oct 2017 14:02:20 +0100 Subject: [PATCH 07/97] don't use default detect function for tandem --- lib/drivers/tandem/tandemDriver.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/drivers/tandem/tandemDriver.js b/lib/drivers/tandem/tandemDriver.js index 7fac9dfb79..7a072a3676 100644 --- a/lib/drivers/tandem/tandemDriver.js +++ b/lib/drivers/tandem/tandemDriver.js @@ -2233,6 +2233,11 @@ module.exports = function (config) { }; return { + detect: function(deviceInfo, cb){ + debug('no detect function needed', arguments); + cb(null, deviceInfo); + }, + setup: function (deviceInfo, progress, cb) { debug('in setup!'); progress(100); From 6c8ba11241e8405f9ac667cf78a4ba03a04c4157 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 23 Oct 2017 16:21:41 +0100 Subject: [PATCH 08/97] check dexcom display time against server time --- lib/drivers/dexcom/dexcomDriver.js | 66 ++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/lib/drivers/dexcom/dexcomDriver.js b/lib/drivers/dexcom/dexcomDriver.js index 6eeeffdb9a..68316dccc0 100644 --- a/lib/drivers/dexcom/dexcomDriver.js +++ b/lib/drivers/dexcom/dexcomDriver.js @@ -27,6 +27,7 @@ var struct = require('../../struct.js')(); var mungeUserSettings = require('./userSettingsChanges'); var TZOUtil = require('../../TimezoneOffsetUtil'); var errorText = require('../../../app/constants/errors'); +var common = require('../../commonFunctions'); var debug = require('bows')('DexcomDriver'); @@ -223,6 +224,17 @@ module.exports = function (config) { }; }; + var readSignedInt = function (cmd) { + return { + packet: buildPacket( + cmd, 0, null + ), + parser: function (packet) { + return struct.extractSignedInt(packet.payload, 0); + } + }; + }; + var readPartitionInfo = function() { return { packet: buildPacket( @@ -711,6 +723,36 @@ module.exports = function (config) { }); }; + var getDisplayTimeOffset = function(obj, cb) { + debug('getting display time offset'); + var cmd = readSignedInt(CMDS.READ_DISPLAY_TIME_OFFSET.value); + dexcomCommandResponse(cmd, function(err, result) { + if (err) { + debug('Failure trying to get display time offset.'); + debug(err); + debug(result); + cb(null, null); + } else { + cb(null, result); + } + }); + }; + + var getSystemTime = function(obj, cb) { + debug('getting system time'); + var cmd = readSignedInt(CMDS.READ_SYSTEM_TIME.value); + dexcomCommandResponse(cmd, function(err, result) { + if (err) { + debug('Failure trying to get system time.'); + debug(err); + debug(result); + cb(null, null); + } else { + cb(null, result); + } + }); + }; + var downloadDataPages = function (recordType, progress, callback) { var cmd = readDataPageRange(recordType); dexcomCommandResponse(cmd, function (err, pagerange) { @@ -964,9 +1006,27 @@ module.exports = function (config) { dexcomDeviceId = getDeviceId(data); cfg.builder.setDefaults({ deviceId: dexcomDeviceId }); data.id = dexcomDeviceId; - progress(100); - data.getConfigInfo = true; - cb(null, data); + + getDisplayTimeOffset(true, function(displayErr, displayTimeOffsetObj) { + if (displayErr) { + cb(displayErr, displayTimeOffsetObj); + } else { + getSystemTime(true, function(systemErr, systemTimeObj) { + if (systemErr) { + cb(systemErr, systemTimeObj); + } else { + var displayTime = new Date(BASE_DATE_DEVICE + 1000 * (systemTimeObj.parsed_payload + displayTimeOffsetObj.parsed_payload)); + common.checkDeviceTime(displayTime, cfg.timezone, function(err) { + return cb(err, data); + }); + + progress(100); + data.getConfigInfo = true; + cb(null, data); + } + }); + } + }); }); }, From fd26034ba88942d59e37b7a42307de372173870a Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 23 Oct 2017 16:38:43 +0100 Subject: [PATCH 09/97] check medtronic direct device time against server time --- lib/drivers/medtronic/medtronicDriver.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/drivers/medtronic/medtronicDriver.js b/lib/drivers/medtronic/medtronicDriver.js index ad54346f9f..54855b2b2e 100644 --- a/lib/drivers/medtronic/medtronicDriver.js +++ b/lib/drivers/medtronic/medtronicDriver.js @@ -1175,7 +1175,9 @@ module.exports = function (config) { data.cbg = _.pick(results.current_cbg_page, ['currentPage','glucosePage', 'isigPage']); data.batteryStatus = _.pick(results.battery_status, ['status','voltage']); console.timeEnd('getConfigInfo elapsed'); - return cb(null, data); + common.checkDeviceTime(settings.currentDeviceTime, cfg.timezone, function(err) { + return cb(err, data); + }); } else { return cb(err,results); } From 0d41ece0115dbde81660fc5f90cd7f8fe9a44ab4 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 25 Oct 2017 11:55:36 +0100 Subject: [PATCH 10/97] update checklists to check device time against server time --- docs/checklists/abbottFreeStyleLite.md | 1 + docs/checklists/abbottPrecisionXtra.md | 1 + docs/checklists/animasPingAndVibe.md | 1 + docs/checklists/bayerContourNext.md | 1 + docs/checklists/dexcom.md | 1 + docs/checklists/insuletOmniPod.md | 1 + docs/checklists/medtronic.md | 1 + docs/checklists/oneTouchUltra2.md | 1 + docs/checklists/oneTouchUltraMini.md | 1 + docs/checklists/oneTouchVerioIQ.md | 1 + docs/checklists/tandem.md | 1 + docs/checklisttemplates/BGMChecklist.md | 1 + docs/checklisttemplates/CGMChecklist.md | 1 + docs/checklisttemplates/PumpChecklist.md | 3 ++- 14 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/checklists/abbottFreeStyleLite.md b/docs/checklists/abbottFreeStyleLite.md index a914609003..617529a7b5 100644 --- a/docs/checklists/abbottFreeStyleLite.md +++ b/docs/checklists/abbottFreeStyleLite.md @@ -21,6 +21,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklists/abbottPrecisionXtra.md b/docs/checklists/abbottPrecisionXtra.md index 800c9b01e6..e693621655 100644 --- a/docs/checklists/abbottPrecisionXtra.md +++ b/docs/checklists/abbottPrecisionXtra.md @@ -21,6 +21,7 @@ - `[x]` units of blood ketone values (read from device, not hard-coded) - `[x]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklists/animasPingAndVibe.md b/docs/checklists/animasPingAndVibe.md index 2b2579031d..cef6204204 100644 --- a/docs/checklists/animasPingAndVibe.md +++ b/docs/checklists/animasPingAndVibe.md @@ -240,6 +240,7 @@ Device-specific? (Add any device-specific notes/additions here.) - `[ ]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[ ]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[ ]` date & time settings changes + - `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) diff --git a/docs/checklists/bayerContourNext.md b/docs/checklists/bayerContourNext.md index e1b2fd3e3a..d5138706d0 100644 --- a/docs/checklists/bayerContourNext.md +++ b/docs/checklists/bayerContourNext.md @@ -26,6 +26,7 @@ Supported devices: - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklists/dexcom.md b/docs/checklists/dexcom.md index 894e7e8f6c..6032177ca9 100644 --- a/docs/checklists/dexcom.md +++ b/docs/checklists/dexcom.md @@ -95,6 +95,7 @@ We are including the following in the payload for Dexcom settings: - `[x]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[ ]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[x]` date & time settings changes + - `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) diff --git a/docs/checklists/insuletOmniPod.md b/docs/checklists/insuletOmniPod.md index f0b6427589..923c837dcb 100644 --- a/docs/checklists/insuletOmniPod.md +++ b/docs/checklists/insuletOmniPod.md @@ -221,6 +221,7 @@ The OmniPod represents programmed and actual delivered bolus amounts in terms of - `[x]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[ ]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[x]` date & time settings changes + - `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) diff --git a/docs/checklists/medtronic.md b/docs/checklists/medtronic.md index dd4bed7fb7..f0cb52dd88 100644 --- a/docs/checklists/medtronic.md +++ b/docs/checklists/medtronic.md @@ -224,6 +224,7 @@ Device-specific? (Add any device-specific notes/additions here.) - `[ ]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[x]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[x]` date & time settings changes + - `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) diff --git a/docs/checklists/oneTouchUltra2.md b/docs/checklists/oneTouchUltra2.md index b8bbd1c3a5..e4858766d9 100644 --- a/docs/checklists/oneTouchUltra2.md +++ b/docs/checklists/oneTouchUltra2.md @@ -19,6 +19,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklists/oneTouchUltraMini.md b/docs/checklists/oneTouchUltraMini.md index 037cb49dfd..9811e37a98 100644 --- a/docs/checklists/oneTouchUltraMini.md +++ b/docs/checklists/oneTouchUltraMini.md @@ -19,6 +19,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time #### Notes: - according to user manual, <20 mg/dL is LO and >600 mg/dL is HI diff --git a/docs/checklists/oneTouchVerioIQ.md b/docs/checklists/oneTouchVerioIQ.md index bb9028df48..1ad75c8c9e 100644 --- a/docs/checklists/oneTouchVerioIQ.md +++ b/docs/checklists/oneTouchVerioIQ.md @@ -21,6 +21,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ## Notes - Units of smbg values are available in data protocol, but always reported in mg/dL diff --git a/docs/checklists/tandem.md b/docs/checklists/tandem.md index 3f944d9401..4f96917b83 100644 --- a/docs/checklists/tandem.md +++ b/docs/checklists/tandem.md @@ -230,6 +230,7 @@ No Tidepool data model yet: - `[x]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[ ]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[x]` date & time settings changes + - `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ##### Device-specific? (Add any device-specific notes/additions here.) diff --git a/docs/checklisttemplates/BGMChecklist.md b/docs/checklisttemplates/BGMChecklist.md index ef60fd0f1b..31d6dea130 100644 --- a/docs/checklisttemplates/BGMChecklist.md +++ b/docs/checklisttemplates/BGMChecklist.md @@ -19,6 +19,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[ ]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklisttemplates/CGMChecklist.md b/docs/checklisttemplates/CGMChecklist.md index 07b448b776..9cb8f03042 100644 --- a/docs/checklisttemplates/CGMChecklist.md +++ b/docs/checklisttemplates/CGMChecklist.md @@ -81,6 +81,7 @@ Device-specific? (Add any device-specific notes/additions here.) - `[ ]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[ ]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[ ]` date & time settings changes + - `[ ]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) diff --git a/docs/checklisttemplates/PumpChecklist.md b/docs/checklisttemplates/PumpChecklist.md index 11bb4bf75c..173e713461 100644 --- a/docs/checklisttemplates/PumpChecklist.md +++ b/docs/checklisttemplates/PumpChecklist.md @@ -87,7 +87,7 @@ Device-specific? (Add any device-specific notes/additions here.) - `[ ]` other alarm types (details to be provided in `payload` object) - `[ ]` prime events - `[ ]` prime target = tubing - - `[ ]` prime target = cannula + - `[ ]` prime target = cannula - `[ ]` prime targets not differentiated - `[ ]` prime volume in units of insulin - `[ ]` reservoir change (or reservoir rewind) @@ -213,6 +213,7 @@ Device-specific? (Add any device-specific notes/additions here.) - `[ ]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[ ]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[ ]` date & time settings changes + - `[ ]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) From 5ae10034f8978b0e3a72182804fee5e064575e4d Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 25 Oct 2017 13:59:33 +0100 Subject: [PATCH 11/97] check ultra 2 device time against server time --- lib/drivers/onetouch/oneTouchUltra2.js | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/drivers/onetouch/oneTouchUltra2.js b/lib/drivers/onetouch/oneTouchUltra2.js index eb9a50561a..999f728583 100644 --- a/lib/drivers/onetouch/oneTouchUltra2.js +++ b/lib/drivers/onetouch/oneTouchUltra2.js @@ -33,6 +33,7 @@ var sundial = require('sundial'); var struct = require('../../struct.js')(); var TZOUtil = require('../../TimezoneOffsetUtil'); var annotate = require('../../eventAnnotations'); +var common = require('../../commonFunctions'); var isBrowser = typeof window !== 'undefined'; var debug = isBrowser ? require('bows')('Ultra2Driver') : debug; @@ -303,10 +304,29 @@ module.exports = function (config) { }, getConfigInfo: function (progress, data, cb) { - // we don't do too much here debug('in getConfigInfo', data); - progress(100); - cb(null, data); + + otu2CommandResponse(DMDateTime, progress, function(err, result){ + if (err) { + debug('Failure trying to talk to device.'); + debug(err); + debug(result); + cb(err, null); + } else { + + var str = String.fromCharCode.apply(null, result.bytes); + + var pattern = /F "(\w+)","(\d{2}\/\d{2}\/\d{2})","(\d{2}:\d{2}:\d{2}) " (\w+)/; + var toMatch = pattern.exec(str); + + var currentDeviceTime = sundial.formatDeviceTime(buildDateTime(toMatch[2], toMatch[3])); + debug('Device date/time:', currentDeviceTime); + common.checkDeviceTime(currentDeviceTime, cfg.timezone, function(err) { + progress(100); + return cb(err, data); + }); + } + }); }, fetchData: function (progress, data, callback) { From e77d7b5e7f8a6882bd57e5c72e1e9ffb9948df68 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 25 Oct 2017 14:14:17 +0100 Subject: [PATCH 12/97] check ultramini time against server time --- docs/checklists/oneTouchUltra2.md | 2 +- docs/checklists/oneTouchUltraMini.md | 2 +- lib/drivers/onetouch/oneTouchUltraMini.js | 40 ++++++++++++++++++++--- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/docs/checklists/oneTouchUltra2.md b/docs/checklists/oneTouchUltra2.md index e4858766d9..4bd606e832 100644 --- a/docs/checklists/oneTouchUltra2.md +++ b/docs/checklists/oneTouchUltra2.md @@ -19,7 +19,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds -- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklists/oneTouchUltraMini.md b/docs/checklists/oneTouchUltraMini.md index 9811e37a98..b28c53671a 100644 --- a/docs/checklists/oneTouchUltraMini.md +++ b/docs/checklists/oneTouchUltraMini.md @@ -19,7 +19,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds -- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time #### Notes: - according to user manual, <20 mg/dL is LO and >600 mg/dL is HI diff --git a/lib/drivers/onetouch/oneTouchUltraMini.js b/lib/drivers/onetouch/oneTouchUltraMini.js index d878ae545d..6b96582fd1 100644 --- a/lib/drivers/onetouch/oneTouchUltraMini.js +++ b/lib/drivers/onetouch/oneTouchUltraMini.js @@ -23,6 +23,7 @@ var struct = require('../../struct.js')(); var TZOUtil = require('../../TimezoneOffsetUtil'); var annotate = require('../../eventAnnotations'); var debugMode = require('../../../app/utils/debugMode'); +var common = require('../../commonFunctions'); var isBrowser = typeof window !== 'undefined'; var debug = isBrowser ? require('bows')('OTMiniDriver') : debug; @@ -355,6 +356,15 @@ module.exports = function (config) { }; }; + var readRTC = function() { + return { + packet: buildReadRTC(), + parser: function (result) { + return struct.unpack(result.payload, 0, '..i', ['timestamp']); + } + }; + }; + var readRecordNumber = function(n) { return { packet: buildReadRecordNumber(n), @@ -412,6 +422,20 @@ module.exports = function (config) { }); }; + var getRTC = function (cb) { + var cmd = readRTC(); + oneTouchCommandResponse(cmd, function (err, result) { + if (err) { + debug('Failure reading RTC.'); + debug(err); + debug(result); + cb(err, null); + } else { + cb(null, result.parsed_payload); + } + }); + }; + var getUnitSettings = function (obj, cb) { var cmd = readUnitSettings(); oneTouchCommandResponse(cmd, function (err, result) { @@ -558,11 +582,17 @@ module.exports = function (config) { if (err2) { return cb(err2, null); } - progress(100); - data.getConfigInfo = true; - _.assign(data, obj2); - debug('getConfigInfo', data); - cb(null, data); + + getRTC(function(err3, obj3) { + var currentDeviceTime = sundial.formatDeviceTime(new Date(obj3.timestamp * 1000)); + common.checkDeviceTime(currentDeviceTime, cfg.timezone, function(err) { + progress(100); + data.getConfigInfo = true; + _.assign(data, obj2); + debug('getConfigInfo', data); + cb(err, data); + }); + }); }); }); }, From 0277039ed35a82e3a1c26799262cd8aa2ebd2a1e Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 25 Oct 2017 14:40:25 +0100 Subject: [PATCH 13/97] check verio iq time against server time --- docs/checklists/oneTouchVerioIQ.md | 2 +- lib/drivers/onetouch/oneTouchVerioIQ.js | 42 +++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/docs/checklists/oneTouchVerioIQ.md b/docs/checklists/oneTouchVerioIQ.md index 1ad75c8c9e..2e58474e58 100644 --- a/docs/checklists/oneTouchVerioIQ.md +++ b/docs/checklists/oneTouchVerioIQ.md @@ -21,7 +21,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds -- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ## Notes - Units of smbg values are available in data protocol, but always reported in mg/dL diff --git a/lib/drivers/onetouch/oneTouchVerioIQ.js b/lib/drivers/onetouch/oneTouchVerioIQ.js index e54e3597be..f913380961 100644 --- a/lib/drivers/onetouch/oneTouchVerioIQ.js +++ b/lib/drivers/onetouch/oneTouchVerioIQ.js @@ -23,6 +23,7 @@ var struct = require('../../struct.js')(); var TZOUtil = require('../../TimezoneOffsetUtil'); var annotate = require('../../eventAnnotations'); +var common = require('../../commonFunctions'); var isBrowser = typeof window !== 'undefined'; var debug = isBrowser ? require('bows')('VerioIQDriver') : debug; @@ -98,6 +99,11 @@ module.exports = function (config) { return buildPacket(LINK_CTRL_MASK.NONE, cmd.length, cmd); }; + var buildGetRTC = function() { + var cmd = [0x04,0x20,0x02]; + return buildPacket(LINK_CTRL_MASK.NONE, cmd.length, cmd); + }; + var extractPacket = function (bytes) { var packet = { bytes: bytes, @@ -221,6 +227,15 @@ module.exports = function (config) { }; }; + var readRTC = function() { + return { + packet: buildGetRTC(), + parser: function (result) { + return struct.unpack(result.payload, 0, '..i', ['timestamp']); + } + }; + }; + var readRecordNumber = function(n) { return { packet: buildReadRecordNumber(n), @@ -290,6 +305,19 @@ module.exports = function (config) { }); }; + var getRTC = function (cb) { + var cmd = readRTC(); + oneTouchCommandResponse(cmd, function (err, result) { + if (err) { + debug('Failure reading RTC.'); + debug(err); + cb(err, null); + } else { + cb(null, result.parsed_payload); + } + }); + }; + var getUnits = function (obj, cb) { var cmd = readUnits(); oneTouchCommandResponse(cmd, function (err, result) { @@ -405,13 +433,21 @@ module.exports = function (config) { getConfigInfo: function (progress, data, cb) { getRecordCount({}, function(err, obj) { - progress(100); + progress(30); _.assign(data, obj); getUnits(obj, function(err, result) { + progress(60); data.getConfigInfo = true; data.units = result.units; //TODO: return as settings when available in data model - debug('getConfigInfo', data); - cb(err, data); + + getRTC(function(err, result) { + var currentDeviceTime = sundial.formatDeviceTime(new Date((result.timestamp * 1000) + EPOCH)); + common.checkDeviceTime(currentDeviceTime, cfg.timezone, function(err) { + progress(100); + debug('getConfigInfo', data); + cb(err, data); + }); + }); }); }); }, From d6614e6063960088d2e71f177a5e97891d6f1253 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 25 Oct 2017 15:46:43 +0100 Subject: [PATCH 14/97] check bayer contour next device time against server time --- lib/drivers/bayer/bayerContourNext.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/drivers/bayer/bayerContourNext.js b/lib/drivers/bayer/bayerContourNext.js index 093a22a048..2cdc405123 100644 --- a/lib/drivers/bayer/bayerContourNext.js +++ b/lib/drivers/bayer/bayerContourNext.js @@ -24,6 +24,7 @@ var sundial = require('sundial'); var crcCalculator = require('../../crc.js'); var struct = require('../../struct.js')(); var annotate = require('../../eventAnnotations'); +var common = require('../../commonFunctions'); var TZOUtil = require('../../TimezoneOffsetUtil'); @@ -161,10 +162,13 @@ module.exports = function (config) { } } + var jsDate = sundial.parseFromFormat(pString[13], 'YYYYMMDDhhmmss'); + var devInfo = { model: pInfo[0], serialNumber: sNum[1], - nrecs: pString[6] + nrecs: pString[6], + deviceTime: sundial.formatDeviceTime(jsDate) }; if(threshold){ @@ -508,11 +512,13 @@ module.exports = function (config) { getOneRecord({}, function (err, result) { progress(100); - if(!err){ + if (!err){ + common.checkDeviceTime(result.deviceTime, cfg.timezone, function(err2) { data.connect = true; _.assign(data, result); + cb(err2, data); + }); - cb(null, data); } else { return cb(err,result); } From 6c7a5210af3cd25d1b1511435ae29f03e8f9f284 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 26 Oct 2017 14:01:36 +0100 Subject: [PATCH 15/97] check freestyle lite and freedom lite against server time --- lib/drivers/abbott/abbottFreeStyleLite.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/drivers/abbott/abbottFreeStyleLite.js b/lib/drivers/abbott/abbottFreeStyleLite.js index e9521c0938..0de4ba6830 100644 --- a/lib/drivers/abbott/abbottFreeStyleLite.js +++ b/lib/drivers/abbott/abbottFreeStyleLite.js @@ -20,6 +20,7 @@ var async = require('async'); var sundial = require('sundial'); var struct = require('../../struct.js')(); var annotate = require('../../eventAnnotations'); +var common = require('../../commonFunctions'); var TZOUtil = require('../../TimezoneOffsetUtil'); @@ -420,6 +421,10 @@ module.exports = function (config) { fetchData: function (progress, data, cb) { debug('in fetchData'); getAllData({}, function (err, result) { + if (err) { + return cb(err, null); + } + progress(100); data.connect = true; debug(result); @@ -441,7 +446,10 @@ module.exports = function (config) { data.id = data.model + ' ' + data.serialNumber; data.logEntries = result.logEntries; data.numEntries = result.numEntries; - cb(null, data); + + common.checkDeviceTime(data.deviceTime, cfg.timezone, function(checkErr) { + cb(checkErr, data); + }); }); }, From 01ae3dfa8d2c4b0df72b5cd86ded0c4e5b869c9a Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 26 Oct 2017 15:17:19 +0100 Subject: [PATCH 16/97] use platform-client get-time package on github for now --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 04307f2ab9..3736714f04 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "stack-trace": "0.0.9", "sudo-prompt": "7.1.1", "sundial": "1.6.0", - "tidepool-platform-client": "0.33.0", + "tidepool-platform-client": "tidepool-org/platform-client#get-time", "uuid": "3.1.0" }, "browserslist": "electron 1.6", diff --git a/yarn.lock b/yarn.lock index 047aaa179b..e3f5b54c49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8806,9 +8806,9 @@ through@2, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -tidepool-platform-client@0.33.0: +tidepool-platform-client@tidepool-org/platform-client#get-time: version "0.33.0" - resolved "https://registry.yarnpkg.com/tidepool-platform-client/-/tidepool-platform-client-0.33.0.tgz#2e784e147b18bc93e0a93581f333258bd4a34643" + resolved "https://codeload.github.com/tidepool-org/platform-client/tar.gz/dc8130d8aaea8814752c3c1c29107c4a1b1cabb9" dependencies: async "0.9.0" crypto "0.0.3" From d8d986c76ca713686d88416a23ba773710b805f0 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 26 Oct 2017 16:08:59 +0100 Subject: [PATCH 17/97] check precision xtra time against server time --- lib/drivers/abbott/abbottPrecisionXtra.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/drivers/abbott/abbottPrecisionXtra.js b/lib/drivers/abbott/abbottPrecisionXtra.js index 0a3b350c90..8b7895e493 100644 --- a/lib/drivers/abbott/abbottPrecisionXtra.js +++ b/lib/drivers/abbott/abbottPrecisionXtra.js @@ -20,6 +20,7 @@ var async = require('async'); var sundial = require('sundial'); var struct = require('../../struct.js')(); var annotate = require('../../eventAnnotations'); +var common = require('../../commonFunctions'); var TZOUtil = require('../../TimezoneOffsetUtil'); @@ -516,7 +517,9 @@ module.exports = function (config) { _.assign(data, _.pick(result, 'logEntries', 'numEntries', 'serialNumber', 'softwareVersion', 'deviceTime')); data.model = 'AbbFreePrecXtra'; data.id = data.model + ' ' + data.serialNumber; - cb(null, data); + common.checkDeviceTime(data.deviceTime, cfg.timezone, function(checkErr) { + cb(checkErr, data); + }); }); }, From ed7b61c81d4d7d769465e059b52118cab88ea27b Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 20 Oct 2017 11:21:54 +0100 Subject: [PATCH 18/97] specify bitrate for precision xtra --- lib/core/device.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/core/device.js b/lib/core/device.js index fbd763998f..afbc8c1774 100644 --- a/lib/core/device.js +++ b/lib/core/device.js @@ -99,6 +99,7 @@ device._driverManifests = { }, 'AbbottPrecisionXtra': { mode: 'serial', + bitrate: 19200, usb: [ {vendorId: 6753, productId: 13344} ] From 7a165be2ed9a18019c9e34f29608832ba5bfb5ca Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 30 Oct 2017 13:51:52 +0000 Subject: [PATCH 19/97] don't return callback twice when checking time --- lib/drivers/dexcom/dexcomDriver.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/drivers/dexcom/dexcomDriver.js b/lib/drivers/dexcom/dexcomDriver.js index 68316dccc0..3cbd77ad2e 100644 --- a/lib/drivers/dexcom/dexcomDriver.js +++ b/lib/drivers/dexcom/dexcomDriver.js @@ -1017,12 +1017,10 @@ module.exports = function (config) { } else { var displayTime = new Date(BASE_DATE_DEVICE + 1000 * (systemTimeObj.parsed_payload + displayTimeOffsetObj.parsed_payload)); common.checkDeviceTime(displayTime, cfg.timezone, function(err) { - return cb(err, data); + progress(100); + data.getConfigInfo = true; + cb(err, data); }); - - progress(100); - data.getConfigInfo = true; - cb(null, data); } }); } From 052cecfe163c00c9fab607152b468bae610e0495 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 16 Jan 2018 11:49:30 +0000 Subject: [PATCH 20/97] remove some trailing spaces --- lib/drivers/abbott/abbottFreeStyleLite.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/drivers/abbott/abbottFreeStyleLite.js b/lib/drivers/abbott/abbottFreeStyleLite.js index 6c307ec31d..408a51642d 100644 --- a/lib/drivers/abbott/abbottFreeStyleLite.js +++ b/lib/drivers/abbott/abbottFreeStyleLite.js @@ -424,7 +424,7 @@ module.exports = function (config) { if (err) { return cb(err, null); } - + progress(100); if (err) { return cb(err, data); From 1d304cab50658b74274dcbd302c4cac85807d9fb Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 16 Jan 2018 11:58:19 +0000 Subject: [PATCH 21/97] update device checklists --- docs/checklists/abbottFreeStyleLite.md | 2 +- docs/checklists/abbottPrecisionXtra.md | 2 +- docs/checklists/bayerContourNext.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/checklists/abbottFreeStyleLite.md b/docs/checklists/abbottFreeStyleLite.md index 617529a7b5..0fd1cf5317 100644 --- a/docs/checklists/abbottFreeStyleLite.md +++ b/docs/checklists/abbottFreeStyleLite.md @@ -21,7 +21,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds -- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklists/abbottPrecisionXtra.md b/docs/checklists/abbottPrecisionXtra.md index e693621655..cc72df6b98 100644 --- a/docs/checklists/abbottPrecisionXtra.md +++ b/docs/checklists/abbottPrecisionXtra.md @@ -21,7 +21,7 @@ - `[x]` units of blood ketone values (read from device, not hard-coded) - `[x]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds -- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet diff --git a/docs/checklists/bayerContourNext.md b/docs/checklists/bayerContourNext.md index d5138706d0..a04936cf4b 100644 --- a/docs/checklists/bayerContourNext.md +++ b/docs/checklists/bayerContourNext.md @@ -26,7 +26,7 @@ Supported devices: - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds -- `[?]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ### No Tidepool Data Model Yet From 8f6f0ffdbb32458959f6132e6a4f92b4b5bf027c Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 17 Jan 2018 11:31:48 +0000 Subject: [PATCH 22/97] use platform-client v0.36.0 with get-time --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 77a6d22a67..644792aae8 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "stack-trace": "0.0.10", "sudo-prompt": "8.0.0", "sundial": "1.6.0", - "tidepool-platform-client": "tidepool-org/platform-client#get-time", + "tidepool-platform-client": "0.36.0", "uuid": "3.1.0" }, "browserslist": "electron 1.6", From 0bb195f36cebb73d02a7fbb81bcdf8b0606b1837 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 17 Jan 2018 11:58:35 +0000 Subject: [PATCH 23/97] update yarn lockfile --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index df54b493f4..d1c468300c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9248,9 +9248,9 @@ thunky@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" -tidepool-platform-client@tidepool-org/platform-client#get-time: - version "0.33.0" - resolved "https://codeload.github.com/tidepool-org/platform-client/tar.gz/dc8130d8aaea8814752c3c1c29107c4a1b1cabb9" +tidepool-platform-client@0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/tidepool-platform-client/-/tidepool-platform-client-0.36.0.tgz#d81c5e88fb73327784cf3164358b05c90e5cb37e" dependencies: async "0.9.0" lodash "3.3.1" From 87357efe0d4eb280a57421919d1bfbbaa96b9f2e Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 16 Feb 2018 13:09:59 +0000 Subject: [PATCH 24/97] update electron to v1.8.2 and node to v.8.2.1 --- .babelrc | 2 +- .nvmrc | 2 +- appveyor.yml | 2 +- circle.yml | 4 ++-- package.json | 2 +- yarn.lock | 14 +++++++------- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.babelrc b/.babelrc index 173ec4515d..da8439b0c6 100644 --- a/.babelrc +++ b/.babelrc @@ -1,6 +1,6 @@ { "presets": [ - ["env", { "targets": { "node": "7.9.0", "electron": "1.7.8" }, "useBuiltIns": true }], + ["env", { "targets": { "node": "8.2.1", "electron": "1.8.2" }, "useBuiltIns": true }], "stage-0", "react" ], diff --git a/.nvmrc b/.nvmrc index 4bc5d61816..2b0aa21219 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -7.9.0 +8.2.1 diff --git a/appveyor.yml b/appveyor.yml index 3827648a22..c8ae6cca7e 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,7 +3,7 @@ image: Visual Studio 2013 environment: APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z matrix: - - nodejs_version: 7.9.0 + - nodejs_version: 8.2.1 cache: - "%LOCALAPPDATA%\\Yarn" diff --git a/circle.yml b/circle.yml index 916234dea7..ab15268532 100644 --- a/circle.yml +++ b/circle.yml @@ -5,8 +5,8 @@ machine: dependencies: pre: - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash - - nvm install 7.9.0 - - nvm use 7.9.0 + - nvm install 8.2.1 + - nvm use 8.2.1 - curl -o- -L https://yarnpkg.com/install.sh | bash - yarn config set cache-folder ~/.cache/yarn override: diff --git a/package.json b/package.json index 1a53bea190..c2059bbe39 100644 --- a/package.json +++ b/package.json @@ -186,7 +186,7 @@ "css-loader": "0.28.7", "devtron": "1.4.0", "difflet": "1.0.1", - "electron": "1.7.9", + "electron": "1.8.2", "electron-builder": "19.45.5", "electron-devtools-installer": "2.2.1", "electron-mocha": "5.0.0", diff --git a/yarn.lock b/yarn.lock index 2bf2caaf45..79748fcea2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,9 +94,9 @@ version "6.0.66" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.66.tgz#5680b74a6135d33d4c00447e7c3dc691a4601625" -"@types/node@^7.0.18": - version "7.0.48" - resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.48.tgz#24bfdc0aa82e8f6dbd017159c58094a2e06d0abb" +"@types/node@^8.0.24": + version "8.9.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.4.tgz#dfd327582a06c114eb6e0441fa3d6fab35edad48" "@types/rimraf@^0.0.28": version "0.0.28" @@ -3314,11 +3314,11 @@ electron-window@^0.8.0: dependencies: is-electron-renderer "^2.0.0" -electron@1.7.9: - version "1.7.9" - resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.9.tgz#add54e9f8f83ed02f6519ec10135f698b19336cf" +electron@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.2.tgz#a817cd733c2972b3c7cc4f777caf6e424b88014d" dependencies: - "@types/node" "^7.0.18" + "@types/node" "^8.0.24" electron-download "^3.0.1" extract-zip "^1.0.3" From cd3eb6cb5369c84258897884451e86e565b01075 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 16 Feb 2018 14:30:29 +0000 Subject: [PATCH 25/97] create new test version --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 1086eb30c7..d41a53d7be 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.3.0", + "version": "2.3.0-electron-update.1", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index c2059bbe39..401cdb4e46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.3.0", + "version": "2.3.0-electron-update.1", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From caaebe54fdfbb39cbfd251470c5abd992fca215d Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 16 Feb 2018 14:50:43 +0000 Subject: [PATCH 26/97] build with VS 2017 instead of 2013 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c8ae6cca7e..7e6980343e 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -image: Visual Studio 2013 +image: Visual Studio 2017 environment: APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z From fbf2e1bb1de77751c32e234d335725e061b872ea Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 19 Feb 2018 13:39:28 +0000 Subject: [PATCH 27/97] update electron-builder --- package.json | 2 +- yarn.lock | 399 ++++++++++++++++++++++++++++----------------------- 2 files changed, 220 insertions(+), 181 deletions(-) diff --git a/package.json b/package.json index 401cdb4e46..5566fa408e 100644 --- a/package.json +++ b/package.json @@ -187,7 +187,7 @@ "devtron": "1.4.0", "difflet": "1.0.1", "electron": "1.8.2", - "electron-builder": "19.45.5", + "electron-builder": "20.0.5", "electron-devtools-installer": "2.2.1", "electron-mocha": "5.0.0", "electron-updater": "2.16.1", diff --git a/yarn.lock b/yarn.lock index 79748fcea2..c60a818888 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,25 +2,25 @@ # yarn lockfile v1 -"7zip-bin-linux@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/7zip-bin-linux/-/7zip-bin-linux-1.2.0.tgz#c0ddfb640b255e14bd6730c26af45b2669c0193c" +"7zip-bin-linux@~1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz#4856db1ab1bf5b6ee8444f93f5a8ad71446d00d5" -"7zip-bin-mac@^1.0.1": +"7zip-bin-mac@~1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz#3e68778bbf0926adc68159427074505d47555c02" -"7zip-bin-win@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.1.1.tgz#8acfc28bb34e53a9476b46ae85a97418e6035c20" +"7zip-bin-win@~2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz#0b81c43e911100f3ece2ebac4f414ca95a572d5b" -"7zip-bin@^2.2.7", "7zip-bin@^2.3.4": - version "2.3.4" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-2.3.4.tgz#0861a3c99793dd794f4dd6175ec4ddfa6af8bc9d" +"7zip-bin@~3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-3.1.0.tgz#70814c6b6d44fef8b74be6fc64d3977a2eff59a5" optionalDependencies: - "7zip-bin-linux" "^1.1.0" - "7zip-bin-mac" "^1.0.1" - "7zip-bin-win" "^2.1.1" + "7zip-bin-linux" "~1.3.1" + "7zip-bin-mac" "~1.0.1" + "7zip-bin-win" "~2.2.0" "7zip@0.0.6": version "0.0.6" @@ -168,6 +168,10 @@ ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" +ajv-keywords@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -184,6 +188,14 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.1.1.tgz#978d597fbc2b7d0e5a5c3ddeb149a682f2abfa0e" + dependencies: + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -267,16 +279,25 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" -app-package-builder@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/app-package-builder/-/app-package-builder-1.5.0.tgz#3263598b07ac577b3df2205171a449f2dd5f30ca" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^3.2.1" - builder-util-runtime "^3.1.0" - fs-extra-p "^4.4.4" - int64-buffer "^0.1.9" - rabin-bindings "~1.7.3" +app-builder-bin-linux@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.3.5.tgz#8ef1a839d0614b81e0f11bd593ff533a058d7c5b" + +app-builder-bin-mac@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.3.5.tgz#3a9d3dea92f4fd5cf531a8947571c4c67a10761b" + +app-builder-bin-win@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.3.5.tgz#5d2a3c31e8a54991498f861b5a0cbe0227a91e9c" + +app-builder-bin@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.3.5.tgz#70d6a16a19265cd764747779c84017abc14abce4" + optionalDependencies: + app-builder-bin-linux "1.3.5" + app-builder-bin-mac "1.3.5" + app-builder-bin-win "1.3.5" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" @@ -392,13 +413,6 @@ asap@^2.0.0, asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" -asar-integrity@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asar-integrity/-/asar-integrity-0.2.3.tgz#b238a68ef1218561b4904db8400c0943fbc62c62" - dependencies: - bluebird-lst "^1.0.5" - fs-extra-p "^4.4.4" - asn1.js@^4.0.0: version "4.9.2" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" @@ -1630,7 +1644,7 @@ block-stream@*, block-stream@0.0.9: dependencies: inherits "~2.0.0" -bluebird-lst@^1.0.4, bluebird-lst@^1.0.5: +bluebird-lst@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.5.tgz#bebc83026b7e92a72871a3dc599e219cbfb002a9" dependencies: @@ -1841,22 +1855,13 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builder-util-runtime@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-3.2.0.tgz#b946032b61c940533fa5e8f05afc550b8e56c94c" - dependencies: - bluebird-lst "^1.0.5" - debug "^3.1.0" - fs-extra-p "^4.4.4" - sax "^1.2.4" - -builder-util-runtime@^3.1.0, builder-util-runtime@^3.2.0, builder-util-runtime@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-3.3.1.tgz#d905cd5b7be7e60124a532ddd0e988e12c1bd5c3" +builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62" dependencies: bluebird-lst "^1.0.5" debug "^3.1.0" - fs-extra-p "^4.4.5" + fs-extra-p "^4.5.0" sax "^1.2.4" builder-util-runtime@~3.1.0: @@ -1868,47 +1873,24 @@ builder-util-runtime@~3.1.0: fs-extra-p "^4.4.4" sax "^1.2.4" -builder-util@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-3.2.2.tgz#9660f74f168f6d4e175ca3c25c8e0d0ed7ff965c" - dependencies: - "7zip-bin" "^2.2.7" - bluebird-lst "^1.0.5" - builder-util-runtime "^3.2.0" - chalk "^2.3.0" - debug "^3.1.0" - fs-extra-p "^4.4.4" - ini "^1.3.4" - is-ci "^1.0.10" - js-yaml "^3.10.0" - lazy-val "^1.0.2" - node-emoji "^1.8.1" - semver "^5.4.1" - source-map-support "^0.5.0" - stat-mode "^0.2.2" - temp-file "^2.0.3" - tunnel-agent "^0.6.0" - -builder-util@^3.2.1: - version "3.4.4" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-3.4.4.tgz#cab30f37c1ee4fb23d33b20ac71e76e3c8451d28" +builder-util@5.3.0, builder-util@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.3.0.tgz#595d553fe7ab69a109cbb463ff82977ff3e66f2e" dependencies: - "7zip-bin" "^2.3.4" + "7zip-bin" "~3.1.0" + app-builder-bin "1.3.5" bluebird-lst "^1.0.5" - builder-util-runtime "^3.3.1" + builder-util-runtime "^4.0.5" chalk "^2.3.0" debug "^3.1.0" - fs-extra-p "^4.4.5" - ini "^1.3.5" - is-ci "^1.0.10" + fs-extra-p "^4.5.0" + is-ci "^1.1.0" js-yaml "^3.10.0" lazy-val "^1.0.3" - node-emoji "^1.8.1" - semver "^5.4.1" - source-map-support "^0.5.0" + semver "^5.5.0" + source-map-support "^0.5.3" stat-mode "^0.2.2" - temp-file "^3.0.0" - tunnel-agent "^0.6.0" + temp-file "^3.1.1" builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" @@ -2240,6 +2222,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -2987,17 +2977,18 @@ discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" -dmg-builder@2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-2.1.6.tgz#a37f0c8360794a7051a30a571582968cb1e3ce30" +dmg-builder@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.0.tgz#40b6ce05b59a3baebd69680a1f2875b1ff475e24" dependencies: bluebird-lst "^1.0.5" - builder-util "^3.2.1" - debug "^3.1.0" - fs-extra-p "^4.4.4" + builder-util "^5.3.0" + electron-builder-lib "~20.0.5" + fs-extra-p "^4.5.0" iconv-lite "^0.4.19" js-yaml "^3.10.0" parse-color "^1.0.0" + sanitize-filename "^1.6.1" dns-equal@^1.0.0: version "1.0.0" @@ -3100,9 +3091,9 @@ dotenv-expand@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.0.1.tgz#68fddc1561814e0a10964111057ff138ced7d7a8" -dotenv@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" +dotenv@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.0.tgz#0206eb5b336639bf377618a2a304ff00c6a1fddb" duplexer2@0.0.2: version "0.0.2" @@ -3141,40 +3132,82 @@ ejs@^2.5.7, ejs@~2.5.6: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder@19.45.5: - version "19.45.5" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.45.5.tgz#67a949d71cd2e947efd333fc9a933bd36c552cc6" +electron-builder-lib@20.0.5: + version "20.0.5" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.0.5.tgz#dd1e673eae548fe6c2f73bd066be5d68469c4e19" dependencies: - "7zip-bin" "^2.2.7" - app-package-builder "1.5.0" - asar-integrity "0.2.3" + "7zip-bin" "~3.1.0" + app-builder-bin "1.3.5" async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - builder-util "3.2.2" - builder-util-runtime "3.2.0" - chalk "^2.3.0" + builder-util "5.3.0" + builder-util-runtime "4.0.5" chromium-pickle-js "^0.2.0" debug "^3.1.0" - dmg-builder "2.1.6" ejs "^2.5.7" - electron-download-tf "4.3.4" - electron-osx-sign "0.4.7" - electron-publish "19.45.0" - fs-extra-p "^4.4.4" + electron-osx-sign "0.4.8" + electron-publish "20.0.5" + fs-extra-p "^4.5.0" hosted-git-info "^2.5.0" - is-ci "^1.0.10" + is-ci "^1.1.0" isbinaryfile "^3.0.2" js-yaml "^3.10.0" - lazy-val "^1.0.2" + lazy-val "^1.0.3" minimatch "^3.0.4" normalize-package-data "^2.4.0" plist "^2.1.0" - read-config-file "1.2.0" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + +electron-builder-lib@~20.0.5: + version "20.0.6" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.0.6.tgz#1484108626312026cf5c2188aefe0c33f40bad81" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.3.5" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.3.0" + builder-util-runtime "4.0.5" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.7" + electron-osx-sign "0.4.8" + electron-publish "20.0.6" + fs-extra-p "^4.5.2" + hosted-git-info "^2.5.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.10.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^2.1.0" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + +electron-builder@20.0.5: + version "20.0.5" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.0.5.tgz#17a0fae426f19fdbf71efba7c06d9ea29e077382" + dependencies: + bluebird-lst "^1.0.5" + builder-util "5.3.0" + builder-util-runtime "4.0.5" + chalk "^2.3.0" + dmg-builder "4.1.0" + electron-builder-lib "20.0.5" + electron-download-tf "4.3.4" + fs-extra-p "^4.5.0" + is-ci "^1.1.0" + lazy-val "^1.0.3" + read-config-file "3.0.0" sanitize-filename "^1.6.1" - semver "^5.4.1" - temp-file "^2.0.3" update-notifier "^2.3.0" - yargs "^10.0.3" + yargs "^11.0.0" electron-chromedriver@~1.7.1: version "1.7.1" @@ -3268,9 +3301,9 @@ electron-mocha@5.0.0: mocha "^4.0.1" which "^1.3.0" -electron-osx-sign@0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.7.tgz#1d75647a82748eacd48bea70616ec83ffade3ee5" +electron-osx-sign@0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.8.tgz#f0b9fadded9e1e54ec35fa89877b5c6c34c7bc40" dependencies: bluebird "^3.5.0" compare-version "^0.1.2" @@ -3279,16 +3312,28 @@ electron-osx-sign@0.4.7: minimist "^1.2.0" plist "^2.1.0" -electron-publish@19.45.0: - version "19.45.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.45.0.tgz#7cdcf4f54dd821bffaf4dcc59b21223cfbd8ac4c" +electron-publish@20.0.5: + version "20.0.5" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.0.5.tgz#e2f37d86ee641e56ac3c04ecb88774a157b3764e" dependencies: bluebird-lst "^1.0.5" - builder-util "^3.2.1" - builder-util-runtime "^3.1.0" + builder-util "^5.3.0" + builder-util-runtime "^4.0.5" chalk "^2.3.0" - fs-extra-p "^4.4.4" - mime "^2.0.3" + fs-extra-p "^4.5.0" + mime "^2.2.0" + +electron-publish@20.0.6: + version "20.0.6" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.0.6.tgz#24a3c508428eea31813e064f80468f626dff1d87" + dependencies: + bluebird-lst "^1.0.5" + builder-util "^5.3.0" + builder-util-runtime "^4.0.5" + chalk "^2.3.0" + fs-extra-p "^4.5.2" + lazy-val "^1.0.3" + mime "^2.2.0" electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.28: version "1.3.28" @@ -4153,13 +4198,20 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra-p@^4.4.4, fs-extra-p@^4.4.5: +fs-extra-p@^4.4.4: version "4.4.5" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.4.5.tgz#90875f2615b53d0085b562e15d579281b9d454c2" dependencies: bluebird-lst "^1.0.5" fs-extra "^4.0.3" +fs-extra-p@^4.5.0, fs-extra-p@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.2.tgz#0a22aba489284d17f375d5dc5139aa777fe2df51" + dependencies: + bluebird-lst "^1.0.5" + fs-extra "^5.0.0" + fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -4193,6 +4245,14 @@ fs-extra@^4.0.1, fs-extra@^4.0.2, fs-extra@^4.0.3: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@~0.26.2: version "0.26.7" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" @@ -4951,7 +5011,7 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0, ini@~1.3.4: +ini@^1.3.4, ini@~1.3.0, ini@~1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -5000,10 +5060,6 @@ inquirer@^3.0.6, inquirer@~3.3.0: strip-ansi "^4.0.0" through "^2.3.6" -int64-buffer@^0.1.9: - version "0.1.10" - resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.10.tgz#277b228a87d95ad777d07c13832022406a473423" - internal-ip@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" @@ -5071,9 +5127,9 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -is-ci@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" +is-ci@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" @@ -5767,10 +5823,6 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -6013,9 +6065,9 @@ mime@^1.2.11, mime@^1.3.4, mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" -mime@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.0.3.tgz#4353337854747c48ea498330dc034f9f4bbbcc0b" +mime@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" mimic-fn@^1.0.0: version "1.1.0" @@ -6145,7 +6197,7 @@ mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.2.0, nan@^2.3.0, nan@^2.6.2, nan@^2.8.0: +nan@^2.2.0, nan@^2.3.0, nan@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" @@ -6193,12 +6245,6 @@ node-abi@^2.1.1: dependencies: semver "^5.4.1" -node-emoji@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" - dependencies: - lodash.toarray "^4.4.0" - node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" @@ -7390,7 +7436,7 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^4.4.0" -prebuild-install@^2.2.2, prebuild-install@^2.3.0: +prebuild-install@^2.2.2: version "2.4.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.4.1.tgz#c28ba1d1eedc17fbd6b3229a657ffc0fba479b49" dependencies: @@ -7608,14 +7654,6 @@ querystringify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" -rabin-bindings@~1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/rabin-bindings/-/rabin-bindings-1.7.4.tgz#174581d3b9a3c1b09ece75dc21f1b4ae0dd79974" - dependencies: - bindings "^1.3.0" - nan "^2.8.0" - prebuild-install "^2.3.0" - raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" @@ -7801,19 +7839,19 @@ read-cmd-shim@~1.0.1: dependencies: graceful-fs "^4.1.2" -read-config-file@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-1.2.0.tgz#1fd7dc8ccdad838cac9f686182625290fc94f456" +read-config-file@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.0.0.tgz#771def5184a7f76abaf6b2c82f20cb983775b8ea" dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - bluebird-lst "^1.0.4" - dotenv "^4.0.0" + ajv "^6.1.1" + ajv-keywords "^3.1.0" + bluebird-lst "^1.0.5" + dotenv "^5.0.0" dotenv-expand "^4.0.1" - fs-extra-p "^4.4.4" + fs-extra-p "^4.5.0" js-yaml "^3.10.0" json5 "^0.5.1" - lazy-val "^1.0.2" + lazy-val "^1.0.3" read-installed@~4.0.3: version "4.0.3" @@ -8455,6 +8493,10 @@ semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" +semver@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + semver@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" @@ -8708,6 +8750,12 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-support@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" + dependencies: + source-map "^0.6.0" + source-map-url@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" @@ -9119,23 +9167,14 @@ tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: fstream "^1.0.2" inherits "2" -temp-file@^2.0.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-2.1.3.tgz#cc54f01d367df6e36c1fefbd662afbd95fdd0f37" - dependencies: - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - fs-extra-p "^4.4.4" - lazy-val "^1.0.2" - -temp-file@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.0.0.tgz#1e9eca9c411a41564f5746bc2774c39080021db0" +temp-file@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.1.tgz#8823649aa4e8a6e419eb71b601a2e4d472b0f24f" dependencies: async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - fs-extra-p "^4.4.4" - lazy-val "^1.0.2" + fs-extra-p "^4.5.0" + lazy-val "^1.0.3" term-size@^1.2.0: version "1.2.0" @@ -9926,17 +9965,17 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6" +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" dependencies: camelcase "^4.1.0" -yargs@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" +yargs@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" dependencies: - cliui "^3.2.0" + cliui "^4.0.0" decamelize "^1.1.1" find-up "^2.1.0" get-caller-file "^1.0.1" @@ -9947,7 +9986,7 @@ yargs@^10.0.3: string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^8.0.0" + yargs-parser "^9.0.2" yargs@^6.6.0: version "6.6.0" From f7a5b00e40ccdcd62b3fabb24f5410228219fb55 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 21 Feb 2018 14:23:12 +0000 Subject: [PATCH 28/97] only use rollbar on production --- app/actions/sync.js | 16 ++++++++------- app/utils/rollbar.js | 47 +++++++++++++++++++++++--------------------- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/app/actions/sync.js b/app/actions/sync.js index 709bae9cc1..4c9ca137ee 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -288,14 +288,16 @@ export function loginSuccess(results) { const { user, profile, memberships } = results; const isClinicAccount = personUtils.userHasRole(user, 'clinic'); // the rewire plugin messes with default export in tests - rollbar.configure && rollbar.configure({ - payload: { - person: { - id: user.userid, - username: user.username, + if (rollbar) { + rollbar.configure({ + payload: { + person: { + id: user.userid, + username: user.username, + } } - } - }); + }); + } return { type: actionTypes.LOGIN_SUCCESS, payload: { user, profile, memberships }, diff --git a/app/utils/rollbar.js b/app/utils/rollbar.js index bddfda6860..ca1b98a453 100644 --- a/app/utils/rollbar.js +++ b/app/utils/rollbar.js @@ -2,32 +2,35 @@ import Rollbar from 'rollbar/dist/rollbar.umd'; -let rollbar = new Rollbar({ - accessToken: '1843589282464f4facd43f794c8201a8', - captureUncaught: true, - payload: { - environment: 'electron_renderer', - client: { - javascript: { - code_version: __VERSION_SHA__, - guess_uncaught_frames: true +let rollbar; +if (process.env.NODE_ENV === 'production') { + rollbar = new Rollbar({ + accessToken: '1843589282464f4facd43f794c8201a8', + captureUncaught: true, + payload: { + environment: 'electron_renderer', + client: { + javascript: { + code_version: __VERSION_SHA__, + guess_uncaught_frames: true + } } - } - }, - // to deal with URI's as local filesystem paths, we use the "many domain" transform: - // https://rollbar.com/docs/source-maps/#using-source-maps-on-many-domains - transform: function(payload) { - var trace = payload.body.trace; - if (trace && trace.frames) { - for (var i = 0; i < trace.frames.length; i++) { - var filename = trace.frames[i].filename; - if (filename) { - trace.frames[i].filename = 'http://dynamichost/dist/bundle.js'; + }, + // to deal with URI's as local filesystem paths, we use the "many domain" transform: + // https://rollbar.com/docs/source-maps/#using-source-maps-on-many-domains + transform: function(payload) { + var trace = payload.body.trace; + if (trace && trace.frames) { + for (var i = 0; i < trace.frames.length; i++) { + var filename = trace.frames[i].filename; + if (filename) { + trace.frames[i].filename = 'http://dynamichost/dist/bundle.js'; + } } } } } - } -); + ); +} export default rollbar; From f155da94c45ede00c6da81a62dc29c51772b4113 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 22 Feb 2018 17:09:25 +0000 Subject: [PATCH 29/97] add TestError to be removed later --- lib/drivers/abbott/abbottFreeStyleLibre.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js index 77fc5973f6..2b1cb4cff8 100644 --- a/lib/drivers/abbott/abbottFreeStyleLibre.js +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -46,6 +46,7 @@ export default function (config) { [ "error", { "props": true, "ignorePropertyModificationsFor": ["data"] } ] */ detect(deviceInfo, cb) { cb(null, deviceInfo); + throw new Error('TestError'); // TODO: remove this! }, setup(deviceInfo, progress, cb) { From 9916ad819ca333b651a708d2ee890783c7ff0681 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 22 Feb 2018 17:26:52 +0000 Subject: [PATCH 30/97] fix rollbar testing issue --- app/actions/sync.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/actions/sync.js b/app/actions/sync.js index 4c9ca137ee..aa9d94d381 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -289,7 +289,7 @@ export function loginSuccess(results) { const isClinicAccount = personUtils.userHasRole(user, 'clinic'); // the rewire plugin messes with default export in tests if (rollbar) { - rollbar.configure({ + rollbar.configure && rollbar.configure({ payload: { person: { id: user.userid, From c8762e38632656f5a1a805dc0e4f8366928cf054 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 23 Feb 2018 14:21:02 +0000 Subject: [PATCH 31/97] remove TestError again --- lib/drivers/abbott/abbottFreeStyleLibre.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js index 2b1cb4cff8..77fc5973f6 100644 --- a/lib/drivers/abbott/abbottFreeStyleLibre.js +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -46,7 +46,6 @@ export default function (config) { [ "error", { "props": true, "ignorePropertyModificationsFor": ["data"] } ] */ detect(deviceInfo, cb) { cb(null, deviceInfo); - throw new Error('TestError'); // TODO: remove this! }, setup(deviceInfo, progress, cb) { From 50da767d3614fdec78a12b44333f031ae27a0b01 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 23 Feb 2018 14:54:01 +0000 Subject: [PATCH 32/97] change to using enabled flag instead of wrapping rollbar in if statement --- app/actions/sync.js | 16 +++++++-------- app/utils/errors.js | 2 ++ app/utils/rollbar.js | 48 +++++++++++++++++++++----------------------- 3 files changed, 32 insertions(+), 34 deletions(-) diff --git a/app/actions/sync.js b/app/actions/sync.js index aa9d94d381..709bae9cc1 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -288,16 +288,14 @@ export function loginSuccess(results) { const { user, profile, memberships } = results; const isClinicAccount = personUtils.userHasRole(user, 'clinic'); // the rewire plugin messes with default export in tests - if (rollbar) { - rollbar.configure && rollbar.configure({ - payload: { - person: { - id: user.userid, - username: user.username, - } + rollbar.configure && rollbar.configure({ + payload: { + person: { + id: user.userid, + username: user.username, } - }); - } + } + }); return { type: actionTypes.LOGIN_SUCCESS, payload: { user, profile, memberships }, diff --git a/app/utils/errors.js b/app/utils/errors.js index a5040a8b85..53dc02b825 100644 --- a/app/utils/errors.js +++ b/app/utils/errors.js @@ -18,6 +18,7 @@ import _ from 'lodash'; import errorText from '../constants/errors'; +import rollbar from './utils/rollbar'; const errorProps = { code: 'Code', @@ -106,6 +107,7 @@ export function createErrorLogger(api) { if (!err.debug) { err.debug = err.message || 'Unknown error'; } + rollbar.error(err); api.errors.log( err, _.get(action, 'meta.metric.eventName', null), diff --git a/app/utils/rollbar.js b/app/utils/rollbar.js index ca1b98a453..e2a2b6d954 100644 --- a/app/utils/rollbar.js +++ b/app/utils/rollbar.js @@ -2,35 +2,33 @@ import Rollbar from 'rollbar/dist/rollbar.umd'; -let rollbar; -if (process.env.NODE_ENV === 'production') { - rollbar = new Rollbar({ - accessToken: '1843589282464f4facd43f794c8201a8', - captureUncaught: true, - payload: { - environment: 'electron_renderer', - client: { - javascript: { - code_version: __VERSION_SHA__, - guess_uncaught_frames: true - } +let rollbar = new Rollbar({ + accessToken: '1843589282464f4facd43f794c8201a8', + captureUncaught: true, + enabled: process.env.NODE_ENV === 'production', + payload: { + environment: 'electron_renderer', + client: { + javascript: { + code_version: __VERSION_SHA__, + guess_uncaught_frames: true } - }, - // to deal with URI's as local filesystem paths, we use the "many domain" transform: - // https://rollbar.com/docs/source-maps/#using-source-maps-on-many-domains - transform: function(payload) { - var trace = payload.body.trace; - if (trace && trace.frames) { - for (var i = 0; i < trace.frames.length; i++) { - var filename = trace.frames[i].filename; - if (filename) { - trace.frames[i].filename = 'http://dynamichost/dist/bundle.js'; - } + } + }, + // to deal with URI's as local filesystem paths, we use the "many domain" transform: + // https://rollbar.com/docs/source-maps/#using-source-maps-on-many-domains + transform: function(payload) { + var trace = payload.body.trace; + if (trace && trace.frames) { + for (var i = 0; i < trace.frames.length; i++) { + var filename = trace.frames[i].filename; + if (filename) { + trace.frames[i].filename = 'http://dynamichost/dist/bundle.js'; } } } } - ); -} + } +); export default rollbar; From a32194f08ea0102e495ca4cac4a1da0aabb69d0b Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 23 Feb 2018 14:55:28 +0000 Subject: [PATCH 33/97] fix import dir --- app/utils/errors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/errors.js b/app/utils/errors.js index 53dc02b825..cb7fe2fd5f 100644 --- a/app/utils/errors.js +++ b/app/utils/errors.js @@ -18,7 +18,7 @@ import _ from 'lodash'; import errorText from '../constants/errors'; -import rollbar from './utils/rollbar'; +import rollbar from '../utils/rollbar'; const errorProps = { code: 'Code', From 8352fbb4c3bb0b9ef508c8ce083ecc32151a816a Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 23 Feb 2018 15:13:35 +0000 Subject: [PATCH 34/97] log all relevant errors to rollbar --- app/utils/errors.js | 2 -- lib/core/api.js | 2 ++ yarn.lock | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/utils/errors.js b/app/utils/errors.js index cb7fe2fd5f..a5040a8b85 100644 --- a/app/utils/errors.js +++ b/app/utils/errors.js @@ -18,7 +18,6 @@ import _ from 'lodash'; import errorText from '../constants/errors'; -import rollbar from '../utils/rollbar'; const errorProps = { code: 'Code', @@ -107,7 +106,6 @@ export function createErrorLogger(api) { if (!err.debug) { err.debug = err.message || 'Unknown error'; } - rollbar.error(err); api.errors.log( err, _.get(action, 'meta.metric.eventName', null), diff --git a/lib/core/api.js b/lib/core/api.js index 4bb6798a43..c983361155 100644 --- a/lib/core/api.js +++ b/lib/core/api.js @@ -31,6 +31,7 @@ var errorText = require('../../app/constants/errors'); var log = isElectron() ? bows('Api') : console.log; var builder = require('../objectBuilder')(); var localStore = require('./localStore'); +var rollbar = require('../../app/utils/rollbar.js'); // for cli tools running in node if (typeof localStore === 'function') { @@ -608,6 +609,7 @@ api.errors = {}; api.errors.log = function(error, message, properties) { api.log('GET /errors'); + rollbar.error(error, error.debug); return tidepool.logAppError(error.debug, message, properties); }; diff --git a/yarn.lock b/yarn.lock index bf1509786a..dd62d415e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2760,6 +2760,7 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" dateformat@^2.0.0, debug@2.2.0: + name dateformat version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" @@ -6284,6 +6285,10 @@ nan@^2.2.0, nan@^2.3.0, nan@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nan@^2.8.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" From 2059205a5820b2d047f1110163bf5ffb07e547ec Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 27 Feb 2018 11:49:54 +0000 Subject: [PATCH 35/97] update dependencies to latest versions --- app/main.development.js | 2 +- app/package.json | 4 +- app/yarn.lock | 99 +++- package.json | 104 ++-- yarn.lock | 1102 ++++++++++++++++++++------------------- 5 files changed, 696 insertions(+), 615 deletions(-) diff --git a/app/main.development.js b/app/main.development.js index ef4c2a8307..e625d65c1b 100755 --- a/app/main.development.js +++ b/app/main.development.js @@ -4,7 +4,7 @@ import { app, BrowserWindow, Menu, shell, ipcMain, crashReporter } from 'electro import os from 'os'; import open from 'open'; import { autoUpdater } from 'electron-updater'; -import * as chromeFinder from 'chrome-launcher/chrome-finder'; +import * as chromeFinder from 'chrome-launcher/dist/chrome-finder'; import { sync as syncActions } from './actions'; import debugMode from '../app/utils/debugMode'; import Rollbar from 'rollbar/src/server/rollbar'; diff --git a/app/package.json b/app/package.json index 028dc15d67..41482478a0 100755 --- a/app/package.json +++ b/app/package.json @@ -10,9 +10,9 @@ }, "license": "BSD-2-Clause", "dependencies": { - "drivelist": "5.1.8", + "drivelist": "6.0.4", "keytar": "4.0.4", - "node-hid": "0.5.7", + "node-hid": "0.7.2", "serialport": "5.0.0", "usb": "1.3.1" }, diff --git a/app/yarn.lock b/app/yarn.lock index 39f7dd0cf8..19649b93f2 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -68,7 +68,7 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bindings@1.3.0, bindings@^1.2.1, bindings@^1.3.0: +bindings@1.3.0, bindings@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" @@ -147,12 +147,24 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@^2.2.0, debug@^2.6.0, debug@^2.6.6: +debug@^2.2.0, debug@^2.6.6: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 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" + dependencies: + ms "2.0.0" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" @@ -165,19 +177,19 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -detect-libc@^1.0.2: +detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -drivelist@5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-5.1.8.tgz#76f0d5f747e36544b5fa77ff914ff9a97877b01f" +drivelist@6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.0.4.tgz#971ac575356a8a4c14859824ecd28cdf3c586433" dependencies: - bindings "^1.2.1" - debug "^2.6.0" - js-yaml "^3.4.1" - lodash "^4.16.4" - nan "^2.6.2" + bindings "^1.3.0" + debug "^3.1.0" + js-yaml "^3.10.0" + nan "^2.8.0" + prebuild-install "^2.4.1" ecc-jsbn@~0.1.1: version "0.1.1" @@ -351,7 +363,7 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -js-yaml@^3.4.1: +js-yaml@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: @@ -395,10 +407,6 @@ keytar@4.0.4: dependencies: nan "2.5.1" -lodash@^4.16.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" @@ -409,6 +417,10 @@ mime-types@^2.1.12, mime-types@~2.1.7: dependencies: mime-db "~1.30.0" +mimic-response@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + minimatch@^3.0.0, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -447,9 +459,15 @@ node-abi@^2.1.1: dependencies: semver "^5.4.1" -node-hid@0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.5.7.tgz#5c87c33e4bcb9db64decf21ba3c7b9d014eac123" +node-abi@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986" + dependencies: + semver "^5.4.1" + +node-hid@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.2.tgz#15025cdea2e9756aca2de7266529996d40e52c56" dependencies: bindings "^1.3.0" nan "^2.6.2" @@ -551,6 +569,26 @@ prebuild-install@^2.2.2: tunnel-agent "^0.6.0" xtend "4.0.1" +prebuild-install@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" + dependencies: + detect-libc "^1.0.3" + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.2.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.1.6" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + 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" @@ -566,6 +604,13 @@ pump@^1.0.0, pump@^1.0.1: end-of-stream "^1.1.0" once "^1.3.1" +pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -656,6 +701,10 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + simple-get@^1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb" @@ -664,6 +713,14 @@ simple-get@^1.4.2: unzip-response "^1.0.0" xtend "^4.0.0" +simple-get@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.7.0.tgz#ad37f926d08129237ff08c4f2edfd6f10e0380b5" + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -802,6 +859,10 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" diff --git a/package.json b/package.json index b6874fd98f..61e1879936 100644 --- a/package.json +++ b/package.json @@ -39,37 +39,36 @@ "babyparse": "0.4.6", "blueimp-md5": "2.10.0", "bows": "1.7.0", - "chrome-launcher": "0.8.1", + "chrome-launcher": "0.10.2", "classnames": "2.2.5", - "commander": "2.11.0", + "commander": "2.14.1", "decompress": "4.2.0", - "electron-debug": "1.4.0", + "electron-debug": "1.5.0", "electron-is-dev": "0.3.0", - "eslint-plugin-lodash": "2.5.0", "history": "4.7.2", - "immutability-helper": "2.5.0", + "immutability-helper": "2.6.5", "is-electron": "2.1.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "plist": "2.1.0", - "prop-types": "15.6.0", - "react": "16.1.1", - "react-dom": "16.1.1", - "react-redux": "5.0.6", + "prop-types": "15.6.1", + "react": "16.2.0", + "react-dom": "16.2.0", + "react-redux": "5.0.7", "react-router-dom": "4.2.2", - "react-router-redux": "5.0.0-alpha.8", - "react-select": "1.0.0-rc.10", + "react-router-redux": "5.0.0-alpha.9", + "react-select": "1.2.1", "redux": "3.7.2", - "redux-form": "7.1.2", + "redux-form": "7.2.3", "redux-thunk": "2.2.0", - "rollbar": "2.3.1", + "rollbar": "2.3.9", "rollbar-sourcemap-webpack-plugin": "2.2.0", - "semver": "5.4.1", - "source-map-support": "0.5.0", + "semver": "5.5.0", + "source-map-support": "0.5.3", "stack-trace": "0.0.10", - "sudo-prompt": "8.0.0", + "sudo-prompt": "8.1.0", "sundial": "1.6.0", "tidepool-platform-client": "0.34.3", - "uuid": "3.1.0" + "uuid": "3.2.1" }, "browserslist": "electron 1.6", "build": { @@ -161,11 +160,11 @@ }, "devDependencies": { "babel-core": "6.26.0", - "babel-eslint": "8.0.2", - "babel-loader": "7.1.2", + "babel-eslint": "8.2.2", + "babel-loader": "7.1.3", "babel-plugin-add-module-exports": "0.2.1", "babel-plugin-dev-expression": "0.2.1", - "babel-plugin-module-resolver": "3.0.0", + "babel-plugin-module-resolver": "3.1.0", "babel-plugin-rewire": "1.1.0", "babel-plugin-transform-class-properties": "6.24.1", "babel-plugin-transform-define": "1.3.0", @@ -181,64 +180,63 @@ "babel-runtime": "6.26.0", "babili-webpack-plugin": "0.1.2", "chai": "4.1.2", - "concurrently": "3.5.0", - "cross-env": "5.1.1", - "css-loader": "0.28.7", + "concurrently": "3.5.1", + "cross-env": "5.1.3", + "css-loader": "0.28.10", "devtron": "1.4.0", "difflet": "1.0.1", - "drivelist": "5.1.8", + "drivelist": "6.0.4", "electron": "1.8.2", - "electron-builder": "20.0.5", - "electron-devtools-installer": "2.2.1", + "electron-builder": "20.2.0", + "electron-devtools-installer": "2.2.3", "electron-mocha": "5.0.0", - "electron-updater": "2.16.1", - "enzyme": "3.2.0", - "eslint": "4.11.0", + "electron-updater": "2.20.1", + "enzyme": "3.3.0", + "eslint": "4.18.1", "eslint-config-airbnb": "16.1.0", "eslint-formatter-pretty": "1.3.0", - "eslint-import-resolver-webpack": "0.8.3", - "eslint-plugin-import": "2.8.0", - "eslint-plugin-jsx-a11y": "6.0.2", - "eslint-plugin-lodash": "2.5.0", + "eslint-import-resolver-webpack": "0.8.4", + "eslint-plugin-import": "2.9.0", + "eslint-plugin-jsx-a11y": "6.0.3", + "eslint-plugin-lodash": "2.6.1", "eslint-plugin-mocha": "4.11.0", "eslint-plugin-promise": "3.6.0", - "eslint-plugin-react": "7.4.0", + "eslint-plugin-react": "7.7.0", "express": "4.16.2", "extract-text-webpack-plugin": "3.0.2", "fbjs-scripts": "0.8.1", - "file-loader": "1.1.5", - "flux-standard-action": "2.0.0", + "file-loader": "1.1.10", + "flux-standard-action": "2.0.1", "ftp": "0.3.10", "git-describe": "4.0.2", "gitbook-cli": "2.3.2", "html-webpack-plugin": "2.30.1", "json-loader": "0.5.7", - "less": "2.7.3", - "less-loader": "4.0.5", + "less": "3.0.1", + "less-loader": "4.0.6", "minimist": "1.2.0", - "mocha": "3.2.0", - "node-hid": "0.5.7", - "nodegit": "0.20.3", - "node-hid": "0.5.7", + "mocha": "5.0.1", + "nodegit": "0.21.0", + "node-hid": "0.7.2", "object-invariant-test-helper": "0.1.1", "open": "0.0.5", - "react-hot-loader": "3.1.3", - "redux-mock-store": "1.3.0", + "react-hot-loader": "4.0.0", + "redux-mock-store": "1.5.1", "salinity": "0.0.8", "serialport": "5.0.0", - "shelljs": "0.7.8", - "sinon": "4.1.2", + "shelljs": "0.8.1", + "sinon": "4.4.2", "sinon-chai": "2.14.0", - "spectron": "3.7.2", - "style-loader": "0.19.0", + "spectron": "3.8.0", + "style-loader": "0.20.2", "url-loader": "0.6.2", "usb": "1.3.1", "webpack": "3.8.1", - "webpack-dev-middleware": "1.12.0", + "webpack-dev-middleware": "2.0.6", "webpack-dev-server": "2.9.4", - "webpack-hot-middleware": "2.20.0", - "webpack-merge": "4.1.1", - "xmlbuilder": "9.0.4" + "webpack-hot-middleware": "2.21.0", + "webpack-merge": "4.1.2", + "xmlbuilder": "9.0.7" }, "devEngines": { "node": ">=7.9.x", diff --git a/yarn.lock b/yarn.lock index dd62d415e1..cc46a2e202 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,58 +26,81 @@ version "0.0.6" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" -"@babel/code-frame@7.0.0-beta.34", "@babel/code-frame@^7.0.0-beta.31": - version "7.0.0-beta.34" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.34.tgz#e8e81e37ee65a35cedc8a22a11a51d792bdc651c" +"@babel/code-frame@7.0.0-beta.40", "@babel/code-frame@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz#37e2b0cf7c56026b4b21d3927cadf81adec32ac6" dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" + "@babel/highlight" "7.0.0-beta.40" + +"@babel/generator@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.40.tgz#ab61f9556f4f71dbd1138949c795bb9a21e302ea" + dependencies: + "@babel/types" "7.0.0-beta.40" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz#9d033341ab16517f40d43a73f2d81fc431ccd7b6" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.40" + "@babel/template" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" -"@babel/helper-function-name@7.0.0-beta.34": - version "7.0.0-beta.34" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.34.tgz#eb27e7ebc299b66981100005642bf50946cb14f9" +"@babel/helper-get-function-arity@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz#ac0419cf067b0ec16453e1274f03878195791c6e" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.34" - "@babel/template" "7.0.0-beta.34" - "@babel/types" "7.0.0-beta.34" + "@babel/types" "7.0.0-beta.40" -"@babel/helper-get-function-arity@7.0.0-beta.34": - version "7.0.0-beta.34" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.34.tgz#e3dd0a72086a739c587424abd26fd3012a8b1eec" +"@babel/highlight@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.40.tgz#b43d67d76bf46e1d10d227f68cddcd263786b255" dependencies: - "@babel/types" "7.0.0-beta.34" + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" -"@babel/template@7.0.0-beta.34": - version "7.0.0-beta.34" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.34.tgz#35fa7eb6c540f4619927ec1c1b113719ecc59446" +"@babel/template@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.40.tgz#034988c6424eb5c3268fe6a608626de1f4410fc8" dependencies: - "@babel/code-frame" "7.0.0-beta.34" - "@babel/types" "7.0.0-beta.34" - babylon "7.0.0-beta.34" + "@babel/code-frame" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" + babylon "7.0.0-beta.40" lodash "^4.2.0" -"@babel/traverse@^7.0.0-beta.31": - version "7.0.0-beta.34" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.34.tgz#c352fc560e1c78198ee52252c780fe848235fdfe" +"@babel/traverse@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.40.tgz#d140e449b2e093ef9fe1a2eecc28421ffb4e521e" dependencies: - "@babel/code-frame" "7.0.0-beta.34" - "@babel/helper-function-name" "7.0.0-beta.34" - "@babel/types" "7.0.0-beta.34" - babylon "7.0.0-beta.34" + "@babel/code-frame" "7.0.0-beta.40" + "@babel/generator" "7.0.0-beta.40" + "@babel/helper-function-name" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" + babylon "7.0.0-beta.40" debug "^3.0.1" - globals "^10.0.0" + globals "^11.1.0" invariant "^2.2.0" lodash "^4.2.0" -"@babel/types@7.0.0-beta.34", "@babel/types@^7.0.0-beta.31": - version "7.0.0-beta.34" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.34.tgz#ce8da730b834c782ec64a2baf3ac0200dd328816" +"@babel/types@7.0.0-beta.40", "@babel/types@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.40.tgz#25c3d7aae14126abe05fcb098c65a66b6d6b8c14" dependencies: esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^2.0.0" +"@sinonjs/formatio@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" + dependencies: + samsam "1.3.0" + "@types/core-js@^0.9.41": version "0.9.43" resolved "https://registry.yarnpkg.com/@types/core-js/-/core-js-0.9.43.tgz#65d646c5e8c0cd1bdee37065799f9d3d48748253" @@ -90,14 +113,14 @@ version "8.0.57" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.57.tgz#e5d8b4dc112763e35cfc51988f4f38da3c486d99" -"@types/node@6.0.66": - version "6.0.66" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.66.tgz#5680b74a6135d33d4c00447e7c3dc691a4601625" - "@types/node@^8.0.24": version "8.9.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.4.tgz#dfd327582a06c114eb6e0441fa3d6fab35edad48" +"@types/node@^9.3.0": + version "9.4.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e" + "@types/rimraf@^0.0.28": version "0.0.28" resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-0.0.28.tgz#5562519bc7963caca8abf7f128cae3b594d41d06" @@ -188,6 +211,14 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2" + dependencies: + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + ajv@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.1.1.tgz#978d597fbc2b7d0e5a5c3ddeb149a682f2abfa0e" @@ -289,25 +320,25 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" -app-builder-bin-linux@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.3.5.tgz#8ef1a839d0614b81e0f11bd593ff533a058d7c5b" +app-builder-bin-linux@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.5.0.tgz#c22df1ab9ee7fb0270ec27a3c8a6993966ea4220" -app-builder-bin-mac@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.3.5.tgz#3a9d3dea92f4fd5cf531a8947571c4c67a10761b" +app-builder-bin-mac@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.5.0.tgz#40821128a1f20e0559f1fca71a59ecab81bb59b5" -app-builder-bin-win@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.3.5.tgz#5d2a3c31e8a54991498f861b5a0cbe0227a91e9c" +app-builder-bin-win@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.5.0.tgz#0a12437d825ac89fc2357e8be0ba855f54c083e9" -app-builder-bin@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.3.5.tgz#70d6a16a19265cd764747779c84017abc14abce4" +app-builder-bin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.5.0.tgz#dc768af9704876959c68af5456ef31f67a4663fe" optionalDependencies: - app-builder-bin-linux "1.3.5" - app-builder-bin-mac "1.3.5" - app-builder-bin-win "1.3.5" + app-builder-bin-linux "1.5.0" + app-builder-bin-mac "1.5.0" + app-builder-bin-win "1.5.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" @@ -534,7 +565,7 @@ axobject-query@^0.1.0: dependencies: ast-types-flow "0.0.7" -babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -566,14 +597,16 @@ babel-core@6.26.0, babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.7.2: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.2.tgz#e44fb9a037d749486071d52d65312f5c20aa7530" +babel-eslint@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b" dependencies: - "@babel/code-frame" "^7.0.0-beta.31" - "@babel/traverse" "^7.0.0-beta.31" - "@babel/types" "^7.0.0-beta.31" - babylon "^7.0.0-beta.31" + "@babel/code-frame" "^7.0.0-beta.40" + "@babel/traverse" "^7.0.0-beta.40" + "@babel/types" "^7.0.0-beta.40" + babylon "^7.0.0-beta.40" + eslint-scope "~3.7.1" + eslint-visitor-keys "^1.0.0" babel-generator@^6.26.0: version "6.26.0" @@ -746,9 +779,9 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-loader@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" +babel-loader@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.3.tgz#ff5b440da716e9153abb946251a9ab7670037b16" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -838,9 +871,9 @@ babel-plugin-minify-type-constructors@^0.1.2: dependencies: babel-helper-is-void-0 "^0.1.1" -babel-plugin-module-resolver@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.0.0.tgz#a2fe5b97f7b809a8bbac18beada0a94d45987c63" +babel-plugin-module-resolver@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.0.tgz#cf7868bd2c1818f855aede16141009b87dd1f95b" dependencies: find-babel-config "^1.1.0" glob "^7.1.2" @@ -1574,9 +1607,9 @@ babili-webpack-plugin@0.1.2: babel-preset-babili "^0.1.4" webpack-sources "^1.0.1" -babylon@7.0.0-beta.34, babylon@^7.0.0-beta.31: - version "7.0.0-beta.34" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.34.tgz#2ccdf97bb4fbc1617619a030a6c0390b2c8f16d6" +babylon@7.0.0-beta.40, babylon@^7.0.0-beta.40: + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.40.tgz#91fc8cd56d5eb98b28e6fde41045f2957779940a" babylon@^6.18.0, babylon@^6.3.26: version "6.18.0" @@ -1632,7 +1665,7 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" -bindings@1.3.0, bindings@^1.2.1, bindings@^1.3.0: +bindings@1.3.0, bindings@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" @@ -1807,12 +1840,6 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" -browserify-zlib@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" - dependencies: - pako "~0.2.0" - browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" @@ -1865,7 +1892,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5: +builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4.0.3: version "4.0.5" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62" dependencies: @@ -1874,26 +1901,17 @@ builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5: fs-extra-p "^4.5.0" sax "^1.2.4" -builder-util-runtime@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-3.1.0.tgz#60ec66d3c49f028655230a09d7767e77ff6f15b8" - dependencies: - bluebird-lst "^1.0.5" - debug "^3.1.0" - fs-extra-p "^4.4.4" - sax "^1.2.4" - -builder-util@5.3.0, builder-util@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.3.0.tgz#595d553fe7ab69a109cbb463ff82977ff3e66f2e" +builder-util@5.6.0, builder-util@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.0.tgz#c37c5207cd818531bda819ac836b6d51dfbccd4a" dependencies: "7zip-bin" "~3.1.0" - app-builder-bin "1.3.5" + app-builder-bin "1.5.0" bluebird-lst "^1.0.5" builder-util-runtime "^4.0.5" chalk "^2.3.0" debug "^3.1.0" - fs-extra-p "^4.5.0" + fs-extra-p "^4.5.2" is-ci "^1.1.0" js-yaml "^3.10.0" lazy-val "^1.0.3" @@ -2154,13 +2172,13 @@ chownr@^1.0.1, chownr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -chrome-launcher@0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.8.1.tgz#e275b738376d294b3228dc32caf3ed7ee0405e57" +chrome-launcher@0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.10.2.tgz#f7d860ddec627b6f01015736b5ae1e33b3d165b1" dependencies: "@types/core-js" "^0.9.41" "@types/mkdirp" "^0.3.29" - "@types/node" "6.0.66" + "@types/node" "^9.3.0" "@types/rimraf" "^0.0.28" is-wsl "^1.1.0" lighthouse-logger "^1.0.0" @@ -2348,16 +2366,14 @@ commander@2.12.x, commander@^2.11.0, commander@^2.9.0, commander@~2.12.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" +commander@2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + commander@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d" -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -2415,9 +2431,9 @@ concat-stream@1.6.0, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^ readable-stream "^2.2.2" typedarray "^0.0.6" -concurrently@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-3.5.0.tgz#8cf1b7707a6916a78a4ff5b77bb04dec54b379b2" +concurrently@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-3.5.1.tgz#ee8b60018bbe86b02df13e5249453c6ececd2521" dependencies: chalk "0.5.1" commander "2.6.0" @@ -2563,9 +2579,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-env@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.1.tgz#b6d8ab97f304c0f71dae7277b75fe424c08dfa74" +cross-env@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.3.tgz#f8ae18faac87692b0a8b4d2f7000d4ec3a85dfd7" dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" @@ -2618,22 +2634,22 @@ css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -css-loader@0.28.7: - version "0.28.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" +css-loader@0.28.10: + version "0.28.10" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" dependencies: - babel-code-frame "^6.11.0" + babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" - cssnano ">=2.6.1 <4" + cssnano "^3.10.0" icss-utils "^2.1.0" loader-utils "^1.0.2" lodash.camelcase "^4.3.0" - object-assign "^4.0.1" + object-assign "^4.1.1" postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" postcss-value-parser "^3.3.0" source-list-map "^2.0.0" @@ -2681,7 +2697,7 @@ cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" -"cssnano@>=2.6.1 <4": +cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" dependencies: @@ -2759,12 +2775,11 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^2.0.0, debug@2.2.0: - name dateformat +dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" -debug@2, debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8: +debug@2, debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.6.6, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -2790,6 +2805,12 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" @@ -2943,7 +2964,7 @@ detect-indent@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" -detect-libc@^1.0.2: +detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -2970,10 +2991,6 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - diff@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" @@ -3002,14 +3019,14 @@ discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" -dmg-builder@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.0.tgz#40b6ce05b59a3baebd69680a1f2875b1ff475e24" +dmg-builder@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.1.tgz#a12214eb3eb3cba0addccfd129f1981c9805045c" dependencies: bluebird-lst "^1.0.5" - builder-util "^5.3.0" - electron-builder-lib "~20.0.5" - fs-extra-p "^4.5.0" + builder-util "^5.6.0" + electron-builder-lib "~20.2.0" + fs-extra-p "^4.5.2" iconv-lite "^0.4.19" js-yaml "^3.10.0" parse-color "^1.0.0" @@ -3039,9 +3056,9 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" +doctrine@^2.0.2, doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: esutils "^2.0.2" @@ -3120,15 +3137,15 @@ dotenv@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.0.tgz#0206eb5b336639bf377618a2a304ff00c6a1fddb" -drivelist@5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-5.1.8.tgz#76f0d5f747e36544b5fa77ff914ff9a97877b01f" +drivelist@6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.0.4.tgz#971ac575356a8a4c14859824ecd28cdf3c586433" dependencies: - bindings "^1.2.1" - debug "^2.6.0" - js-yaml "^3.4.1" - lodash "^4.16.4" - nan "^2.6.2" + bindings "^1.3.0" + debug "^3.1.0" + js-yaml "^3.10.0" + nan "^2.8.0" + prebuild-install "^2.4.1" duplexer2@0.0.2: version "0.0.2" @@ -3167,50 +3184,21 @@ ejs@^2.5.7, ejs@~2.5.6: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.0.5: - version "20.0.5" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.0.5.tgz#dd1e673eae548fe6c2f73bd066be5d68469c4e19" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.3.5" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.3.0" - builder-util-runtime "4.0.5" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.5.7" - electron-osx-sign "0.4.8" - electron-publish "20.0.5" - fs-extra-p "^4.5.0" - hosted-git-info "^2.5.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.10.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^2.1.0" - read-config-file "3.0.0" - sanitize-filename "^1.6.1" - semver "^5.5.0" - temp-file "^3.1.1" - -electron-builder-lib@~20.0.5: - version "20.0.6" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.0.6.tgz#1484108626312026cf5c2188aefe0c33f40bad81" +electron-builder-lib@20.2.0, electron-builder-lib@~20.2.0: + version "20.2.0" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.2.0.tgz#e8dba288cf26858803eb1800da870d7312837bfa" dependencies: "7zip-bin" "~3.1.0" - app-builder-bin "1.3.5" + app-builder-bin "1.5.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - builder-util "5.3.0" + builder-util "5.6.0" builder-util-runtime "4.0.5" chromium-pickle-js "^0.2.0" debug "^3.1.0" ejs "^2.5.7" electron-osx-sign "0.4.8" - electron-publish "20.0.6" + electron-publish "20.2.0" fs-extra-p "^4.5.2" hosted-git-info "^2.5.0" is-ci "^1.1.0" @@ -3225,18 +3213,18 @@ electron-builder-lib@~20.0.5: semver "^5.5.0" temp-file "^3.1.1" -electron-builder@20.0.5: - version "20.0.5" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.0.5.tgz#17a0fae426f19fdbf71efba7c06d9ea29e077382" +electron-builder@20.2.0: + version "20.2.0" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.2.0.tgz#aaeaa439cb96c9a3d7ffda25b28130327c982982" dependencies: bluebird-lst "^1.0.5" - builder-util "5.3.0" + builder-util "5.6.0" builder-util-runtime "4.0.5" chalk "^2.3.0" - dmg-builder "4.1.0" - electron-builder-lib "20.0.5" + dmg-builder "4.1.1" + electron-builder-lib "20.2.0" electron-download-tf "4.3.4" - fs-extra-p "^4.5.0" + fs-extra-p "^4.5.2" is-ci "^1.1.0" lazy-val "^1.0.3" read-config-file "3.0.0" @@ -3244,23 +3232,23 @@ electron-builder@20.0.5: update-notifier "^2.3.0" yargs "^11.0.0" -electron-chromedriver@~1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/electron-chromedriver/-/electron-chromedriver-1.7.1.tgz#008c97976007aa4eb18491ee095e94d17ee47610" +electron-chromedriver@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/electron-chromedriver/-/electron-chromedriver-1.8.0.tgz#901714133cf6f6093d365e1f44a52d99624d8241" dependencies: electron-download "^4.1.0" extract-zip "^1.6.5" -electron-debug@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/electron-debug/-/electron-debug-1.4.0.tgz#bec7005522220a9d0622153352e1bbff0f37af2e" +electron-debug@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/electron-debug/-/electron-debug-1.5.0.tgz#d88c02146efb7fc5ae1b21eac56fbe4987eae50c" dependencies: electron-is-dev "^0.3.0" electron-localshortcut "^3.0.0" -electron-devtools-installer@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.1.tgz#0beb73ccbf65cbc4d09e706cebda638f839b8c55" +electron-devtools-installer@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.3.tgz#58b9a4ec507377bc46e091cd43714188e0c369be" dependencies: "7zip" "0.0.6" cross-unzip "0.0.2" @@ -3347,23 +3335,12 @@ electron-osx-sign@0.4.8: minimist "^1.2.0" plist "^2.1.0" -electron-publish@20.0.5: - version "20.0.5" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.0.5.tgz#e2f37d86ee641e56ac3c04ecb88774a157b3764e" +electron-publish@20.2.0: + version "20.2.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.2.0.tgz#1812738c4a4e14a8e156a9a083424a6e4e8e8264" dependencies: bluebird-lst "^1.0.5" - builder-util "^5.3.0" - builder-util-runtime "^4.0.5" - chalk "^2.3.0" - fs-extra-p "^4.5.0" - mime "^2.2.0" - -electron-publish@20.0.6: - version "20.0.6" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.0.6.tgz#24a3c508428eea31813e064f80468f626dff1d87" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.3.0" + builder-util "^5.6.0" builder-util-runtime "^4.0.5" chalk "^2.3.0" fs-extra-p "^4.5.2" @@ -3374,19 +3351,19 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.28: version "1.3.28" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee" -electron-updater@2.16.1: - version "2.16.1" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.16.1.tgz#29e85589ec31ae817ca05bcaf10358bd66119188" +electron-updater@2.20.1: + version "2.20.1" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.20.1.tgz#3d2714a3e472fbf198f6053daf8fd12209101aa2" dependencies: bluebird-lst "^1.0.5" - builder-util-runtime "~3.1.0" + builder-util-runtime "~4.0.3" electron-is-dev "^0.3.0" - fs-extra-p "^4.4.4" + fs-extra-p "^4.5.0" js-yaml "^3.10.0" - lazy-val "^1.0.2" + lazy-val "^1.0.3" lodash.isequal "^4.5.0" - semver "^5.4.1" - source-map-support "^0.5.0" + semver "^5.5.0" + source-map-support "^0.5.2" electron-window@^0.8.0: version "0.8.1" @@ -3472,17 +3449,22 @@ env-paths@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" -enzyme@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a" +enzyme@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479" dependencies: cheerio "^1.0.0-rc.2" function.prototype.name "^1.0.3" has "^1.0.1" + is-boolean-object "^1.0.0" + is-callable "^1.1.3" + is-number-object "^1.0.3" + is-string "^1.0.4" is-subset "^0.1.1" lodash "^4.17.4" + object-inspect "^1.5.0" object-is "^1.0.1" - object.assign "^4.0.4" + object.assign "^4.1.0" object.entries "^1.0.4" object.values "^1.0.4" raf "^3.4.0" @@ -3541,9 +3523,9 @@ es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: es6-iterator "~2.0.1" es6-symbol "~3.1.1" -es6-error@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98" +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" es6-iterator@^2.0.1, es6-iterator@~2.0.1: version "2.0.3" @@ -3646,9 +3628,9 @@ eslint-import-resolver-node@^0.3.1: debug "^2.6.8" resolve "^1.2.0" -eslint-import-resolver-webpack@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.3.tgz#ad61e28df378a474459d953f246fd43f92675385" +eslint-import-resolver-webpack@0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.4.tgz#0f7cd74bc9d7fc1773e8d5fc25baf864b2f87a42" dependencies: array-find "^1.0.0" debug "^2.6.8" @@ -3658,7 +3640,7 @@ eslint-import-resolver-webpack@0.8.3: interpret "^1.0.0" is-absolute "^0.2.3" lodash.get "^3.7.0" - node-libs-browser "^1.0.0" + node-libs-browser "^1.0.0 || ^2.0.0" resolve "^1.2.0" semver "^5.3.0" @@ -3669,9 +3651,9 @@ eslint-module-utils@^2.1.1: debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-import@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" +eslint-plugin-import@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" @@ -3680,13 +3662,13 @@ eslint-plugin-import@2.8.0: eslint-import-resolver-node "^0.3.1" eslint-module-utils "^2.1.1" has "^1.0.1" - lodash.cond "^4.3.0" + lodash "^4.17.4" minimatch "^3.0.3" read-pkg-up "^2.0.0" -eslint-plugin-jsx-a11y@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.2.tgz#659277a758b036c305a7e4a13057c301cd3be73f" +eslint-plugin-jsx-a11y@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" dependencies: aria-query "^0.7.0" array-includes "^3.0.3" @@ -3694,11 +3676,11 @@ eslint-plugin-jsx-a11y@6.0.2: axobject-query "^0.1.0" damerau-levenshtein "^1.0.0" emoji-regex "^6.1.0" - jsx-ast-utils "^1.4.0" + jsx-ast-utils "^2.0.0" -eslint-plugin-lodash@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-2.5.0.tgz#be23eb0c0b7b15c1fc3a46bf702b4be757446b45" +eslint-plugin-lodash@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-2.6.1.tgz#a56f41d318fecf1ec69aae9851df0d37242ab168" dependencies: lodash "~4.17.0" @@ -3712,46 +3694,50 @@ eslint-plugin-promise@3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75" -eslint-plugin-react@7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" +eslint-plugin-react@7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" dependencies: - doctrine "^2.0.0" + doctrine "^2.0.2" has "^1.0.1" - jsx-ast-utils "^2.0.0" - prop-types "^15.5.10" + jsx-ast-utils "^2.0.1" + prop-types "^15.6.0" eslint-restricted-globals@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" -eslint-scope@^3.7.1: +eslint-scope@^3.7.1, eslint-scope@~3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint@4.11.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.11.0.tgz#39a8c82bc0a3783adf5a39fa27fdd9d36fac9a34" +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + +eslint@4.18.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.1.tgz#b9138440cb1e98b2f44a0d578c6ecf8eae6150b0" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" chalk "^2.1.0" concat-stream "^1.6.0" cross-spawn "^5.1.0" - debug "^3.0.1" - doctrine "^2.0.0" + debug "^3.1.0" + doctrine "^2.1.0" eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" espree "^3.5.2" esquery "^1.0.0" - estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^9.17.0" + globals "^11.0.1" ignore "^3.3.3" imurmurhash "^0.1.4" inquirer "^3.0.6" @@ -3802,7 +3788,7 @@ esrecurse@^4.1.0: estraverse "^4.1.0" object-assign "^4.0.1" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -3973,7 +3959,7 @@ 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" -fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -4037,12 +4023,12 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" +file-loader@1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.10.tgz#77e97dfeab13da64c7085ab3e3887e29ae588aea" dependencies: loader-utils "^1.0.2" - schema-utils "^0.3.0" + schema-utils "^0.4.5" file-type@^3.8.0: version "3.9.0" @@ -4140,9 +4126,9 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -flux-standard-action@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/flux-standard-action/-/flux-standard-action-2.0.0.tgz#f22deb61033eabe86ec27bf204d6d46e973c52c9" +flux-standard-action@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flux-standard-action/-/flux-standard-action-2.0.1.tgz#9e2947f5904edd48f9fab7516ddb8dea6f612075" dependencies: lodash "^4.0.0" @@ -4202,7 +4188,7 @@ formatio@1.1.1: dependencies: samsam "~1.1" -formatio@1.2.0, formatio@^1.2.0: +formatio@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb" dependencies: @@ -4234,13 +4220,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra-p@^4.4.4: - version "4.4.5" - resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.4.5.tgz#90875f2615b53d0085b562e15d579281b9d454c2" - dependencies: - bluebird-lst "^1.0.5" - fs-extra "^4.0.3" - fs-extra-p@^4.5.0, fs-extra-p@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.2.tgz#0a22aba489284d17f375d5dc5139aa777fe2df51" @@ -4273,7 +4252,7 @@ fs-extra@^2.0.0: graceful-fs "^4.1.2" jsonfile "^2.1.0" -fs-extra@^4.0.1, fs-extra@^4.0.2, fs-extra@^4.0.3: +fs-extra@^4.0.1, fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: @@ -4289,9 +4268,9 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@~0.26.2: - version "0.26.7" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" +fs-extra@~0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.27.0.tgz#66d4c25d1d2c6a8dafed7718cfcffe930f13b2c0" dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -4516,17 +4495,6 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@7.1.2, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1, glob@~7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -4562,11 +4530,11 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^10.0.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" +globals@^11.0.1, globals@^11.1.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" -globals@^9.17.0, globals@^9.18.0: +globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -4633,10 +4601,6 @@ growl@1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - gulp-util@^3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" @@ -4725,12 +4689,20 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" dependencies: sparkles "^1.0.0" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + has-unicode@^2.0.0, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -4813,10 +4785,14 @@ hoek@4.x.x: version "4.2.0" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" -hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.3.1: +hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" +hoist-non-react-statics@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -4957,10 +4933,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -5012,9 +4984,9 @@ image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" -immutability-helper@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.5.0.tgz#01ea7204334997c645bdfa7eb22e8b84c970946e" +immutability-helper@2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.6.5.tgz#94a10f18f1196244b2dea92d46522d2b4dce7b73" dependencies: invariant "^2.2.0" @@ -5164,6 +5136,10 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -5270,6 +5246,10 @@ is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" +is-number-object@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -5350,6 +5330,10 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-string@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -5435,7 +5419,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.10.0, js-yaml@^3.4.1, js-yaml@^3.9.1: +js-yaml@^3.10.0, js-yaml@^3.9.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: @@ -5457,6 +5441,10 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -5491,7 +5479,7 @@ json-stringify-safe@~5.0.0, 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" -json3@3.3.2, json3@^3.3.2: +json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -5538,11 +5526,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" - -jsx-ast-utils@^2.0.0: +jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" dependencies: @@ -5596,7 +5580,7 @@ lazy-property@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" -lazy-val@^1.0.2, lazy-val@^1.0.3: +lazy-val@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" @@ -5612,22 +5596,22 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -less-loader@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.5.tgz#ae155a7406cac6acd293d785587fcff0f478c4dd" +less-loader@4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.6.tgz#7bcfbb9053181c18d57e213e87346958e02b2769" dependencies: clone "^2.1.1" loader-utils "^1.1.0" - pify "^2.3.0" + pify "^3.0.0" -less@2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" +less@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/less/-/less-3.0.1.tgz#ba2fea24a5632ccb8c84230d6043c0bf91855e37" optionalDependencies: errno "^0.1.1" graceful-fs "^4.1.2" image-size "~0.5.0" - mime "^1.2.11" + mime "^1.4.1" mkdirp "^0.5.0" promise "^7.1.1" request "2.81.0" @@ -5697,25 +5681,18 @@ lockfile@~1.0.1, lockfile@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" -lodash-es@^4.17.3, lodash-es@^4.2.0, lodash-es@^4.2.1: +lodash-es@^4.17.3, lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" +lodash-es@^4.17.5: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.5.tgz#9fc6e737b1c4d151d8f9cae2247305d552ce748f" lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - lodash._baseget@^3.0.0: version "3.7.2" resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" @@ -5777,18 +5754,6 @@ lodash.clonedeep@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" -lodash.cond@^4.3.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" - -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -5907,20 +5872,34 @@ lodash@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.3.1.tgz#3b914d4a1bb27efcee076e0dfa58152018e2042e" -lodash@4.17.4, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.4, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0, lodash@~4.17.0, lodash@~4.17.4: +lodash@4.17.4, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0, lodash@~4.17.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@4.17.5, lodash@^4.17.5: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + log-symbols@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" dependencies: chalk "^2.0.1" +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + loglevel@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934" +loglevelnext@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.3.tgz#0f69277e73bbbf2cd61b94d82313216bf87ac66e" + lolex@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.1.0.tgz#5dbbbc850395e7523c74b3586f7fbd2626d25b1b" @@ -5943,7 +5922,7 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0" -loud-rejection@^1.0.0: +loud-rejection@^1.0.0, loud-rejection@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" dependencies: @@ -6129,11 +6108,11 @@ mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.2.11, mime@^1.3.4, mime@^1.4.1, mime@^1.5.0: +mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" -mime@^2.2.0: +mime@^2.1.0, mime@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" @@ -6141,6 +6120,10 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" +mimic-response@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -6200,21 +6183,20 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" -mocha@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" +mocha@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.1.tgz#759b62c836b0732382a62b6b1fb245ec1bc943ac" dependencies: browser-stdout "1.3.0" - commander "2.9.0" - debug "2.2.0" - diff "1.4.0" + commander "2.11.0" + debug "3.1.0" + diff "3.3.1" escape-string-regexp "1.0.5" - glob "7.0.5" - growl "1.9.2" - json3 "3.3.2" - lodash.create "3.1.1" + glob "7.1.2" + growl "1.10.3" + he "1.1.1" mkdirp "0.5.1" - supports-color "3.1.2" + supports-color "4.4.0" mocha@^4.0.1: version "4.0.1" @@ -6281,11 +6263,11 @@ mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.2.0, nan@^2.3.0, nan@^2.6.2: +nan@^2.3.0, nan@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" -nan@^2.8.0: +nan@^2.8.0, nan@^2.9.2: version "2.9.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" @@ -6333,6 +6315,12 @@ node-abi@^2.1.1: dependencies: semver "^5.4.1" +node-abi@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986" + dependencies: + semver "^5.4.1" + node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" @@ -6352,7 +6340,7 @@ node-forge@0.6.33: version "0.6.33" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" -node-gyp@^3.5.0, node-gyp@~3.6.0, node-gyp@~3.6.2: +node-gyp@^3.6.2, node-gyp@~3.6.0, node-gyp@~3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" dependencies: @@ -6370,43 +6358,15 @@ node-gyp@^3.5.0, node-gyp@~3.6.0, node-gyp@~3.6.2: tar "^2.0.0" which "1" -node-hid@0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.5.7.tgz#5c87c33e4bcb9db64decf21ba3c7b9d014eac123" +node-hid@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.2.tgz#15025cdea2e9756aca2de7266529996d40e52c56" dependencies: bindings "^1.3.0" nan "^2.6.2" prebuild-install "^2.2.2" -node-libs-browser@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-1.1.1.tgz#2a38243abedd7dffcd07a97c9aca5668975a6fea" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.1.4" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "0.0.1" - os-browserify "^0.2.0" - path-browserify "0.0.0" - process "^0.11.0" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.0.5" - stream-browserify "^2.0.1" - stream-http "^2.3.1" - string_decoder "^0.10.25" - timers-browserify "^1.4.2" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-libs-browser@^2.0.0: +"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" dependencies: @@ -6434,7 +6394,7 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-pre-gyp@^0.6.30, node-pre-gyp@^0.6.36, node-pre-gyp@^0.6.39, node-pre-gyp@~0.6.32: +node-pre-gyp@^0.6.30, node-pre-gyp@^0.6.36, node-pre-gyp@^0.6.39, node-pre-gyp@~0.6.39: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" dependencies: @@ -6460,15 +6420,15 @@ nodegit-promise@~4.0.0: dependencies: asap "~2.0.3" -nodegit@0.20.3: - version "0.20.3" - resolved "https://registry.yarnpkg.com/nodegit/-/nodegit-0.20.3.tgz#a44172db08c833cdcb1ab9bbc2c832ce05898815" +nodegit@0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/nodegit/-/nodegit-0.21.0.tgz#9c81d446fadda73ad8ca4e39ddb2ab7845cfeae9" dependencies: - fs-extra "~0.26.2" + fs-extra "~0.27.0" lodash "^4.13.1" - nan "^2.2.0" - node-gyp "^3.5.0" - node-pre-gyp "~0.6.32" + nan "^2.9.2" + node-gyp "^3.6.2" + node-pre-gyp "~0.6.39" promisify-node "~0.3.0" nomnom@~1.6.2: @@ -6870,6 +6830,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-inspect@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3" + object-invariant-test-helper@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/object-invariant-test-helper/-/object-invariant-test-helper-0.1.1.tgz#4bfbd68f3790ff4570a5e77f8e830613111af008" @@ -6878,7 +6842,7 @@ object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" -object-keys@^1.0.10, object-keys@^1.0.8: +object-keys@^1.0.11, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -6886,13 +6850,14 @@ object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" dependencies: define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" object.entries@^1.0.4: version "1.0.4" @@ -6983,10 +6948,6 @@ original@>=0.0.5: dependencies: url-parse "1.0.x" -os-browserify@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -7073,10 +7034,6 @@ pacote@~2.7.38: unique-filename "^1.1.0" which "^1.2.12" -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -7400,27 +7357,27 @@ postcss-minify-selectors@^2.0.4: postcss "^5.0.14" postcss-selector-parser "^2.0.0" -postcss-modules-extract-imports@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" +postcss-modules-extract-imports@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" dependencies: postcss "^6.0.1" -postcss-modules-local-by-default@^1.0.1: +postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@^1.0.0: +postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-values@^1.1.0: +postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" dependencies: @@ -7543,6 +7500,26 @@ prebuild-install@^2.2.2: tunnel-agent "^0.6.0" xtend "4.0.1" +prebuild-install@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" + dependencies: + detect-libc "^1.0.3" + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.2.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.1.6" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -7577,7 +7554,7 @@ 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" -process@^0.11.0, process@^0.11.10, process@~0.11.0: +process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -7629,7 +7606,15 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@15.6.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0: +prop-types@15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0: version "15.6.0" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: @@ -7679,6 +7664,13 @@ pump@^1.0.0, pump@^1.0.1: end-of-stream "^1.1.0" once "^1.3.1" +pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pumpify@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" @@ -7809,32 +7801,28 @@ react-deep-force-update@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.1.tgz#bcd31478027b64b3339f108921ab520b4313dc2c" -react-deep-force-update@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909" - -react-dom@16.1.1: - version "16.1.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.1.1.tgz#b2e331b6d752faf1a2d31399969399a41d8d45f8" +react-dom@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.0" -react-hot-loader@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.1.3.tgz#6f92877326958c7cb0134b512474517869126082" +react-hot-loader@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.0.0.tgz#3452fa9bc0d0ba9dfc5b0ccfa25101ca8dbd2de2" dependencies: + fast-levenshtein "^2.0.6" global "^4.3.0" - react-deep-force-update "^2.1.1" - react-proxy "^3.0.0-alpha.0" - redbox-react "^1.3.6" - source-map "^0.6.1" + hoist-non-react-statics "^2.5.0" + prop-types "^15.6.0" + shallowequal "^1.0.2" -react-input-autosize@^2.0.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.1.2.tgz#a3dc11a5517c434db25229925541309de3f7a8f5" +react-input-autosize@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8" dependencies: prop-types "^15.5.8" @@ -7845,22 +7833,16 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-proxy@^3.0.0-alpha.0: - version "3.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" - dependencies: - lodash "^4.6.1" - -react-redux@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946" +react-redux@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" dependencies: - hoist-non-react-statics "^2.2.1" + hoist-non-react-statics "^2.5.0" invariant "^2.0.0" - lodash "^4.2.0" - lodash-es "^4.2.0" + lodash "^4.17.5" + lodash-es "^4.17.5" loose-envify "^1.1.0" - prop-types "^15.5.10" + prop-types "^15.6.0" react-router-dom@4.2.2: version "4.2.2" @@ -7873,9 +7855,9 @@ react-router-dom@4.2.2: react-router "^4.2.0" warning "^3.0.0" -react-router-redux@5.0.0-alpha.8: - version "5.0.0-alpha.8" - resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-5.0.0-alpha.8.tgz#5242c705730b2ac862aff7a8e90f870d0cf45e12" +react-router-redux@5.0.0-alpha.9: + version "5.0.0-alpha.9" + resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-5.0.0-alpha.9.tgz#825431516e0e6f1fd93b8807f6bd595e23ec3d10" dependencies: history "^4.7.2" prop-types "^15.6.0" @@ -7893,13 +7875,13 @@ react-router@^4.2.0: prop-types "^15.5.4" warning "^3.0.0" -react-select@1.0.0-rc.10: - version "1.0.0-rc.10" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.0.0-rc.10.tgz#f137346250f9255c979fbfa21860899928772350" +react-select@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.2.1.tgz#a2fe58a569eb14dcaa6543816260b97e538120d1" dependencies: classnames "^2.2.4" prop-types "^15.5.8" - react-input-autosize "^2.0.1" + react-input-autosize "^2.1.2" react-transform-catch-errors@^1.0.2: version "1.0.2" @@ -7912,9 +7894,9 @@ react-transform-hmr@^1.0.3: global "^4.3.0" react-proxy "^1.1.7" -react@16.1.1: - version "16.1.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.1.1.tgz#d5c4ef795507e3012282dd51261ff9c0e824fe1f" +react@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -8104,7 +8086,7 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redbox-react@^1.2.2, redbox-react@^1.3.6: +redbox-react@^1.2.2: version "1.5.0" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.5.0.tgz#04dab11557d26651bf3562a67c22ace56c5d3967" dependencies: @@ -8138,12 +8120,12 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -redux-form@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.1.2.tgz#6b0f25c57fd8130a05ce00f6435fe1b051f402af" +redux-form@7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.2.3.tgz#a01111116f386f3d88451b5528dfbb180561a8b4" dependencies: deep-equal "^1.0.1" - es6-error "^4.0.0" + es6-error "^4.1.1" hoist-non-react-statics "^2.3.1" invariant "^2.2.2" is-promise "^2.1.0" @@ -8151,9 +8133,11 @@ redux-form@7.1.2: lodash-es "^4.17.3" prop-types "^15.5.9" -redux-mock-store@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.3.0.tgz#6edfef0d2332f20576381069d6d889a6d0a4451c" +redux-mock-store@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.1.tgz#fca4335392e66605420b5559fe02fc5b8bb6d63c" + dependencies: + lodash.isplainobject "^4.0.6" redux-thunk@2.2.0: version "2.2.0" @@ -8462,9 +8446,9 @@ rollbar-sourcemap-webpack-plugin@2.2.0: request "^2.72.0" verror "^1.6.1" -rollbar@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-2.3.1.tgz#5583875e8062dc1cb5458ab4b9b98f19a9f9f43e" +rollbar@2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-2.3.9.tgz#46dc6c5531177ae282c8622ad8e930dad9cf2305" dependencies: async "~1.2.1" console-polyfill "0.3.0" @@ -8523,7 +8507,7 @@ salinity@0.0.8: sinon "1.12.2" sinon-chai "2.7.0" -samsam@1.x: +samsam@1.3.0, samsam@1.x: version "1.3.0" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" @@ -8547,6 +8531,13 @@ schema-utils@^0.3.0: dependencies: ajv "^5.0.0" +schema-utils@^0.4.3, schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + seek-bzip@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" @@ -8569,7 +8560,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", semver@5.4.1, "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -8577,14 +8568,14 @@ semver@5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@5.5.0, semver@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - semver@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" @@ -8674,6 +8665,10 @@ sha@~2.0.1: graceful-fs "^4.1.2" readable-stream "^2.0.2" +shallowequal@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.0.2.tgz#1561dbdefb8c01408100319085764da3fcf83f8f" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8684,9 +8679,9 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shelljs@0.7.8: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" +shelljs@0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.1.tgz#729e038c413a2254c4078b95ed46e0397154a9f1" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -8696,6 +8691,10 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + simple-get@^1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb" @@ -8704,6 +8703,14 @@ simple-get@^1.4.2: unzip-response "^1.0.0" xtend "^4.0.0" +simple-get@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.7.0.tgz#ad37f926d08129237ff08c4f2edfd6f10e0380b5" + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + single-line-log@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" @@ -8726,17 +8733,17 @@ sinon@1.12.2: lolex "1.1.0" util ">=0.10.3 <1" -sinon@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.1.2.tgz#65610521d926fb53742dd84cd599f0b89a82f440" +sinon@4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.4.2.tgz#c4c41d4bd346e1d33594daec2d5df0548334fc65" dependencies: + "@sinonjs/formatio" "^2.0.0" diff "^3.1.0" - formatio "1.2.0" lodash.get "^4.4.2" lolex "^2.2.0" nise "^1.2.0" - supports-color "^4.4.0" - type-detect "^4.0.0" + supports-color "^5.1.0" + type-detect "^4.0.5" slash@^1.0.0: version "1.0.0" @@ -8830,9 +8837,9 @@ source-map-resolve@^0.3.0: source-map-url "~0.3.0" urix "~0.1.0" -source-map-support@0.5.0, source-map-support@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab" +source-map-support@0.5.3, source-map-support@^0.5.2, source-map-support@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" dependencies: source-map "^0.6.0" @@ -8842,12 +8849,6 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" - dependencies: - source-map "^0.6.0" - source-map-url@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" @@ -8856,7 +8857,7 @@ source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -8921,12 +8922,12 @@ spdy@^3.4.1: select-hose "^2.0.0" spdy-transport "^2.0.18" -spectron@3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/spectron/-/spectron-3.7.2.tgz#86f41306a9b70ed6ee1500f7f7d3adc389afb446" +spectron@3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/spectron/-/spectron-3.8.0.tgz#122c3562fd7e92b7cdf6f94094aa495b150dfa51" dependencies: dev-null "^0.1.1" - electron-chromedriver "~1.7.1" + electron-chromedriver "~1.8.0" request "^2.81.0" split "^1.0.0" webdriverio "^4.8.0" @@ -9005,7 +9006,7 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" -stream-http@^2.3.1, stream-http@^2.7.2: +stream-http@^2.7.2: version "2.7.2" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" dependencies: @@ -9045,16 +9046,16 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@^0.10.25, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - string_decoder@^1.0.0, string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: safe-buffer "~5.1.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -9107,16 +9108,16 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759" +style-loader@0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.2.tgz#851b373c187890331776e9cde359eea9c95ecd00" dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" + loader-utils "^1.1.0" + schema-utils "^0.4.3" -sudo-prompt@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.0.0.tgz#a7b4a1ca6cbcca0e705b90a89dfc81d11034cba9" +sudo-prompt@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.1.0.tgz#62dce8013b80dd242e5b6ca15d8b8cffb7c85472" sumchecker@^1.2.0: version "1.3.1" @@ -9153,12 +9154,6 @@ superagent@1.2.0: readable-stream "1.0.27-1" reduce-component "1.0.1" -supports-color@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - dependencies: - has-flag "^1.0.0" - supports-color@4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" @@ -9185,6 +9180,12 @@ supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: dependencies: has-flag "^2.0.0" +supports-color@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a" + dependencies: + has-flag "^3.0.0" + supports-color@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a" @@ -9335,12 +9336,6 @@ timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" -timers-browserify@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - dependencies: - process "~0.11.0" - timers-browserify@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" @@ -9439,6 +9434,10 @@ type-detect@^4.0.0: version "4.0.5" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.5.tgz#d70e5bc81db6de2a381bcaca0c6e0cbdc7635de2" +type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" @@ -9588,6 +9587,10 @@ urix@^0.1.0, urix@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" +url-join@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" + url-loader@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" @@ -9674,6 +9677,10 @@ uuid@3.1.0, uuid@^3.0.0, uuid@^3.1.0, uuid@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + uuid@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" @@ -9792,15 +9799,17 @@ webdriverio@^4.8.0: wdio-dot-reporter "~0.0.8" wgxpath "~1.0.0" -webpack-dev-middleware@1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz#d34efefb2edda7e1d3b5dbe07289513219651709" +webpack-dev-middleware@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz#a51692801e8310844ef3e3790e1eacfe52326fd4" dependencies: + loud-rejection "^1.6.0" memory-fs "~0.4.1" - mime "^1.3.4" + mime "^2.1.0" path-is-absolute "^1.0.0" range-parser "^1.0.3" - time-stamp "^2.0.0" + url-join "^2.0.2" + webpack-log "^1.0.1" webpack-dev-middleware@^1.11.0: version "1.12.2" @@ -9844,20 +9853,29 @@ webpack-dev-server@2.9.4: webpack-dev-middleware "^1.11.0" yargs "^6.6.0" -webpack-hot-middleware@2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.20.0.tgz#cb896d837758b6408fe0afeeafdc0e5316b15319" +webpack-hot-middleware@2.21.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52" dependencies: ansi-html "0.0.7" html-entities "^1.2.0" querystring "^0.2.0" strip-ansi "^3.0.0" -webpack-merge@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.1.tgz#f1197a0a973e69c6fbeeb6d658219aa8c0c13555" +webpack-log@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.1.2.tgz#cdc76016537eed24708dc6aa3d1e52189efee107" dependencies: - lodash "^4.17.4" + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-merge@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" + dependencies: + lodash "^4.17.5" webpack-sources@^1.0.1: version "1.1.0" @@ -9924,6 +9942,10 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + which@1, which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" @@ -10024,9 +10046,9 @@ xmlbuilder@8.2.2: version "8.2.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" -xmlbuilder@9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f" +xmlbuilder@9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" xmldom@0.1.x: version "0.1.27" From e6faf9aeb016fad907a22f99219e68c85a4bc1a4 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 28 Feb 2018 11:20:32 +0000 Subject: [PATCH 36/97] switch to CircleCI 2.0 --- .circleci/config.yml | 43 +++++++++++++++++++++++++++++++++++++++++++ circle.yml | 31 ------------------------------- 2 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 circle.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000000..b999ab9279 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,43 @@ +version: 2 +jobs: + build: + working_directory: ~/tidepool-org/chrome-uploader + docker: + - image: circleci/node:8.2.1 + parallelism: 1 + # CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did. + # If any of these refer to each other, rewrite them so that they don't or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables . + environment: + CIRCLE_ARTIFACTS: /tmp/circleci-artifacts + CIRCLE_TEST_REPORTS: /tmp/circleci-test-results + # The `macos` block requests that builds will run on a machine running + # macOS with the specified version of Xcode installed + macos: + xcode: '9.0' + steps: + - checkout + - run: echo 'export PATH=${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin' >> $BASH_ENV + - restore_cache: + key: dependency-cache-{{ checksum "package.json" }} + - run: curl -o- -L https://yarnpkg.com/install.sh | bash + - run: yarn config set cache-folder ~/.cache/yarn + - run: yarn --frozen-lockfile + - save_cache: + key: dependency-cache-{{ checksum "package.json" }} + paths: + - ~/.cache/yarn + - ./node_modules + # Test + - run: yarn lint + - run: yarn test + # Package + - run: yarn package + # Teardown + # Save test results + - store_test_results: + path: /tmp/circleci-test-results + # Save artifacts + - store_artifacts: + path: /tmp/circleci-artifacts + - store_artifacts: + path: /tmp/circleci-test-results diff --git a/circle.yml b/circle.yml deleted file mode 100644 index ab15268532..0000000000 --- a/circle.yml +++ /dev/null @@ -1,31 +0,0 @@ -machine: - environment: - PATH: "${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin" - -dependencies: - pre: - - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash - - nvm install 8.2.1 - - nvm use 8.2.1 - - curl -o- -L https://yarnpkg.com/install.sh | bash - - yarn config set cache-folder ~/.cache/yarn - override: - - yarn --frozen-lockfile - cache_directories: - - ~/.cache/yarn - -test: - override: - - yarn lint - - yarn test - post: -# - yarn package-dev -# - zip -r -X development.zip release -# - rm -rf release - - yarn package -# - zip -r -X production.zip release - -#general: -# artifacts: -# - "development.zip" -# - "production.zip" From b10f05963925e5f01048ba1cf72325044cc19dd9 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 28 Feb 2018 11:29:29 +0000 Subject: [PATCH 37/97] can't use docker for mac build, duh --- .circleci/config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b999ab9279..f324d3ebca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,8 +2,6 @@ version: 2 jobs: build: working_directory: ~/tidepool-org/chrome-uploader - docker: - - image: circleci/node:8.2.1 parallelism: 1 # CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did. # If any of these refer to each other, rewrite them so that they don't or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables . @@ -19,6 +17,9 @@ jobs: - run: echo 'export PATH=${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin' >> $BASH_ENV - restore_cache: key: dependency-cache-{{ checksum "package.json" }} + - run: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash + - run: nvm install 8.2.1 + - run: nvm use 8.2.1 - run: curl -o- -L https://yarnpkg.com/install.sh | bash - run: yarn config set cache-folder ~/.cache/yarn - run: yarn --frozen-lockfile From 989f26c217ee61032e7e7290e4a5b5a4f9c014a7 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 13 Mar 2018 10:27:25 +0000 Subject: [PATCH 38/97] add time check for Abbott Libre --- lib/drivers/abbott/abbottFreeStyleLibre.js | 11 ++++++++++ lib/drivers/abbott/freeStyleLibreProtocol.js | 22 ++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js index 77fc5973f6..cd14ba2566 100644 --- a/lib/drivers/abbott/abbottFreeStyleLibre.js +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -19,6 +19,7 @@ import { clone, assign, forEach, forEachRight, map } from 'lodash'; import async from 'async'; import sundial from 'sundial'; import crypto from 'crypto'; +import common from '../../commonFunctions'; import FreeStyleLibreProtocol from './freeStyleLibreProtocol'; import FreeStyleLibreData from './freeStyleLibreData'; @@ -71,6 +72,16 @@ export default function (config) { progress(0); const getterFunctions = [ + (callback) => { + // First, check device time + protocol.getReaderTime((result) => { + common.checkDeviceTime( + sundial.formatDeviceTime(result.readerTime), + cfg.timezone, + callback, + ); + }); + }, (callback) => { protocol.getSerialNumber(callback); }, (callback) => { protocol.getFirmwareVersion(callback); }, (callback) => { protocol.getDBRecordNumber(callback); }, diff --git a/lib/drivers/abbott/freeStyleLibreProtocol.js b/lib/drivers/abbott/freeStyleLibreProtocol.js index c19decf5b6..2e9f231ca3 100644 --- a/lib/drivers/abbott/freeStyleLibreProtocol.js +++ b/lib/drivers/abbott/freeStyleLibreProtocol.js @@ -132,6 +132,7 @@ */ import async from 'async'; +import sundial from 'sundial'; import structJs from '../../struct'; import { DEVICE_MODEL_NAME, OP_CODE, COMMAND, CRC32_TABLE } from './freeStyleLibreConstants'; @@ -670,6 +671,27 @@ export default class FreeStyleLibreProtocol { }, cb); } + getReaderTime(cb) { + this.requestTextResponse('$rdt?', (data) => { + const arr = data.split(',').map(Number); + arr[0] += 2000; // only two digits provided for year + arr[1] -= 1; // month starts at 0 in JS format + + /* + arr[6] indicates if valid (1) or uncertain (0) + arr[7] contains offset (in seconds) between factory time and user time + */ + const dateTime = new Date(Date.UTC(...arr.slice(0, -2)) + (arr[7] * sundial.SEC_TO_MSEC)); + + if (arr[6] === 0) { + debug('Reader time not valid'); + cb(null); + } else { + cb({ readerTime: dateTime }); + } + }, cb); + } + initCommunication(cb) { const initFunctions = [ (callback) => { this.sendCommand(COMMAND.INIT_REQUEST_1, null, '', callback); }, From d675f766efda1aaeaf764f7cba0649f9ebd3bdc1 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 13 Mar 2018 11:49:58 +0000 Subject: [PATCH 39/97] time check for Verio and Verio Flex --- lib/drivers/onetouch/oneTouchVerio.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/drivers/onetouch/oneTouchVerio.js b/lib/drivers/onetouch/oneTouchVerio.js index a00b535817..becbb418f2 100644 --- a/lib/drivers/onetouch/oneTouchVerio.js +++ b/lib/drivers/onetouch/oneTouchVerio.js @@ -23,6 +23,7 @@ import sundial from 'sundial'; import TZOUtil from '../../TimezoneOffsetUtil'; import annotate from '../../eventAnnotations'; import crc from '../../crc'; +import common from '../../commonFunctions'; // load usb module only on Linux (OSX and Windows use block device access) // eslint-disable-next-line import/no-extraneous-dependencies @@ -494,6 +495,21 @@ class OneTouchVerio { }); } + retrieveRTCData(callback) { + const linkRequestData = Buffer.alloc(USB_BULK_BLOCKSIZE); + const applicationData = Buffer.from([SERVICE_ID, 0x20, 0x02]); + this.constructor.buildLinkLayerFrame(applicationData).copy(linkRequestData); + this.retrieveData(LBA_NUMBER.GENERAL, linkRequestData, (commandData) => { + const timestamp = commandData.readUInt32LE(0); + debug('parseRTCResponse:', timestamp); + if (timestamp) { + callback(this.constructor.getDate(timestamp)); + } else { + callback(null); + } + }); + } + retrieveRecordCount(callback) { const linkRequestData = Buffer.alloc(USB_BULK_BLOCKSIZE); const applicationData = Buffer.from([SERVICE_ID, 0x27, 0x00]); @@ -645,7 +661,12 @@ export default function (config) { } assign(data.deviceInfo, deviceModel); progress(100); - cb(null, data); + + driver.retrieveRTCData((rtcTime) => { + common.checkDeviceTime(sundial.formatDeviceTime(rtcTime), cfg.timezone, (timeErr) => { + cb(timeErr, data); + }); + }); }); }); }, From e7be6c10970f2560d10b2bcec9aff2aa7c9cd42c Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 13 Mar 2018 12:00:25 +0000 Subject: [PATCH 40/97] update checklists for libre and verio drivers --- docs/checklists/abbottFreeStyleLibre.md | 2 ++ docs/checklists/oneTouchVerio.md | 1 + 2 files changed, 3 insertions(+) diff --git a/docs/checklists/abbottFreeStyleLibre.md b/docs/checklists/abbottFreeStyleLibre.md index 65da87d8a8..cb047aed8b 100644 --- a/docs/checklists/abbottFreeStyleLibre.md +++ b/docs/checklists/abbottFreeStyleLibre.md @@ -85,6 +85,7 @@ Device-specific? (Add any device-specific notes/additions here.) - `[x]` internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR - `[ ]` ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time - `[x]` date & time settings changes + - `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) @@ -122,6 +123,7 @@ Choose one of the following: - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[x]` ketone out-of-range values - `[x]` ketone out-of-range value thresholds +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time Device-specific? (Add any device-specific notes/additions here.) - internal glucose unit is always mg/dL for this device, independent of display unit diff --git a/docs/checklists/oneTouchVerio.md b/docs/checklists/oneTouchVerio.md index d73e2ae3a5..0c7ea1e1e1 100644 --- a/docs/checklists/oneTouchVerio.md +++ b/docs/checklists/oneTouchVerio.md @@ -21,6 +21,7 @@ - `[ ]` units of blood ketone values (read from device, not hard-coded) - `[ ]` ketone out-of-range values - `[ ]` ketone out-of-range value thresholds +- `[x]` use `common.checkDeviceTime(currentDeviceTime, timezone, cb)` to check against server time ## Notes - Display units of smbg values are available in data protocol, but always reported in mg/dL From f3054402ba91d17095d3b856ae52178e4b5b4e54 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 28 Feb 2018 11:36:35 +0000 Subject: [PATCH 41/97] trying to fix loading nvm in circleci --- .circleci/bash_env.sh | 2 ++ .circleci/config.yml | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 .circleci/bash_env.sh diff --git a/.circleci/bash_env.sh b/.circleci/bash_env.sh new file mode 100644 index 0000000000..3c052eb798 --- /dev/null +++ b/.circleci/bash_env.sh @@ -0,0 +1,2 @@ +# nvm +source ~/.nvm/nvm.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index f324d3ebca..d98a317a33 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -8,6 +8,7 @@ jobs: environment: CIRCLE_ARTIFACTS: /tmp/circleci-artifacts CIRCLE_TEST_REPORTS: /tmp/circleci-test-results + BASH_ENV: ".circleci/bash_env.sh" # The `macos` block requests that builds will run on a machine running # macOS with the specified version of Xcode installed macos: @@ -17,9 +18,10 @@ jobs: - run: echo 'export PATH=${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin' >> $BASH_ENV - restore_cache: key: dependency-cache-{{ checksum "package.json" }} - - run: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash + - run: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash - run: nvm install 8.2.1 - - run: nvm use 8.2.1 + - run: nvm use v8.2.1 + - run: node -v - run: curl -o- -L https://yarnpkg.com/install.sh | bash - run: yarn config set cache-folder ~/.cache/yarn - run: yarn --frozen-lockfile From ae9fffd06fbaee3184beaf80605aadaea4cec77b Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 28 Feb 2018 15:00:05 +0000 Subject: [PATCH 42/97] fixing up CircleCI build --- .circleci/config.yml | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d98a317a33..cc686ec917 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,11 +6,7 @@ jobs: # CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did. # If any of these refer to each other, rewrite them so that they don't or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables . environment: - CIRCLE_ARTIFACTS: /tmp/circleci-artifacts - CIRCLE_TEST_REPORTS: /tmp/circleci-test-results BASH_ENV: ".circleci/bash_env.sh" - # The `macos` block requests that builds will run on a machine running - # macOS with the specified version of Xcode installed macos: xcode: '9.0' steps: @@ -18,9 +14,14 @@ jobs: - run: echo 'export PATH=${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin' >> $BASH_ENV - restore_cache: key: dependency-cache-{{ checksum "package.json" }} - - run: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash - - run: nvm install 8.2.1 - - run: nvm use v8.2.1 + - run: + name: Install nvm and node + command: | + set +e + curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash + source ~/.nvm/nvm.sh + nvm install v8.2.1 + nvm alias default v8.2.1 - run: node -v - run: curl -o- -L https://yarnpkg.com/install.sh | bash - run: yarn config set cache-folder ~/.cache/yarn @@ -35,12 +36,3 @@ jobs: - run: yarn test # Package - run: yarn package - # Teardown - # Save test results - - store_test_results: - path: /tmp/circleci-test-results - # Save artifacts - - store_artifacts: - path: /tmp/circleci-artifacts - - store_artifacts: - path: /tmp/circleci-test-results From aa19c9d9355c3b68093ec338c5948767894309f5 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Fri, 16 Mar 2018 13:25:10 -0400 Subject: [PATCH 43/97] time check dialog handling --- app/actions/async.js | 1 + app/actions/sync.js | 25 +++ app/actions/utils.js | 9 + app/components/DeviceTimeModal.js | 190 ++++++++++++++++++ app/constants/actionSources.js | 4 + app/constants/actionTypes.js | 4 + app/containers/App.js | 2 + app/reducers/misc.js | 12 ++ app/reducers/uploads.js | 41 ++++ lib/commonFunctions.js | 7 +- lib/core/device.js | 2 + lib/driverManager.js | 1 - lib/drivers/abbott/abbottFreeStyleLibre.js | 5 +- lib/drivers/abbott/abbottFreeStyleLite.js | 5 +- lib/drivers/abbott/abbottPrecisionXtra.js | 5 +- lib/drivers/animas/animasDriver.js | 5 +- lib/drivers/bayer/bayerContourNext.js | 5 +- lib/drivers/dexcom/dexcomDriver.js | 5 +- lib/drivers/insulet/insuletDriver.js | 6 +- lib/drivers/medtronic/medtronicDriver.js | 6 +- lib/drivers/onetouch/oneTouchUltra2.js | 5 +- lib/drivers/onetouch/oneTouchUltraMini.js | 5 +- lib/drivers/onetouch/oneTouchVerio.js | 5 +- lib/drivers/onetouch/oneTouchVerioIQ.js | 8 +- lib/drivers/tandem/tandemDriver.js | 5 +- styles/components/DeviceTimeModal.module.less | 85 ++++++++ test/app/actions/async.test.js | 82 ++++++++ test/app/actions/sync.test.js | 60 ++++++ test/app/reducers/misc.test.js | 20 ++ test/app/reducers/uploads.test.js | 50 +++++ 30 files changed, 633 insertions(+), 32 deletions(-) create mode 100644 app/components/DeviceTimeModal.js create mode 100644 styles/components/DeviceTimeModal.module.less diff --git a/app/actions/async.js b/app/actions/async.js index e83fd8e93c..5e2dddff98 100644 --- a/app/actions/async.js +++ b/app/actions/async.js @@ -234,6 +234,7 @@ export function doDeviceUpload(driverId, opts = {}, utc) { targetId: uploadTargetUser, timezone: targetTimezones[uploadTargetUser], progress: actionUtils.makeProgressFn(dispatch), + dialogDisplay: actionUtils.makeDisplayModal(dispatch), version: version }); const { uploadsByUser } = getState(); diff --git a/app/actions/sync.js b/app/actions/sync.js index 2beafc9da5..fe094ea00d 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -461,6 +461,16 @@ export function uploadFailure(err, errProps, device) { }; } +export function uploadCancelled(utc) { + return { + type: actionTypes.UPLOAD_CANCELLED, + payload: { utc }, + meta: { + source: actionSources[actionTypes.UPLOAD_CANCELLED] + } + }; +} + export function deviceDetectRequest() { return { type: actionTypes.DEVICE_DETECT_REQUEST, @@ -764,3 +774,18 @@ export function driverUpdateShellOpts(opts) { meta: {source: actionSources[actionTypes.DRIVER_INSTALL_SHELL_OPTS] } }; } + +export function deviceTimeIncorrect(callback, cfg, times) { + return { + type: actionTypes.DEVICE_TIME_INCORRECT, + payload: { callback, cfg, times }, + meta: { source: actionSources[actionTypes.DEVICE_TIME_INCORRECT] } + }; +} + +export function dismissedDeviceTimePromp() { + return { + type: actionTypes.DISMISS_DEVICE_TIME_PROMPT, + meta: { source: actionSources[actionTypes.DISMISS_DEVICE_TIME_PROMPT] } + }; +} \ No newline at end of file diff --git a/app/actions/utils.js b/app/actions/utils.js index 26073f8f93..d03d276964 100644 --- a/app/actions/utils.js +++ b/app/actions/utils.js @@ -50,11 +50,20 @@ export function makeProgressFn(dispatch) { }; } +export function makeDisplayModal(dispatch) { + return (cb, cfg, times) => { + dispatch(syncActions.deviceTimeIncorrect(cb, cfg, times)); + }; +} + export function makeUploadCb(dispatch, getState, errCode, utc) { return (err, recs) => { const { devices, uploadsByUser, uploadTargetDevice, uploadTargetUser, version } = getState(); const targetDevice = devices[uploadTargetDevice]; if (err) { + if(err === 'deviceTimePromptClose'){ + return dispatch(syncActions.uploadCancelled(getUtc(utc))); + } // the drivers sometimes just pass a string arg as err, instead of an actual error :/ if (typeof err === 'string') { err = new Error(err); diff --git a/app/components/DeviceTimeModal.js b/app/components/DeviceTimeModal.js new file mode 100644 index 0000000000..5ebb7669ad --- /dev/null +++ b/app/components/DeviceTimeModal.js @@ -0,0 +1,190 @@ +/* +* == BSD2 LICENSE == +* Copyright (c) 2014-2016, Tidepool Project +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the associated License, which is identical to the BSD 2-Clause +* License as published by the Open Source Initiative at opensource.org. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +* FOR A PARTICULAR PURPOSE. See the License for more details. +* +* You should have received a copy of the License along with this program; if +* not, you can obtain one from Tidepool Project at tidepool.org. +* == BSD2 LICENSE == +*/ + +import _ from 'lodash'; +import React, { Component } from 'react'; +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; +import sundial from 'sundial'; + +import { sync as syncActions } from '../actions/'; + +import styles from '../../styles/components/DeviceTimeModal.module.less'; +import { showingDeviceTimePrompt } from '../reducers/misc'; + +export class DeviceTimeModal extends Component { + determineDeviceType = () => { + const { showingDeviceTimePrompt } = this.props; + const { deviceTags } = showingDeviceTimePrompt.cfg; + if(_.indexOf(deviceTags, 'insulin-pump') !== -1){ + return 'insulin-pump'; + } + if(_.indexOf(deviceTags, 'cgm') !== -1){ + return 'cgm'; + } + if(_.indexOf(deviceTags, 'bgm') !== -1){ + return 'bgm'; + } + return 'unknown'; + } + + handleContinue = () => { + const { sync, showingDeviceTimePrompt } = this.props; + showingDeviceTimePrompt.callback(null); + sync.dismissedDeviceTimePromp(); + } + + handleCancel = () => { + const { sync, showingDeviceTimePrompt } = this.props; + showingDeviceTimePrompt.callback('deviceTimePromptClose'); + sync.dismissedDeviceTimePromp(); + } + + getActions = () => { + return [ + , + + ]; + } + + getMessage = () => { + const type = this.determineDeviceType(); + let message; + switch (type) { + case 'insulin-pump': + message = ( +
+
+ Is your pump time set correctly? If not: +
+
1. Update the time on your pump
+
2. Suspend your pump
+
3. Resume your pump
+
4. Try uploading again
+
+
+ ); + break; + case 'cgm': + message = ( +
+
+ Is your CGM time set correctly? If not: +
+
1. Update the time and date on your CGM
+
2. Wait 5 minutes for a new reading to appear
+
3. Try uploading again
+
+
+ ); + break; + case 'bgm': + message = ( +
+
+ Is your meter time set correctly? If not: +
+
1. Update the time and date on your meter
+
2. Test your blood glucose again
+
3. Try uploading again
+
+
+ ); + break; + default: + break; + } + return message; + } + + getTitle = () => { + const type = this.determineDeviceType(); + let title; + switch (type) { + case 'insulin-pump': + title = 'Your pump doesn\'t appear to be in'; + break; + case 'cgm': + title = 'Your CGM doesn\'t appear to be in'; + break; + case 'bgm': + title = 'Your meter doesn\'t appear to be in'; + break; + default: + break; + } + return title; + } + + render() { + const { showingDeviceTimePrompt, sync } = this.props; + + if(!showingDeviceTimePrompt){ + return null; + } + + const { showingDeviceTimePrompt: { cfg: { timezone }, times: { serverTime, deviceTime } } } = this.props; + + const title = this.getTitle(); + const message = this.getMessage(); + const actions = this.getActions(); + + return ( +
+
+
+
{title}
+
{`${timezone}:`}
+
+
+
+
+
{timezone}:
+
{sundial.formatInTimezone(serverTime, timezone, 'h:mm a')}
+
+
+
Device time:
+
{sundial.formatInTimezone(deviceTime, timezone, 'h:mm a')}
+
+
+
+ {message} +
+ {actions} +
+
+
+ ); + } +}; + +export default connect( + (state, ownProps) => { + return { + showingDeviceTimePrompt: state.showingDeviceTimePrompt + }; + }, + (dispatch) => { + return { + sync: bindActionCreators(syncActions, dispatch) + }; + } +)(DeviceTimeModal); diff --git a/app/constants/actionSources.js b/app/constants/actionSources.js index 85319d09e5..36182363b8 100644 --- a/app/constants/actionSources.js +++ b/app/constants/actionSources.js @@ -77,6 +77,7 @@ export const UPLOAD_PROGRESS = USER_VISIBLE; export const UPLOAD_SUCCESS = USER_VISIBLE; export const UPLOAD_FAILURE = USER_VISIBLE; export const UPLOAD_ABORTED = USER_VISIBLE; +export const UPLOAD_CANCELLED = USER_VISIBLE; export const CARELINK_FETCH_REQUEST = USER; export const CARELINK_FETCH_SUCCESS = USER_VISIBLE; @@ -90,6 +91,9 @@ export const DEVICE_DETECT_REQUEST = UNDER_THE_HOOD; export const DEVICE_DETECT_FAILURE = USER_VISIBLE; export const DEVICE_DETECT_SUCCESS = UNDER_THE_HOOD; +export const DEVICE_TIME_INCORRECT = USER_VISIBLE; +export const DISMISS_DEVICE_TIME_PROMPT = USER_VISIBLE; + export const READ_FILE_REQUEST = USER; export const READ_FILE_SUCCESS = USER_VISIBLE; export const READ_FILE_FAILURE = USER_VISIBLE; diff --git a/app/constants/actionTypes.js b/app/constants/actionTypes.js index 6a9b97373a..532c8ad4fd 100644 --- a/app/constants/actionTypes.js +++ b/app/constants/actionTypes.js @@ -72,6 +72,7 @@ export const UPLOAD_PROGRESS = 'UPLOAD_PROGRESS'; export const UPLOAD_SUCCESS = 'UPLOAD_SUCCESS'; export const UPLOAD_FAILURE = 'UPLOAD_FAILURE'; export const UPLOAD_ABORTED = 'UPLOAD_ABORTED'; +export const UPLOAD_CANCELLED = 'UPLOAD_CANCELLED'; export const CARELINK_FETCH_REQUEST = 'CARELINK_FETCH_REQUEST'; export const CARELINK_FETCH_SUCCESS = 'CARELINK_FETCH_SUCCESS'; @@ -127,3 +128,6 @@ export const DRIVER_UPDATE_NOT_AVAILABLE = 'DRIVER_UPDATE_NOT_AVAILABLE'; export const DISMISS_DRIVER_UPDATE_AVAILABLE = 'DISMISS_DRIVER_UPDATE_AVAILABLE'; export const DRIVER_INSTALL = 'DRIVER_INSTALL'; export const DRIVER_INSTALL_SHELL_OPTS = 'DRIVER_INSTALL_SHELL_OPTS'; + +export const DEVICE_TIME_INCORRECT = 'DEVICE_TIME_INCORRECT'; +export const DISMISS_DEVICE_TIME_PROMPT = 'DISMISS_DEVICE_TIME_PROMPT'; diff --git a/app/containers/App.js b/app/containers/App.js index 10d991c828..8ff94ef1a6 100644 --- a/app/containers/App.js +++ b/app/containers/App.js @@ -56,6 +56,7 @@ import Footer from '../components/Footer'; import Header from '../components/Header'; import UpdateModal from '../components/UpdateModal'; import UpdateDriverModal from '../components/UpdateDriverModal'; +import DeviceTimeModal from '../components/DeviceTimeModal'; import styles from '../../styles/components/App.module.less'; @@ -147,6 +148,7 @@ export class App extends Component { {this.renderVersionCheck()} + ); } diff --git a/app/reducers/misc.js b/app/reducers/misc.js index e9e72a55f9..b06ec00ab4 100644 --- a/app/reducers/misc.js +++ b/app/reducers/misc.js @@ -146,6 +146,7 @@ function uploading(state = false, action) { case actionTypes.READ_FILE_FAILURE: case actionTypes.UPLOAD_FAILURE: case actionTypes.UPLOAD_SUCCESS: + case actionTypes.UPLOAD_CANCELLED: return false; default: return state; @@ -272,3 +273,14 @@ export function driverUpdateComplete(state = null, action) { return state; } } + +export function showingDeviceTimePrompt(state = null, action) { + switch (action.type) { + case actionTypes.DEVICE_TIME_INCORRECT: + return { callback: action.payload.callback, cfg: action.payload.cfg, times: action.payload.times }; + case actionTypes.DISMISS_DEVICE_TIME_PROMPT: + return false; + default: + return state; + } +} diff --git a/app/reducers/uploads.js b/app/reducers/uploads.js index b0ca7e7e2e..9dd3060b9c 100644 --- a/app/reducers/uploads.js +++ b/app/reducers/uploads.js @@ -39,6 +39,7 @@ export function uploadProgress(state = null, action) { }; case actionTypes.UPLOAD_FAILURE: case actionTypes.UPLOAD_SUCCESS: + case actionTypes.UPLOAD_CANCELLED: return null; case actionTypes.UPLOAD_PROGRESS: return Object.assign({}, state, action.payload); @@ -285,6 +286,46 @@ export function uploadsByUser(state = {}, action) { {[userId]: {[deviceKey]: {showErrorDetails: {$set: isVisible}}}} ); } + case actionTypes.UPLOAD_CANCELLED: { + const { utc } = action.payload; + let uploadTargetUser, uploadTargetDevice; + _.forOwn(state, (uploads, userId) => { + _.forOwn(uploads, (upload, deviceKey) => { + if (upload.uploading === true) { + uploadTargetUser = userId; + uploadTargetDevice = deviceKey; + } + }); + }); + if (uploadTargetUser && uploadTargetDevice) { + let newState = state; + let devicesForCurrentUser = _.get(state, [uploadTargetUser], {}); + _.forOwn(devicesForCurrentUser, (upload, key) => { + newState = update( + newState, + {[uploadTargetUser]: {[key]: {$apply: (upload) => { + if (key === uploadTargetDevice) { + return update( + upload, + { + completed: {$set: true}, + failed: {$set: false}, + history: {[0]: { + finish: {$set: utc} + }}, + uploading: {$set: false} + } + ); + } + else { + return _.omit(upload, 'disabled'); + } + }}}} + ); + }); + return newState; + } + } case actionTypes.UPLOAD_FAILURE: { const err = action.payload; let uploadTargetUser, uploadTargetDevice; diff --git a/lib/commonFunctions.js b/lib/commonFunctions.js index 032d4b397d..4b19fd7ace 100644 --- a/lib/commonFunctions.js +++ b/lib/commonFunctions.js @@ -121,7 +121,8 @@ exports.finalScheduledBasal = function(currBasal, settings, source) { return currBasal; }; -exports.checkDeviceTime = function (currentDeviceTime, timezone, cb) { +exports.checkDeviceTime = function (currentDeviceTime, cfg, cb) { + var { timezone, dialogDisplay } = cfg; api.getTime(function (err, result) { if (err) { return cb(err); @@ -136,8 +137,8 @@ exports.checkDeviceTime = function (currentDeviceTime, timezone, cb) { var FIFTEEN_MINUTES = 15 * 60 * 1000; if ( Math.abs(serverTime.valueOf()-deviceTime.valueOf()) > FIFTEEN_MINUTES ) { - // TODO: pop up a message - console.log('Difference larger than 15 minutes'); + dialogDisplay(cb, cfg, {serverTime, deviceTime}); + return; } } else { debug('Current device time not provided by driver.'); diff --git a/lib/core/device.js b/lib/core/device.js index 9c15f63855..1e3f322741 100644 --- a/lib/core/device.js +++ b/lib/core/device.js @@ -266,6 +266,7 @@ device._createDriverConfig = function(driverId, options) { version: options.version, builder: builder, progress: options.progress, + dialogDisplay: options.dialogDisplay, silent: Boolean(options.silent) }; } @@ -285,6 +286,7 @@ device._createDriverConfig = function(driverId, options) { version: options.version, builder: builder, progress: options.progress, + dialogDisplay: options.dialogDisplay, silent: Boolean(options.silent) }; }; diff --git a/lib/driverManager.js b/lib/driverManager.js index c2615a805a..e634af0e74 100644 --- a/lib/driverManager.js +++ b/lib/driverManager.js @@ -73,7 +73,6 @@ module.exports = function (driverObjects, configs) { async.waterfall([ drvr.setup.bind(drvr, deviceInfo, noop), drvr.connect.bind(drvr, noop), - drvr.getConfigInfo.bind(drvr, noop), drvr.disconnect.bind(drvr, noop) ], function(err, result) { result = result || {}; diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js index cd14ba2566..5f1c9a3f2c 100644 --- a/lib/drivers/abbott/abbottFreeStyleLibre.js +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -38,6 +38,7 @@ const debug = isBrowser ? require('bows')('FreeStyleLibreDriver') : console.log; export default function (config) { const cfg = clone(config); + cfg.deviceTags = ['bgm', 'cgm']; const hidDevice = config.deviceComms; const protocol = new FreeStyleLibreProtocol(cfg); const dataParser = new FreeStyleLibreData(cfg); @@ -77,7 +78,7 @@ export default function (config) { protocol.getReaderTime((result) => { common.checkDeviceTime( sundial.formatDeviceTime(result.readerTime), - cfg.timezone, + cfg, callback, ); }); @@ -229,7 +230,7 @@ export default function (config) { progress(0); const sessionInfo = { - deviceTags: ['bgm', 'cgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Abbott'], deviceModel: DEVICE_MODEL_NAME, deviceSerialNumber: data.deviceInfo.serialNumber, diff --git a/lib/drivers/abbott/abbottFreeStyleLite.js b/lib/drivers/abbott/abbottFreeStyleLite.js index 408a51642d..1800fb52e8 100644 --- a/lib/drivers/abbott/abbottFreeStyleLite.js +++ b/lib/drivers/abbott/abbottFreeStyleLite.js @@ -34,6 +34,7 @@ module.exports = function (config) { // With no date & time settings changes available, // timezone is applied across-the-board cfg.tzoUtil = new TZOUtil(cfg.timezone, new Date().toISOString(), []); + cfg.deviceTags = ['bgm']; var STX = 0x02; var ETX = 0x03; @@ -450,7 +451,7 @@ module.exports = function (config) { data.logEntries = result.logEntries; data.numEntries = result.numEntries; - common.checkDeviceTime(data.deviceTime, cfg.timezone, function(checkErr) { + common.checkDeviceTime(data.deviceTime, cfg, function(checkErr) { cb(checkErr, data); }); }); @@ -472,7 +473,7 @@ module.exports = function (config) { progress(0); var sessionInfo = { - deviceTags: ['bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Abbott'], deviceModel: data.model, deviceSerialNumber: data.serialNumber, diff --git a/lib/drivers/abbott/abbottPrecisionXtra.js b/lib/drivers/abbott/abbottPrecisionXtra.js index 7408752ed0..a4c7c2eff4 100644 --- a/lib/drivers/abbott/abbottPrecisionXtra.js +++ b/lib/drivers/abbott/abbottPrecisionXtra.js @@ -31,6 +31,7 @@ module.exports = function (config) { // initialized with current date and no date & time settings changes // means we'll just apply the timezone across-the-board cfg.tzoUtil = new TZOUtil(cfg.timezone, new Date().toISOString(), []); + cfg.deviceTags = ['bgm']; var STX = 0x02; var ETX = 0x03; @@ -516,7 +517,7 @@ module.exports = function (config) { _.assign(data, _.pick(result, 'logEntries', 'numEntries', 'serialNumber', 'softwareVersion', 'deviceTime')); data.model = 'AbbFreePrecXtra'; data.id = data.model + ' ' + data.serialNumber; - common.checkDeviceTime(data.deviceTime, cfg.timezone, function(checkErr) { + common.checkDeviceTime(data.deviceTime, cfg, function(checkErr) { cb(checkErr, data); }); }); @@ -537,7 +538,7 @@ module.exports = function (config) { uploadData: function (progress, data, cb) { progress(0); var sessionInfo = { - deviceTags: ['bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Abbott'], deviceModel: 'Precision Xtra', deviceSerialNumber: data.serialNumber, diff --git a/lib/drivers/animas/animasDriver.js b/lib/drivers/animas/animasDriver.js index 3de3f7cb2a..c4b19572b4 100644 --- a/lib/drivers/animas/animasDriver.js +++ b/lib/drivers/animas/animasDriver.js @@ -2110,7 +2110,7 @@ module.exports = function (config) { // the device has to be suspended just before uploading, // so the most recent suspend event is the closest what we // have to a current device time :/ - common.checkDeviceTime(data[0].suspendDeviceTime, cfg.timezone, function(err) { + common.checkDeviceTime(data[0].suspendDeviceTime, cfg, function(err) { return callback(err, data); }); }); @@ -2186,6 +2186,7 @@ module.exports = function (config) { var changes = []; var tzoUtil = new TZOUtil(cfg.timezone, mostRecent, changes); cfg.tzoUtil = tzoUtil; + cfg.deviceTags = ['insulin-pump']; var postrecords = []; postrecords = buildBolusRecords(data, postrecords); @@ -2346,7 +2347,7 @@ module.exports = function (config) { progress(0); var sessionInfo = { - deviceTags: ['insulin-pump'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Animas'], deviceModel: data.settings.modelNumber, deviceSerialNumber: data.settings.serialNumber, diff --git a/lib/drivers/bayer/bayerContourNext.js b/lib/drivers/bayer/bayerContourNext.js index 16046c7a0b..9346c0e1a6 100644 --- a/lib/drivers/bayer/bayerContourNext.js +++ b/lib/drivers/bayer/bayerContourNext.js @@ -42,6 +42,7 @@ module.exports = function (config) { // With no date & time settings changes available, // timezone is applied across-the-board cfg.tzoUtil = new TZOUtil(cfg.timezone, new Date().toISOString(), []); + cfg.deviceTags = ['bgm']; /* end */ @@ -533,7 +534,7 @@ module.exports = function (config) { progress(100); if (!err){ - common.checkDeviceTime(result.deviceTime, cfg.timezone, function(err2) { + common.checkDeviceTime(result.deviceTime, cfg, function(err2) { data.connect = true; _.assign(data, result); cb(err2, data); @@ -622,7 +623,7 @@ module.exports = function (config) { progress(0); var sessionInfo = { - deviceTags: ['bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Bayer'], deviceModel: model, deviceSerialNumber: data.serialNumber, diff --git a/lib/drivers/dexcom/dexcomDriver.js b/lib/drivers/dexcom/dexcomDriver.js index bebf8b6bbc..817ee0a417 100644 --- a/lib/drivers/dexcom/dexcomDriver.js +++ b/lib/drivers/dexcom/dexcomDriver.js @@ -40,6 +40,7 @@ module.exports = function (config) { if (config.silent) { // debug = _.noop; } + cfg.deviceTags = ['cgm']; var SYNC_BYTE = 0x01; @@ -1022,7 +1023,7 @@ module.exports = function (config) { cb(systemErr, systemTimeObj); } else { var displayTime = new Date(BASE_DATE_DEVICE + 1000 * (systemTimeObj.parsed_payload + displayTimeOffsetObj.parsed_payload)); - common.checkDeviceTime(displayTime, cfg.timezone, function(err) { + common.checkDeviceTime(displayTime, cfg, function(err) { progress(100); data.getConfigInfo = true; cb(err, data); @@ -1093,7 +1094,7 @@ module.exports = function (config) { debug('STEP: uploadData'); progress(0); var sessionInfo = { - deviceTags: ['cgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Dexcom'], deviceModel: data.model, deviceSerialNumber: data.serialNumber, diff --git a/lib/drivers/insulet/insuletDriver.js b/lib/drivers/insulet/insuletDriver.js index 188f7784fc..d7e2c34a49 100644 --- a/lib/drivers/insulet/insuletDriver.js +++ b/lib/drivers/insulet/insuletDriver.js @@ -39,6 +39,8 @@ module.exports = function (config) { var BG_UNITS = 'mg/dL'; + cfg.deviceTags = ['insulin-pump', 'bgm']; + // all insulin unit readings are in .01 unit increments, so we divide by 100.0 to get units // (multiplying by 0.01 tends to cause floating point issues) var toUnits = function (x) { @@ -1547,7 +1549,7 @@ module.exports = function (config) { offset += data.logDescriptions.packetlen; data.independent_offset = offset; - commonFunctions.checkDeviceTime(data.logDescriptions.deviceTime, cfg.timezone, function(err) { + commonFunctions.checkDeviceTime(data.logDescriptions.deviceTime, cfg, function(err) { progress(100); return cb(err, data); }); @@ -1670,7 +1672,7 @@ module.exports = function (config) { simulator.finalBasal(); var sessionInfo = { - deviceTags: ['insulin-pump', 'bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Insulet', 'Abbott'], deviceModel: data.ibf_version.productid, deviceSerialNumber: String(data.eeprom_settings.REMOTE_ID), diff --git a/lib/drivers/medtronic/medtronicDriver.js b/lib/drivers/medtronic/medtronicDriver.js index 9b786e8b97..5378d6c2c0 100644 --- a/lib/drivers/medtronic/medtronicDriver.js +++ b/lib/drivers/medtronic/medtronicDriver.js @@ -43,6 +43,8 @@ module.exports = function (config) { var waitingOnPacket = false; var rawPacket = []; + cfg.deviceTags = ['insulin-pump']; + // Metronic's Bayer Contour Next Link implementation uses polynomial 0x9b for its CRC crcCalculator.crc8_init(0x9b); @@ -1228,7 +1230,7 @@ module.exports = function (config) { data.cbg = _.pick(results.current_cbg_page, ['currentPage','glucosePage', 'isigPage']); data.batteryStatus = _.pick(results.battery_status, ['status','voltage']); console.timeEnd('getConfigInfo elapsed'); - common.checkDeviceTime(settings.currentDeviceTime, cfg.timezone, function(err) { + common.checkDeviceTime(settings.currentDeviceTime, cfg, function(err) { return cb(err, data); }); } else { @@ -1604,7 +1606,7 @@ module.exports = function (config) { var sessionInfo = { delta: cfg.delta, - deviceTags: ['insulin-pump'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Medtronic'], deviceModel: data.settings.modelNumber, deviceSerialNumber: serial, diff --git a/lib/drivers/onetouch/oneTouchUltra2.js b/lib/drivers/onetouch/oneTouchUltra2.js index 999f728583..bad3647c99 100644 --- a/lib/drivers/onetouch/oneTouchUltra2.js +++ b/lib/drivers/onetouch/oneTouchUltra2.js @@ -45,6 +45,7 @@ module.exports = function (config) { // With no date & time settings changes available, // timezone is applied across-the-board cfg.tzoUtil = new TZOUtil(cfg.timezone, new Date().toISOString(), []); + cfg.deviceTags = ['bgm']; //BYTE START DEFINITION HEX var DM = '\x11\x0d'; @@ -321,7 +322,7 @@ module.exports = function (config) { var currentDeviceTime = sundial.formatDeviceTime(buildDateTime(toMatch[2], toMatch[3])); debug('Device date/time:', currentDeviceTime); - common.checkDeviceTime(currentDeviceTime, cfg.timezone, function(err) { + common.checkDeviceTime(currentDeviceTime, cfg, function(err) { progress(100); return cb(err, data); }); @@ -359,7 +360,7 @@ module.exports = function (config) { progress(0); var sessionInfo = { - deviceTags: ['bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['LifeScan'], deviceModel: 'OneTouch Ultra 2', deviceSerialNumber: data.serialNumber, diff --git a/lib/drivers/onetouch/oneTouchUltraMini.js b/lib/drivers/onetouch/oneTouchUltraMini.js index 0219c5aaaa..af096b82df 100644 --- a/lib/drivers/onetouch/oneTouchUltraMini.js +++ b/lib/drivers/onetouch/oneTouchUltraMini.js @@ -35,6 +35,7 @@ module.exports = function (config) { // With no date & time settings changes available, // timezone is applied across-the-board cfg.tzoUtil = new TZOUtil(cfg.timezone, new Date().toISOString(), []); + cfg.deviceTags = ['bgm']; var STX = 0x02; var ETX = 0x03; @@ -585,7 +586,7 @@ module.exports = function (config) { getRTC(function(err3, obj3) { var currentDeviceTime = sundial.formatDeviceTime(new Date(obj3.timestamp * 1000)); - common.checkDeviceTime(currentDeviceTime, cfg.timezone, function(err) { + common.checkDeviceTime(currentDeviceTime, cfg, function(err) { progress(100); data.getConfigInfo = true; _.assign(data, obj2); @@ -643,7 +644,7 @@ module.exports = function (config) { uploadData: function (progress, data, cb) { progress(0); var sessionInfo = { - deviceTags: ['bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['LifeScan'], deviceModel: 'OneTouch UltraMini', deviceSerialNumber: data.serialNumber, diff --git a/lib/drivers/onetouch/oneTouchVerio.js b/lib/drivers/onetouch/oneTouchVerio.js index becbb418f2..ba5acc4511 100644 --- a/lib/drivers/onetouch/oneTouchVerio.js +++ b/lib/drivers/onetouch/oneTouchVerio.js @@ -607,6 +607,7 @@ export default function (config) { // With no date & time settings changes available, // timezone is applied across-the-board cfg.tzoUtil = new TZOUtil(cfg.timezone, new Date().toISOString(), []); + cfg.deviceTags = ['bgm']; return { /* eslint no-param-reassign: @@ -663,7 +664,7 @@ export default function (config) { progress(100); driver.retrieveRTCData((rtcTime) => { - common.checkDeviceTime(sundial.formatDeviceTime(rtcTime), cfg.timezone, (timeErr) => { + common.checkDeviceTime(sundial.formatDeviceTime(rtcTime), cfg, (timeErr) => { cb(timeErr, data); }); }); @@ -716,7 +717,7 @@ export default function (config) { progress(0); const sessionInfo = { - deviceTags: ['bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['LifeScan'], deviceModel: data.deviceInfo.deviceModel, deviceSerialNumber: data.deviceInfo.serialNumber, diff --git a/lib/drivers/onetouch/oneTouchVerioIQ.js b/lib/drivers/onetouch/oneTouchVerioIQ.js index f913380961..8467a977c7 100644 --- a/lib/drivers/onetouch/oneTouchVerioIQ.js +++ b/lib/drivers/onetouch/oneTouchVerioIQ.js @@ -35,6 +35,7 @@ module.exports = function (config) { // With no date & time settings changes available, // timezone is applied across-the-board cfg.tzoUtil = new TZOUtil(cfg.timezone, new Date().toISOString(), []); + cfg.deviceTags = ['bgm']; var STX = 0x02; var ETX = 0x03; @@ -439,10 +440,9 @@ module.exports = function (config) { progress(60); data.getConfigInfo = true; data.units = result.units; //TODO: return as settings when available in data model - getRTC(function(err, result) { - var currentDeviceTime = sundial.formatDeviceTime(new Date((result.timestamp * 1000) + EPOCH)); - common.checkDeviceTime(currentDeviceTime, cfg.timezone, function(err) { + var currentDeviceTime = sundial.formatDeviceTime(new Date((result.timestamp * 1000) + EPOCH)); + common.checkDeviceTime(currentDeviceTime, cfg, function(err) { progress(100); debug('getConfigInfo', data); cb(err, data); @@ -498,7 +498,7 @@ module.exports = function (config) { uploadData: function (progress, data, cb) { progress(0); var sessionInfo = { - deviceTags: ['bgm'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['LifeScan'], deviceModel: data.model, deviceSerialNumber: data.serialNumber, diff --git a/lib/drivers/tandem/tandemDriver.js b/lib/drivers/tandem/tandemDriver.js index 2b2978e440..3325f8df70 100644 --- a/lib/drivers/tandem/tandemDriver.js +++ b/lib/drivers/tandem/tandemDriver.js @@ -30,6 +30,7 @@ var common = require('../../commonFunctions'); module.exports = function (config) { var cfg = config; + cfg.deviceTags = ['insulin-pump']; var SYNC_BYTE = 0x55; @@ -2049,7 +2050,7 @@ module.exports = function (config) { var currentTime = {}; addTimestamp(currentTime,result.payload.timestamp); - common.checkDeviceTime(currentTime.deviceTime, cfg.timezone, function(err) { + common.checkDeviceTime(currentTime.deviceTime, cfg, function(err) { return cb(err, data); }); } @@ -2214,7 +2215,7 @@ module.exports = function (config) { var sessionInfo = { delta: {lastEndPosition: data.end_seq} , - deviceTags: ['insulin-pump'], + deviceTags: cfg.deviceTags, deviceManufacturers: ['Tandem'], deviceModel: String(data.model_no), deviceSerialNumber: String(data.pump_sn), diff --git a/styles/components/DeviceTimeModal.module.less b/styles/components/DeviceTimeModal.module.less new file mode 100644 index 0000000000..e6950cf623 --- /dev/null +++ b/styles/components/DeviceTimeModal.module.less @@ -0,0 +1,85 @@ +@import '../core/variables.less'; + +.modalWrap { + composes: flexRow from '../core/layout.module.less'; + justify-content: center; + position: absolute; + top: 0; left: 0; + background-color: rgba(0, 0, 0, 0.25); + width: 100%; + height: 100%; +} + +.modal { + composes: boxFlex flexColumn from '../core/layout.module.less'; + min-width: 400px; + background-color: @gray-background; + border-radius: 5px; + border: solid 1px @gray-light; + justify-content: center; + align-self: center; + align-items: center; +} + +.hr { + width: 100%; + margin: 15px 0; +} + +.highlight { + composes: small bold from '../core/typography.module.less'; + color: @purple-medium; +} + +.numeral { + display: inline-block; + margin-right: 5px; + font-weight: bold; +} + +.list { + padding-left: 15px; +} + +.list > li { + text-align: start; +} + +.title { + composes: small bold from '../core/typography.module.less'; + composes: boxFlex from '../core/layout.module.less'; + width: 100%; + padding: 10px 20px; +} + +.text { + composes: small from '../core/typography.module.less'; + width: 100%; +} + +.timeCompare { + display:flex; + justify-content: space-between; + padding: 0 20px; +} + +.body { + display:flex; + flex-direction: column; + justify-content: space-between; + padding: 0 20px; +} + +.actions { + padding: 15px; +} + +.button { + composes: btn btnPrimary from '../core/buttons.module.less'; + margin: 6px; +} + +.buttonSecondary { + composes: btn btnSecondary from '../core/buttons.module.less'; + margin: 6px; +} diff --git a/test/app/actions/async.test.js b/test/app/actions/async.test.js index 50ecfcd4a4..d2afea88c5 100644 --- a/test/app/actions/async.test.js +++ b/test/app/actions/async.test.js @@ -1056,6 +1056,88 @@ describe('Asynchronous Actions', () => { }); }); + describe('doUpload [device, time check error and dialog dismissed]', () => { + it('should dispatch VERSION_CHECK_REQUEST, VERSION_CHECK_SUCCESS, UPLOAD_REQUEST, DEVICE_DETECT_REQUEST, UPLOAD_FAILURE actions', () => { + const userId = 'a1b2c3', deviceKey = 'a_pump'; + const time = '2016-01-01T12:05:00.123Z'; + const targetDevice = { + key: deviceKey, + name: 'Acme Insulin Pump', + source: {type: 'device', driverId: 'AcmePump'} + }; + const initialState = { + devices: { + a_pump: targetDevice + }, + os: 'mac', + uploadsByUser: { + [userId]: { + a_cgm: {}, + a_pump: {history: [{start: time}]} + } + }, + targetDevices: { + [userId]: ['a_cgm', 'a_pump'] + }, + targetTimezones: { + [userId]: 'US/Mountain' + }, + uploadTargetDevice: deviceKey, + uploadTargetUser: userId, + version: '0.100.0', + working: {uploading: false} + }; + let err = 'deviceTimePromptClose'; + __Rewire__('services', { + api: { + upload: { + getVersions: (cb) => cb(null, {uploaderMinimum: '0.99.0'}) + } + }, + device: { + detect: (foo, bar, cb) => cb(null, {}), + upload: (foo, bar, cb) => cb(err) + } + }); + const expectedActions = [ + { + type: actionTypes.VERSION_CHECK_REQUEST, + meta: {source: actionSources[actionTypes.VERSION_CHECK_REQUEST]} + }, + { + type: actionTypes.VERSION_CHECK_SUCCESS, + meta: {source: actionSources[actionTypes.VERSION_CHECK_SUCCESS]} + }, + { + type: actionTypes.UPLOAD_REQUEST, + payload: { userId, deviceKey, utc: time }, + meta: { + source: actionSources[actionTypes.UPLOAD_REQUEST], + metric: { + eventName: 'Upload Attempted', + properties: {type: targetDevice.source.type, source: targetDevice.source.driverId} + } + } + }, + { + type: actionTypes.DEVICE_DETECT_REQUEST, + meta: {source: actionSources[actionTypes.DEVICE_DETECT_REQUEST]} + }, + { + type: actionTypes.UPLOAD_CANCELLED, + payload: { utc: time }, + meta: { + source: actionSources[actionTypes.UPLOAD_CANCELLED] + } + } + ]; + const store = mockStore(initialState); + store.dispatch(asyncActions.doUpload(deviceKey, {}, time)); + const actions = store.getActions(); + expect(actions).to.deep.equal(expectedActions); + }); + }); + describe('doUpload [no error]', () => { it('should dispatch VERSION_CHECK_REQUEST, VERSION_CHECK_SUCCESS, UPLOAD_REQUEST, DEVICE_DETECT_REQUEST, UPLOAD_SUCCESS actions', () => { const userId = 'a1b2c3', deviceKey = 'a_pump'; diff --git a/test/app/actions/sync.test.js b/test/app/actions/sync.test.js index 95a15d5a91..b0465fa068 100644 --- a/test/app/actions/sync.test.js +++ b/test/app/actions/sync.test.js @@ -824,6 +824,32 @@ describe('Synchronous Actions', () => { }); }); + describe('uploadCancelled', () => { + const errProps = { + utc: '2016-01-01T12:05:00.123Z', + }; + const device = { + source: {type: 'device', driverId: 'AcmePump'} + }; + it('should be an FSA', () => { + let action = syncActions.uploadCancelled(); + + expect(isFSA(action)).to.be.true; + }); + + it('should create an action to report an upload cancellation', () => { + const expectedAction = { + type: actionTypes.UPLOAD_CANCELLED, + payload: { utc: errProps.utc }, + meta: { + source: actionSources[actionTypes.UPLOAD_CANCELLED] + } + }; + const action = syncActions.uploadCancelled(errProps.utc); + expect(action).to.deep.equal(expectedAction); + }); + }); + describe('deviceDetectRequest', () => { it('should be an FSA', () => { let action = syncActions.deviceDetectRequest(); @@ -1303,4 +1329,38 @@ describe('Synchronous Actions', () => { expect(syncActions.driverUpdateShellOpts(opts)).to.deep.equal(expectedAction); }); }); + + describe('deviceTimeIncorrect', () => { + const callback = () => {}, + cfg = { config: 'value'}, + times = { time1: 'time' }; + it('should be an FSA', () => { + let action = syncActions.deviceTimeIncorrect(callback, cfg, times); + expect(isFSA(action)).to.be.true; + }); + + it('should create an action to indicate user dismissing device time mismatch modal', () => { + const expectedAction = { + type: actionTypes.DEVICE_TIME_INCORRECT, + payload: { callback, cfg, times }, + meta: {source: actionSources[actionTypes.DEVICE_TIME_INCORRECT]} + }; + expect(syncActions.deviceTimeIncorrect(callback, cfg, times)).to.deep.equal(expectedAction); + }); + }); + + describe('dismissedDeviceTimePromt', () => { + it('should be an FSA', () => { + let action = syncActions.dismissedDeviceTimePromp(); + expect(isFSA(action)).to.be.true; + }); + + it('should create an action to indicate user dismissing device time mismatch modal', () => { + const expectedAction = { + type: actionTypes.DISMISS_DEVICE_TIME_PROMPT, + meta: {source: actionSources[actionTypes.DISMISS_DEVICE_TIME_PROMPT]} + }; + expect(syncActions.dismissedDeviceTimePromp()).to.deep.equal(expectedAction); + }); + }); }); diff --git a/test/app/reducers/misc.test.js b/test/app/reducers/misc.test.js index 9f3dfe5830..91e1d39177 100644 --- a/test/app/reducers/misc.test.js +++ b/test/app/reducers/misc.test.js @@ -686,4 +686,24 @@ describe('misc reducers', () => { })).to.be.true; }); }); + + describe('showingDeviceTimePrompt', () => { + it('should return the initial state', () => { + expect(misc.showingDeviceTimePrompt(undefined, {})).to.be.null; + }); + + it('should handle DEVICE_TIME_INCORRECT', () => { + const payload = { callback: () => { }, cfg: { conf: 'value' }, times: { time1: 'value1' }}; + expect(misc.showingDeviceTimePrompt(undefined, { + type: actionTypes.DEVICE_TIME_INCORRECT, + payload + })).to.deep.equal(payload); + }); + + it('should handle DISMISS_DEVICE_TIME_PROMPT', () => { + expect(misc.showingDeviceTimePrompt(undefined, { + type: actionTypes.DISMISS_DEVICE_TIME_PROMPT, + })).to.be.false; + }); + }); }); diff --git a/test/app/reducers/uploads.test.js b/test/app/reducers/uploads.test.js index 9a3d078b96..d9a9c60062 100644 --- a/test/app/reducers/uploads.test.js +++ b/test/app/reducers/uploads.test.js @@ -106,6 +106,16 @@ describe('uploads', () => { type: actionTypes.UPLOAD_SUCCESS })).to.be.null; }); + + it('should handle UPLOAD_CANCELLED', () => { + const initialState = { + percentage: 100, + step: steps.start + }; + expect(uploads.uploadProgress(initialState, { + type: actionTypes.UPLOAD_CANCELLED + })).to.be.null; + }); }); describe('uploadsByUser', () => { @@ -646,6 +656,46 @@ describe('uploads', () => { expect(initialState.a1b2c3.a_cgm.history[0] === result.a1b2c3.a_cgm.history[0]).to.be.false; }); + it('should handle UPLOAD_CANCELLED', () => { + const data = [1,2,3,4,5]; + let initialState = { + [userId]: { + a_pump: {disabled: true, history: []}, + [deviceKey]: { + history: [{start: time},1,2,3], + uploading: true + } + }, + d4e5f6: { + another_pump: {history: []} + } + }; + let result = uploads.uploadsByUser(initialState, { + type: actionTypes.UPLOAD_CANCELLED, + payload: { utc: time } + }); + expect(result).to.deep.equal({ + [userId]: { + a_pump: {history: []}, + [deviceKey]: { + completed: true, + failed: false, + history: [{start: time, finish: time}, 1, 2, 3], + uploading: false + } + }, + d4e5f6: { + another_pump: {history: []} + } + }); + // tests to be sure not *mutating* state object but rather returning new! + expect(initialState === result).to.be.false; + expect(initialState.a1b2c3 === result.a1b2c3).to.be.false; + expect(initialState.a1b2c3.a_cgm === result.a1b2c3.a_cgm).to.be.false; + expect(initialState.a1b2c3.a_cgm.history === result.a1b2c3.a_cgm.history).to.be.false; + expect(initialState.a1b2c3.a_cgm.history[0] === result.a1b2c3.a_cgm.history[0]).to.be.false; + }); + it('should handle ADD_TARGET_DEVICE', () => { let initialState = { a1b2c3: { From 9dbf6b255d6683526f53591e89ea2ecd72c64d58 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Fri, 16 Mar 2018 13:37:37 -0400 Subject: [PATCH 44/97] trim whitespace --- lib/drivers/onetouch/oneTouchVerioIQ.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/drivers/onetouch/oneTouchVerioIQ.js b/lib/drivers/onetouch/oneTouchVerioIQ.js index 8467a977c7..00254307a9 100644 --- a/lib/drivers/onetouch/oneTouchVerioIQ.js +++ b/lib/drivers/onetouch/oneTouchVerioIQ.js @@ -441,7 +441,7 @@ module.exports = function (config) { data.getConfigInfo = true; data.units = result.units; //TODO: return as settings when available in data model getRTC(function(err, result) { - var currentDeviceTime = sundial.formatDeviceTime(new Date((result.timestamp * 1000) + EPOCH)); + var currentDeviceTime = sundial.formatDeviceTime(new Date((result.timestamp * 1000) + EPOCH)); common.checkDeviceTime(currentDeviceTime, cfg, function(err) { progress(100); debug('getConfigInfo', data); From 31a3e9484a09d4be6dff02166123d6285ebc6469 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 20 Mar 2018 14:25:58 -0400 Subject: [PATCH 45/97] couple unused declarations caught in code review --- app/components/DeviceTimeModal.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/components/DeviceTimeModal.js b/app/components/DeviceTimeModal.js index 5ebb7669ad..c2a0f5e6db 100644 --- a/app/components/DeviceTimeModal.js +++ b/app/components/DeviceTimeModal.js @@ -24,7 +24,6 @@ import sundial from 'sundial'; import { sync as syncActions } from '../actions/'; import styles from '../../styles/components/DeviceTimeModal.module.less'; -import { showingDeviceTimePrompt } from '../reducers/misc'; export class DeviceTimeModal extends Component { determineDeviceType = () => { @@ -135,7 +134,7 @@ export class DeviceTimeModal extends Component { } render() { - const { showingDeviceTimePrompt, sync } = this.props; + const { showingDeviceTimePrompt } = this.props; if(!showingDeviceTimePrompt){ return null; From c0397b23a4fbdb527530d6136eb4301da872facf Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 20 Mar 2018 15:12:19 -0400 Subject: [PATCH 46/97] build test version for time-difference check --- app/package.json | 2 +- package.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/package.json b/app/package.json index 416c28eced..26fb9474fe 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.3", + "version": "2.5.4-time-difference.1", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 4ceed3e9b0..067c42fbb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.3", + "version": "2.5.4-time-difference.1", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", @@ -219,7 +219,6 @@ "mocha": "3.2.0", "node-hid": "0.5.7", "nodegit": "0.20.3", - "node-hid": "0.5.7", "object-invariant-test-helper": "0.1.1", "open": "0.0.5", "react-hot-loader": "3.1.3", From 8e97b0b8d705358cdb111f027180de762b23be62 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 21 Mar 2018 11:41:16 +0000 Subject: [PATCH 47/97] get cli tools working with rollbar --- .babelrc | 5 ++++- app/utils/rollbar.js | 52 ++++++++++++++++++++++++-------------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/.babelrc b/.babelrc index 173ec4515d..3c22d94f6c 100644 --- a/.babelrc +++ b/.babelrc @@ -14,7 +14,10 @@ "development": { "plugins": [ "transform-class-properties", - "transform-es2015-classes" + "transform-es2015-classes", + ["transform-define", { + "__VERSION_SHA__": "abcd", + }] ], "presets": ["react-hmre"] }, diff --git a/app/utils/rollbar.js b/app/utils/rollbar.js index e2a2b6d954..0d9b3f4c54 100644 --- a/app/utils/rollbar.js +++ b/app/utils/rollbar.js @@ -1,34 +1,38 @@ /* global __VERSION_SHA__ */ - import Rollbar from 'rollbar/dist/rollbar.umd'; -let rollbar = new Rollbar({ - accessToken: '1843589282464f4facd43f794c8201a8', - captureUncaught: true, - enabled: process.env.NODE_ENV === 'production', - payload: { - environment: 'electron_renderer', - client: { - javascript: { - code_version: __VERSION_SHA__, - guess_uncaught_frames: true +let rollbar; + +if (process.env.NODE_ENV === 'production') { + + rollbar = new Rollbar({ + accessToken: '1843589282464f4facd43f794c8201a8', + captureUncaught: true, + enabled: process.env.NODE_ENV === 'production', + payload: { + environment: 'electron_renderer', + client: { + javascript: { + code_version: __VERSION_SHA__, + guess_uncaught_frames: true + } } - } - }, - // to deal with URI's as local filesystem paths, we use the "many domain" transform: - // https://rollbar.com/docs/source-maps/#using-source-maps-on-many-domains - transform: function(payload) { - var trace = payload.body.trace; - if (trace && trace.frames) { - for (var i = 0; i < trace.frames.length; i++) { - var filename = trace.frames[i].filename; - if (filename) { - trace.frames[i].filename = 'http://dynamichost/dist/bundle.js'; + }, + // to deal with URI's as local filesystem paths, we use the "many domain" transform: + // https://rollbar.com/docs/source-maps/#using-source-maps-on-many-domains + transform: function(payload) { + var trace = payload.body.trace; + if (trace && trace.frames) { + for (var i = 0; i < trace.frames.length; i++) { + var filename = trace.frames[i].filename; + if (filename) { + trace.frames[i].filename = 'http://dynamichost/dist/bundle.js'; + } } } } } - } -); + ); +}; export default rollbar; From 67ac03dc1287e86a64306fb56e372f77a0389ce6 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 21 Mar 2018 13:32:44 +0000 Subject: [PATCH 48/97] check if rollbar is enabled before trying to use it --- app/actions/sync.js | 16 +++++++++------- lib/core/api.js | 5 ++++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/actions/sync.js b/app/actions/sync.js index 2beafc9da5..6c684558af 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -288,14 +288,16 @@ export function loginSuccess(results) { const { user, profile, memberships } = results; const isClinicAccount = personUtils.userHasRole(user, 'clinic'); // the rewire plugin messes with default export in tests - rollbar.configure && rollbar.configure({ - payload: { - person: { - id: user.userid, - username: user.username, + if (rollbar) { + rollbar.configure && rollbar.configure({ + payload: { + person: { + id: user.userid, + username: user.username, + } } - } - }); + }); + } return { type: actionTypes.LOGIN_SUCCESS, payload: { user, profile, memberships }, diff --git a/lib/core/api.js b/lib/core/api.js index d98c590dc3..6414ffdffe 100644 --- a/lib/core/api.js +++ b/lib/core/api.js @@ -637,7 +637,10 @@ api.errors = {}; api.errors.log = function(error, message, properties) { api.log('GET /errors'); - rollbar.error(error, error.debug); + + if (rollbar) { + rollbar.error(error, error.debug); + } return tidepool.logAppError(error.debug, message, properties); }; From 0fbf4c488265d4acb47005a09c9daaaad51f6412 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 21 Mar 2018 13:45:52 +0000 Subject: [PATCH 49/97] get binary blobs for Libre --- app/components/Upload.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/app/components/Upload.js b/app/components/Upload.js index 801f433441..208202f3e6 100644 --- a/app/components/Upload.js +++ b/app/components/Upload.js @@ -258,16 +258,13 @@ export default class Upload extends Component { } let binary_link = null; - if(_.isArray(data.pages)) { + if(_.isArray(data.pages || data.aapPackets)) { + /* + we currently support binary blobs for Medtronic (.pages) and + Libre (.aapPackets) + */ let filenameBinary = 'binary-blob.json'; - let blob = { settings:data.settings, pages:data.pages }; - if(_.isArray(data.cbg_pages)) { - blob.cbg_pages = data.cbg_pages; - } - if(_.isArray(data.isig_pages)) { - blob.isig_pages = data.isig_pages; - } - let jsonDataBinary = JSON.stringify(blob, undefined, 4); + let jsonDataBinary = JSON.stringify(data, undefined, 4); let blobBinary = new Blob([jsonDataBinary], {type: 'text/json'}); let dataHrefBinary = URL.createObjectURL(blobBinary); binary_link = ( From f1fd3b2623fc8932f08470969f61961fa4ea9360 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 21 Mar 2018 13:47:08 +0000 Subject: [PATCH 50/97] creating a test version --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 416c28eced..23c2f04840 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.3", + "version": "2.5.3-libre-decompress-bug.1", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index b2dd292fb0..f72fc27298 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.3", + "version": "2.5.3-libre-decompress-bug.1", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From f4da55f8ac6289115251d1f4aa1beaf76160bae8 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 22 Mar 2018 14:37:25 +0100 Subject: [PATCH 51/97] fix decompression and add crc check --- lib/drivers/abbott/freeStyleLibreData.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js index 1a1a34e097..0d6ad67fed 100644 --- a/lib/drivers/abbott/freeStyleLibreData.js +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -38,6 +38,7 @@ import { GLUCOSE_LO, CRC16_TABLE, } from './freeStyleLibreConstants'; +import FreeStyleLibreProtocol from './freeStyleLibreProtocol'; const struct = structJs(); @@ -334,14 +335,15 @@ export default class FreeStyleLibreData { } handleCompressedDatabase(aapPacket) { - let decompressedBuffer = Buffer.alloc(1); + let decompressedBuffer = Buffer.alloc(0); let compressedOffset = 0; - // copy table ID - decompressedBuffer[0] = aapPacket.data[compressedOffset]; + // get table ID + const tableId = aapPacket.data[compressedOffset]; compressedOffset += 1; - while (compressedOffset < aapPacket.dataLength) { + const CRC32_LENGTH = 4; + while (compressedOffset < aapPacket.dataLength - CRC32_LENGTH) { const blockType = aapPacket.data[compressedOffset]; compressedOffset += 1; @@ -361,17 +363,24 @@ export default class FreeStyleLibreData { compressedOffset += blockLength; } else if (blockType === COMPRESSION_TYPE.ZERO_COMPRESSED) { decompressedBuffer = Buffer.concat([decompressedBuffer, Buffer.alloc(blockLength)]); - compressedOffset += blockLength; } else { debug('handleCompressedDatabase: failed to decompress!'); return; } } + // validate CRC32 of uncompressed data + const readCrc32 = aapPacket.data.readUInt32LE(compressedOffset); + const calcCrc32 = FreeStyleLibreProtocol.calcCrc32(decompressedBuffer); + if (readCrc32 !== calcCrc32) { + debug('handleCompressedDatabase: invalid CRC32!'); + return; + } + // build decompressed AAP packet to process const decompressedAapPacket = { packetLength: (aapPacket.packetLength - aapPacket.dataLength) + decompressedBuffer.length, - data: decompressedBuffer, + data: Buffer.concat([Buffer.from([tableId]), decompressedBuffer]), dataLength: decompressedBuffer.length, opCode: OP_CODE.GET_DATABASE, }; From 0bedea55553ca770508695eaa9e42112857c2f8e Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 22 Mar 2018 14:46:24 +0100 Subject: [PATCH 52/97] throw error on decompression failure --- lib/drivers/abbott/freeStyleLibreData.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js index 0d6ad67fed..6ec128ba14 100644 --- a/lib/drivers/abbott/freeStyleLibreData.js +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -365,7 +365,7 @@ export default class FreeStyleLibreData { decompressedBuffer = Buffer.concat([decompressedBuffer, Buffer.alloc(blockLength)]); } else { debug('handleCompressedDatabase: failed to decompress!'); - return; + throw new Error('Failed to decompress.'); } } From 3eaab043519f3430f3092849fc9f88435a0e6399 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 22 Mar 2018 15:19:03 -0400 Subject: [PATCH 53/97] remove hard minute for different devices --- app/components/DeviceTimeModal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/DeviceTimeModal.js b/app/components/DeviceTimeModal.js index c2a0f5e6db..7b123c69aa 100644 --- a/app/components/DeviceTimeModal.js +++ b/app/components/DeviceTimeModal.js @@ -89,7 +89,7 @@ export class DeviceTimeModal extends Component { Is your CGM time set correctly? If not:
1. Update the time and date on your CGM
-
2. Wait 5 minutes for a new reading to appear
+
2. Wait for a new reading to appear
3. Try uploading again
From e3fa4eb272d818b8a78ffa876a78e5702b02d25f Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 22 Mar 2018 20:28:45 +0000 Subject: [PATCH 54/97] undo change to babelrc --- .babelrc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.babelrc b/.babelrc index 3c22d94f6c..173ec4515d 100644 --- a/.babelrc +++ b/.babelrc @@ -14,10 +14,7 @@ "development": { "plugins": [ "transform-class-properties", - "transform-es2015-classes", - ["transform-define", { - "__VERSION_SHA__": "abcd", - }] + "transform-es2015-classes" ], "presets": ["react-hmre"] }, From 64c8944a0a5bea229f73b6d3479dedad4555cab6 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 22 Mar 2018 20:29:19 +0000 Subject: [PATCH 55/97] bump test version --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 23c2f04840..00748ef981 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.3-libre-decompress-bug.1", + "version": "2.5.3-libre-decompress-bug.2", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index f72fc27298..e1601649e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.3-libre-decompress-bug.1", + "version": "2.5.3-libre-decompress-bug.2", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 5ebdc6601a1a76000c978af70a5528f760c13c58 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 26 Mar 2018 15:10:44 +0100 Subject: [PATCH 56/97] send ACK when we get ENQ for BCN --- lib/drivers/bayer/bayerContourNext.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/drivers/bayer/bayerContourNext.js b/lib/drivers/bayer/bayerContourNext.js index 9346c0e1a6..a78c0ec39d 100644 --- a/lib/drivers/bayer/bayerContourNext.js +++ b/lib/drivers/bayer/bayerContourNext.js @@ -217,10 +217,13 @@ module.exports = function (config) { */ function decodeMessage (message) { + console.log('Message:', common.bytes2hex(message)); + if (!(message[0] === ASCII_CONTROL.STX && message[message.length-2] === ASCII_CONTROL.CR && message[message.length-1] === ASCII_CONTROL.LF ) && - message[0] !== ASCII_CONTROL.EOT ) { + message[0] !== ASCII_CONTROL.EOT && + message[0] !== ASCII_CONTROL.ENQ ) { throw(new Error('Meter not ready. Please retry.')); } @@ -307,11 +310,16 @@ module.exports = function (config) { error = true; return whilstCb(err, null); } else { + debug('Retrying..'); retry++; cmd = buildNakPacket(); return whilstCb(null); } } else { + if (record.messageType === ASCII_CONTROL.ENQ) { + debug('ENQ received, sending ACK..'); + return whilstCb(null); + } var recordType = (record.messageType === ASCII_CONTROL.STX) ? struct.extractByte(record.frame, 0) : record.messageType; @@ -355,7 +363,8 @@ module.exports = function (config) { break; case 'P': case 'L': - return whilstCb(null); + case ASCII_CONTROL.EOT: + return whilstCb(null); break; } } @@ -529,10 +538,8 @@ module.exports = function (config) { getConfigInfo: function (progress, data, cb) { debug('in getConfigInfo', data); - - getOneRecord({}, function (err, result) { + getOneRecord(data, function (err, result) { progress(100); - if (!err){ common.checkDeviceTime(result.deviceTime, cfg, function(err2) { data.connect = true; @@ -655,7 +662,7 @@ module.exports = function (config) { // Due to an upstream bug in HIDAPI on Windoze, we have to send a command // to the device to ensure that the listeners are removed before we disconnect // For more details, see https://github.com/node-hid/node-hid/issues/61 - hidDevice.send(buildPacket([ASCII_CONTROL.EOT],1), function(err, result) { + hidDevice.send(buildAckPacket(), function(err, result) { progress(100); cb(null, data); }); From 64350771833116d0434c9c0f1eafe9b967563d69 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 26 Mar 2018 16:05:20 +0100 Subject: [PATCH 57/97] bump test version --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 26fb9474fe..3fb5a014d1 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.1", + "version": "2.5.4-time-difference.2", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 067c42fbb0..ca41852c47 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4-time-difference.1", + "version": "2.5.4-time-difference.2", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 5d506a91cd236f6ea4a178468e0440f7815e2506 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 27 Mar 2018 09:19:53 +0100 Subject: [PATCH 58/97] v2.5.4 --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 00748ef981..9a3ce73282 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.3-libre-decompress-bug.2", + "version": "2.5.4", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index e1601649e2..05d2aadd5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.3-libre-decompress-bug.2", + "version": "2.5.4", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From a16f49e2c6d018c96876aa7da4e8eee8cf60b8eb Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 27 Mar 2018 14:05:08 +0100 Subject: [PATCH 59/97] close device handle for Verio when time is not the same --- app/package.json | 2 +- lib/drivers/onetouch/oneTouchVerio.js | 9 ++++++++- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/package.json b/app/package.json index 3fb5a014d1..35fa6d3197 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.2", + "version": "2.5.4-time-difference.3", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/lib/drivers/onetouch/oneTouchVerio.js b/lib/drivers/onetouch/oneTouchVerio.js index ba5acc4511..3b07ed322f 100644 --- a/lib/drivers/onetouch/oneTouchVerio.js +++ b/lib/drivers/onetouch/oneTouchVerio.js @@ -628,6 +628,7 @@ export default function (config) { progress(0); driver.openDevice(data.deviceInfo, (err) => { if (err) { + debug('Cannot open device:', err); cb(err, null); return; } @@ -665,7 +666,13 @@ export default function (config) { driver.retrieveRTCData((rtcTime) => { common.checkDeviceTime(sundial.formatDeviceTime(rtcTime), cfg, (timeErr) => { - cb(timeErr, data); + if (timeErr) { + driver.closeDevice(() => { + cb(timeErr, data); + }); + } else { + cb(null, data); + } }); }); }); diff --git a/package.json b/package.json index ca41852c47..35e8daad9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4-time-difference.2", + "version": "2.5.4-time-difference.3", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 6d0ea7d3859053516416bfc1fc2035d999b9d47a Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 27 Mar 2018 15:56:15 -0400 Subject: [PATCH 60/97] another round of updates --- app/package.json | 2 +- package.json | 64 ++--- yarn.lock | 734 +++++++++++++++++++++++++++++++++-------------- 3 files changed, 546 insertions(+), 254 deletions(-) diff --git a/app/package.json b/app/package.json index 1c607ef90e..cef434c8e1 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4", + "version": "2.5.5-electron-update.2", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index ed4a4d4763..e0e4a49932 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4", + "version": "2.5.5-electron-update.2", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", @@ -41,15 +41,15 @@ "bows": "1.7.0", "chrome-launcher": "0.10.2", "classnames": "2.2.5", - "commander": "2.14.1", + "commander": "2.15.1", "decompress": "4.2.0", "electron-debug": "1.5.0", "electron-is-dev": "0.3.0", "history": "4.7.2", - "immutability-helper": "2.6.5", + "immutability-helper": "2.6.6", "is-electron": "2.1.0", "lodash": "4.17.5", - "plist": "2.1.0", + "plist": "3.0.1", "prop-types": "15.6.1", "react": "16.2.0", "react-dom": "16.2.0", @@ -58,16 +58,16 @@ "react-router-redux": "5.0.0-alpha.9", "react-select": "1.2.1", "redux": "3.7.2", - "redux-form": "7.2.3", + "redux-form": "7.3.0", "redux-thunk": "2.2.0", "rollbar": "2.3.9", "rollbar-sourcemap-webpack-plugin": "2.2.0", "semver": "5.5.0", - "source-map-support": "0.5.3", + "source-map-support": "0.5.4", "stack-trace": "0.0.10", - "sudo-prompt": "8.1.0", + "sudo-prompt": "8.2.0", "sundial": "1.6.0", - "tidepool-platform-client": "0.35.0", + "tidepool-platform-client": "0.37.0", "uuid": "3.2.1" }, "browserslist": "electron 1.6", @@ -161,10 +161,10 @@ "devDependencies": { "babel-core": "6.26.0", "babel-eslint": "8.2.2", - "babel-loader": "7.1.3", + "babel-loader": "7.1.4", "babel-plugin-add-module-exports": "0.2.1", "babel-plugin-dev-expression": "0.2.1", - "babel-plugin-module-resolver": "3.1.0", + "babel-plugin-module-resolver": "3.1.1", "babel-plugin-rewire": "1.1.0", "babel-plugin-transform-class-properties": "6.24.1", "babel-plugin-transform-define": "1.3.0", @@ -181,43 +181,43 @@ "babili-webpack-plugin": "0.1.2", "chai": "4.1.2", "concurrently": "3.5.1", - "cross-env": "5.1.3", - "css-loader": "0.28.10", + "cross-env": "5.1.4", + "css-loader": "0.28.11", "devtron": "1.4.0", "difflet": "1.0.1", - "drivelist": "6.0.4", - "electron": "1.8.2", - "electron-builder": "20.2.0", + "drivelist": "6.1.3", + "electron": "1.8.4", + "electron-builder": "20.8.1", "electron-devtools-installer": "2.2.3", - "electron-mocha": "5.0.0", - "electron-updater": "2.20.1", + "electron-mocha": "6.0.1", + "electron-updater": "2.21.4", "enzyme": "3.3.0", - "eslint": "4.18.1", + "eslint": "4.19.1", "eslint-config-airbnb": "16.1.0", "eslint-formatter-pretty": "1.3.0", "eslint-import-resolver-webpack": "0.8.4", "eslint-plugin-import": "2.9.0", "eslint-plugin-jsx-a11y": "6.0.3", - "eslint-plugin-lodash": "2.6.1", - "eslint-plugin-mocha": "4.11.0", - "eslint-plugin-promise": "3.6.0", + "eslint-plugin-lodash": "2.7.0", + "eslint-plugin-mocha": "5.0.0", + "eslint-plugin-promise": "3.7.0", "eslint-plugin-react": "7.7.0", - "express": "4.16.2", + "express": "4.16.3", "extract-text-webpack-plugin": "3.0.2", "fbjs-scripts": "0.8.1", - "file-loader": "1.1.10", + "file-loader": "1.1.11", "flux-standard-action": "2.0.1", "ftp": "0.3.10", "git-describe": "4.0.2", "gitbook-cli": "2.3.2", - "html-webpack-plugin": "2.30.1", + "html-webpack-plugin": "3.1.0", "json-loader": "0.5.7", "less": "3.0.1", - "less-loader": "4.0.6", + "less-loader": "4.1.0", "minimist": "1.2.0", - "mocha": "5.0.1", - "nodegit": "0.21.0", + "mocha": "5.0.5", "node-hid": "0.7.2", + "nodegit": "0.21.2", "object-invariant-test-helper": "0.1.1", "open": "0.0.5", "react-hot-loader": "4.0.0", @@ -225,16 +225,16 @@ "salinity": "0.0.8", "serialport": "5.0.0", "shelljs": "0.8.1", - "sinon": "4.4.2", - "sinon-chai": "2.14.0", + "sinon": "4.4.9", + "sinon-chai": "3.0.0", "spectron": "3.8.0", - "style-loader": "0.20.2", - "url-loader": "0.6.2", + "style-loader": "0.20.3", + "url-loader": "1.0.1", "usb": "1.3.1", "webpack": "3.8.1", "webpack-dev-middleware": "2.0.6", "webpack-dev-server": "2.9.4", - "webpack-hot-middleware": "2.21.0", + "webpack-hot-middleware": "2.21.2", "webpack-merge": "4.1.2", "xmlbuilder": "9.0.7" }, diff --git a/yarn.lock b/yarn.lock index c8361ccd67..73270ca8bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -147,6 +147,13 @@ accepts@~1.3.4: mime-types "~2.1.16" negotiator "0.6.1" +accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + accessibility-developer-tools@^2.11.0: version "2.12.0" resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz#3da0cce9d6ec6373964b84f35db7cfc3df7ab514" @@ -171,10 +178,14 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.2.1: +acorn@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" +acorn@^5.5.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + agent-base@4, agent-base@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.1.2.tgz#80fa6cde440f4dcf9af2617cf246099b5d99f0c8" @@ -297,6 +308,12 @@ ansi-styles@^3.1.0: dependencies: color-convert "^1.9.0" +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + ansi-wrap@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -320,25 +337,45 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" -app-builder-bin-linux@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.5.0.tgz#c22df1ab9ee7fb0270ec27a3c8a6993966ea4220" +app-builder-bin-linux@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.2.tgz#a764c8e52ecf1b5b068f32c820c6daf1ffed6a8f" -app-builder-bin-mac@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.5.0.tgz#40821128a1f20e0559f1fca71a59ecab81bb59b5" +app-builder-bin-linux@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.8.3.tgz#4bf638a7bd29365e5534d2ba554baf1350fb4a87" -app-builder-bin-win@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.5.0.tgz#0a12437d825ac89fc2357e8be0ba855f54c083e9" +app-builder-bin-mac@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.2.tgz#c4ee0d950666c97c12a45ac74ec6396be3357644" -app-builder-bin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.5.0.tgz#dc768af9704876959c68af5456ef31f67a4663fe" +app-builder-bin-mac@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.8.3.tgz#8e2c63e9d822fce2eee8db2f9f817d7b68532df7" + +app-builder-bin-win@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.2.tgz#7acac890782f4118f09941b343ba06c56452a6f6" + +app-builder-bin-win@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.8.3.tgz#3598ec1c523dd197e8bb5dfeab3e2fe70905ae79" + +app-builder-bin@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.7.2.tgz#daf67060a6bad8f5f611a0d2876d9db897a83f06" optionalDependencies: - app-builder-bin-linux "1.5.0" - app-builder-bin-mac "1.5.0" - app-builder-bin-win "1.5.0" + app-builder-bin-linux "1.7.2" + app-builder-bin-mac "1.7.2" + app-builder-bin-win "1.7.2" + +app-builder-bin@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.8.3.tgz#902174b5864521e5068fe1d8ae5566633a5b9c44" + optionalDependencies: + app-builder-bin-linux "1.8.3" + app-builder-bin-mac "1.8.3" + app-builder-bin-win "1.8.3" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" @@ -779,9 +816,9 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-loader@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.3.tgz#ff5b440da716e9153abb946251a9ab7670037b16" +babel-loader@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -871,9 +908,9 @@ babel-plugin-minify-type-constructors@^0.1.2: dependencies: babel-helper-is-void-0 "^0.1.1" -babel-plugin-module-resolver@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.0.tgz#cf7868bd2c1818f855aede16141009b87dd1f95b" +babel-plugin-module-resolver@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.1.tgz#881cf67e3d4b8400d5eaaefc1be44d2dc1fe404f" dependencies: find-babel-config "^1.1.0" glob "^7.1.2" @@ -1639,6 +1676,10 @@ base64-js@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" +base64-js@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + bash-color@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/bash-color/-/bash-color-0.0.4.tgz#e9be8ce33540cada4881768c59bd63865736e913" @@ -1693,7 +1734,7 @@ bluebird-lst@^1.0.5: dependencies: bluebird "^3.5.1" -bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@~3.5.0: +bluebird@^3.5.0, bluebird@^3.5.1, bluebird@~3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -1790,9 +1831,9 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" @@ -1892,31 +1933,59 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4.0.3: - version "4.0.5" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62" +builder-util-runtime@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.1.0.tgz#7dcd042d555d2f161a5538d7a0ea8c292daa0683" dependencies: bluebird-lst "^1.0.5" debug "^3.1.0" - fs-extra-p "^4.5.0" + fs-extra-p "^4.5.2" sax "^1.2.4" -builder-util@5.6.0, builder-util@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.0.tgz#c37c5207cd818531bda819ac836b6d51dfbccd4a" +builder-util-runtime@4.2.0, builder-util-runtime@^4.1.0, builder-util-runtime@^4.2.0, builder-util-runtime@~4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.2.0.tgz#c56aa18d34390143da031c418c9d3a055fbd3522" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.2" + sax "^1.2.4" + +builder-util@5.6.7: + version "5.6.7" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.7.tgz#662ff2ba4f70416ee0c085126f16af48fbf97900" dependencies: "7zip-bin" "~3.1.0" - app-builder-bin "1.5.0" + app-builder-bin "1.7.2" bluebird-lst "^1.0.5" - builder-util-runtime "^4.0.5" - chalk "^2.3.0" + builder-util-runtime "^4.1.0" + chalk "^2.3.2" debug "^3.1.0" fs-extra-p "^4.5.2" is-ci "^1.1.0" - js-yaml "^3.10.0" + js-yaml "^3.11.0" lazy-val "^1.0.3" semver "^5.5.0" - source-map-support "^0.5.3" + source-map-support "^0.5.4" + stat-mode "^0.2.2" + temp-file "^3.1.1" + +builder-util@5.7.4, builder-util@^5.6.7, builder-util@^5.7.0, builder-util@^5.7.4: + version "5.7.4" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.7.4.tgz#d6e9a56e2865f0d0a504a07ea0f8dc35185b4795" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.8.3" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.2.0" + chalk "^2.3.2" + debug "^3.1.0" + fs-extra-p "^4.5.2" + is-ci "^1.1.0" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + semver "^5.5.0" + source-map-support "^0.5.4" stat-mode "^0.2.2" temp-file "^3.1.1" @@ -2120,6 +2189,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +chalk@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" @@ -2366,9 +2443,9 @@ commander@2.12.x, commander@^2.11.0, commander@^2.9.0, commander@~2.12.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" -commander@2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +commander@2.15.1, commander@^2.14.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" commander@2.6.0: version "2.6.0" @@ -2579,9 +2656,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-env@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.3.tgz#f8ae18faac87692b0a8b4d2f7000d4ec3a85dfd7" +cross-env@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.4.tgz#f61c14291f7cc653bb86457002ea80a04699d022" dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" @@ -2634,9 +2711,9 @@ css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -css-loader@0.28.10: - version "0.28.10" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" +css-loader@0.28.11: + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" dependencies: babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" @@ -2943,6 +3020,10 @@ depd@1.1.1, depd@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -2991,9 +3072,9 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -diff@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" diff@^3.1.0: version "3.4.0" @@ -3019,16 +3100,16 @@ discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" -dmg-builder@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.1.tgz#a12214eb3eb3cba0addccfd129f1981c9805045c" +dmg-builder@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.3.tgz#d336cf398fd331b2dedd7efae4b51b9bfe00aa1c" dependencies: bluebird-lst "^1.0.5" - builder-util "^5.6.0" - electron-builder-lib "~20.2.0" + builder-util "^5.7.0" + electron-builder-lib "~20.6.2" fs-extra-p "^4.5.2" iconv-lite "^0.4.19" - js-yaml "^3.10.0" + js-yaml "^3.11.0" parse-color "^1.0.0" sanitize-filename "^1.6.1" @@ -3137,15 +3218,16 @@ dotenv@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.0.tgz#0206eb5b336639bf377618a2a304ff00c6a1fddb" -drivelist@6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.0.4.tgz#971ac575356a8a4c14859824ecd28cdf3c586433" +drivelist@6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.1.3.tgz#5515764eebb4a5410ad429a6c5820c9b92e3c69f" dependencies: bindings "^1.3.0" debug "^3.1.0" + fast-plist "^0.1.2" js-yaml "^3.10.0" - nan "^2.8.0" - prebuild-install "^2.4.1" + nan "^2.9.2" + prebuild-install "^2.5.1" duplexer2@0.0.2: version "0.0.2" @@ -3184,26 +3266,59 @@ ejs@^2.5.7, ejs@~2.5.6: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.2.0, electron-builder-lib@~20.2.0: - version "20.2.0" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.2.0.tgz#e8dba288cf26858803eb1800da870d7312837bfa" +ejs@^2.5.8: + version "2.5.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.8.tgz#2ab6954619f225e6193b7ac5f7c39c48fefe4380" + +electron-builder-lib@20.8.1: + version "20.8.1" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.8.1.tgz#633167c55f183951b031b59261a923968c098073" dependencies: "7zip-bin" "~3.1.0" - app-builder-bin "1.5.0" + app-builder-bin "1.8.3" async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - builder-util "5.6.0" - builder-util-runtime "4.0.5" + builder-util "5.7.4" + builder-util-runtime "4.2.0" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.8" + electron-osx-sign "0.4.10" + electron-publish "20.8.1" + fs-extra-p "^4.5.2" + hosted-git-info "^2.6.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.11.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^3.0.1" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + +electron-builder-lib@~20.6.2: + version "20.6.2" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.6.2.tgz#34f38b6172c05f90d34b6b5ed2f2b6922e731a39" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.7.2" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.6.7" + builder-util-runtime "4.1.0" chromium-pickle-js "^0.2.0" debug "^3.1.0" ejs "^2.5.7" - electron-osx-sign "0.4.8" - electron-publish "20.2.0" + electron-osx-sign "0.4.10" + electron-publish "20.6.1" fs-extra-p "^4.5.2" - hosted-git-info "^2.5.0" + hosted-git-info "^2.6.0" is-ci "^1.1.0" isbinaryfile "^3.0.2" - js-yaml "^3.10.0" + js-yaml "^3.11.0" lazy-val "^1.0.3" minimatch "^3.0.4" normalize-package-data "^2.4.0" @@ -3213,23 +3328,23 @@ electron-builder-lib@20.2.0, electron-builder-lib@~20.2.0: semver "^5.5.0" temp-file "^3.1.1" -electron-builder@20.2.0: - version "20.2.0" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.2.0.tgz#aaeaa439cb96c9a3d7ffda25b28130327c982982" +electron-builder@20.8.1: + version "20.8.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.8.1.tgz#3d19607a7f7d3ee7f3e110a6fc66c720ed1d2cc0" dependencies: bluebird-lst "^1.0.5" - builder-util "5.6.0" - builder-util-runtime "4.0.5" - chalk "^2.3.0" - dmg-builder "4.1.1" - electron-builder-lib "20.2.0" + builder-util "5.7.4" + builder-util-runtime "4.2.0" + chalk "^2.3.2" + dmg-builder "4.1.3" + electron-builder-lib "20.8.1" electron-download-tf "4.3.4" fs-extra-p "^4.5.2" is-ci "^1.1.0" lazy-val "^1.0.3" read-config-file "3.0.0" sanitize-filename "^1.6.1" - update-notifier "^2.3.0" + update-notifier "^2.4.0" yargs "^11.0.0" electron-chromedriver@~1.8.0: @@ -3314,19 +3429,19 @@ electron-localshortcut@^3.0.0: keyboardevent-from-electron-accelerator "^0.7.0" keyboardevents-areequal "^0.2.1" -electron-mocha@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/electron-mocha/-/electron-mocha-5.0.0.tgz#415b86166a6bf80125fc4106ecc2545669c284ac" +electron-mocha@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/electron-mocha/-/electron-mocha-6.0.1.tgz#3bab0fa6e48b106791a6b0564359007741de2c32" dependencies: - commander "^2.11.0" + commander "^2.14.1" electron-window "^0.8.0" - fs-extra "^4.0.2" - mocha "^4.0.1" + fs-extra "^5.0.0" + mocha "^5.0.1" which "^1.3.0" -electron-osx-sign@0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.8.tgz#f0b9fadded9e1e54ec35fa89877b5c6c34c7bc40" +electron-osx-sign@0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz#be4f3b89b2a75a1dc5f1e7249081ab2929ca3a26" dependencies: bluebird "^3.5.0" compare-version "^0.1.2" @@ -3335,14 +3450,26 @@ electron-osx-sign@0.4.8: minimist "^1.2.0" plist "^2.1.0" -electron-publish@20.2.0: - version "20.2.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.2.0.tgz#1812738c4a4e14a8e156a9a083424a6e4e8e8264" +electron-publish@20.6.1: + version "20.6.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.6.1.tgz#1bc8497fc9370f8e39c9212ce0b5857ef1d666fd" dependencies: bluebird-lst "^1.0.5" - builder-util "^5.6.0" - builder-util-runtime "^4.0.5" - chalk "^2.3.0" + builder-util "^5.6.7" + builder-util-runtime "^4.1.0" + chalk "^2.3.2" + fs-extra-p "^4.5.2" + lazy-val "^1.0.3" + mime "^2.2.0" + +electron-publish@20.8.1: + version "20.8.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.8.1.tgz#ec5730efbda88c6566a47395d433d7b122782675" + dependencies: + bluebird-lst "^1.0.5" + builder-util "^5.7.4" + builder-util-runtime "^4.2.0" + chalk "^2.3.2" fs-extra-p "^4.5.2" lazy-val "^1.0.3" mime "^2.2.0" @@ -3351,19 +3478,19 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.28: version "1.3.28" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee" -electron-updater@2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.20.1.tgz#3d2714a3e472fbf198f6053daf8fd12209101aa2" +electron-updater@2.21.4: + version "2.21.4" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.4.tgz#56326defc8072e78e339cc656838ac78e708f50c" dependencies: bluebird-lst "^1.0.5" - builder-util-runtime "~4.0.3" + builder-util-runtime "~4.2.0" electron-is-dev "^0.3.0" - fs-extra-p "^4.5.0" - js-yaml "^3.10.0" + fs-extra-p "^4.5.2" + js-yaml "^3.11.0" lazy-val "^1.0.3" lodash.isequal "^4.5.0" semver "^5.5.0" - source-map-support "^0.5.2" + source-map-support "^0.5.4" electron-window@^0.8.0: version "0.8.1" @@ -3371,9 +3498,9 @@ electron-window@^0.8.0: dependencies: is-electron-renderer "^2.0.0" -electron@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.2.tgz#a817cd733c2972b3c7cc4f777caf6e424b88014d" +electron@1.8.4: + version "1.8.4" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.4.tgz#cca8d0e6889f238f55b414ad224f03e03b226a38" dependencies: "@types/node" "^8.0.24" electron-download "^3.0.1" @@ -3403,6 +3530,10 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -3498,6 +3629,16 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" +es-abstract@^1.5.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" @@ -3678,21 +3819,21 @@ eslint-plugin-jsx-a11y@6.0.3: emoji-regex "^6.1.0" jsx-ast-utils "^2.0.0" -eslint-plugin-lodash@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-2.6.1.tgz#a56f41d318fecf1ec69aae9851df0d37242ab168" +eslint-plugin-lodash@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-2.7.0.tgz#66cdc1070b7c9d4b749368b54820886380a14c35" dependencies: lodash "~4.17.0" -eslint-plugin-mocha@4.11.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-4.11.0.tgz#91193a2f55e20a5e35974054a0089d30198ee578" +eslint-plugin-mocha@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-5.0.0.tgz#43946a7ecaf39039eb3ee20635ebd4cc19baf6dd" dependencies: - ramda "^0.24.1" + ramda "^0.25.0" -eslint-plugin-promise@3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75" +eslint-plugin-promise@3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz#f4bde5c2c77cdd69557a8f69a24d1ad3cfc9e67e" eslint-plugin-react@7.7.0: version "7.7.0" @@ -3718,9 +3859,9 @@ eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" -eslint@4.18.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.1.tgz#b9138440cb1e98b2f44a0d578c6ecf8eae6150b0" +eslint@4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -3731,7 +3872,7 @@ eslint@4.18.1: 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" @@ -3753,18 +3894,19 @@ eslint@4.18.1: 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.3.0" strip-ansi "^4.0.0" strip-json-comments "~2.0.1" - table "^4.0.1" + table "4.0.2" text-table "~0.2.0" -espree@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" dependencies: - acorn "^5.2.1" + acorn "^5.5.0" acorn-jsx "^3.0.0" esprima@^2.6.0: @@ -3856,7 +3998,42 @@ expand-template@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" -express@4.16.2, express@^4.13.3: +express@4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + 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.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +express@^4.13.3: version "4.16.2" resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" dependencies: @@ -3963,6 +4140,10 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" +fast-plist@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/fast-plist/-/fast-plist-0.1.2.tgz#a45aff345196006d406ca6cdcd05f69051ef35b8" + fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" @@ -4023,9 +4204,9 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.10.tgz#77e97dfeab13da64c7085ab3e3887e29ae588aea" +file-loader@1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" dependencies: loader-utils "^1.0.2" schema-utils "^0.4.5" @@ -4068,6 +4249,18 @@ finalhandler@1.1.0: statuses "~1.3.1" unpipe "~1.0.0" +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + find-babel-config@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" @@ -4259,7 +4452,7 @@ fs-extra@^2.0.0: graceful-fs "^4.1.2" jsonfile "^2.1.0" -fs-extra@^4.0.1, fs-extra@^4.0.2: +fs-extra@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: @@ -4792,7 +4985,7 @@ hoek@4.x.x: version "4.2.0" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" -hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.3.1: +hoist-non-react-statics@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" @@ -4811,10 +5004,14 @@ home-path@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.5.tgz#788b29815b12d53bacf575648476e6f9041d133f" -hosted-git-info@^2.1.4, hosted-git-info@^2.1.5, hosted-git-info@^2.4.2, hosted-git-info@^2.5.0, hosted-git-info@~2.5.0: +hosted-git-info@^2.1.4, hosted-git-info@^2.1.5, hosted-git-info@^2.4.2, hosted-git-info@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" +hosted-git-info@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + hosted-git-info@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" @@ -4849,16 +5046,17 @@ html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.2.x" -html-webpack-plugin@2.30.1: - version "2.30.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" +html-webpack-plugin@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.1.0.tgz#6e02baaedb1e906310917f03239c793a75af2885" dependencies: - bluebird "^3.4.7" html-minifier "^3.2.3" loader-utils "^0.2.16" lodash "^4.17.3" pretty-error "^2.0.2" + tapable "^1.0.0" toposort "^1.0.0" + util.promisify "1.0.0" htmlparser2@^3.9.1: version "3.9.2" @@ -4991,9 +5189,9 @@ image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" -immutability-helper@2.6.5: - version "2.6.5" - resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.6.5.tgz#94a10f18f1196244b2dea92d46522d2b4dce7b73" +immutability-helper@2.6.6: + version "2.6.6" + resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.6.6.tgz#9b384c240d65257133c155086e16f678ca563b05" dependencies: invariant "^2.2.0" @@ -5106,6 +5304,12 @@ invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2: dependencies: loose-envify "^1.0.0" +invariant@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -5118,6 +5322,10 @@ ipaddr.js@1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" +ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" + irregular-plurals@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766" @@ -5161,7 +5369,7 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -is-ci@^1.1.0: +is-ci@^1.0.10, is-ci@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: @@ -5433,6 +5641,13 @@ js-yaml@^3.10.0, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" @@ -5603,9 +5818,9 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -less-loader@4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.6.tgz#7bcfbb9053181c18d57e213e87346958e02b2769" +less-loader@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" dependencies: clone "^2.1.1" loader-utils "^1.1.0" @@ -5688,14 +5903,14 @@ lockfile@~1.0.1, lockfile@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" -lodash-es@^4.17.3, lodash-es@^4.2.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" - lodash-es@^4.17.5: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.5.tgz#9fc6e737b1c4d151d8f9cae2247305d552ce748f" +lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" @@ -6095,6 +6310,10 @@ mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" @@ -6107,6 +6326,12 @@ mime-types@~2.0.3: dependencies: mime-db "~1.12.0" +mime-types@~2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" @@ -6119,7 +6344,7 @@ mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" -mime@^2.1.0, mime@^2.2.0: +mime@^2.0.3, mime@^2.1.0, mime@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" @@ -6190,29 +6415,14 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" -mocha@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.1.tgz#759b62c836b0732382a62b6b1fb245ec1bc943ac" +mocha@5.0.5, mocha@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.5.tgz#e228e3386b9387a4710007a641f127b00be44b52" dependencies: - browser-stdout "1.3.0" + browser-stdout "1.3.1" commander "2.11.0" debug "3.1.0" - diff "3.3.1" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.3" - he "1.1.1" - mkdirp "0.5.1" - supports-color "4.4.0" - -mocha@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b" - dependencies: - browser-stdout "1.3.0" - commander "2.11.0" - debug "3.1.0" - diff "3.3.1" + diff "3.5.0" escape-string-regexp "1.0.5" glob "7.1.2" growl "1.10.3" @@ -6270,7 +6480,7 @@ mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.2.0, nan@^2.3.0, nan@^2.6.2: +nan@^2.3.0, nan@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" @@ -6278,6 +6488,10 @@ nan@^2.8.0: version "2.9.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" +nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6427,9 +6641,9 @@ nodegit-promise@~4.0.0: dependencies: asap "~2.0.3" -nodegit@0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/nodegit/-/nodegit-0.21.0.tgz#9c81d446fadda73ad8ca4e39ddb2ab7845cfeae9" +nodegit@0.21.2: + version "0.21.2" + resolved "https://registry.yarnpkg.com/nodegit/-/nodegit-0.21.2.tgz#957c69a07a0afdeb21d1c69e9d3ad0a72e87acaa" dependencies: fs-extra "~0.27.0" lodash "^4.13.1" @@ -6875,6 +7089,13 @@ object.entries@^1.0.4: function-bind "^1.1.0" has "^1.0.1" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -7216,7 +7437,15 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -plist@2.1.0, plist@^2.1.0: +plist@3.0.1, plist@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + dependencies: + base64-js "^1.2.3" + xmlbuilder "^9.0.7" + xmldom "0.1.x" + +plist@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" dependencies: @@ -7507,7 +7736,7 @@ prebuild-install@^2.2.2: tunnel-agent "^0.6.0" xtend "4.0.1" -prebuild-install@^2.4.1: +prebuild-install@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" dependencies: @@ -7613,7 +7842,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@15.6.1: +prop-types@15.6.1, prop-types@^15.6.1: version "15.6.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" dependencies: @@ -7621,7 +7850,7 @@ prop-types@15.6.1: loose-envify "^1.3.1" object-assign "^4.1.1" -prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0: +prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0: version "15.6.0" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: @@ -7646,6 +7875,13 @@ proxy-addr@~2.0.2: forwarded "~0.1.2" ipaddr.js "1.5.2" +proxy-addr@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.6.0" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -7751,9 +7987,9 @@ railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" -ramda@^0.24.1: - version "0.24.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" +ramda@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" randexp@^0.4.2: version "0.4.6" @@ -8127,18 +8363,18 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -redux-form@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.2.3.tgz#a01111116f386f3d88451b5528dfbb180561a8b4" +redux-form@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.3.0.tgz#b92ef1639c86a6009b0821aacfc80ad8b5ac8c05" dependencies: deep-equal "^1.0.1" es6-error "^4.1.1" - hoist-non-react-statics "^2.3.1" - invariant "^2.2.2" + hoist-non-react-statics "^2.5.0" + invariant "^2.2.3" is-promise "^2.1.0" - lodash "^4.17.3" - lodash-es "^4.17.3" - prop-types "^15.5.9" + lodash "^4.17.5" + lodash-es "^4.17.5" + prop-types "^15.6.1" redux-mock-store@1.5.1: version "1.5.1" @@ -8185,6 +8421,10 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" +regexpp@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.0.1.tgz#d857c3a741dce075c2848dcb019a0a975b190d43" + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -8605,6 +8845,24 @@ send@0.16.1: range-parser "~1.2.0" statuses "~1.3.1" +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + serialport@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/serialport/-/serialport-5.0.0.tgz#08a1a494eaf5acdc34b5a7423c1877d997d2a8cf" @@ -8638,6 +8896,15 @@ serve-static@1.13.1: parseurl "~1.3.2" send "0.16.1" +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -8724,14 +8991,14 @@ single-line-log@^1.1.2: dependencies: string-width "^1.0.1" -sinon-chai@2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.14.0.tgz#da7dd4cc83cd6a260b67cca0f7a9fdae26a1205d" - sinon-chai@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.7.0.tgz#493df3a3d758933fdd3678d011a4f738d5e72540" +sinon-chai@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.0.0.tgz#d5cbd70fa71031edd96b528e0eed4038fcc99f29" + sinon@1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.12.2.tgz#dd893d1f93bfa652ae7c2a08c6eaa42898452c94" @@ -8740,9 +9007,9 @@ sinon@1.12.2: lolex "1.1.0" util ">=0.10.3 <1" -sinon@4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.4.2.tgz#c4c41d4bd346e1d33594daec2d5df0548334fc65" +sinon@4.4.9: + version "4.4.9" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.4.9.tgz#0792a2a5171eb0cf242edacb0eba3898b8b4297f" dependencies: "@sinonjs/formatio" "^2.0.0" diff "^3.1.0" @@ -8844,9 +9111,9 @@ source-map-resolve@^0.3.0: source-map-url "~0.3.0" urix "~0.1.0" -source-map-support@0.5.3, source-map-support@^0.5.2, source-map-support@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" +source-map-support@0.5.4, source-map-support@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" dependencies: source-map "^0.6.0" @@ -8991,7 +9258,7 @@ stat-mode@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" -"statuses@>= 1.3.1 < 2": +"statuses@>= 1.3.1 < 2", statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -9115,16 +9382,16 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.2.tgz#851b373c187890331776e9cde359eea9c95ecd00" +style-loader@0.20.3: + version "0.20.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4" dependencies: loader-utils "^1.1.0" - schema-utils "^0.4.3" + schema-utils "^0.4.5" -sudo-prompt@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.1.0.tgz#62dce8013b80dd242e5b6ca15d8b8cffb7c85472" +sudo-prompt@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.0.tgz#bcd4aaacdb367b77b4bffcce1c658c2b1dd327f3" sumchecker@^1.2.0: version "1.3.1" @@ -9193,6 +9460,12 @@ supports-color@^5.1.0: dependencies: has-flag "^3.0.0" +supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" + dependencies: + has-flag "^3.0.0" + supports-color@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a" @@ -9215,7 +9488,7 @@ symbol-observable@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" -table@^4.0.1: +table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: @@ -9234,6 +9507,10 @@ tapable@^0.2.3, tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" +tapable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" + tar-fs@^1.13.0, tar-fs@^1.15.3: version "1.16.0" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896" @@ -9322,9 +9599,9 @@ thunky@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" -tidepool-platform-client@0.35.0: - version "0.35.0" - resolved "https://registry.yarnpkg.com/tidepool-platform-client/-/tidepool-platform-client-0.35.0.tgz#304959631999bbb079fb09195a640538176e0df8" +tidepool-platform-client@0.37.0: + version "0.37.0" + resolved "https://registry.yarnpkg.com/tidepool-platform-client/-/tidepool-platform-client-0.37.0.tgz#b50cdc39075188e58b61864f7630197bd74371c6" dependencies: async "0.9.0" lodash "3.3.1" @@ -9452,6 +9729,13 @@ type-is@~1.6.15: media-typer "0.3.0" mime-types "~2.1.15" +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -9559,14 +9843,15 @@ unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" -update-notifier@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" +update-notifier@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.4.0.tgz#f9b4c700fbfd4ec12c811587258777d563d8c866" dependencies: boxen "^1.2.1" chalk "^2.0.1" configstore "^3.0.0" import-lazy "^2.1.0" + is-ci "^1.0.10" is-installed-globally "^0.1.0" is-npm "^1.0.0" latest-version "^3.0.0" @@ -9598,13 +9883,13 @@ url-join@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" -url-loader@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" +url-loader@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.0.1.tgz#61bc53f1f184d7343da2728a1289ef8722ea45ee" dependencies: - loader-utils "^1.0.2" - mime "^1.4.1" - schema-utils "^0.3.0" + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^0.4.3" url-parse-lax@^1.0.0: version "1.0.0" @@ -9658,6 +9943,13 @@ util-extend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + util@0.10.3, "util@>=0.10.3 <1", util@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -9860,9 +10152,9 @@ webpack-dev-server@2.9.4: webpack-dev-middleware "^1.11.0" yargs "^6.6.0" -webpack-hot-middleware@2.21.0: - version "2.21.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52" +webpack-hot-middleware@2.21.2: + version "2.21.2" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.2.tgz#2e2aa65563b8b32546b67e53b5a9667dcd80f327" dependencies: ansi-html "0.0.7" html-entities "^1.2.0" @@ -10053,7 +10345,7 @@ xmlbuilder@8.2.2: version "8.2.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" -xmlbuilder@9.0.7: +xmlbuilder@9.0.7, xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" From 79d4b6d2613ab88ed62bbef7094d1ddec93a6936 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 28 Mar 2018 12:18:01 -0400 Subject: [PATCH 61/97] couple more small updates --- .babelrc | 2 +- app/package.json | 4 ++-- app/yarn.lock | 36 +++++++++++++++++++++--------------- package.json | 4 ++-- yarn.lock | 12 ++++++------ 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/.babelrc b/.babelrc index da8439b0c6..ec23644351 100644 --- a/.babelrc +++ b/.babelrc @@ -1,6 +1,6 @@ { "presets": [ - ["env", { "targets": { "node": "8.2.1", "electron": "1.8.2" }, "useBuiltIns": true }], + ["env", { "targets": { "node": "8.2.1", "electron": "1.8.4" }, "useBuiltIns": true }], "stage-0", "react" ], diff --git a/app/package.json b/app/package.json index cef434c8e1..889e392d16 100755 --- a/app/package.json +++ b/app/package.json @@ -10,8 +10,8 @@ }, "license": "BSD-2-Clause", "dependencies": { - "drivelist": "6.0.4", - "keytar": "4.0.4", + "drivelist": "6.1.3", + "keytar": "4.2.1", "node-hid": "0.7.2", "serialport": "5.0.0", "usb": "1.3.1" diff --git a/app/yarn.lock b/app/yarn.lock index 19649b93f2..7ecbd4fd84 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -181,15 +181,16 @@ detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -drivelist@6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.0.4.tgz#971ac575356a8a4c14859824ecd28cdf3c586433" +drivelist@6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.1.3.tgz#5515764eebb4a5410ad429a6c5820c9b92e3c69f" dependencies: bindings "^1.3.0" debug "^3.1.0" + fast-plist "^0.1.2" js-yaml "^3.10.0" - nan "^2.8.0" - prebuild-install "^2.4.1" + nan "^2.9.2" + prebuild-install "^2.5.1" ecc-jsbn@~0.1.1: version "0.1.1" @@ -223,6 +224,10 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" +fast-plist@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/fast-plist/-/fast-plist-0.1.2.tgz#a45aff345196006d406ca6cdcd05f69051ef35b8" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -401,11 +406,12 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -keytar@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/keytar/-/keytar-4.0.4.tgz#59a306f448a1c6a309cd68cb29129095a8c8b1db" +keytar@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/keytar/-/keytar-4.2.1.tgz#8a06a6577fdf6373e0aa6b112277e63dec77fd12" dependencies: - nan "2.5.1" + nan "2.8.0" + prebuild-install "^2.4.1" mime-db@~1.30.0: version "1.30.0" @@ -445,14 +451,14 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -nan@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" - -nan@^2.6.2, nan@^2.8.0: +nan@2.8.0, nan@^2.6.2, nan@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + node-abi@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.1.2.tgz#4da6caceb6685fcd31e7dd1994ef6bb7d0a9c0b2" @@ -569,7 +575,7 @@ prebuild-install@^2.2.2: tunnel-agent "^0.6.0" xtend "4.0.1" -prebuild-install@^2.4.1: +prebuild-install@^2.4.1, prebuild-install@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" dependencies: diff --git a/package.json b/package.json index e0e4a49932..ff7ffc5b9f 100644 --- a/package.json +++ b/package.json @@ -204,7 +204,7 @@ "eslint-plugin-react": "7.7.0", "express": "4.16.3", "extract-text-webpack-plugin": "3.0.2", - "fbjs-scripts": "0.8.1", + "fbjs-scripts": "0.8.2", "file-loader": "1.1.11", "flux-standard-action": "2.0.1", "ftp": "0.3.10", @@ -225,7 +225,7 @@ "salinity": "0.0.8", "serialport": "5.0.0", "shelljs": "0.8.1", - "sinon": "4.4.9", + "sinon": "4.4.10", "sinon-chai": "3.0.0", "spectron": "3.8.0", "style-loader": "0.20.3", diff --git a/yarn.lock b/yarn.lock index 73270ca8bd..5c8133c641 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4160,9 +4160,9 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" -fbjs-scripts@0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.1.tgz#c1c6efbecb7f008478468976b783880c2f669765" +fbjs-scripts@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.2.tgz#d2ce902ec3c8bf7cea5d0daf8692661a90710f25" dependencies: babel-core "^6.7.2" babel-preset-fbjs "^2.1.2" @@ -9007,9 +9007,9 @@ sinon@1.12.2: lolex "1.1.0" util ">=0.10.3 <1" -sinon@4.4.9: - version "4.4.9" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.4.9.tgz#0792a2a5171eb0cf242edacb0eba3898b8b4297f" +sinon@4.4.10: + version "4.4.10" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.4.10.tgz#592ba39256cd5aecd35c883e1da2759b75d90e02" dependencies: "@sinonjs/formatio" "^2.0.0" diff "^3.1.0" From 4a42075914288986fbcd1739c8f6160eae23f7e6 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 29 Mar 2018 17:07:10 +0200 Subject: [PATCH 62/97] fix record number wrap --- lib/drivers/abbott/freeStyleLibreData.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js index 6ec128ba14..0819de393f 100644 --- a/lib/drivers/abbott/freeStyleLibreData.js +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -521,8 +521,13 @@ export default class FreeStyleLibreData { wrapFields.CRC16, )) { const DB_RECORD_NUMBER_OFFSET = 0; - this.dbRecordNumberNextWrap[databaseTableId] = + const nextDbRecordNumber = aapPacket.data.readUInt32LE(RECORD_OFFSET + DB_RECORD_NUMBER_OFFSET); + // contrary to the specs nextDbRecordNumber is not always a multiple of 0x10000, but in fact + // just the record number that will be assigned to the next db record + // so we round it up to the next multiple of 0x10000 here + this.dbRecordNumberNextWrap[databaseTableId] = + Math.ceil(nextDbRecordNumber / 0x10000) * 0x10000; } } } From 75fb5ffc0833da0e8b90c077331dbb220047ad52 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 29 Mar 2018 16:07:58 +0100 Subject: [PATCH 63/97] handle device time check for Libre Pro --- lib/drivers/abbott/freeStyleLibreProtocol.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/drivers/abbott/freeStyleLibreProtocol.js b/lib/drivers/abbott/freeStyleLibreProtocol.js index 2e9f231ca3..950231433d 100644 --- a/lib/drivers/abbott/freeStyleLibreProtocol.js +++ b/lib/drivers/abbott/freeStyleLibreProtocol.js @@ -679,15 +679,19 @@ export default class FreeStyleLibreProtocol { /* arr[6] indicates if valid (1) or uncertain (0) - arr[7] contains offset (in seconds) between factory time and user time + arr[7] contains offset (in seconds) between factory time and user time (but not on Pro) */ - const dateTime = new Date(Date.UTC(...arr.slice(0, -2)) + (arr[7] * sundial.SEC_TO_MSEC)); + let dateTime = Date.UTC(...arr.slice(0, -2)); + + if (arr.length === 8) { + dateTime += (arr[7] * sundial.SEC_TO_MSEC); + } if (arr[6] === 0) { debug('Reader time not valid'); cb(null); } else { - cb({ readerTime: dateTime }); + cb({ readerTime: new Date(dateTime) }); } }, cb); } From 0fc143efb73b84239811cc3853a9df5e51999002 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 29 Mar 2018 17:09:29 +0200 Subject: [PATCH 64/97] handle user time change from historical DB --- lib/drivers/abbott/freeStyleLibreData.js | 28 ++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js index 0819de393f..190ba40a26 100644 --- a/lib/drivers/abbott/freeStyleLibreData.js +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -52,6 +52,7 @@ const FORMAT = { RECORD_HEADER: 'sbbin', HISTORICAL_DATA: 'ssss', TIME_CHANGE: 'insss', // despite the specs, user time offset is a signed value, same as in header + USER_TIME_CHANGE: 'nssss', }; export const FORMAT_LENGTH = _.mapValues(FORMAT, format => struct.structlen(format)); @@ -249,7 +250,9 @@ export default class FreeStyleLibreData { } buildTimeChangeRecords() { - this.records.filter(elem => elem.headerFields.recordType === DB_RECORD_TYPE.TIME_CHANGE_RESULT) + this.records.filter(elem => + (elem.headerFields.recordType === DB_RECORD_TYPE.TIME_CHANGE_RESULT) + || (elem.headerFields.recordType === DB_RECORD_TYPE.USER_TIME_CHANGE)) .forEach((record) => { const oldDateTime = this.getDateTime( record.timeChangeFields.oldReaderTime, @@ -265,7 +268,14 @@ export default class FreeStyleLibreData { .with_deviceTime(sundial.formatDeviceTime(record.jsDate)) .set('index', record.headerFields.recordNumber) .set('jsDate', record.jsDate); - this.postRecords.push(timeChange); + + // check if this time change is a duplicate of the previous one from a different DB + const previousRecord = this.postRecords[this.postRecords.length - 1]; + if (!(previousRecord + && previousRecord.subType === 'timeChange' + && _.isEqual(previousRecord.change, timeChange.change))) { + this.postRecords.push(timeChange); + } }); } @@ -462,6 +472,20 @@ export default class FreeStyleLibreData { this.records.push({ headerFields, timeChangeFields, jsDate: dateTime }); } } + } else if (headerFields.recordType === DB_RECORD_TYPE.USER_TIME_CHANGE) { + const timeChangeFields = struct.unpack( + aapPacket.data, RECORD_OFFSET, FORMAT.USER_TIME_CHANGE, + ['oldUserTimeOffset', 'unused1', 'unused2', 'unused3', 'CRC16'], + ); + + if (this.checkCrc16(aapPacket.data.slice( + RECORD_HEADER_OFFSET, + RECORD_OFFSET + (FORMAT_LENGTH.USER_TIME_CHANGE - 2), + ), timeChangeFields.CRC16)) { + // reader time does not change on user time change events, so use current value + timeChangeFields.oldReaderTime = headerFields.readerTime; + this.records.push({ headerFields, timeChangeFields, jsDate: dateTime }); + } } else if (headerFields.recordType === DB_RECORD_TYPE.HISTORICAL_DATA) { const historyFields = struct.unpack( aapPacket.data, RECORD_OFFSET, FORMAT.HISTORICAL_DATA, From d165402a7704602899046d4ddc9c28e75ec28ca0 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 29 Mar 2018 17:10:34 +0200 Subject: [PATCH 65/97] remove truncating of historical records --- lib/drivers/abbott/freeStyleLibreData.js | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js index 190ba40a26..b8208d79bf 100644 --- a/lib/drivers/abbott/freeStyleLibreData.js +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -87,7 +87,6 @@ export default class FreeStyleLibreData { this.postRecords = []; this.dbRecordNumberNextWrap = {}; - this.numResultRecords = 0; // calculate next DB record number wrap, so record numbers can be recovered on truncated DBs const nextWrap = Math.ceil(dbRecordNumber / 0x10000) * 0x10000; @@ -96,9 +95,6 @@ export default class FreeStyleLibreData { this.dbRecordNumberNextWrap[DB_TABLE_ID.HISTORICAL_DATA] = nextWrap; this.dbRecordNumberNextWrap[DB_TABLE_ID.EVENT] = nextWrap; - // start with newest record number and search backwards when processing the DB records - this.oldestResultRecordNumber = dbRecordNumber; - // sort AAP packets by their OP code const aapPacketsByOpCode = {}; aapPackets.forEach((aapPacket) => { @@ -123,19 +119,6 @@ export default class FreeStyleLibreData { } }); - // the oldest record number in the result DB is used as limit how far back the history records - // are processed but in case the result record DB does not contain any data, process at least - // the last 5000 records - // this number is lower than the maximal size of the result DB, so we will not process further - // back than any potentially truncated time change records - const oldestValidRecordNumber = - Math.max(0, this.oldestResultRecordNumber - Math.max(0, 5000 - this.numResultRecords)); - - // use only records that are newer than the oldestValidRecordNumber - // older records cannot be properly timestamped due to potentially truncated time change records - this.records = - this.records.filter(elem => elem.headerFields.recordNumber >= oldestValidRecordNumber); - if (this.records.length === 0) { debug( 'processAapPackets: no valid database records found in', @@ -449,13 +432,6 @@ export default class FreeStyleLibreData { headerFields.recordNumber = this.dbRecordNumberNextWrap[databaseTableId] - (0x10000 - headerFields.recordNumber); - // find the lowest record number in the results database - if (databaseTableId === DB_TABLE_ID.GLUCOSE_RESULT) { - this.numResultRecords += 1; - this.oldestResultRecordNumber = - Math.min(this.oldestResultRecordNumber, headerFields.recordNumber); - } - const dateTime = this.getDateTime(headerFields.readerTime, headerFields.userTimeOffset); if (headerFields.recordType === DB_RECORD_TYPE.TIME_CHANGE_RESULT) { From 7d0b1c92b6c93397fc602c4021128611e208bc45 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 29 Mar 2018 16:12:59 +0100 Subject: [PATCH 66/97] disconnect bayer meter if time incorrect --- lib/drivers/bayer/bayerContourNext.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/drivers/bayer/bayerContourNext.js b/lib/drivers/bayer/bayerContourNext.js index a78c0ec39d..9fff021385 100644 --- a/lib/drivers/bayer/bayerContourNext.js +++ b/lib/drivers/bayer/bayerContourNext.js @@ -540,11 +540,19 @@ module.exports = function (config) { debug('in getConfigInfo', data); getOneRecord(data, function (err, result) { progress(100); - if (!err){ + if (!err) { common.checkDeviceTime(result.deviceTime, cfg, function(err2) { - data.connect = true; - _.assign(data, result); - cb(err2, data); + if (err2) { + cfg.deviceComms.removeListeners(); + hidDevice.send(buildAckPacket(), function(err, result) { + progress(100); + return cb(err2, data); + }); + } else { + data.connect = true; + _.assign(data, result); + return cb(null, data); + } }); } else { From cab2495d7732584b6eba30891541160c02cd0d89 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 29 Mar 2018 17:04:12 +0100 Subject: [PATCH 67/97] create device tag before time check --- lib/drivers/animas/animasDriver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/drivers/animas/animasDriver.js b/lib/drivers/animas/animasDriver.js index c4b19572b4..6e642a6878 100644 --- a/lib/drivers/animas/animasDriver.js +++ b/lib/drivers/animas/animasDriver.js @@ -36,6 +36,7 @@ var verbose = debugMode.isDebug; module.exports = function (config) { var cfg = _.clone(config); + cfg.deviceTags = ['insulin-pump']; var serialDevice = config.deviceComms; var animasDeviceId = null; var simulator = null; @@ -2186,7 +2187,6 @@ module.exports = function (config) { var changes = []; var tzoUtil = new TZOUtil(cfg.timezone, mostRecent, changes); cfg.tzoUtil = tzoUtil; - cfg.deviceTags = ['insulin-pump']; var postrecords = []; postrecords = buildBolusRecords(data, postrecords); From fe2d6cea7446c05fce00661c7ef381e23b8561cf Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 3 Apr 2018 11:55:20 +0100 Subject: [PATCH 68/97] update ultra 2 and ultramini instructions --- app/reducers/devices.js | 4 ++-- lib/drivers/onetouch/oneTouchUltra2.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/reducers/devices.js b/app/reducers/devices.js index 30e93b0536..0a1ca637b0 100644 --- a/app/reducers/devices.js +++ b/app/reducers/devices.js @@ -96,7 +96,7 @@ const devices = { enabled: {mac: true, win: true} }, onetouchultramini: { - instructions: 'Plug in meter with cable', + instructions: 'Plug in meter with cable and make sure the meter is switched off', name: 'OneTouch UltraMini', key: 'onetouchultramini', showDriverLink: {mac: true, win: true}, @@ -104,7 +104,7 @@ const devices = { enabled: {mac: true, win: true} }, onetouchultra2: { - instructions: 'Plug in meter with cable', + instructions: 'Plug in meter with cable and make sure the meter is switched off', name: 'OneTouch Ultra 2', key: 'onetouchultra2', showDriverLink: {mac: true, win: true}, diff --git a/lib/drivers/onetouch/oneTouchUltra2.js b/lib/drivers/onetouch/oneTouchUltra2.js index bad3647c99..c1cd786392 100644 --- a/lib/drivers/onetouch/oneTouchUltra2.js +++ b/lib/drivers/onetouch/oneTouchUltra2.js @@ -153,7 +153,7 @@ module.exports = function (config) { } var error = null; if(pkt.packet_len === 1 && pkt.bytes[0] === 0) { - error = new Error('Meter not plugged into cable'); + error = new Error('The meter is not plugged into the cable or the meter is not switched off.'); } callback(error, pkt); }); From ecf49bea79425aac9e9f57eebff23b731a785d41 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 3 Apr 2018 12:04:43 +0100 Subject: [PATCH 69/97] sending EOT when time check fails for bcn --- lib/drivers/bayer/bayerContourNext.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/drivers/bayer/bayerContourNext.js b/lib/drivers/bayer/bayerContourNext.js index 9fff021385..21ab998fd0 100644 --- a/lib/drivers/bayer/bayerContourNext.js +++ b/lib/drivers/bayer/bayerContourNext.js @@ -544,7 +544,7 @@ module.exports = function (config) { common.checkDeviceTime(result.deviceTime, cfg, function(err2) { if (err2) { cfg.deviceComms.removeListeners(); - hidDevice.send(buildAckPacket(), function(err, result) { + hidDevice.send(buildPacket(ASCII_CONTROL.EOT, 1), function(err, result) { progress(100); return cb(err2, data); }); From 462bf542b7b94368f5e6e39aca8cbc8b23a64053 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 3 Apr 2018 12:05:49 +0100 Subject: [PATCH 70/97] bump test version --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 35fa6d3197..51d9026e12 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.3", + "version": "2.5.4-time-difference.", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 35e8daad9c..ce522d7781 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4-time-difference.3", + "version": "2.5.4-time-difference.4", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 31f381a9811e0282d6258b0624cd073d0c2b4c78 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 3 Apr 2018 13:13:51 +0100 Subject: [PATCH 71/97] fix version in app package.json --- app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/package.json b/app/package.json index 51d9026e12..38614a0192 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.", + "version": "2.5.4-time-difference.4", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { From 78f59307e09633cddd728ffab9da76b15bb2f1c8 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 3 Apr 2018 13:51:55 +0100 Subject: [PATCH 72/97] read all data before checking device time on bcn meters --- lib/drivers/bayer/bayerContourNext.js | 37 ++++++++++++++------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/lib/drivers/bayer/bayerContourNext.js b/lib/drivers/bayer/bayerContourNext.js index 21ab998fd0..84fd3b3ad3 100644 --- a/lib/drivers/bayer/bayerContourNext.js +++ b/lib/drivers/bayer/bayerContourNext.js @@ -541,22 +541,11 @@ module.exports = function (config) { getOneRecord(data, function (err, result) { progress(100); if (!err) { - common.checkDeviceTime(result.deviceTime, cfg, function(err2) { - if (err2) { - cfg.deviceComms.removeListeners(); - hidDevice.send(buildPacket(ASCII_CONTROL.EOT, 1), function(err, result) { - progress(100); - return cb(err2, data); - }); - } else { - data.connect = true; - _.assign(data, result); - return cb(null, data); - } - }); - + data.connect = true; + _.assign(data, result); + return cb(null, data); } else { - return cb(err,result); + return cb(err,result); } }); }, @@ -593,10 +582,22 @@ module.exports = function (config) { data.bgmReadings = []; } else { debug('fetchData', dataRecords); - data.bgmReadings = dataRecords; + // we have to read all the data before we can check the device time, + // as in data transfer mode the meter will send everything it has + common.checkDeviceTime(data.deviceTime, cfg, function(err2) { + if (err2) { + cfg.deviceComms.removeListeners(); + hidDevice.send(buildAckPacket(), function(err, result) { + progress(100); + return cb(err2, data); + }); + } else { + data.fetchData = true; + data.bgmReadings = dataRecords; + cb(err, data); + } + }); } - data.fetchData = true; - cb(err, data); } ); }, From d7b6a6558bb0d788f0e72c02b623f6e2f47a2fae Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 3 Apr 2018 13:58:29 +0100 Subject: [PATCH 73/97] disconnect if time check fails --- lib/drivers/abbott/abbottFreeStyleLite.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/drivers/abbott/abbottFreeStyleLite.js b/lib/drivers/abbott/abbottFreeStyleLite.js index 1800fb52e8..4a3f76f78b 100644 --- a/lib/drivers/abbott/abbottFreeStyleLite.js +++ b/lib/drivers/abbott/abbottFreeStyleLite.js @@ -384,6 +384,16 @@ module.exports = function (config) { return dataToPost; }; + var disconnect = function(progress, data, cb) { + cfg.deviceComms.clearPacketHandler(); + cfg.deviceComms.clearErrorHandler(); + cfg.deviceComms.disconnect(function() { + progress(100); + data.cleanup = true; + cb(null, data); + }); + }; + return { // using the default detect for this driver // detect: function(cb) { @@ -452,7 +462,9 @@ module.exports = function (config) { data.numEntries = result.numEntries; common.checkDeviceTime(data.deviceTime, cfg, function(checkErr) { - cb(checkErr, data); + disconnect(progress, data, function() { + cb(checkErr, data); + }); }); }); }, @@ -503,11 +515,7 @@ module.exports = function (config) { }, cleanup: function (progress, data, cb) { - cfg.deviceComms.clearPacketHandler(); - cfg.deviceComms.clearErrorHandler(); - cfg.deviceComms.disconnect(function() { - progress(100); - data.cleanup = true; + disconnect(progress, data, function() { cb(null, data); }); }, From ee15a9dc2e9a0df1a05e7d3270dc49ce37593c8e Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 3 Apr 2018 14:10:32 +0100 Subject: [PATCH 74/97] bump test version again --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 38614a0192..85b98d486e 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.4", + "version": "2.5.4-time-difference.5", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index ce522d7781..829c96e58c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4-time-difference.4", + "version": "2.5.4-time-difference.5", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 068ff40baabae96d55057486a21390f992da0154 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 4 Apr 2018 14:28:07 +0100 Subject: [PATCH 75/97] don't show Upload Anyway button for Animas pumps --- app/components/DeviceTimeModal.js | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/app/components/DeviceTimeModal.js b/app/components/DeviceTimeModal.js index 7b123c69aa..41afac4bf7 100644 --- a/app/components/DeviceTimeModal.js +++ b/app/components/DeviceTimeModal.js @@ -41,6 +41,12 @@ export class DeviceTimeModal extends Component { return 'unknown'; } + isAnimas = () => { + const { showingDeviceTimePrompt } = this.props; + const {deviceInfo} = showingDeviceTimePrompt.cfg; + return deviceInfo && deviceInfo.driverId && deviceInfo.driverId === 'Animas'; + } + handleContinue = () => { const { sync, showingDeviceTimePrompt } = this.props; showingDeviceTimePrompt.callback(null); @@ -54,14 +60,21 @@ export class DeviceTimeModal extends Component { } getActions = () => { - return [ - , + const buttons = []; + if ( !this.isAnimas() ) { + buttons.push( + , + ); + } + buttons.push( - ]; + ); + + return buttons; } getMessage = () => { @@ -77,7 +90,7 @@ export class DeviceTimeModal extends Component {
1. Update the time on your pump
2. Suspend your pump
3. Resume your pump
-
4. Try uploading again
+
4. Try uploading again
); @@ -90,7 +103,7 @@ export class DeviceTimeModal extends Component {
1. Update the time and date on your CGM
2. Wait for a new reading to appear
-
3. Try uploading again
+
3. Try uploading again
); @@ -103,7 +116,7 @@ export class DeviceTimeModal extends Component {
1. Update the time and date on your meter
2. Test your blood glucose again
-
3. Try uploading again
+
3. Try uploading again
); From f9b7e7dcf0b070953ccbcdad97ed42c5f3eda731 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 4 Apr 2018 15:02:30 +0100 Subject: [PATCH 76/97] disconnect if time check fails for freestyle meters --- lib/drivers/abbott/abbottFreeStyleLite.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/drivers/abbott/abbottFreeStyleLite.js b/lib/drivers/abbott/abbottFreeStyleLite.js index 4a3f76f78b..5c09af6e68 100644 --- a/lib/drivers/abbott/abbottFreeStyleLite.js +++ b/lib/drivers/abbott/abbottFreeStyleLite.js @@ -461,10 +461,16 @@ module.exports = function (config) { data.logEntries = result.logEntries; data.numEntries = result.numEntries; - common.checkDeviceTime(data.deviceTime, cfg, function(checkErr) { - disconnect(progress, data, function() { - cb(checkErr, data); - }); + common.checkDeviceTime(data.deviceTime, cfg, function (checkErr) { + if (checkErr) { + cfg.deviceComms.clearPacketHandler(); + cfg.deviceComms.clearErrorHandler(); + cfg.deviceComms.disconnect(function() { + return cb(checkErr, null); + }); + } else { + cb(null, data); + } }); }); }, From e4b4aa74c096fad7b0a22800d4172a4848f94359 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 4 Apr 2018 15:03:02 +0100 Subject: [PATCH 77/97] bump test version --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 85b98d486e..f0aac478b0 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.5", + "version": "2.5.4-time-difference.6", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 829c96e58c..c9a724e90b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4-time-difference.5", + "version": "2.5.4-time-difference.6", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From ece3d55e379847f0324c782bd729bc35e1828553 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 4 Apr 2018 16:52:02 +0100 Subject: [PATCH 78/97] use disconnect function for freestyle meters --- app/package.json | 2 +- lib/drivers/abbott/abbottFreeStyleLite.js | 10 ++-------- package.json | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/app/package.json b/app/package.json index f0aac478b0..c851851bf2 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.6", + "version": "2.5.4-time-difference.7", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/lib/drivers/abbott/abbottFreeStyleLite.js b/lib/drivers/abbott/abbottFreeStyleLite.js index 5c09af6e68..10e9d1ae96 100644 --- a/lib/drivers/abbott/abbottFreeStyleLite.js +++ b/lib/drivers/abbott/abbottFreeStyleLite.js @@ -432,10 +432,6 @@ module.exports = function (config) { fetchData: function (progress, data, cb) { debug('in fetchData'); getAllData({}, function (err, result) { - if (err) { - return cb(err, null); - } - progress(100); if (err) { return cb(err, data); @@ -463,10 +459,8 @@ module.exports = function (config) { common.checkDeviceTime(data.deviceTime, cfg, function (checkErr) { if (checkErr) { - cfg.deviceComms.clearPacketHandler(); - cfg.deviceComms.clearErrorHandler(); - cfg.deviceComms.disconnect(function() { - return cb(checkErr, null); + disconnect(progress, data, function() { + cb(checkErr, null); }); } else { cb(null, data); diff --git a/package.json b/package.json index c9a724e90b..c6ebb8db73 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4-time-difference.6", + "version": "2.5.4-time-difference.7", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 5c0ef1931c61375137fe8c5f7099fe9aa8e297f2 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 4 Apr 2018 17:05:02 +0100 Subject: [PATCH 79/97] list drives when connecting verio and verio flex --- app/package.json | 2 +- lib/drivers/onetouch/oneTouchVerio.js | 3 ++- package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/package.json b/app/package.json index 889e392d16..55820aeece 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.5-electron-update.2", + "version": "2.5.5-electron-update.3", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/lib/drivers/onetouch/oneTouchVerio.js b/lib/drivers/onetouch/oneTouchVerio.js index a00b535817..9bbabf7c19 100644 --- a/lib/drivers/onetouch/oneTouchVerio.js +++ b/lib/drivers/onetouch/oneTouchVerio.js @@ -283,8 +283,9 @@ class BlockDevice { return; } this.devicePath = null; + debug('Drives:', JSON.stringify(drives, null, 4)); drives.forEach((drive) => { - if (drive.description.endsWith('LifeScan Media') && !drive.system) { + if (drive.description && drive.description.endsWith('LifeScan Media') && !drive.system) { this.devicePath = drive.raw; } }); diff --git a/package.json b/package.json index ff7ffc5b9f..5868189004 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.5-electron-update.2", + "version": "2.5.5-electron-update.3", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 3bedac7bffe646ccda0468f8f7bcded45fa89ec4 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 5 Apr 2018 14:05:13 +0100 Subject: [PATCH 80/97] v2.5.5 --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index c851851bf2..454a9fd3ed 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.4-time-difference.7", + "version": "2.5.5", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index c6ebb8db73..bae08118d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.4-time-difference.7", + "version": "2.5.5", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From fda7ae221e4c9f6c6f366cc14ffdb1a249560acb Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 17 Apr 2018 13:21:12 +0100 Subject: [PATCH 81/97] build new test release --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 23c2f04840..5d346e4b5d 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.3-libre-decompress-bug.1", + "version": "2.5.6-fslibre-fix-missing-records.1", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index f72fc27298..732a8f6a24 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.3-libre-decompress-bug.1", + "version": "2.5.6-fslibre-fix-missing-records.1", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From a4fd26963e351575f07061dd79d7b0f3c6e23bbb Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 17 Apr 2018 16:48:34 +0100 Subject: [PATCH 82/97] properly handle eight insulin sensitivities and BG targets --- lib/drivers/medtronic/medtronicDriver.js | 1 - lib/drivers/medtronic/processData.js | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/drivers/medtronic/medtronicDriver.js b/lib/drivers/medtronic/medtronicDriver.js index 5378d6c2c0..90e6515c97 100644 --- a/lib/drivers/medtronic/medtronicDriver.js +++ b/lib/drivers/medtronic/medtronicDriver.js @@ -290,7 +290,6 @@ module.exports = function (config) { var medtronicMessage = packet.slice(MEDTRONIC_PACKET_START); var bgUnits = BG_UNITS[medtronicMessage[0]]; var bgTargets = proc.getBGTargets(medtronicMessage, bgUnits); - return {bgTargets : bgTargets, bgUnits: bgUnits}; } }; diff --git a/lib/drivers/medtronic/processData.js b/lib/drivers/medtronic/processData.js index c975226cd3..917c5396b3 100644 --- a/lib/drivers/medtronic/processData.js +++ b/lib/drivers/medtronic/processData.js @@ -734,8 +734,8 @@ function buildSettings(records) { var SIZES = { CARB_RATIO :27, - INSULIN_SENSITIVITY: 16, - BG_TARGET : 25 + INSULIN_SENSITIVITY: 17, + BG_TARGET : 24 }; var oldSettings = {}; @@ -747,13 +747,12 @@ function buildSettings(records) { carb : encoded & 0x01 ? 'grams' : 'exchanges' }; }; - oldSettings.units = getUnits(record.body[0]); oldSettings.carbRatio = getCarbRatios(record.body, oldSettings.units.carb); var index = SIZES.CARB_RATIO; oldSettings.insulinSensitivity = getInsulinSensitivities(struct.extractBytes(record.body, index, SIZES.INSULIN_SENSITIVITY), oldSettings.units.bg); index += SIZES.INSULIN_SENSITIVITY; - oldSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index, SIZES.BG_TARGET), oldSettings.units.bg); + oldSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1, SIZES.BG_TARGET + 1), oldSettings.units.bg); index += SIZES.BG_TARGET; newSettings.units = getUnits(record.body[index]); @@ -761,7 +760,7 @@ function buildSettings(records) { index += SIZES.CARB_RATIO; newSettings.insulinSensitivity = getInsulinSensitivities(struct.extractBytes(record.body, index,SIZES.INSULIN_SENSITIVITY), newSettings.units.bg); index += SIZES.INSULIN_SENSITIVITY; - newSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index,SIZES.BG_TARGET), newSettings.units.bg); + newSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1,SIZES.BG_TARGET + 1), newSettings.units.bg); return { old: oldSettings, new: newSettings}; }; From 4d5427ac114380c0fb9b2a1406b6b7bc4c4b9cd5 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 17 Apr 2018 16:51:19 +0100 Subject: [PATCH 83/97] fix some spacing --- lib/drivers/medtronic/medtronicDriver.js | 1 + lib/drivers/medtronic/processData.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/drivers/medtronic/medtronicDriver.js b/lib/drivers/medtronic/medtronicDriver.js index 90e6515c97..5378d6c2c0 100644 --- a/lib/drivers/medtronic/medtronicDriver.js +++ b/lib/drivers/medtronic/medtronicDriver.js @@ -290,6 +290,7 @@ module.exports = function (config) { var medtronicMessage = packet.slice(MEDTRONIC_PACKET_START); var bgUnits = BG_UNITS[medtronicMessage[0]]; var bgTargets = proc.getBGTargets(medtronicMessage, bgUnits); + return {bgTargets : bgTargets, bgUnits: bgUnits}; } }; diff --git a/lib/drivers/medtronic/processData.js b/lib/drivers/medtronic/processData.js index 917c5396b3..622d84cbce 100644 --- a/lib/drivers/medtronic/processData.js +++ b/lib/drivers/medtronic/processData.js @@ -760,7 +760,7 @@ function buildSettings(records) { index += SIZES.CARB_RATIO; newSettings.insulinSensitivity = getInsulinSensitivities(struct.extractBytes(record.body, index,SIZES.INSULIN_SENSITIVITY), newSettings.units.bg); index += SIZES.INSULIN_SENSITIVITY; - newSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1,SIZES.BG_TARGET + 1), newSettings.units.bg); + newSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1, SIZES.BG_TARGET + 1), newSettings.units.bg); return { old: oldSettings, new: newSettings}; }; From 8fdef3b297b093d7b2e65a9fa0d6bb5edfcaa388 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 18 Apr 2018 09:33:18 +0100 Subject: [PATCH 84/97] set BG target size properly --- lib/drivers/medtronic/processData.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/drivers/medtronic/processData.js b/lib/drivers/medtronic/processData.js index 622d84cbce..6b4118f54c 100644 --- a/lib/drivers/medtronic/processData.js +++ b/lib/drivers/medtronic/processData.js @@ -735,7 +735,7 @@ function buildSettings(records) { var SIZES = { CARB_RATIO :27, INSULIN_SENSITIVITY: 17, - BG_TARGET : 24 + BG_TARGET : 25 }; var oldSettings = {}; @@ -752,15 +752,15 @@ function buildSettings(records) { var index = SIZES.CARB_RATIO; oldSettings.insulinSensitivity = getInsulinSensitivities(struct.extractBytes(record.body, index, SIZES.INSULIN_SENSITIVITY), oldSettings.units.bg); index += SIZES.INSULIN_SENSITIVITY; - oldSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1, SIZES.BG_TARGET + 1), oldSettings.units.bg); - index += SIZES.BG_TARGET; + oldSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1, SIZES.BG_TARGET), oldSettings.units.bg); + index += SIZES.BG_TARGET - 1; newSettings.units = getUnits(record.body[index]); newSettings.carbRatio = getCarbRatios(struct.extractBytes(record.body, index, SIZES.CARB_RATIO), newSettings.units.carb); index += SIZES.CARB_RATIO; newSettings.insulinSensitivity = getInsulinSensitivities(struct.extractBytes(record.body, index,SIZES.INSULIN_SENSITIVITY), newSettings.units.bg); index += SIZES.INSULIN_SENSITIVITY; - newSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1, SIZES.BG_TARGET + 1), newSettings.units.bg); + newSettings.bgTarget = getBGTargets(struct.extractBytes(record.body, index - 1, SIZES.BG_TARGET), newSettings.units.bg); return { old: oldSettings, new: newSettings}; }; From 56169d43a935216c19545fc3d04f89fe38351712 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 18 Apr 2018 10:58:04 +0100 Subject: [PATCH 85/97] bump drivelist to 6.1.7 to fix verio issue on el capitan --- app/package.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/package.json b/app/package.json index 55820aeece..153043a3e0 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.5-electron-update.3", + "version": "2.5.5-electron-update.4", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { @@ -10,7 +10,7 @@ }, "license": "BSD-2-Clause", "dependencies": { - "drivelist": "6.1.3", + "drivelist": "6.1.7", "keytar": "4.2.1", "node-hid": "0.7.2", "serialport": "5.0.0", diff --git a/package.json b/package.json index 5868189004..4f7c1029a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.5-electron-update.3", + "version": "2.5.5-electron-update.4", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", @@ -185,7 +185,7 @@ "css-loader": "0.28.11", "devtron": "1.4.0", "difflet": "1.0.1", - "drivelist": "6.1.3", + "drivelist": "6.1.7", "electron": "1.8.4", "electron-builder": "20.8.1", "electron-devtools-installer": "2.2.3", From 0d89512c03b1278bbb9645d452b5dfe7ea33ed80 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 18 Apr 2018 11:03:25 +0100 Subject: [PATCH 86/97] update yarn lockfile --- app/yarn.lock | 18 +++++++++--------- yarn.lock | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/yarn.lock b/app/yarn.lock index 7ecbd4fd84..d4efd135c6 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -181,15 +181,15 @@ detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -drivelist@6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.1.3.tgz#5515764eebb4a5410ad429a6c5820c9b92e3c69f" +drivelist@6.1.7: + version "6.1.7" + resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.1.7.tgz#fb4fb498886896cf11b17510dd5a71ac19793449" dependencies: bindings "^1.3.0" debug "^3.1.0" fast-plist "^0.1.2" - js-yaml "^3.10.0" - nan "^2.9.2" + js-yaml "^3.11.0" + nan "^2.10.0" prebuild-install "^2.5.1" ecc-jsbn@~0.1.1: @@ -368,9 +368,9 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -js-yaml@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" +js-yaml@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -455,7 +455,7 @@ nan@2.8.0, nan@^2.6.2, nan@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" -nan@^2.9.2: +nan@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" diff --git a/yarn.lock b/yarn.lock index 5c8133c641..7d31d94c16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3218,15 +3218,15 @@ dotenv@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.0.tgz#0206eb5b336639bf377618a2a304ff00c6a1fddb" -drivelist@6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.1.3.tgz#5515764eebb4a5410ad429a6c5820c9b92e3c69f" +drivelist@6.1.7: + version "6.1.7" + resolved "https://registry.yarnpkg.com/drivelist/-/drivelist-6.1.7.tgz#fb4fb498886896cf11b17510dd5a71ac19793449" dependencies: bindings "^1.3.0" debug "^3.1.0" fast-plist "^0.1.2" - js-yaml "^3.10.0" - nan "^2.9.2" + js-yaml "^3.11.0" + nan "^2.10.0" prebuild-install "^2.5.1" duplexer2@0.0.2: @@ -6480,6 +6480,10 @@ mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +nan@^2.10.0, nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + nan@^2.3.0, nan@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" @@ -6488,10 +6492,6 @@ nan@^2.8.0: version "2.9.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" -nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" From e285fc341586d4a29b55fc6bbd4789f5d157f1dd Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 19 Apr 2018 10:12:40 +0100 Subject: [PATCH 87/97] create test release --- app/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index 454a9fd3ed..bb1cdf6381 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.5.5", + "version": "2.5.6-calculator-settings-fix.1", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index bae08118d4..a4f4cfecf5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.5.5", + "version": "2.5.6-calculator-settings-fix.1", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 6b2a965384248a5a1d3cd072a0e781d6f5d72e94 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Fri, 20 Apr 2018 15:07:29 -0400 Subject: [PATCH 88/97] timezone copy updates and focus TZ selector on cancel --- app/actions/sync.js | 7 ++++++ app/components/DeviceTimeModal.js | 21 ++++++++-------- app/components/TimezoneDropdown.js | 20 +++++++++++++++- app/constants/actionSources.js | 1 + app/constants/actionTypes.js | 1 + app/containers/MainPage.js | 5 +++- app/package.json | 2 +- app/reducers/misc.js | 12 ++++++++++ package.json | 2 +- styles/components/DeviceTimeModal.module.less | 2 ++ test/app/actions/sync.test.js | 16 +++++++++++++ test/app/reducers/misc.test.js | 24 +++++++++++++++++++ 12 files changed, 98 insertions(+), 15 deletions(-) diff --git a/app/actions/sync.js b/app/actions/sync.js index 6c5bbd5f11..b6915c9132 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -790,4 +790,11 @@ export function dismissedDeviceTimePromp() { type: actionTypes.DISMISS_DEVICE_TIME_PROMPT, meta: { source: actionSources[actionTypes.DISMISS_DEVICE_TIME_PROMPT] } }; +} + +export function timezoneBlur() { + return { + type: actionTypes.TIMEZONE_BLUR, + meta: { source: actionSources[actionTypes.TIMEZONE_BLUR] } + }; } \ No newline at end of file diff --git a/app/components/DeviceTimeModal.js b/app/components/DeviceTimeModal.js index 41afac4bf7..77854d71a5 100644 --- a/app/components/DeviceTimeModal.js +++ b/app/components/DeviceTimeModal.js @@ -70,7 +70,7 @@ export class DeviceTimeModal extends Component { } buttons.push( ); @@ -87,10 +87,9 @@ export class DeviceTimeModal extends Component {
Is your pump time set correctly? If not:
-
1. Update the time on your pump
-
2. Suspend your pump
-
3. Resume your pump
-
4. Try uploading again
+
1. Cancel the current upload
+
2. Check the time on your device
+
3. Check the time zone in the Uploader
); @@ -101,9 +100,9 @@ export class DeviceTimeModal extends Component {
Is your CGM time set correctly? If not:
-
1. Update the time and date on your CGM
-
2. Wait for a new reading to appear
-
3. Try uploading again
+
1. Cancel the current upload
+
2. Check the time on your device
+
3. Check the time zone in the Uploader
); @@ -114,9 +113,9 @@ export class DeviceTimeModal extends Component {
Is your meter time set correctly? If not:
-
1. Update the time and date on your meter
-
2. Test your blood glucose again
-
3. Try uploading again
+
1. Cancel the current upload
+
2. Check the time on your device
+
3. Check the time zone in the Uploader
); diff --git a/app/components/TimezoneDropdown.js b/app/components/TimezoneDropdown.js index b34ca2b6d7..c107332362 100644 --- a/app/components/TimezoneDropdown.js +++ b/app/components/TimezoneDropdown.js @@ -25,6 +25,16 @@ var cx = require('classnames'); var styles = require('../../styles/components/TimezoneDropdown.module.less'); class TimezoneDropdown extends React.Component { + constructor(props) { + super(props); + + this.timezoneSelect = null; + + this.setTimezoneSelect = element => { + this.timezoneSelect = element; + }; + } + static propTypes = { onTimezoneChange: PropTypes.func.isRequired, selectorLabel: PropTypes.string.isRequired, @@ -64,6 +74,12 @@ class TimezoneDropdown extends React.Component { clearInterval(this.updateSuggestedInterval); } + componentDidUpdate() { + if (this.timezoneSelect && this.props.isTimezoneFocused) { + this.timezoneSelect.focus(); + } + } + buildTzSelector = () => { function sortByOffset(timezones) { return _.sortBy(timezones, function(tz) { @@ -80,12 +96,14 @@ class TimezoneDropdown extends React.Component { return (