From eae7157793c3908d56f9dac02c928cd0d6b06c63 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 26 Jun 2017 16:36:46 +0100 Subject: [PATCH 01/66] adding Sentry, crashReporter and and TrackJs for evaluation --- app/index.js | 26 +++++++++++++++++++++++++- lib/core/device.js | 1 + package.json | 5 ++++- webpack.config.base.js | 6 ++++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/app/index.js b/app/index.js index 45668a988f..58bb1af30f 100755 --- a/app/index.js +++ b/app/index.js @@ -10,7 +10,19 @@ import routes from './routes'; import configureStore from './store/configureStore'; import './app.global.css'; import '../styles/main.less'; -import { ipcRenderer } from 'electron'; +import { ipcRenderer, crashReporter } from 'electron'; + +window._trackJs = { + token: 'f739b1e86d654970b6ce9170f0e63a33' +}; +var trackJs = require('trackjs'); + +var Raven = require('raven'); +Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78:32643a50ee9241c18b97f0c1ed5ed228@sentry.io/183894',{ + autoBreadcrumbs: { + 'console': true // console logging + } +}).install(); const store = configureStore(); const history = syncHistoryWithStore(hashHistory, store); @@ -23,6 +35,18 @@ ipcRenderer.on('action', function(event, action) { store.dispatch(action); }); +crashReporter.start({ + productName: 'Uploader', + companyName: 'Tidepool', + submitURL: '', + uploadToServer: false +}); + +trackJs.track('ahoy trackjs!'); + +console.log('Crash logs can be found in:',crashReporter.getCrashesDirectory()); +console.log('Last crash report:', crashReporter.getLastCrashReport()); + render( diff --git a/lib/core/device.js b/lib/core/device.js index 956979a617..589301b577 100644 --- a/lib/core/device.js +++ b/lib/core/device.js @@ -28,6 +28,7 @@ var driverManager = require('../driverManager'); var builder = require('../objectBuilder')(); var hid = require('node-hid'); var SerialPort = require('serialport'); +const {crashReporter} = require('electron'); var dexcomDriver = require('../drivers/dexcom/dexcomDriver'); var oneTouchMiniDriver = require('../drivers/onetouch/oneTouchMiniDriver'); diff --git a/package.json b/package.json index 2e50687b94..c7f7ee814d 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "lighthouse": "2.0.0", "lodash": "3.10.1", "node-uuid": "1.4.8", + "raven": "2.1.0", "react": "15.4.2", "react-addons-update": "15.4.2", "react-dom": "15.4.2", @@ -62,7 +63,8 @@ "source-map-support": "0.4.14", "stack-trace": "0.0.9", "sundial": "1.6.0", - "tidepool-platform-client": "tidepool-org/platform-client#krystophv/electron" + "tidepool-platform-client": "tidepool-org/platform-client#krystophv/electron", + "trackjs": "2.8.2" }, "browserslist": "electron 1.6", "build": { @@ -188,6 +190,7 @@ "eslint-plugin-mocha": "4.9.0", "eslint-plugin-promise": "3.5.0", "eslint-plugin-react": "6.10.3", + "exports-loader": "0.6.4", "express": "4.15.2", "extract-text-webpack-plugin": "1.0.1", "fbjs-scripts": "0.7.1", diff --git a/webpack.config.base.js b/webpack.config.base.js index b34ba786aa..0517762b8d 100755 --- a/webpack.config.base.js +++ b/webpack.config.base.js @@ -17,6 +17,10 @@ export default validate({ }, { test: /\.json$/, loader: 'json-loader' + }, + { + test: require.resolve('trackjs'), + loader: 'exports?trackJs' }] }, @@ -40,5 +44,7 @@ export default validate({ plugins: [], + devtool: 'source-map', + externals: Object.keys(_.merge({}, externals, additionalExternals) || {}) }); From a39e3e13f7c91041056a1a0474195e5eae7f4deb Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 26 Jun 2017 16:42:43 +0100 Subject: [PATCH 02/66] upgrade lockfile --- yarn.lock | 944 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 530 insertions(+), 414 deletions(-) diff --git a/yarn.lock b/yarn.lock index 86109cd2cd..5bffabe90c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -70,8 +70,8 @@ acorn@^3.0.0, acorn@^3.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^4.0.4: - version "4.0.11" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" acorn@^5.0.1: version "5.0.3" @@ -86,17 +86,19 @@ ajv-keywords@^2.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" ajv@^4.7.0, ajv@^4.9.1: - version "4.11.7" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48" + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" ajv@^5.1.5: - version "5.1.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.5.tgz#8734931b601f00d4feef7c65738d77d1b65d1f68" + version "5.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.0.tgz#c1735024c5da2ef75cc190713073d44f098bf486" dependencies: co "^4.6.0" + fast-deep-equal "^0.1.0" + json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" align-text@^0.1.1, align-text@^0.1.3: @@ -119,11 +121,11 @@ andlog@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/andlog/-/andlog-1.0.0.tgz#25b39047ac9c1e5f6b2c8e4cdb5e7bf9e65e534b" -ansi-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" dependencies: - string-width "^1.0.1" + string-width "^2.0.0" ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" @@ -133,14 +135,14 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" +ansi-regex@*, ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - ansi-styles@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" @@ -351,7 +353,7 @@ async-some@~1.0.2: dependencies: dezalgo "^1.0.2" -async@0.9.0, async@^0.9.0, async@~0.9.0: +async@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/async/-/async-0.9.0.tgz#ac3613b1da9bed1b47510bb4651b8931e47146c7" @@ -359,9 +361,13 @@ async@1.5.2, async@^1.3.0, async@^1.4.0, async@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" +async@^0.9.0, async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + async@^2.0.0, async@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: lodash "^4.14.0" @@ -448,12 +454,12 @@ babel-eslint@7.2.2: babylon "^6.16.1" babel-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" dependencies: babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" + babel-types "^6.25.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" @@ -567,6 +573,10 @@ babel-helper-mark-eval-scopes@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.0.3.tgz#902f75aeb537336edc35eb9f52b6f09db7785328" +babel-helper-mark-eval-scopes@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.1.1.tgz#4554345edf9f2549427bd2098e530253f8af2992" + babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" @@ -592,9 +602,9 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-remove-or-void@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.0.1.tgz#f602790e465acf2dfbe84fb3dd210c43a2dd7262" +babel-helper-remove-or-void@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.1.1.tgz#9d7e1856dc6fafcb41b283a416730dc1844f66d7" babel-helper-replace-supers@^6.24.1: version "6.24.1" @@ -661,11 +671,11 @@ babel-plugin-minify-constant-folding@^0.0.4: jsesc "^2.4.0" babel-plugin-minify-dead-code-elimination@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.4.tgz#18b6ecfab77c29caca061d8210fa3495001e4fa1" + version "0.1.7" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.7.tgz#774f536f347b98393a27baa717872968813c342c" dependencies: - babel-helper-mark-eval-scopes "^0.0.3" - babel-helper-remove-or-void "^0.0.1" + babel-helper-mark-eval-scopes "^0.1.1" + babel-helper-remove-or-void "^0.1.1" lodash.some "^4.6.0" babel-plugin-minify-flip-comparisons@^0.0.2: @@ -1056,18 +1066,16 @@ babel-plugin-transform-inline-consecutive-adds@^0.0.2: resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.0.2.tgz#a58fcecfc09c08fbf9373a5a3e70746c03d01fc1" babel-plugin-transform-member-expression-literals@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.1.tgz#60b78cb2b814ac71dd6104ef51c496c62e877337" + version "6.8.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.4.tgz#05679bc40596b91293401959aa1620ab1b2be437" babel-plugin-transform-merge-sibling-variables@^6.8.2: - version "6.8.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.2.tgz#498acd07481ab340c1bad8b726c2fad1b8f644e5" + version "6.8.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.5.tgz#03abdf107c61241913eb268ddede6d5bc541862c" babel-plugin-transform-minify-booleans@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.0.tgz#b1a48864a727847696b84eae36fa4d085a54b42b" - dependencies: - babel-runtime "^6.0.0" + version "6.8.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.2.tgz#8451579f706e702c1e1ab2756de5c8ea369cf07c" babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.6.5: version "6.23.0" @@ -1077,8 +1085,10 @@ babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object babel-runtime "^6.22.0" babel-plugin-transform-property-literals@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.1.tgz#05ed01f6024820b18f1d0495c80fe287176bccd9" + version "6.8.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.4.tgz#6ad311110b80a192a56efb5ddf4fe3ca6f7a61da" + dependencies: + esutils "^2.0.2" babel-plugin-transform-react-constant-elements@^6.5.0: version "6.23.0" @@ -1087,8 +1097,8 @@ babel-plugin-transform-react-constant-elements@^6.5.0: babel-runtime "^6.22.0" babel-plugin-transform-react-display-name@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" dependencies: babel-runtime "^6.22.0" @@ -1141,20 +1151,20 @@ babel-plugin-transform-regexp-constructors@^0.0.6: resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.6.tgz#0d92607f0d26268296980cb7c1dea5f2dd3e1e20" babel-plugin-transform-remove-console@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.1.tgz#38f6a6ca1581e76b75fc2c6fdcf909deadee7d6a" + version "6.8.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.4.tgz#41fddac19a729a4c3dd7ef2964eac07b096f9a8f" babel-plugin-transform-remove-debugger@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.1.tgz#aabd0be107f8299094defe8e1ba8ccf4b114d07f" + version "6.8.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.4.tgz#f85704a08adaa71b55d77005b5b94e9b9df21f6e" babel-plugin-transform-remove-undefined@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.0.5.tgz#12ef11805e06e861dd2eb0c7cc041d2184b8f410" babel-plugin-transform-simplify-comparison-operators@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.1.tgz#a307088e0d1c728081777fba568f4107396ab25c" + version "6.8.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.4.tgz#2aa24a262d664c8cb3e125a306c798d7a2de08d5" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" @@ -1164,10 +1174,8 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-types "^6.24.1" babel-plugin-transform-undefined-to-void@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.0.tgz#bc5b6b4908d3b1262170e67cb3963903ddce167e" - dependencies: - babel-runtime "^6.0.0" + version "6.8.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.2.tgz#fe2b1d294eb05e87524eb93724dea6e2c3d66fa1" babel-plugin-webpack-loaders@0.9.0: version "0.9.0" @@ -1405,7 +1413,7 @@ babel-runtime@6.18.0: core-js "^2.4.0" regenerator-runtime "^0.9.5" -babel-runtime@6.23.0, babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.6.1, babel-runtime@~6.23.0: +babel-runtime@6.23.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.6.1, babel-runtime@~6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: @@ -1413,32 +1421,32 @@ babel-runtime@6.23.0, babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime regenerator-runtime "^0.10.0" babel-template@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" lodash "^4.2.0" -babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.3.26: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" +babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.3.26: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" dependencies: babel-code-frame "^6.22.0" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" + babel-types "^6.25.0" + babylon "^6.17.2" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.3.24: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" +babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0, babel-types@^6.3.24: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" @@ -1453,18 +1461,22 @@ babili-webpack-plugin@0.0.11: babel-preset-babili "^0.0.12" webpack-sources "^0.1.4" -babylon@^6.11.0, babylon@^6.15.0, babylon@^6.16.1, babylon@^6.3.26: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" +babylon@^6.11.0, babylon@^6.16.1, babylon@^6.17.2, babylon@^6.3.26: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" babyparse@0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/babyparse/-/babyparse-0.4.6.tgz#8ff29b62d1e600c0654afd63457f97fa2c36e9c1" -balanced-match@^0.4.1, balanced-match@^0.4.2: +balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + base64-js@1.2.0, base64-js@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" @@ -1477,9 +1489,9 @@ bash-color@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/bash-color/-/bash-color-0.0.4.tgz#e9be8ce33540cada4881768c59bd63865736e913" -batch@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" bcrypt-pbkdf@^1.0.0: version "1.0.1" @@ -1539,8 +1551,8 @@ blueimp-md5@2.7.0: resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.7.0.tgz#7f518e0dd70467fefe28ecba398916092f2a02a9" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + version "4.11.7" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.7.tgz#ddb048e50d9482790094c13eb3fcfc833ce7ab46" boolbase@~1.0.0: version "1.0.0" @@ -1559,10 +1571,10 @@ bows@1.6.0: andlog "^1.0.0" boxen@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" + version "1.1.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" dependencies: - ansi-align "^1.1.0" + ansi-align "^2.0.0" camelcase "^4.0.0" chalk "^1.1.1" cli-boxes "^1.0.0" @@ -1571,10 +1583,10 @@ boxen@^1.0.0: widest-line "^1.0.0" brace-expansion@^1.0.0, brace-expansion@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: - balanced-match "^0.4.1" + balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: @@ -1668,7 +1680,7 @@ buffer-crc32@^0.2.1: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" -buffer-shims@^1.0.0, buffer-shims@~1.0.0: +buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" @@ -1762,8 +1774,8 @@ caniuse-db@1.0.30000626: resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000626.tgz#44363dc86857efaf758fea9faef6a15ed93d8f33" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000624, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000660" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000660.tgz#d2d57b309dc5a11bb5b46018f51855f7a41efee5" + version "1.0.30000694" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000694.tgz#02009f4f82d2f0126e4c691b7cd5adb351935c01" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1855,8 +1867,8 @@ chmodr@~1.0.2: resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" chokidar@^1.0.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -1896,7 +1908,7 @@ ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" -cipher-base@^1.0.0, cipher-base@^1.0.1: +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" dependencies: @@ -1907,8 +1919,8 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" clap@^1.0.9: - version "1.1.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" + version "1.2.0" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.0.tgz#59c90fe3e137104746ff19469a27a634ff68c857" dependencies: chalk "^1.1.3" @@ -1916,9 +1928,9 @@ classnames@2.2.5, classnames@^2.2.4: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" -clean-css@4.0.x: - version "4.0.12" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.12.tgz#a02e61707f1840bd3338f54dbc9acbda4e772fa3" +clean-css@4.1.x: + version "4.1.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.4.tgz#eec8811db27457e0078d8ca921fa81b72fa82bf4" dependencies: source-map "0.5.x" @@ -1982,8 +1994,8 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" coa@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + version "1.0.3" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.3.tgz#1b54a5e1dcf77c990455d4deea98c564416dc893" dependencies: q "^1.1.2" @@ -2058,7 +2070,7 @@ commander@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d" -commander@2.9.0, commander@2.9.x, commander@^2.8.1, commander@^2.9.0: +commander@2.9.0, commander@2.9.x, commander@^2.8.1, commander@^2.9.0, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -2082,7 +2094,7 @@ component-emitter@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" -compress-commons@^1.1.0: +compress-commons@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.0.tgz#58587092ef20d37cb58baf000112c9278ff73b9f" dependencies: @@ -2112,15 +2124,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - -concat-stream@^1.4.6, concat-stream@^1.5.2: +concat-stream@1.6.0, concat-stream@^1.4.6, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -2149,14 +2153,14 @@ config-chain@~1.1.10: proto-list "~1.2.1" configstore@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" + version "3.1.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1" dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" - mkdirp "^0.5.0" + make-dir "^1.0.0" unique-string "^1.0.0" - write-file-atomic "^1.1.2" + write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" connect-history-api-fallback@1.1.0: @@ -2245,27 +2249,32 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" -create-hash@^1.1.0, create-hash@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" +create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" dependencies: cipher-base "^1.0.1" inherits "^2.0.1" - ripemd160 "^1.0.0" - sha.js "^2.3.6" + ripemd160 "^2.0.0" + sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" dependencies: + cipher-base "^1.0.3" create-hash "^1.1.0" inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" -create-react-class@^15.5.1: - version "15.5.2" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.2.tgz#6a8758348df660b88326a0e764d569f274aad681" +create-react-class@^15.5.1, create-react-class@^15.5.2: + version "15.6.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" dependencies: fbjs "^0.8.9" + loose-envify "^1.3.1" object-assign "^4.1.1" cross-env@4.0.0: @@ -2389,14 +2398,6 @@ css-select@^1.1.0, css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" -css-selector-tokenizer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - css-selector-tokenizer@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" @@ -2511,8 +2512,8 @@ dashdash@^1.12.0: assert-plus "^1.0.0" date-fns@^1.23.0: - version "1.28.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.3.tgz#145d87adc3f5a82c6bda668de97eee1132c97ea1" + version "1.28.5" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" date-now@^0.1.4: version "0.1.4" @@ -2522,11 +2523,7 @@ dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" -debug@0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" - -debug@2, debug@2.6.8, debug@^2.1.3, debug@^2.2.0, debug@^2.4.5, debug@^2.5.1, debug@^2.6.1, debug@^2.6.6: +debug@2, debug@2.6.8, debug@^2.1.3, debug@^2.2.0, debug@^2.4.5, debug@^2.5.1, debug@^2.6.1, debug@^2.6.6, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -2550,7 +2547,13 @@ debug@2.6.4: dependencies: ms "0.7.3" -debuglog@^1.0.1: +debug@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" + dependencies: + ms "2.0.0" + +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2585,8 +2588,8 @@ deep-equal@^1.0.1: resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" deep-is@~0.1.3: version "0.1.3" @@ -2756,8 +2759,8 @@ domhandler@2.1: domelementtype "1" domhandler@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" dependencies: domelementtype "1" @@ -2988,8 +2991,8 @@ electron-rebuild@1.5.7: yargs "^3.31.0" electron-to-chromium@^1.2.3, electron-to-chromium@^1.2.7: - version "1.3.8" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.8.tgz#b2c8a2c79bb89fbbfd3724d9555e15095b5f5fb6" + version "1.3.14" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz#64af0f9efd3c3c6acd57d71f83b49ca7ee9c4b43" electron-updater@1.14.2: version "1.14.2" @@ -3129,8 +3132,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.15" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" + version "0.10.23" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.23.tgz#7578b51be974207a5487821b56538c224e4e7b38" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -3213,8 +3216,8 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-airbnb-base@^11.1.0: - version "11.1.3" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.3.tgz#0e8db71514fa36b977fbcf977c01edcf863e0cf0" + version "11.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.2.0.tgz#19a9dc4481a26f70904545ec040116876018f853" eslint-config-airbnb@14.1.0: version "14.1.0" @@ -3257,10 +3260,10 @@ eslint-import-resolver-webpack@0.8.1: semver "^5.3.0" eslint-module-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" dependencies: - debug "2.2.0" + debug "^2.6.8" pkg-dir "^1.0.0" eslint-plugin-compat@1.0.2: @@ -3359,8 +3362,8 @@ eslint@3.19.0: user-home "^2.0.0" espree@^3.4.0: - version "3.4.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.2.tgz#38dbdedbedc95b8961a1fbf04734a8f6a9c8c592" + version "3.4.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" dependencies: acorn "^5.0.1" acorn-jsx "^3.0.0" @@ -3380,24 +3383,20 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" dependencies: - estraverse "~4.1.0" + estraverse "^4.1.0" object-assign "^4.0.1" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" - esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -3478,6 +3477,13 @@ expand-tilde@^1.2.2: dependencies: os-homedir "^1.0.1" +exports-loader@0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" + dependencies: + loader-utils "^1.0.2" + source-map "0.5.x" + express@4.15.2, express@^4.13.3: version "4.15.2" resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" @@ -3516,13 +3522,15 @@ extend@1.2.1: resolved "https://registry.yarnpkg.com/extend/-/extend-1.2.1.tgz#a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c" extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" external-editor@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.1.tgz#4c597c6c88fa6410e41dbbaa7b1be2336aa31095" + version "2.0.4" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" tmp "^0.0.31" extglob@^0.3.1: @@ -3540,11 +3548,11 @@ extract-text-webpack-plugin@1.0.1: webpack-sources "^0.1.0" extract-zip@^1.0.3, extract-zip@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.0.tgz#7f400c9607ea866ecab7aa6d54fb978eeb11621a" + version "1.6.5" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.5.tgz#99a06735b6ea20ea9b705d779acffcc87cff0440" dependencies: - concat-stream "1.5.0" - debug "0.7.4" + concat-stream "1.6.0" + debug "2.2.0" mkdirp "0.5.0" yauzl "2.4.1" @@ -3559,6 +3567,10 @@ fancy-log@^1.1.0: chalk "^1.1.1" time-stamp "^1.0.0" +fast-deep-equal@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -3637,8 +3649,8 @@ file-loader@0.11.1: loader-utils "^1.0.2" filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fill-keys@^1.0.2: version "1.0.2" @@ -3658,10 +3670,10 @@ fill-range@^2.1.0: repeat-string "^1.5.2" finalhandler@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a" + version "1.0.3" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" dependencies: - debug "2.6.4" + debug "2.6.7" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" @@ -3894,11 +3906,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" - node-pre-gyp "^0.6.29" + node-pre-gyp "^0.6.36" fstream-ignore@^1.0.0, fstream-ignore@^1.0.5: version "1.0.5" @@ -3953,7 +3965,7 @@ gauge@~1.2.5: lodash.padend "^4.1.0" lodash.padstart "^4.1.0" -gauge@~2.7.1: +gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" dependencies: @@ -4002,8 +4014,8 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" @@ -4079,13 +4091,13 @@ glob@^6.0.4: path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -4124,8 +4136,8 @@ global@^4.3.0: process "~0.5.1" globals@^9.0.0, globals@^9.14.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" @@ -4139,11 +4151,11 @@ globby@^5.0.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" dependencies: glob "~7.1.1" - lodash "~4.16.4" + lodash "~4.17.4" minimatch "~3.0.2" glogg@^1.0.0: @@ -4168,7 +4180,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.0, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.3, graceful-fs@~4.1.6: +graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.3, graceful-fs@~4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -4255,6 +4267,10 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" @@ -4271,12 +4287,19 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" dependencies: inherits "^2.0.1" +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.1.tgz#5cb2e796499224e69fd0b00ed01d2d4a16e7a323" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + hawk@~3.1.0, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -4291,8 +4314,8 @@ he@1.1.x: resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" highlight.js@^9.3.0: - version "9.11.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.11.0.tgz#47f98c7399918700db2caf230ded12cec41a84ae" + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" history@^3.0.0: version "3.3.0" @@ -4363,17 +4386,17 @@ html-entities@^1.2.0: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" html-minifier@^3.2.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.3.tgz#eb3a7297c804611f470454eeebe0aacc427e424a" + version "3.5.2" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7" dependencies: camel-case "3.0.x" - clean-css "4.0.x" + clean-css "4.1.x" commander "2.9.x" he "1.1.x" ncname "1.0.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "~2.8.22" + uglify-js "3.0.x" html-webpack-plugin@2.28.0: version "2.28.0" @@ -4406,14 +4429,6 @@ htmlparser2@~3.3.0: domutils "1.1" readable-stream "1.0" -http-errors@~1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" - dependencies: - inherits "2.0.3" - setprototypeof "1.0.2" - statuses ">= 1.3.1 < 2" - http-errors@~1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" @@ -4446,13 +4461,17 @@ humanize-plus@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/humanize-plus/-/humanize-plus-1.8.2.tgz#a65b34459ad6367adbb3707a82a3c9f916167030" -iconv-lite@0.4.13, iconv-lite@~0.4.13: +iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -icss-replace-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" +iconv-lite@^0.4.17, iconv-lite@~0.4.13: + version "0.4.18" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" ieee754@^1.1.4: version "1.1.8" @@ -4463,18 +4482,22 @@ iferr@^0.1.5, iferr@~0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" ignore@^3.2.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.7.tgz#4810ca5f1d8eca5595213a34b94f2eb4ed926bbd" + version "3.3.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" image-size@~0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.1.tgz#28eea8548a4b1443480ddddc1e083ae54652439f" + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" image-ssim@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/image-ssim/-/image-ssim-0.2.0.tgz#83b42c7a2e6e4b85505477fe6917f5dbc56420e5" -imurmurhash@^0.1.4: +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4632,8 +4655,8 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-electron-renderer@^2.0.0: version "2.0.1" @@ -4692,12 +4715,18 @@ 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@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -4805,8 +4834,8 @@ is-windows@^0.2.0: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" is-windows@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.0.tgz#c61d61020c3ebe99261b781bd3d1622395f547f8" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" isarray@0.0.1: version "0.0.1" @@ -4853,12 +4882,6 @@ jju@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - joi@9.0.0-0: version "9.0.0-0" resolved "https://registry.yarnpkg.com/joi/-/joi-9.0.0-0.tgz#a7ca4219602149ae0da7a7c5ca1d63d3c79e096b" @@ -4899,6 +4922,10 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jschardet@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" + jsdom@9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -4928,8 +4955,8 @@ jsesc@^1.3.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" jsesc@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.0.tgz#ce895de28feb034dcbf55fbeeabbcaeb63d73086" + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" jsesc@~0.5.0: version "0.5.0" @@ -4945,6 +4972,10 @@ json-parse-helpfulerror@^1.0.2: dependencies: jju "^1.1.0" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -5001,8 +5032,14 @@ jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" kind-of@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: is-buffer "^1.1.5" @@ -5022,10 +5059,6 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-req@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" - lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -5172,6 +5205,10 @@ lodash._baseget@^3.0.0: version "3.7.2" resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -5194,11 +5231,25 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + dependencies: + lodash._getnative "^3.0.0" + lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" -lodash._getnative@^3.0.0: +lodash._getnative@*, lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -5367,7 +5418,7 @@ lodash.rest@^4.0.0: version "4.0.5" resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa" -lodash.restparam@^3.0.0: +lodash.restparam@*, lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -5437,14 +5488,10 @@ lodash@4.5.1: version "4.5.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.5.1.tgz#80e8a074ca5f3893a6b1c10b2a636492d710c316" -lodash@^4.0.0, lodash@^4.14.0, 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.0, lodash@^4.6.1, lodash@^4.8.0: +lodash@^4.0.0, lodash@^4.14.0, 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.0, lodash@^4.6.1, lodash@^4.8.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@~4.16.4: - version "4.16.6" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -5463,7 +5510,7 @@ longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -5488,17 +5535,34 @@ lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" -lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@~4.0.1: +lru-cache@^4.0.0, lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" dependencies: pseudomap "^1.0.1" yallist "^2.0.0" +lsmod@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b" + macaddress@^0.2.7, macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +make-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + dependencies: + pify "^2.3.0" + map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -5508,8 +5572,8 @@ marked@0.3.6: resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" math-expression-evaluator@^1.2.14: - version "1.2.16" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" media-typer@0.3.0: version "0.3.0" @@ -5619,11 +5683,11 @@ mime-types@~2.0.3: dependencies: mime-db "~1.12.0" -mime@1.3.4, mime@1.3.x, mime@^1.2.11, mime@^1.3.4: +mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -mime@^1.3.6: +mime@1.3.x, mime@^1.2.11, mime@^1.3.4, mime@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" @@ -5652,7 +5716,7 @@ minimatch@1: lru-cache "2" sigmund "~1.0.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.4, minimatch@~3.0.2, minimatch@~3.0.3: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2, minimatch@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -5664,12 +5728,6 @@ minimatch@^2.0.1: dependencies: brace-expansion "^1.0.0" -minimatch@^3.0.2, minimatch@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -5754,11 +5812,11 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" -mute-stream@0.0.5, mute-stream@~0.0.4: +mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" -mute-stream@0.0.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" @@ -5809,8 +5867,8 @@ node-emoji@^1.5.1: string.prototype.codepointat "^0.2.0" node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + version "1.7.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.1.tgz#899cb3d0a3c92f952c47f1b876f4c8aeabd400d5" dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -5820,8 +5878,8 @@ node-forge@^0.7.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" node-gyp@^3.4.0, node-gyp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6" + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -5912,9 +5970,9 @@ node-libs-browser@^1.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-pre-gyp@^0.6.29: - version "0.6.34" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" +node-pre-gyp@^0.6.36: + version "0.6.36" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" dependencies: mkdirp "^0.5.1" nopt "^4.0.1" @@ -6223,29 +6281,29 @@ npmi@1.0.1: npm "^2.1.12" semver "^4.1.0" -"npmlog@0 || 1 || 2", "npmlog@0 || 1 || 2 || 3 || 4", npmlog@2.0.3, npmlog@~2.0.0, npmlog@~2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.3.tgz#020f99351f0c02e399c674ba256e7c4d3b3dd298" +"npmlog@0 || 1 || 2", "npmlog@0.1 || 1 || 2", npmlog@~2.0.0, "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" dependencies: ansi "~0.3.1" are-we-there-yet "~1.1.2" gauge "~1.2.5" -"npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@2.0.3, npmlog@~2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.3.tgz#020f99351f0c02e399c674ba256e7c4d3b3dd298" dependencies: ansi "~0.3.1" are-we-there-yet "~1.1.2" gauge "~1.2.5" npmlog@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + version "4.1.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" - gauge "~2.7.1" + gauge "~2.7.3" set-blocking "~2.0.0" nth-check@~1.0.1: @@ -6275,8 +6333,8 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" "nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" + version "1.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" oauth-sign@~0.8.0, oauth-sign@~0.8.1: version "0.8.2" @@ -6601,10 +6659,14 @@ pbkdf2-compat@2.0.1: resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" pbkdf2@^3.0.3: - version "3.0.9" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + version "3.0.12" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" dependencies: - create-hmac "^1.1.2" + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" pend@~1.2.0: version "1.2.0" @@ -6614,7 +6676,7 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6790,31 +6852,31 @@ postcss-minify-selectors@^2.0.4: postcss-selector-parser "^2.0.0" postcss-modules-extract-imports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" dependencies: - postcss "^5.0.4" + postcss "^6.0.1" postcss-modules-local-by-default@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" + 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.6.0" - postcss "^5.0.4" + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" postcss-modules-scope@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" + 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.6.0" - postcss "^5.0.4" + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" postcss-modules-values@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" dependencies: - icss-replace-symbols "^1.0.2" - postcss "^5.0.14" + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" postcss-normalize-charset@^1.1.0: version "1.1.1" @@ -6905,6 +6967,14 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" +postcss@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.3.tgz#b7f565b3d956fbb8565ca7c1e239d0506e427d8b" + dependencies: + chalk "^1.1.3" + source-map "^0.5.6" + supports-color "^4.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" @@ -6925,8 +6995,8 @@ pretty-bytes@^1.0.2: meow "^3.1.0" pretty-error@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.0.tgz#87f4e9d706a24c87d6cbee9fabec001fcf8c75d8" + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" dependencies: renderkid "^2.0.1" utila "~0.4" @@ -6940,8 +7010,8 @@ process-nextick-args@~1.0.6: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" process@^0.11.0, process@~0.11.0: - version "0.11.9" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" process@~0.5.1: version "0.5.2" @@ -6959,8 +7029,8 @@ progress@^1.1.8: resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" @@ -6970,11 +7040,12 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.0.0, prop-types@^15.5.4: - version "15.5.8" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" +prop-types@^15.0.0, prop-types@^15.5.4, prop-types@^15.5.8: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: fbjs "^0.8.9" + loose-envify "^1.3.1" proto-list@~1.2.1: version "1.2.4" @@ -6999,7 +7070,7 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -pseudomap@^1.0.1: +pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -7064,25 +7135,42 @@ querystringify@0.0.x: version "0.0.4" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + ramda@^0.23.0: version "0.23.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.23.0.tgz#ccd13fff73497a93974e3e86327bfd87bd6e8e2b" randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" randombytes@^2.0.0, randombytes@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + version "2.0.5" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" +raven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/raven/-/raven-2.1.0.tgz#1b624e56374d9c9d93c74448461a2a356ce37527" + dependencies: + cookie "0.3.1" + json-stringify-safe "5.0.1" + lsmod "1.0.0" + stack-trace "0.0.9" + timed-out "4.0.1" + uuid "3.0.0" + rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" @@ -7130,8 +7218,11 @@ react-hot-loader@1.3.1: source-map "^0.4.4" react-input-autosize@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-1.1.0.tgz#3fe1ac832387d8abab85f6051ceab1c9e5570853" + version "1.1.4" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-1.1.4.tgz#cbc45072d4084ddc57806db8e3b34e644b8366ac" + dependencies: + create-react-class "^15.5.2" + prop-types "^15.5.8" react-lazy-cache@^3.0.1: version "3.0.1" @@ -7228,8 +7319,8 @@ read-installed@~4.0.3: graceful-fs "^4.1.2" read-package-tree@~5.1.2: - version "5.1.5" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.1.5.tgz#ace7e6381c7684f970aaa98fc7c5d2b666addab6" + version "5.1.6" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.1.6.tgz#4f03e83d0486856fb60d97c94882841c2a7b1b7a" dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -7274,14 +7365,14 @@ read@1, read@~1.0.1, read@~1.0.7: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + version "2.3.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.2.tgz#5a04df05e4f57fe3f0dc68fdd11dc5c97c7e6f4d" dependencies: - buffer-shims "~1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" + safe-buffer "~5.1.0" string_decoder "~1.0.0" util-deprecate "~1.0.1" @@ -7312,7 +7403,7 @@ readable-stream@^1.1.8, readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@~2.0.0, readable-stream@~2.0.5: +readable-stream@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: @@ -7335,7 +7426,7 @@ readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" dependencies: @@ -7375,12 +7466,13 @@ rechoir@^0.6.2: resolve "^1.1.6" redbox-react@^1.2.2: - version "1.3.6" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.6.tgz#70314c57c066257eb70b0a24dc794b5cef4f1c4e" + version "1.4.2" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.4.2.tgz#7fe35d3c567301e97938cc7fd6a10918f424c6b4" dependencies: error-stack-parser "^1.3.6" object-assign "^4.0.1" prop-types "^15.5.4" + sourcemapped-stacktrace "^1.1.6" redent@^1.0.0: version "1.0.0" @@ -7445,8 +7537,8 @@ regenerate@^1.2.1: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" regenerator-runtime@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-runtime@^0.9.5: version "0.9.6" @@ -7484,8 +7576,8 @@ regexpu-core@^2.0.0: regjsparser "^0.1.4" registry-auth-token@^3.0.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.0.tgz#57ae67347e73d96345ed1bc01294c7237c02aa63" + version "3.3.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" dependencies: rc "^1.1.6" safe-buffer "^5.0.1" @@ -7511,8 +7603,8 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" renderkid@^2.0.1: version "2.0.1" @@ -7725,9 +7817,12 @@ ripemd160@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" -ripemd160@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" run-async@^0.1.0: version "0.1.0" @@ -7754,12 +7849,16 @@ rx@^4.1.0: resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" rxjs@^5.1.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.3.0.tgz#d88ccbdd46af290cbdb97d5d8055e52453fabe2d" + version "5.4.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.1.tgz#b62f757f279445d265a18a58fb0a70dc90e91626" dependencies: symbol-observable "^1.0.1" -safe-buffer@^5.0.1, safe-buffer@~5.0.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -7786,8 +7885,8 @@ sanitize-filename@^1.6.1: truncate-utf8-bytes "^1.0.0" sax@^1.2.1, sax@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" semver-diff@^2.0.0: version "2.1.0" @@ -7826,15 +7925,15 @@ send@0.15.1: statuses "~1.3.1" serve-index@^1.7.2: - version "1.8.0" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + version "1.9.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.0.tgz#d2b280fc560d616ee81b48bf0fa82abed2485ce7" dependencies: accepts "~1.3.3" - batch "0.5.3" - debug "~2.2.0" + batch "0.6.1" + debug "2.6.8" escape-html "~1.0.3" - http-errors "~1.5.0" - mime-types "~2.1.11" + http-errors "~1.6.1" + mime-types "~2.1.15" parseurl "~1.3.1" serve-static@1.12.1: @@ -7862,10 +7961,6 @@ setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" -setprototypeof@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" - setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" @@ -7874,7 +7969,7 @@ sha.js@2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" -sha.js@^2.3.6: +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.8" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" dependencies: @@ -7906,8 +8001,8 @@ shelljs@0.7.0: rechoir "^0.6.2" shelljs@^0.7.5: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -7975,15 +8070,15 @@ sntp@1.x.x: hoek "2.x.x" sockjs-client@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5" + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" dependencies: - debug "^2.2.0" + debug "^2.6.6" eventsource "0.1.6" faye-websocket "~0.11.0" inherits "^2.0.1" json3 "^3.3.2" - url-parse "^1.1.1" + url-parse "^1.1.8" sockjs@^0.3.15: version "0.3.18" @@ -8035,7 +8130,7 @@ 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" -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, source-map@~0.5.3: +source-map@0.5.6, 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, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -8057,6 +8152,12 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +sourcemapped-stacktrace@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.6.tgz#112d8749c942c3cd3b630dfac9514577b86a3a51" + dependencies: + source-map "0.5.6" + sparkles@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" @@ -8066,8 +8167,8 @@ spawn-command@^0.0.2-1: resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" spawn-rx@^2.0.7: - version "2.0.10" - resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-2.0.10.tgz#a8cb098f4bb5de51dad06851b7018549230ef9d5" + version "2.0.11" + resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-2.0.11.tgz#65451ad65662801daea75549832a782de0048dbf" dependencies: debug "^2.5.1" lodash.assign "^4.2.0" @@ -8122,8 +8223,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -8132,7 +8233,6 @@ sshpk@^1.7.0: optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" @@ -8164,8 +8264,8 @@ stream-cache@~0.0.1: resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" stream-http@^2.3.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" + version "2.7.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -8177,7 +8277,7 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -string-width@^1.0.1: +string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -8201,27 +8301,27 @@ string_decoder@^0.10.25, string_decoder@~0.10.x: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" string_decoder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: - buffer-shims "~1.0.0" + safe-buffer "~5.1.0" stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +strip-ansi@*, strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" dependencies: ansi-regex "^0.2.1" -strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -8307,6 +8407,12 @@ supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.2.3, supports-co dependencies: has-flag "^1.0.0" +supports-color@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.0.0.tgz#33a7c680aa512c9d03ef929cacbb974d203d2790" + dependencies: + has-flag "^2.0.0" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -8364,8 +8470,8 @@ tar-pack@^3.4.0: uid-number "^0.0.6" tar-stream@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.2.tgz#fbc6c6e83c1a19d4cb48c7d96171fc248effc7bf" + version "1.5.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.4.tgz#36549cf04ed1aee9b2a30c0143252238daf94016" dependencies: bl "^1.0.0" end-of-stream "^1.0.0" @@ -8408,8 +8514,8 @@ thenify-all@^1.0.0, thenify-all@^1.6.0: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": - version "3.2.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" dependencies: any-promise "^1.0.0" @@ -8446,10 +8552,10 @@ tidepool-platform-client@tidepool-org/platform-client#krystophv/electron: superagent "1.2.0" time-stamp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" -timed-out@^4.0.0: +timed-out@4.0.1, timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -8482,8 +8588,8 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" topo@2.x.x: version "2.0.2" @@ -8515,6 +8621,10 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +trackjs@2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/trackjs/-/trackjs-2.8.2.tgz#c6196414d0d0e049c6c903b7f7b41b5900c1fcf2" + traverse@0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" @@ -8588,13 +8698,20 @@ type-is@~1.6.14: media-typer "0.3.0" mime-types "~2.1.15" -typedarray@^0.0.6, typedarray@~0.0.5: +typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + version "0.7.13" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.13.tgz#cd9dd2f86493b3f44dbeeef3780fda74c5ee14be" + +uglify-js@3.0.x: + version "3.0.20" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.20.tgz#cb35b2bcfe478051b6f3282be8db4e4add49a1e5" + dependencies: + commander "~2.9.0" + source-map "~0.5.1" uglify-js@^2.6, uglify-js@~2.7.3: version "2.7.5" @@ -8605,15 +8722,6 @@ uglify-js@^2.6, uglify-js@~2.7.3: uglify-to-browserify "~1.0.0" yargs "~3.10.0" -uglify-js@~2.8.22: - version "2.8.22" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@ -8679,15 +8787,15 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" update-notifier@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" + version "2.2.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" dependencies: boxen "^1.0.0" chalk "^1.0.0" configstore "^3.0.0" + import-lazy "^2.1.0" is-npm "^1.0.0" latest-version "^3.0.0" - lazy-req "^2.0.0" semver-diff "^2.0.0" xdg-basedir "^3.0.0" @@ -8719,11 +8827,11 @@ url-parse@1.0.x: querystringify "0.0.x" requires-port "1.0.x" -url-parse@^1.1.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156" +url-parse@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" dependencies: - querystringify "0.0.x" + querystringify "~1.0.0" requires-port "1.0.x" url@^0.11.0, url@~0.11.0: @@ -8775,15 +8883,15 @@ uuid-1345@^0.99.6: dependencies: macaddress "^0.2.7" +uuid@3.0.0, uuid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" + uuid@^2.0.1, uuid@^2.0.2, uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: +validate-npm-package-license@*, validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: @@ -8863,8 +8971,8 @@ wdio-dot-reporter@~0.0.8: resolved "https://registry.yarnpkg.com/wdio-dot-reporter/-/wdio-dot-reporter-0.0.8.tgz#36195576da0d998210c71948cbb65f5bf11bfc65" webdriverio@^4.0.4: - version "4.7.1" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-4.7.1.tgz#2248d1c6a2e05a89c840d4d62e9e550997a43854" + version "4.8.0" + resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-4.8.0.tgz#d52929b749080f89967f6e1614051cbc8172d132" dependencies: archiver "~1.3.0" babel-runtime "~6.23.0" @@ -9020,8 +9128,8 @@ whatwg-url@4.0.0: webidl-conversions "^3.0.0" whatwg-url@^4.3.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de" + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -9041,10 +9149,10 @@ which@1, which@^1.1.1, which@^1.2.12, which@^1.2.8, which@^1.2.9, which@~1.2.11, isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: - string-width "^1.0.1" + string-width "^1.0.2" widest-line@^1.0.0: version "1.0.0" @@ -9087,7 +9195,15 @@ wrappy@1, wrappy@~1.0.1, wrappy@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^1.1.2, write-file-atomic@~1.1.4: +write-file-atomic@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b" dependencies: @@ -9113,8 +9229,8 @@ xdg-basedir@^3.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" xelement@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/xelement/-/xelement-1.0.13.tgz#36b724d1e6489d6aae285b06995ae5e33cec10b7" + version "1.0.16" + resolved "https://registry.yarnpkg.com/xelement/-/xelement-1.0.16.tgz#900bb46c20fc2dffadff778a9d2dc36699d0ff7e" dependencies: sax "^1.2.1" @@ -9148,7 +9264,7 @@ y18n@^3.2.0, y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -yallist@^2.0.0: +yallist@^2.0.0, yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -9196,8 +9312,8 @@ yargs@4.7.1: yargs-parser "^2.4.0" yargs@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.1.tgz#420ef75e840c1457a80adcca9bc6fa3849de51aa" + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" dependencies: camelcase "^4.1.0" cliui "^3.2.0" @@ -9229,10 +9345,10 @@ yauzl@2.4.1: fd-slicer "~1.0.1" zip-stream@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.1.1.tgz#5216b48bbb4d2651f64d5c6e6f09eb4a7399d557" + version "1.2.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04" dependencies: archiver-utils "^1.3.0" - compress-commons "^1.1.0" + compress-commons "^1.2.0" lodash "^4.8.0" readable-stream "^2.0.0" From 9e93b4bef590d971eeb95c4ff03d5647bc43df24 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 26 Jun 2017 17:01:57 +0100 Subject: [PATCH 03/66] move trackJs loader to other webpack config files --- webpack.config.base.js | 6 ------ webpack.config.development.js | 5 +++++ webpack.config.production.js | 5 +++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/webpack.config.base.js b/webpack.config.base.js index 0517762b8d..b34ba786aa 100755 --- a/webpack.config.base.js +++ b/webpack.config.base.js @@ -17,10 +17,6 @@ export default validate({ }, { test: /\.json$/, loader: 'json-loader' - }, - { - test: require.resolve('trackjs'), - loader: 'exports?trackJs' }] }, @@ -44,7 +40,5 @@ export default validate({ plugins: [], - devtool: 'source-map', - externals: Object.keys(_.merge({}, externals, additionalExternals) || {}) }); diff --git a/webpack.config.development.js b/webpack.config.development.js index 315cd780a4..5784c48e38 100755 --- a/webpack.config.development.js +++ b/webpack.config.development.js @@ -89,6 +89,11 @@ export default validate(merge(baseConfig, { { test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/, loader: 'url-loader' + }, + + { + test: require.resolve('trackjs'), + loader: 'exports?trackJs' } ] diff --git a/webpack.config.production.js b/webpack.config.production.js index e86cec8bf9..6bb5e38de4 100755 --- a/webpack.config.production.js +++ b/webpack.config.production.js @@ -88,6 +88,11 @@ export default validate(merge(baseConfig, { { test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/, loader: 'url-loader' + }, + + { + test: require.resolve('trackjs'), + loader: 'exports?trackJs' } ] }, From d0025fa590f0a465944099ec031e1d780f3f888e Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 26 Jun 2017 17:07:33 -0400 Subject: [PATCH 04/66] exclude trackerjs loader for tests --- webpack.config.test.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/webpack.config.test.js b/webpack.config.test.js index ab3309ce19..ead3088c00 100755 --- a/webpack.config.test.js +++ b/webpack.config.test.js @@ -4,13 +4,15 @@ require('babel-register'); const validate = require('webpack-validator'); const devConfig = require('./webpack.config.development'); +const loaders = devConfig.default.module.loaders.slice(1); +loaders.splice(-1); module.exports = validate({ output: { libraryTarget: 'commonjs2' }, module: { - // Use base + development loaders, but exclude 'babel-loader' - loaders: devConfig.default.module.loaders.slice(1) + // Use base + development loaders, but exclude 'babel-loader' and 'trackerjs' + loaders: loaders } }); From 629256751fe9dce4b775cf7c65ac56e59f22c95a Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 27 Jun 2017 16:54:41 +0100 Subject: [PATCH 05/66] remove ahoy log test --- app/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/index.js b/app/index.js index 58bb1af30f..ef411a62ff 100755 --- a/app/index.js +++ b/app/index.js @@ -42,8 +42,6 @@ crashReporter.start({ uploadToServer: false }); -trackJs.track('ahoy trackjs!'); - console.log('Crash logs can be found in:',crashReporter.getCrashesDirectory()); console.log('Last crash report:', crashReporter.getLastCrashReport()); From 1e43bcd18b8ab8e775b45c7daece90097c17bc4b Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 27 Jun 2017 16:57:01 +0100 Subject: [PATCH 06/66] bump version for alpha --- app/package.json | 2 +- package.json | 2 +- yarn.lock | 72 +++++++++++++++++------------------------------- 3 files changed, 27 insertions(+), 49 deletions(-) diff --git a/app/package.json b/app/package.json index c32e3cbc4d..875f71739f 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.8", + "version": "0.310.0-alpha.9", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index c7f7ee814d..13c1039452 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.8", + "version": "0.310.0-alpha.9", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", diff --git a/yarn.lock b/yarn.lock index 5bffabe90c..bf5507cba4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,14 +135,14 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" -ansi-regex@*, ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + ansi-styles@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" @@ -353,7 +353,7 @@ async-some@~1.0.2: dependencies: dezalgo "^1.0.2" -async@0.9.0: +async@0.9.0, async@^0.9.0, async@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/async/-/async-0.9.0.tgz#ac3613b1da9bed1b47510bb4651b8931e47146c7" @@ -361,10 +361,6 @@ async@1.5.2, async@^1.3.0, async@^1.4.0, async@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^0.9.0, async@~0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - async@^2.0.0, async@^2.0.1: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" @@ -2553,7 +2549,7 @@ debug@2.6.7: dependencies: ms "2.0.0" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -4497,7 +4493,7 @@ import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5205,10 +5201,6 @@ lodash._baseget@^3.0.0: version "3.7.2" resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -5231,25 +5223,11 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" -lodash._getnative@*, lodash._getnative@^3.0.0: +lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -5418,7 +5396,7 @@ lodash.rest@^4.0.0: version "4.0.5" resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa" -lodash.restparam@*, lodash.restparam@^3.0.0: +lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -5812,11 +5790,11 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" -mute-stream@0.0.5: +mute-stream@0.0.5, mute-stream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" -mute-stream@0.0.7, mute-stream@~0.0.4: +mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -6281,17 +6259,17 @@ npmi@1.0.1: npm "^2.1.12" semver "^4.1.0" -"npmlog@0 || 1 || 2", "npmlog@0.1 || 1 || 2", npmlog@~2.0.0, "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" +"npmlog@0 || 1 || 2", "npmlog@0 || 1 || 2 || 3 || 4", npmlog@2.0.3, npmlog@~2.0.0, npmlog@~2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.3.tgz#020f99351f0c02e399c674ba256e7c4d3b3dd298" dependencies: ansi "~0.3.1" are-we-there-yet "~1.1.2" gauge "~1.2.5" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@2.0.3, npmlog@~2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.3.tgz#020f99351f0c02e399c674ba256e7c4d3b3dd298" +"npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" dependencies: ansi "~0.3.1" are-we-there-yet "~1.1.2" @@ -7426,7 +7404,7 @@ readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" dependencies: @@ -8310,18 +8288,18 @@ stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@*, strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" dependencies: ansi-regex "^0.2.1" +strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -8891,7 +8869,7 @@ uuid@^2.0.1, uuid@^2.0.2, uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -validate-npm-package-license@*, validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: From 28ee2166b5d85b08ee2f8163bab3f8904bdc8a3d Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 18 Jul 2017 16:07:40 -0400 Subject: [PATCH 07/66] use browser version of Raven for renderer process --- app/index.js | 4 ++-- app/main.development.js | 6 ++++++ package.json | 1 + yarn.lock | 4 ++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/index.js b/app/index.js index ef411a62ff..4f6379213e 100755 --- a/app/index.js +++ b/app/index.js @@ -11,14 +11,14 @@ import configureStore from './store/configureStore'; import './app.global.css'; import '../styles/main.less'; import { ipcRenderer, crashReporter } from 'electron'; +import Raven from 'raven-js'; window._trackJs = { token: 'f739b1e86d654970b6ce9170f0e63a33' }; var trackJs = require('trackjs'); -var Raven = require('raven'); -Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78:32643a50ee9241c18b97f0c1ed5ed228@sentry.io/183894',{ +Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78@sentry.io/183894', { autoBreadcrumbs: { 'console': true // console logging } diff --git a/app/main.development.js b/app/main.development.js index 7ecb602bd4..04aa3dab76 100755 --- a/app/main.development.js +++ b/app/main.development.js @@ -4,6 +4,12 @@ import open from 'open'; import { autoUpdater } from 'electron-updater'; import * as chromeFinder from 'lighthouse/chrome-launcher/chrome-finder'; import { sync as syncActions } from './actions'; +import Raven from 'raven'; +Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78:32643a50ee9241c18b97f0c1ed5ed228@sentry.io/183894', { + autoBreadcrumbs: { + 'console': true // console logging + } +}).install(); let menu; let template; diff --git a/package.json b/package.json index 3abbd5876a..55b75c7650 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "lodash": "3.10.1", "node-uuid": "1.4.8", "raven": "2.1.0", + "raven-js": "3.17.0", "react": "15.4.2", "react-addons-update": "15.4.2", "react-dom": "15.4.2", diff --git a/yarn.lock b/yarn.lock index 215d980b0a..85dfc32c02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7168,6 +7168,10 @@ range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" +raven-js@3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.17.0.tgz#779457ac7910512c3c2cc9bb6d0a9eeb59a969ec" + raven@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/raven/-/raven-2.1.0.tgz#1b624e56374d9c9d93c74448461a2a356ce37527" From 00a482c76f2fe6cb17c4ac4590516fdb5d1e6e95 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 19 Jul 2017 13:48:10 -0400 Subject: [PATCH 08/66] also comment out deleted audio file from driverManager --- lib/driverManager.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/driverManager.js b/lib/driverManager.js index ffd40b1688..369b7f59f9 100644 --- a/lib/driverManager.js +++ b/lib/driverManager.js @@ -162,10 +162,12 @@ module.exports = function (driverObjects, configs) { ], function(err, result) { result = result || {}; drvr.cleanup(stat.progressForStep(7), result, function() { + /* TODO: put this back in when we have new sound/earcon if(isBrowser) { var snd = new Audio('../sounds/underwater.wav'); snd.play(); } + */ cb(err, result); }); }); @@ -183,10 +185,12 @@ module.exports = function (driverObjects, configs) { ], function(err, result) { result = result || {}; drvr.cleanup(stat.progressForStep(7), result, function() { + /* TODO: put this back in when we have new sound/earcon if(isBrowser) { var snd = new Audio('../sounds/underwater.wav'); snd.play(); } + */ cb(err, result); }); }); From 26f0dabeee165f79be4da82d0fb6a7f61dfc8fe4 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 20 Jul 2017 15:06:35 -0400 Subject: [PATCH 09/66] bump version to build new alpha --- 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 6d14e66151..4edff5d819 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.12", + "version": "0.310.0-alpha.13", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 55b75c7650..4f29c03142 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.12", + "version": "0.310.0-alpha.13", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 630b06e3b03770e33dc6b63653643682e0d0c449 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 26 Jul 2017 10:20:36 +0100 Subject: [PATCH 10/66] bump version number --- 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 6d14e66151..4edff5d819 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.12", + "version": "0.310.0-alpha.13", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 3abbd5876a..d26767a098 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.12", + "version": "0.310.0-alpha.13", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 27bb047765a4a02e1425fa94d671ace22869bf2b Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 26 Jul 2017 10:31:06 +0100 Subject: [PATCH 11/66] bump version number 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 4edff5d819..58e88abe76 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.13", + "version": "0.310.0-alpha.14", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 4f29c03142..5a7e10fc82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.13", + "version": "0.310.0-alpha.14", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 1ca3739df3cac19e7866e9d80a57861cf266f1eb Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 26 Jul 2017 14:51:07 +0100 Subject: [PATCH 12/66] and bump version once more --- 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 58e88abe76..f7f501ddf1 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.14", + "version": "0.310.0-alpha.15", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 5a7e10fc82..22689ce5eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.14", + "version": "0.310.0-alpha.15", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 7ba5d8d073164514f440f0ea5195f6433d9f115b Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 27 Jul 2017 14:50:08 -0400 Subject: [PATCH 13/66] bump platform-client dependency --- app/package.json | 2 +- package.json | 4 ++-- yarn.lock | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/package.json b/app/package.json index f7f501ddf1..ed07027281 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.15", + "version": "0.310.0-alpha.16", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 22689ce5eb..0c491c7e31 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.15", + "version": "0.310.0-alpha.16", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", @@ -64,7 +64,7 @@ "source-map-support": "0.4.14", "stack-trace": "0.0.9", "sundial": "1.6.0", - "tidepool-platform-client": "0.32.0", + "tidepool-platform-client": "0.32.1", "trackjs": "2.8.2" }, "browserslist": "electron 1.6", diff --git a/yarn.lock b/yarn.lock index 85dfc32c02..2beba67b3c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8559,9 +8559,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.32.0: - version "0.32.0" - resolved "https://registry.yarnpkg.com/tidepool-platform-client/-/tidepool-platform-client-0.32.0.tgz#79f52f63c78105ac306f17b3b73084596f9fc319" +tidepool-platform-client@0.32.1: + version "0.32.1" + resolved "https://registry.yarnpkg.com/tidepool-platform-client/-/tidepool-platform-client-0.32.1.tgz#0fbf0ffd033b8c9192bc0529f3ff373a6aeac6d2" dependencies: async "0.9.0" crypto "0.0.3" From e99c959c3b3be416fbc10e149a15b0ef5ce0b740 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 1 Aug 2017 10:48:41 +0100 Subject: [PATCH 14/66] removing trackjs --- app/index.js | 5 ----- webpack.config.development.js | 5 ----- webpack.config.production.js | 5 ----- 3 files changed, 15 deletions(-) diff --git a/app/index.js b/app/index.js index 4f6379213e..5a9c125ffc 100755 --- a/app/index.js +++ b/app/index.js @@ -13,11 +13,6 @@ import '../styles/main.less'; import { ipcRenderer, crashReporter } from 'electron'; import Raven from 'raven-js'; -window._trackJs = { - token: 'f739b1e86d654970b6ce9170f0e63a33' -}; -var trackJs = require('trackjs'); - Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78@sentry.io/183894', { autoBreadcrumbs: { 'console': true // console logging diff --git a/webpack.config.development.js b/webpack.config.development.js index 5784c48e38..315cd780a4 100755 --- a/webpack.config.development.js +++ b/webpack.config.development.js @@ -89,11 +89,6 @@ export default validate(merge(baseConfig, { { test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/, loader: 'url-loader' - }, - - { - test: require.resolve('trackjs'), - loader: 'exports?trackJs' } ] diff --git a/webpack.config.production.js b/webpack.config.production.js index 6bb5e38de4..e86cec8bf9 100755 --- a/webpack.config.production.js +++ b/webpack.config.production.js @@ -88,11 +88,6 @@ export default validate(merge(baseConfig, { { test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/, loader: 'url-loader' - }, - - { - test: require.resolve('trackjs'), - loader: 'exports?trackJs' } ] }, From b9ae8cf1769073e7c2972da0571c7f9dc7240aa5 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 1 Aug 2017 10:52:18 +0100 Subject: [PATCH 15/66] move crashReport to main --- app/index.js | 12 +----------- app/main.development.js | 12 +++++++++++- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/index.js b/app/index.js index 5a9c125ffc..e46010032e 100755 --- a/app/index.js +++ b/app/index.js @@ -10,7 +10,7 @@ import routes from './routes'; import configureStore from './store/configureStore'; import './app.global.css'; import '../styles/main.less'; -import { ipcRenderer, crashReporter } from 'electron'; +import { ipcRenderer } from 'electron'; import Raven from 'raven-js'; Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78@sentry.io/183894', { @@ -30,16 +30,6 @@ ipcRenderer.on('action', function(event, action) { store.dispatch(action); }); -crashReporter.start({ - productName: 'Uploader', - companyName: 'Tidepool', - submitURL: '', - uploadToServer: false -}); - -console.log('Crash logs can be found in:',crashReporter.getCrashesDirectory()); -console.log('Last crash report:', crashReporter.getLastCrashReport()); - render( diff --git a/app/main.development.js b/app/main.development.js index 04aa3dab76..3cb6d9f6fc 100755 --- a/app/main.development.js +++ b/app/main.development.js @@ -1,4 +1,4 @@ -import { app, BrowserWindow, Menu, shell, ipcMain } from 'electron'; +import { app, BrowserWindow, Menu, shell, ipcMain, crashReporter } from 'electron'; import os from 'os'; import open from 'open'; import { autoUpdater } from 'electron-updater'; @@ -11,6 +11,16 @@ Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78:32643a50ee9241c18b97f0c1e } }).install(); +crashReporter.start({ + productName: 'Uploader', + companyName: 'Tidepool', + submitURL: '', + uploadToServer: false +}); + +console.log('Crash logs can be found in:',crashReporter.getCrashesDirectory()); +console.log('Last crash report:', crashReporter.getLastCrashReport()); + let menu; let template; let mainWindow = null; From a4b4b9186552290f82d079dc59f17398abee88b5 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 1 Aug 2017 10:56:12 +0100 Subject: [PATCH 16/66] bump version and yarn.lock --- app/package.json | 2 +- package.json | 2 +- yarn.lock | 32 +++++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/app/package.json b/app/package.json index 9756a4ed83..7a719d1d09 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.17", + "version": "0.310.0-alpha.18", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index a356615f78..5247fbcdfe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.17", + "version": "0.310.0-alpha.18", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", diff --git a/yarn.lock b/yarn.lock index 837a7347a8..6a6efed2c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3503,6 +3503,13 @@ expand-tilde@^1.2.2: dependencies: os-homedir "^1.0.1" +exports-loader@0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" + dependencies: + loader-utils "^1.0.2" + source-map "0.5.x" + express@4.15.2, express@^4.13.3: version "4.15.2" resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" @@ -5550,6 +5557,10 @@ lru-cache@~4.0.1: pseudomap "^1.0.1" yallist "^2.0.0" +lsmod@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b" + macaddress@^0.2.7, macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" @@ -7162,6 +7173,21 @@ range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" +raven-js@3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.17.0.tgz#779457ac7910512c3c2cc9bb6d0a9eeb59a969ec" + +raven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/raven/-/raven-2.1.0.tgz#1b624e56374d9c9d93c74448461a2a356ce37527" + dependencies: + cookie "0.3.1" + json-stringify-safe "5.0.1" + lsmod "1.0.0" + stack-trace "0.0.9" + timed-out "4.0.1" + uuid "3.0.0" + rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" @@ -8552,7 +8578,7 @@ time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" -timed-out@^4.0.0: +timed-out@4.0.1, timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -8876,6 +8902,10 @@ uuid-1345@^0.99.6: dependencies: macaddress "^0.2.7" +uuid@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" + uuid@3.1.0, uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" From 8ba627d0e97583a06086f9eea0ad9aad64220ccd Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 1 Aug 2017 11:29:36 +0100 Subject: [PATCH 17/66] remove webpack test workaround for trackjs --- lib/core/device.js | 1 - webpack.config.test.js | 1 - 2 files changed, 2 deletions(-) diff --git a/lib/core/device.js b/lib/core/device.js index 1d7a2ce75a..55bc226f06 100644 --- a/lib/core/device.js +++ b/lib/core/device.js @@ -28,7 +28,6 @@ var driverManager = require('../driverManager'); var builder = require('../objectBuilder')(); var hid = require('node-hid'); var SerialPort = require('serialport'); -const {crashReporter} = require('electron'); var dexcomDriver = require('../drivers/dexcom/dexcomDriver'); var oneTouchMiniDriver = require('../drivers/onetouch/oneTouchMiniDriver'); diff --git a/webpack.config.test.js b/webpack.config.test.js index ead3088c00..231ab91efb 100755 --- a/webpack.config.test.js +++ b/webpack.config.test.js @@ -5,7 +5,6 @@ require('babel-register'); const validate = require('webpack-validator'); const devConfig = require('./webpack.config.development'); const loaders = devConfig.default.module.loaders.slice(1); -loaders.splice(-1); module.exports = validate({ output: { From aef340bd1948e4a8b2c9c3dd76c8a176c412bda2 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 4 Aug 2017 15:56:46 +0100 Subject: [PATCH 18/66] create new 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 7a719d1d09..9dbebe527e 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.18", + "version": "0.310.0-alpha.19", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 22c51b46c8..dc0ea45f74 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.18", + "version": "0.310.0-alpha.19", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From dd4ff6944ea2aecd4c00e487ca3fb2dfbe882d74 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Fri, 4 Aug 2017 13:11:58 -0400 Subject: [PATCH 19/66] Create initial Beta release chain --- 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 9dbebe527e..023c94cf23 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.19", + "version": "0.310.0-beta.1", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index dc0ea45f74..c9e33bf109 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.19", + "version": "0.310.0-beta.1", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 24ef5bb2fd69b1e373d2ed7d4b880e84b40a5406 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 7 Aug 2017 10:13:05 +0100 Subject: [PATCH 20/66] bumping that version number *bump* --- 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 9dbebe527e..879a426806 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.19", + "version": "0.310.0-alpha.20", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index dc0ea45f74..13bdb5aa95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.19", + "version": "0.310.0-alpha.20", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From aac44c3cc673a19d02311b5c3243ffdae2a938d6 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 7 Aug 2017 10:43:36 +0100 Subject: [PATCH 21/66] bumping version yet again since CI build is not picking it up --- 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 879a426806..8060466095 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.20", + "version": "0.310.0-alpha.21", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 13bdb5aa95..977ade3a62 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.20", + "version": "0.310.0-alpha.21", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 6a4ffb122541316363e2f045daf81b89e8c9119b Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 9 Aug 2017 12:58:42 -0400 Subject: [PATCH 22/66] bump 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 8060466095..1ccbca34ea 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.21", + "version": "0.310.0-alpha.22", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 977ade3a62..e3a0649473 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.21", + "version": "0.310.0-alpha.22", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From d09b374edf24f3c418e7909042841e8a7aaf4528 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 10 Aug 2017 15:27:03 -0400 Subject: [PATCH 23/66] version bump --- 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 1ccbca34ea..dd462aceed 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.22", + "version": "0.310.0-alpha.23", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index ff59911bdf..36770017f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.22", + "version": "0.310.0-alpha.23", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From cb7e1755d6c3810de6378ed624ac7e78c2f3e59d Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 11:54:58 -0400 Subject: [PATCH 24/66] bump 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 dd462aceed..cc0db5b685 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.23", + "version": "0.310.0-alpha.24", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 2a5a526e33..7bec1433b8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.23", + "version": "0.310.0-alpha.24", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 6728b1475985a0225baf8e8417632efb17830296 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 13:21:10 -0400 Subject: [PATCH 25/66] un-anger `electron-builder` re: artifact names --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7bec1433b8..5ff608fe4e 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "dev": "npm run hot-server -- --start-hot", "prepare-qa-build": "node -r babel-register scripts/prepare-qa-build.js", "package": "npm run build && build -p onTagOrDraft", - "package-dev": "npm run build-dev && build -p onTagOrDraft --config.artifactName='tidepool-uploader-${version}-${arch}-${os}-dev.${ext}' --config.nsis.artifactName='tidepool-uploader-setup-${version}-dev.${ext}' --config.pkg.artifactName='tidepool-uploader-${version}-dev.${ext}' --extraMetadata.name='tidepool-uploader-dev'", + "package-dev": "npm run build-dev && build -p onTagOrDraft --config.artifactName=tidepool-uploader-${version}-${arch}-${os}-dev.${ext} --config.nsis.artifactName=tidepool-uploader-setup-${version}-dev.${ext} --config.pkg.artifactName=tidepool-uploader-${version}-dev.${ext} --extraMetadata.name=tidepool-uploader-dev", "package-win": "npm run build && build --win --x64", "package-mac": "npm run build && build --mac", "package-linux": "npm run build && build --linux", From 89623e393618d0e137d919fe9473bf7a14a438f3 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 13:39:09 -0400 Subject: [PATCH 26/66] try old image for appveyor build --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 11f24b21d9..2c562033eb 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,6 @@ os: unstable -image: Visual Studio 2017 +#image: Visual Studio 2017 environment: APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z From 067acd05408f167fe513918693f0189a109388ce Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 14:52:19 -0400 Subject: [PATCH 27/66] revert artifactName additions --- package.json | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5ff608fe4e..707703d415 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "dev": "npm run hot-server -- --start-hot", "prepare-qa-build": "node -r babel-register scripts/prepare-qa-build.js", "package": "npm run build && build -p onTagOrDraft", - "package-dev": "npm run build-dev && build -p onTagOrDraft --config.artifactName=tidepool-uploader-${version}-${arch}-${os}-dev.${ext} --config.nsis.artifactName=tidepool-uploader-setup-${version}-dev.${ext} --config.pkg.artifactName=tidepool-uploader-${version}-dev.${ext} --extraMetadata.name=tidepool-uploader-dev", + "package-dev": "npm run build-dev && build -p onTagOrDraft --config.artifactName=\"${productName}-${version}-${arch}-${os}-dev.${ext}\" --config.nsis.artifactName=\"${productName}-Setup-${version}-dev.${ext}\" --extraMetadata.name=\"tidepool-uploader-dev\"", "package-win": "npm run build && build --win --x64", "package-mac": "npm run build && build --mac", "package-linux": "npm run build && build --linux", @@ -70,7 +70,6 @@ "browserslist": "electron 1.6", "build": { "productName": "Tidepool Uploader", - "artifactName": "tidepool-uploader-${version}-${arch}-${os}.${ext}", "appId": "org.tidepool.TidepoolUploader", "directories": { "buildResources": "resources", @@ -94,8 +93,7 @@ "nsis": { "oneClick": false, "perMachine": true, - "allowElevation": true, - "artifactName": "tidepool-uploader-setup-${version}.${ext}" + "allowElevation": true }, "files": [ "dist/", @@ -153,7 +151,6 @@ ] }, "pkg": { - "artifactName": "tidepool-uploader-${version}.${ext}", "allowAnywhere": false, "allowRootDirectory": false } From 0d3daafb1139878443a6d33f91eff8e78fba9fbb Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 15:41:53 -0400 Subject: [PATCH 28/66] update electron-builder --- package.json | 2 +- yarn.lock | 179 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 123 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 707703d415..569ab7ae22 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "devtron": "1.4.0", "difflet": "1.0.1", "electron": "1.6.2", - "electron-builder": "19.19.1", + "electron-builder": "19.22.1", "electron-devtools-installer": "2.2.0", "electron-mocha": "3.4.0", "electron-rebuild": "1.5.7", diff --git a/yarn.lock b/yarn.lock index 4493744dad..f5dd458881 100644 --- a/yarn.lock +++ b/yarn.lock @@ -302,12 +302,12 @@ asap@^2.0.0, asap@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" -asar-integrity@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/asar-integrity/-/asar-integrity-0.1.1.tgz#1a709dd78443707fc260f7ce363d9569983caf76" +asar-integrity@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/asar-integrity/-/asar-integrity-0.1.2.tgz#461248c63c24b13d4a11a70c378f8f59dba2b4af" dependencies: bluebird-lst "^1.0.2" - fs-extra-p "^4.3.0" + fs-extra-p "^4.4.0" asar@0.13.0: version "0.13.0" @@ -364,6 +364,10 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +async-exit-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" + async-some@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/async-some/-/async-some-1.0.2.tgz#4d8a81620d5958791b5b98f802d3207776e95509" @@ -1555,6 +1559,12 @@ bluebird-lst@^1.0.2: dependencies: bluebird "^3.5.0" +bluebird-lst@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.3.tgz#cc56c18660eff0a0b86e2c33d1659618f7005158" + dependencies: + bluebird "^3.5.0" + bluebird@^3.4.6, bluebird@^3.4.7, bluebird@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" @@ -1858,6 +1868,14 @@ chalk@^2.0.1: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +chalk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" @@ -2548,7 +2566,7 @@ dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" -debug@2, debug@2.6.8, debug@^2.1.3, debug@^2.2.0, debug@^2.4.5, debug@^2.5.1, debug@^2.6.1, debug@^2.6.6, debug@^2.6.8: +debug@2, debug@2.6.8, debug@^2.1.3, debug@^2.2.0, debug@^2.4.5, debug@^2.5.1, debug@^2.6.6, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -2578,6 +2596,12 @@ debug@2.6.7: dependencies: ms "2.0.0" +debug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.0.tgz#1d2feae53349047b08b264ec41906ba17a8516e4" + dependencies: + ms "2.0.0" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2816,6 +2840,14 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" +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" + duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -2844,12 +2876,12 @@ ejs@~2.5.6: version "2.5.6" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" -electron-builder-http@19.19.0, electron-builder-http@~19.19.0: - version "19.19.0" - resolved "https://registry.yarnpkg.com/electron-builder-http/-/electron-builder-http-19.19.0.tgz#20f908fcd1bbe202fd44a9623abd9e4d7bc98825" +electron-builder-http@19.21.0, electron-builder-http@~19.21.0: + version "19.21.0" + resolved "https://registry.yarnpkg.com/electron-builder-http/-/electron-builder-http-19.21.0.tgz#3e812f030fddb5eaebcc26303f7bca1a34e1da76" dependencies: - bluebird-lst "^1.0.2" - debug "^2.6.8" + bluebird-lst "^1.0.3" + debug "^3.0.0" fs-extra-p "^4.4.0" electron-builder-http@~17.0.3: @@ -2859,55 +2891,82 @@ electron-builder-http@~17.0.3: debug "2.6.4" fs-extra-p "^4.1.0" -electron-builder-util@19.19.0, electron-builder-util@~19.19.0: - version "19.19.0" - resolved "https://registry.yarnpkg.com/electron-builder-util/-/electron-builder-util-19.19.0.tgz#96082aff13bfda8f40a62739f10718c9c42f6d4c" +electron-builder-util@19.22.0: + version "19.22.0" + resolved "https://registry.yarnpkg.com/electron-builder-util/-/electron-builder-util-19.22.0.tgz#1da670a504cfa4e1cbd82b6aa62f9fb20c74820a" dependencies: "7zip-bin" "^2.1.0" - bluebird-lst "^1.0.2" - chalk "^2.0.1" - debug "^2.6.8" - electron-builder-http "~19.19.0" + bluebird-lst "^1.0.3" + chalk "^2.1.0" + debug "^3.0.0" + electron-builder-http "~19.21.0" fcopy-pre-bundled "0.3.4" fs-extra-p "^4.4.0" ini "^1.3.4" is-ci "^1.0.10" + lazy-val "^1.0.2" node-emoji "^1.8.1" semver "^5.4.1" source-map-support "^0.4.15" stat-mode "^0.2.2" + temp-file "^1.0.1" tunnel-agent "^0.6.0" -electron-builder@19.19.1: - version "19.19.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.19.1.tgz#213ccda0afc1d1c75ba0fc1aa355ea7023d35769" +electron-builder-util@~19.21.0: + version "19.21.0" + resolved "https://registry.yarnpkg.com/electron-builder-util/-/electron-builder-util-19.21.0.tgz#d812100cf2df94734231b25d200e133185cee639" + dependencies: + "7zip-bin" "^2.1.0" + bluebird-lst "^1.0.3" + chalk "^2.1.0" + debug "^3.0.0" + electron-builder-http "~19.21.0" + fcopy-pre-bundled "0.3.4" + fs-extra-p "^4.4.0" + ini "^1.3.4" + is-ci "^1.0.10" + lazy-val "^1.0.2" + node-emoji "^1.8.1" + semver "^5.4.1" + source-map-support "^0.4.15" + stat-mode "^0.2.2" + temp-file "^1.0.1" + tunnel-agent "^0.6.0" + +electron-builder@19.22.1: + version "19.22.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.22.1.tgz#cd5d1fd3216b52e0621c4eddf557d9b7c28060a2" dependencies: "7zip-bin" "^2.1.0" ajv "^5.2.2" ajv-keywords "^2.1.0" - asar-integrity "0.1.1" - bluebird-lst "^1.0.2" - chalk "^2.0.1" + asar-integrity "0.1.2" + bluebird-lst "^1.0.3" + chalk "^2.1.0" chromium-pickle-js "^0.2.0" cuint "^0.2.2" - debug "^2.6.8" - electron-builder-http "19.19.0" - electron-builder-util "19.19.0" + debug "^3.0.0" + dotenv "^4.0.0" + dotenv-expand "^4.0.1" + electron-builder-http "19.21.0" + electron-builder-util "19.22.0" electron-download-tf "4.3.1" - electron-osx-sign "0.4.6" - electron-publish "19.19.1" + electron-osx-sign "0.4.7" + electron-publish "19.21.0" fs-extra-p "^4.4.0" hosted-git-info "^2.5.0" is-ci "^1.0.10" isbinaryfile "^3.0.2" js-yaml "^3.9.1" + lazy-val "^1.0.2" minimatch "^3.0.4" normalize-package-data "^2.4.0" parse-color "^1.0.0" plist "^2.1.0" - read-config-file "^0.1.3" + read-config-file "^1.0.5" sanitize-filename "^1.6.1" semver "^5.4.1" + temp-file "^1.0.1" update-notifier "^2.2.0" uuid-1345 "^0.99.6" yargs "^8.0.2" @@ -2981,26 +3040,25 @@ electron-mocha@3.4.0: mocha "^3.0.0" which "^1.1.1" -electron-osx-sign@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.6.tgz#2398e2d7cab5c1d8c3eeabb1cd490376528ec39a" +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" dependencies: - bluebird "^3.4.7" + bluebird "^3.5.0" compare-version "^0.1.2" - debug "^2.6.1" + debug "^2.6.8" isbinaryfile "^3.0.2" minimist "^1.2.0" - plist "^2.0.1" - tempfile "^1.1.1" + plist "^2.1.0" -electron-publish@19.19.1: - version "19.19.1" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.19.1.tgz#ae53ccf9a90f77184c2add3d74b8b60850378b76" +electron-publish@19.21.0: + version "19.21.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.21.0.tgz#1368d01fd325f6e1b4b25e17098e5e77ed4d71ad" dependencies: - bluebird-lst "^1.0.2" - chalk "^2.0.1" - electron-builder-http "~19.19.0" - electron-builder-util "~19.19.0" + bluebird-lst "^1.0.3" + chalk "^2.1.0" + electron-builder-http "~19.21.0" + electron-builder-util "~19.21.0" fs-extra-p "^4.4.0" mime "^1.3.6" @@ -3854,7 +3912,7 @@ fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" -fs-extra-p@^4.1.0, fs-extra-p@^4.3.0: +fs-extra-p@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.3.0.tgz#2e148a544287df0258931cabc583063b4eed2303" dependencies: @@ -4973,7 +5031,7 @@ js-yaml@^3.5.1, js-yaml@^3.8.3: argparse "^1.0.7" esprima "^3.1.1" -js-yaml@^3.9.0, js-yaml@^3.9.1: +js-yaml@^3.9.1: version "3.9.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" dependencies: @@ -5128,6 +5186,10 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" +lazy-val@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.2.tgz#d9b07fb1fce54cbc99b3c611de431b83249369b6" + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -6784,7 +6846,7 @@ pkg-up@^1.0.0: dependencies: find-up "^1.0.0" -plist@^2.0.1, plist@^2.1.0: +plist@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" dependencies: @@ -7378,14 +7440,15 @@ read-cmd-shim@~1.0.1: dependencies: graceful-fs "^4.1.2" -read-config-file@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-0.1.3.tgz#10f72ad95159864c78def8c749b226f80c998b61" +read-config-file@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-1.0.5.tgz#9992d2a4d24a993518e7eb6f3c30c0562264c367" dependencies: - bluebird-lst "^1.0.2" + bluebird-lst "^1.0.3" fs-extra-p "^4.4.0" - js-yaml "^3.9.0" + js-yaml "^3.9.1" json5 "^0.5.1" + lazy-val "^1.0.2" read-installed@~4.0.3: version "4.0.3" @@ -8584,12 +8647,14 @@ tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: fstream "^1.0.2" inherits "2" -tempfile@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" +temp-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-1.0.2.tgz#790ac9093b9d12a84f277f42f6314e0cf579f1c7" dependencies: - os-tmpdir "^1.0.0" - uuid "^2.0.1" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.3" + fs-extra-p "^4.4.0" + lazy-val "^1.0.2" term-size@^0.1.0: version "0.1.1" @@ -8985,7 +9050,7 @@ uuid@3.1.0, uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -uuid@^2.0.1, uuid@^2.0.2, uuid@^2.0.3: +uuid@^2.0.2, uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" From e12523f358d2151e6324183343afe31fcfb85abc Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 17:34:31 -0400 Subject: [PATCH 29/66] attempt build on VS 2015 appveyor image --- appveyor.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 2c562033eb..893988d919 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,4 @@ -os: unstable - -#image: Visual Studio 2017 +image: Visual Studio 2015 environment: APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z From d0504a7294820937023475678d44daea35a5872e Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 20:42:22 -0400 Subject: [PATCH 30/66] downgrade to earliest possible stable builder, VS2017 image --- appveyor.yml | 2 +- package.json | 2 +- yarn.lock | 215 +++++++++++++++++---------------------------------- 3 files changed, 72 insertions(+), 147 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 893988d919..c4db7fe688 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -image: Visual Studio 2015 +image: Visual Studio 2017 environment: APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z diff --git a/package.json b/package.json index 569ab7ae22..fcfe2f4844 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "devtron": "1.4.0", "difflet": "1.0.1", "electron": "1.6.2", - "electron-builder": "19.22.1", + "electron-builder": "19.5.1", "electron-devtools-installer": "2.2.0", "electron-mocha": "3.4.0", "electron-rebuild": "1.5.7", diff --git a/yarn.lock b/yarn.lock index f5dd458881..78d8dfc06f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -92,7 +92,7 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.2.2: +ajv@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" dependencies: @@ -302,12 +302,12 @@ asap@^2.0.0, asap@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" -asar-integrity@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/asar-integrity/-/asar-integrity-0.1.2.tgz#461248c63c24b13d4a11a70c378f8f59dba2b4af" +asar-integrity@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/asar-integrity/-/asar-integrity-0.1.1.tgz#1a709dd78443707fc260f7ce363d9569983caf76" dependencies: bluebird-lst "^1.0.2" - fs-extra-p "^4.4.0" + fs-extra-p "^4.3.0" asar@0.13.0: version "0.13.0" @@ -364,10 +364,6 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async-exit-hook@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" - async-some@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/async-some/-/async-some-1.0.2.tgz#4d8a81620d5958791b5b98f802d3207776e95509" @@ -1559,12 +1555,6 @@ bluebird-lst@^1.0.2: dependencies: bluebird "^3.5.0" -bluebird-lst@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.3.tgz#cc56c18660eff0a0b86e2c33d1659618f7005158" - dependencies: - bluebird "^3.5.0" - bluebird@^3.4.6, bluebird@^3.4.7, bluebird@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" @@ -1868,14 +1858,6 @@ chalk@^2.0.1: escape-string-regexp "^1.0.5" supports-color "^4.0.0" -chalk@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" @@ -2566,7 +2548,7 @@ dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" -debug@2, debug@2.6.8, debug@^2.1.3, debug@^2.2.0, debug@^2.4.5, debug@^2.5.1, debug@^2.6.6, debug@^2.6.8: +debug@2, debug@2.6.8, debug@^2.1.3, debug@^2.2.0, debug@^2.4.5, debug@^2.5.1, debug@^2.6.1, debug@^2.6.6, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -2596,12 +2578,6 @@ debug@2.6.7: dependencies: ms "2.0.0" -debug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.0.tgz#1d2feae53349047b08b264ec41906ba17a8516e4" - dependencies: - ms "2.0.0" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2840,14 +2816,6 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" -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" - duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -2876,13 +2844,12 @@ ejs@~2.5.6: version "2.5.6" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" -electron-builder-http@19.21.0, electron-builder-http@~19.21.0: - version "19.21.0" - resolved "https://registry.yarnpkg.com/electron-builder-http/-/electron-builder-http-19.21.0.tgz#3e812f030fddb5eaebcc26303f7bca1a34e1da76" +electron-builder-http@19.5.1, electron-builder-http@~19.5.1: + version "19.5.1" + resolved "https://registry.yarnpkg.com/electron-builder-http/-/electron-builder-http-19.5.1.tgz#2afcd65ef97fbde3812eb68a65371b4ef278ac58" dependencies: - bluebird-lst "^1.0.3" - debug "^3.0.0" - fs-extra-p "^4.4.0" + debug "2.6.8" + fs-extra-p "^4.3.0" electron-builder-http@~17.0.3: version "17.0.3" @@ -2891,82 +2858,55 @@ electron-builder-http@~17.0.3: debug "2.6.4" fs-extra-p "^4.1.0" -electron-builder-util@19.22.0: - version "19.22.0" - resolved "https://registry.yarnpkg.com/electron-builder-util/-/electron-builder-util-19.22.0.tgz#1da670a504cfa4e1cbd82b6aa62f9fb20c74820a" - dependencies: - "7zip-bin" "^2.1.0" - bluebird-lst "^1.0.3" - chalk "^2.1.0" - debug "^3.0.0" - electron-builder-http "~19.21.0" - fcopy-pre-bundled "0.3.4" - fs-extra-p "^4.4.0" - ini "^1.3.4" - is-ci "^1.0.10" - lazy-val "^1.0.2" - node-emoji "^1.8.1" - semver "^5.4.1" - source-map-support "^0.4.15" - stat-mode "^0.2.2" - temp-file "^1.0.1" - tunnel-agent "^0.6.0" - -electron-builder-util@~19.21.0: - version "19.21.0" - resolved "https://registry.yarnpkg.com/electron-builder-util/-/electron-builder-util-19.21.0.tgz#d812100cf2df94734231b25d200e133185cee639" +electron-builder-util@19.5.1, electron-builder-util@~19.5.1: + version "19.5.1" + resolved "https://registry.yarnpkg.com/electron-builder-util/-/electron-builder-util-19.5.1.tgz#4d63c207c64ae007d1e775a2f190ce4d1026ec70" dependencies: "7zip-bin" "^2.1.0" - bluebird-lst "^1.0.3" - chalk "^2.1.0" - debug "^3.0.0" - electron-builder-http "~19.21.0" + bluebird-lst "^1.0.2" + chalk "^1.1.3" + debug "2.6.8" + electron-builder-http "~19.5.1" fcopy-pre-bundled "0.3.4" - fs-extra-p "^4.4.0" + fs-extra-p "^4.3.0" ini "^1.3.4" is-ci "^1.0.10" - lazy-val "^1.0.2" - node-emoji "^1.8.1" - semver "^5.4.1" + node-emoji "^1.5.1" source-map-support "^0.4.15" stat-mode "^0.2.2" - temp-file "^1.0.1" tunnel-agent "^0.6.0" -electron-builder@19.22.1: - version "19.22.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.22.1.tgz#cd5d1fd3216b52e0621c4eddf557d9b7c28060a2" +electron-builder@19.5.1: + version "19.5.1" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.5.1.tgz#20b0d0560c9a994bd42b78d3264b5ad45631ab17" dependencies: "7zip-bin" "^2.1.0" - ajv "^5.2.2" + ajv "^5.2.0" ajv-keywords "^2.1.0" - asar-integrity "0.1.2" - bluebird-lst "^1.0.3" - chalk "^2.1.0" + asar-integrity "0.1.1" + bluebird-lst "^1.0.2" + chalk "^1.1.3" chromium-pickle-js "^0.2.0" cuint "^0.2.2" - debug "^3.0.0" - dotenv "^4.0.0" - dotenv-expand "^4.0.1" - electron-builder-http "19.21.0" - electron-builder-util "19.22.0" + debug "2.6.8" + electron-builder-http "19.5.1" + electron-builder-util "19.5.1" electron-download-tf "4.3.1" - electron-osx-sign "0.4.7" - electron-publish "19.21.0" - fs-extra-p "^4.4.0" - hosted-git-info "^2.5.0" + electron-osx-sign "0.4.6" + electron-publish "19.5.1" + fs-extra-p "^4.3.0" + hosted-git-info "^2.4.2" is-ci "^1.0.10" isbinaryfile "^3.0.2" - js-yaml "^3.9.1" - lazy-val "^1.0.2" + js-yaml "^3.8.4" + json5 "^0.5.1" minimatch "^3.0.4" - normalize-package-data "^2.4.0" + node-forge "^0.7.1" + normalize-package-data "^2.3.8" parse-color "^1.0.0" plist "^2.1.0" - read-config-file "^1.0.5" sanitize-filename "^1.6.1" - semver "^5.4.1" - temp-file "^1.0.1" + semver "^5.3.0" update-notifier "^2.2.0" uuid-1345 "^0.99.6" yargs "^8.0.2" @@ -3040,26 +2980,27 @@ electron-mocha@3.4.0: mocha "^3.0.0" which "^1.1.1" -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.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.6.tgz#2398e2d7cab5c1d8c3eeabb1cd490376528ec39a" dependencies: - bluebird "^3.5.0" + bluebird "^3.4.7" compare-version "^0.1.2" - debug "^2.6.8" + debug "^2.6.1" isbinaryfile "^3.0.2" minimist "^1.2.0" - plist "^2.1.0" + plist "^2.0.1" + tempfile "^1.1.1" -electron-publish@19.21.0: - version "19.21.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.21.0.tgz#1368d01fd325f6e1b4b25e17098e5e77ed4d71ad" +electron-publish@19.5.1: + version "19.5.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.5.1.tgz#4300b9e80233b06c1eaa62d90a78e1030a4405f7" dependencies: - bluebird-lst "^1.0.3" - chalk "^2.1.0" - electron-builder-http "~19.21.0" - electron-builder-util "~19.21.0" - fs-extra-p "^4.4.0" + bluebird-lst "^1.0.2" + chalk "^1.1.3" + electron-builder-http "~19.5.1" + electron-builder-util "~19.5.1" + fs-extra-p "^4.3.0" mime "^1.3.6" electron-rebuild@1.5.7: @@ -3919,7 +3860,7 @@ fs-extra-p@^4.1.0: bluebird-lst "^1.0.2" fs-extra "^3.0.1" -fs-extra-p@^4.4.0: +fs-extra-p@^4.3.0: version "4.4.0" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.4.0.tgz#729c601c4f4c701328921adc7cfe9b236f100660" dependencies: @@ -4483,7 +4424,7 @@ homedir-polyfill@^1.0.0: dependencies: parse-passwd "^1.0.0" -hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: +hosted-git-info@^2.1.4, hosted-git-info@^2.4.2: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" @@ -5031,7 +4972,7 @@ js-yaml@^3.5.1, js-yaml@^3.8.3: argparse "^1.0.7" esprima "^3.1.1" -js-yaml@^3.9.1: +js-yaml@^3.8.4: version "3.9.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" dependencies: @@ -5186,10 +5127,6 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-val@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.2.tgz#d9b07fb1fce54cbc99b3c611de431b83249369b6" - lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -5977,7 +5914,7 @@ node-abi@^1.0.3: version "1.3.3" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-1.3.3.tgz#0f06f2815deba26107959d2213b36ce97437e6e2" -node-emoji@^1.8.1: +node-emoji@^1.5.1: version "1.8.1" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" dependencies: @@ -5990,6 +5927,10 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-forge@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" + node-gyp@^3.4.0, node-gyp@^3.5.0, node-gyp@~3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" @@ -6141,7 +6082,7 @@ normalize-git-url@~3.0.1, normalize-git-url@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, "normalize-package-data@~1.0.1 || ^2.0.0": +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.8, "normalize-package-data@~1.0.1 || ^2.0.0": version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -6846,7 +6787,7 @@ pkg-up@^1.0.0: dependencies: find-up "^1.0.0" -plist@^2.1.0: +plist@^2.0.1, plist@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" dependencies: @@ -7440,16 +7381,6 @@ read-cmd-shim@~1.0.1: dependencies: graceful-fs "^4.1.2" -read-config-file@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-1.0.5.tgz#9992d2a4d24a993518e7eb6f3c30c0562264c367" - dependencies: - bluebird-lst "^1.0.3" - fs-extra-p "^4.4.0" - js-yaml "^3.9.1" - json5 "^0.5.1" - lazy-val "^1.0.2" - read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -8061,10 +7992,6 @@ semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -semver@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - send@0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" @@ -8647,14 +8574,12 @@ tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: fstream "^1.0.2" inherits "2" -temp-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-1.0.2.tgz#790ac9093b9d12a84f277f42f6314e0cf579f1c7" +tempfile@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" dependencies: - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.3" - fs-extra-p "^4.4.0" - lazy-val "^1.0.2" + os-tmpdir "^1.0.0" + uuid "^2.0.1" term-size@^0.1.0: version "0.1.1" @@ -9050,7 +8975,7 @@ uuid@3.1.0, uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -uuid@^2.0.2, uuid@^2.0.3: +uuid@^2.0.1, uuid@^2.0.2, uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" From ef2175f5a5a3db02fcfe5e9ca12b93a00b9cef20 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 15 Aug 2017 20:52:42 -0400 Subject: [PATCH 31/66] specify node platform in appveyor --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c4db7fe688..b3e4bab7de 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -25,7 +25,7 @@ clone_depth: 1 install: - ps: $env:package_version = (Get-Content -Raw -Path package.json | ConvertFrom-Json).version - ps: Update-AppveyorBuild -Version "$env:package_version-$env:APPVEYOR_BUILD_NUMBER" - - ps: Install-Product node $env:nodejs_version + - ps: Install-Product node $env:nodejs_version $env:platform - set CI=true - yarn --frozen-lockfile From 48beaf83927aaa593bffbbf5c640831cbc1e3465 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 16 Aug 2017 17:38:39 -0400 Subject: [PATCH 32/66] bump 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 cc0db5b685..82bf175b7c 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.24", + "version": "0.310.0-alpha.25", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index fcfe2f4844..a37be63bd7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.24", + "version": "0.310.0-alpha.25", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From e4c4a64e8aae1dabec763116d25a80e91ba144fb Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 28 Aug 2017 13:16:19 -0400 Subject: [PATCH 33/66] add rollbar/source map uploading --- app/index.js | 28 +++++++ app/main.development.js | 12 +++ package.json | 2 + webpack.config.development.js | 6 ++ webpack.config.production.js | 17 ++++ yarn.lock | 146 ++++++++++++++++++++++++---------- 6 files changed, 171 insertions(+), 40 deletions(-) diff --git a/app/index.js b/app/index.js index e46010032e..123f9f87d6 100755 --- a/app/index.js +++ b/app/index.js @@ -1,3 +1,4 @@ +/* global __VERSION_SHA__ */ import _ from 'lodash'; import React from 'react'; import { render } from 'react-dom'; @@ -12,6 +13,33 @@ import './app.global.css'; import '../styles/main.less'; import { ipcRenderer } from 'electron'; import Raven from 'raven-js'; +import Rollbar from 'rollbar/dist/rollbar.umd'; + +let rollbar = new Rollbar({ + accessToken: '1843589282464f4facd43f794c8201a8', + captureUncaught: true, + payload: { + environment: 'test', + client: { + javascript: { + code_version: __VERSION_SHA__, + guess_uncaught_frames: true + } + } + }, + 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'; + } + } + } + } + } +); Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78@sentry.io/183894', { autoBreadcrumbs: { diff --git a/app/main.development.js b/app/main.development.js index 16dffb1d07..ff784576e3 100755 --- a/app/main.development.js +++ b/app/main.development.js @@ -1,3 +1,4 @@ +/* global __ROLLBAR_POST_TOKEN__ */ import { app, BrowserWindow, Menu, shell, ipcMain, crashReporter } from 'electron'; import os from 'os'; import open from 'open'; @@ -5,6 +6,17 @@ import { autoUpdater } from 'electron-updater'; import * as chromeFinder from 'lighthouse/chrome-launcher/chrome-finder'; import { sync as syncActions } from './actions'; import Raven from 'raven'; +import Rollbar from 'rollbar'; + +if(process.env.NODE_ENV === 'production') { + const rollbar = new Rollbar({ + accessToken: __ROLLBAR_POST_TOKEN__, + environment: 'electron_main_process', + captureUncaught: true, + captureUnhandledRejections: true + }); +} + Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78:32643a50ee9241c18b97f0c1ed5ed228@sentry.io/183894', { autoBreadcrumbs: { 'console': true // console logging diff --git a/package.json b/package.json index fa8966793b..94e71f9e33 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,8 @@ "redux": "3.6.0", "redux-form": "5.3.4", "redux-thunk": "2.2.0", + "rollbar": "2.2.6", + "rollbar-sourcemap-webpack-plugin": "2.2.0", "semver": "5.3.0", "source-map-support": "0.4.14", "stack-trace": "0.0.9", diff --git a/webpack.config.development.js b/webpack.config.development.js index 315cd780a4..be605b6024 100755 --- a/webpack.config.development.js +++ b/webpack.config.development.js @@ -8,6 +8,11 @@ import webpack from 'webpack'; import validate from 'webpack-validator'; import merge from 'webpack-merge'; import baseConfig from './webpack.config.base'; +import cp from 'child_process'; + +const VERSION_SHA = process.env.CIRCLE_SHA1 || + process.env.APPVEYOR_REPO_COMMIT || + cp.execSync('git rev-parse HEAD', { cwd: __dirname, encoding: 'utf8' }); const port = process.env.PORT || 3005; @@ -120,6 +125,7 @@ export default validate(merge(baseConfig, { __DEBUG__: JSON.stringify(JSON.parse(process.env.DEBUG_ERROR || 'false')), __REDUX_LOG__: JSON.stringify(JSON.parse(process.env.REDUX_LOG || 'false')), __TEST__: false, + __VERSION_SHA__: JSON.stringify(VERSION_SHA), 'global.GENTLY': false, // http://github.com/visionmedia/superagent/wiki/SuperAgent-for-Webpack for platform-client }) ], diff --git a/webpack.config.production.js b/webpack.config.production.js index dc7c318b76..e45a10bfb3 100755 --- a/webpack.config.production.js +++ b/webpack.config.production.js @@ -10,6 +10,14 @@ import merge from 'webpack-merge'; import HtmlWebpackPlugin from 'html-webpack-plugin'; import BabiliPlugin from 'babili-webpack-plugin'; import baseConfig from './webpack.config.base'; +import RollbarSourceMapPlugin from 'rollbar-sourcemap-webpack-plugin'; +import cp from 'child_process'; + +const VERSION_SHA = process.env.CIRCLE_SHA1 || + process.env.APPVEYOR_REPO_COMMIT || + cp.execSync('git rev-parse HEAD', {cwd: __dirname, encoding: 'utf8' }); + +const ROLLBAR_POST_TOKEN = JSON.stringify(process.env.ROLLBAR_POST_TOKEN); if (process.env.DEBUG_ERROR === 'true') { console.log('~ ~ ~ ~ ~ ~ ~ ~ ~ ~'); @@ -114,6 +122,8 @@ export default validate(merge(baseConfig, { __DEBUG__: JSON.stringify(JSON.parse(process.env.DEBUG_ERROR || 'false')), __REDUX_LOG__: JSON.stringify(JSON.parse(process.env.REDUX_LOG || 'false')), __TEST__: false, + __VERSION_SHA__: JSON.stringify(VERSION_SHA), + __ROLLBAR_POST_TOKEN__: ROLLBAR_POST_TOKEN, 'global.GENTLY': false, // http://github.com/visionmedia/superagent/wiki/SuperAgent-for-Webpack for platform-client }), @@ -134,6 +144,13 @@ export default validate(merge(baseConfig, { filename: '../app.html', template: 'app/app.html', inject: false + }), + + /** Upload sourcemap to Rollbar */ + new RollbarSourceMapPlugin({ + accessToken: ROLLBAR_POST_TOKEN, + version: VERSION_SHA, + publicPath: 'http://dynamichost/dist' }) ], diff --git a/yarn.lock b/yarn.lock index 9214c78d9e..c5b594f53c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -143,10 +143,6 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" -ansi-regex@*, ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" @@ -155,6 +151,10 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" @@ -394,7 +394,7 @@ async@^0.9.0, async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.0, async@^2.0.1: +async@^2.0.0, async@^2.0.1, async@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: @@ -404,6 +404,10 @@ async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +async@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/async/-/async-1.2.1.tgz#a4816a17cd5ff516dfa2c7698a453369b9790de0" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1488,7 +1492,7 @@ babel-runtime@6.23.0, babel-runtime@~6.23.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: +babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -2288,6 +2292,10 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" +console-polyfill@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/console-polyfill/-/console-polyfill-0.3.0.tgz#84900902a18c47a5eba932be75fa44d23e8af861" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -2644,10 +2652,16 @@ debug@2.6.4: dependencies: ms "0.7.3" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" +decache@^3.0.5: + version "3.1.0" + resolved "https://registry.yarnpkg.com/decache/-/decache-3.1.0.tgz#4f5036fbd6581fcc97237ac3954a244b9536c2da" + dependencies: + find "^0.2.4" + 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" @@ -3215,6 +3229,12 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +error-stack-parser@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.3.tgz#fada6e3a9cd2b0e080e6d6fc751418649734f35c" + dependencies: + stackframe "^0.3.1" + error-stack-parser@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" @@ -3626,6 +3646,10 @@ extend@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/extend/-/extend-1.2.1.tgz#a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c" +extend@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3822,6 +3846,12 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" +find@^0.2.4: + version "0.2.7" + resolved "https://registry.yarnpkg.com/find/-/find-0.2.7.tgz#7afbd00f8f08c5b622f97cda6f714173d547bb3f" + dependencies: + traverse-chain "~0.1.0" + findup-sync@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5" @@ -4659,7 +4689,7 @@ import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5000,6 +5030,10 @@ is-windows@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" +is_js@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/is_js/-/is_js-0.9.0.tgz#0ab94540502ba7afa24c856aa985561669e9c52d" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -5143,7 +5177,7 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@5.0.1, 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" @@ -5374,10 +5408,6 @@ lodash._baseget@^3.0.0: version "3.7.2" resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -5400,25 +5430,11 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" -lodash._getnative@*, lodash._getnative@^3.0.0: +lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -5500,11 +5516,15 @@ lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" +lodash.find@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + lodash.flatten@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" -lodash.foreach@^4.3.0: +lodash.foreach@^4.2.0, lodash.foreach@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" @@ -5579,7 +5599,7 @@ lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" -lodash.reduce@^4.4.0: +lodash.reduce@^4.3.0, lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" @@ -5591,7 +5611,7 @@ lodash.rest@^4.0.0: version "4.0.5" resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa" -lodash.restparam@*, lodash.restparam@^3.0.0: +lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -5719,6 +5739,10 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@~2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -7706,7 +7730,7 @@ readable-stream@~2.1.4, readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" dependencies: @@ -7910,6 +7934,12 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" +request-ip@~2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-2.0.2.tgz#deeae6d4af21768497db8cd05fa37143f8f1257e" + dependencies: + is_js "^0.9.0" + request@2, request@^2.45.0, request@^2.47.0, request@^2.65.0, request@^2.72.0, request@^2.74.0, request@^2.75.0, request@^2.79.0, request@^2.81.0, request@~2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -8100,6 +8130,34 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +rollbar-sourcemap-webpack-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/rollbar-sourcemap-webpack-plugin/-/rollbar-sourcemap-webpack-plugin-2.2.0.tgz#37fc39e79a410efc3aa7095b0cde084452a789a6" + dependencies: + async "^2.1.4" + babel-runtime "^6.20.0" + lodash.find "^4.3.0" + lodash.foreach "^4.2.0" + lodash.reduce "^4.3.0" + request "^2.72.0" + verror "^1.6.1" + +rollbar@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-2.2.6.tgz#7a90541648d4c4714dbd4de6308e906cb29c6152" + dependencies: + async "~1.2.1" + console-polyfill "0.3.0" + debug "2.6.8" + error-stack-parser "1.3.3" + extend "3.0.0" + json-stringify-safe "~5.0.0" + lru-cache "~2.2.1" + request-ip "~2.0.1" + uuid "3.0.x" + optionalDependencies: + decache "^3.0.5" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -8633,12 +8691,6 @@ stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@*, strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -8651,6 +8703,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -8967,6 +9025,10 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +traverse-chain@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" + traverse@0.6.6, traverse@0.6.x: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" @@ -9238,6 +9300,10 @@ uuid@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" +uuid@3.0.x: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + uuid@3.1.0, uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -9246,7 +9312,7 @@ uuid@^2.0.1, uuid@^2.0.2, uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -validate-npm-package-license@*, validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: @@ -9277,7 +9343,7 @@ vendors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" -verror@1.10.0: +verror@1.10.0, verror@^1.6.1: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: From 1c0d178e1ac3c0d9123a5a3cde56ccfc1cd5a772 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 28 Aug 2017 13:28:08 -0400 Subject: [PATCH 34/66] correct ENV var use --- webpack.config.production.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webpack.config.production.js b/webpack.config.production.js index e45a10bfb3..a474b48744 100755 --- a/webpack.config.production.js +++ b/webpack.config.production.js @@ -17,7 +17,7 @@ const VERSION_SHA = process.env.CIRCLE_SHA1 || process.env.APPVEYOR_REPO_COMMIT || cp.execSync('git rev-parse HEAD', {cwd: __dirname, encoding: 'utf8' }); -const ROLLBAR_POST_TOKEN = JSON.stringify(process.env.ROLLBAR_POST_TOKEN); +const ROLLBAR_POST_TOKEN = process.env.ROLLBAR_POST_TOKEN; if (process.env.DEBUG_ERROR === 'true') { console.log('~ ~ ~ ~ ~ ~ ~ ~ ~ ~'); @@ -123,7 +123,7 @@ export default validate(merge(baseConfig, { __REDUX_LOG__: JSON.stringify(JSON.parse(process.env.REDUX_LOG || 'false')), __TEST__: false, __VERSION_SHA__: JSON.stringify(VERSION_SHA), - __ROLLBAR_POST_TOKEN__: ROLLBAR_POST_TOKEN, + __ROLLBAR_POST_TOKEN__: JSON.stringify(ROLLBAR_POST_TOKEN), 'global.GENTLY': false, // http://github.com/visionmedia/superagent/wiki/SuperAgent-for-Webpack for platform-client }), From 5f704ea44b6d5083c8570be88147bccd91593511 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 29 Aug 2017 11:10:22 -0400 Subject: [PATCH 35/66] add note about strange URI transform --- app/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/index.js b/app/index.js index 123f9f87d6..e6db7359cd 100755 --- a/app/index.js +++ b/app/index.js @@ -27,6 +27,8 @@ let rollbar = new Rollbar({ } } }, + // 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) { From 54a6b4aa4911096d3baaa0a65780fbaba9ebb971 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 29 Aug 2017 17:06:28 -0400 Subject: [PATCH 36/66] bump version for new build --- 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 1508aff9fb..855e403e85 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.310.0-alpha.25", + "version": "0.320.0-alpha.2", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 4718362a64..0db90e551c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.310.0-alpha.25", + "version": "0.320.0-alpha.2", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 4d1d906ce5ea559c6c2bba45d541953f24d116a1 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 29 Aug 2017 17:42:41 -0400 Subject: [PATCH 37/66] another version bump --- 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 855e403e85..1d49f8ece1 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.320.0-alpha.2", + "version": "0.320.0-alpha.3", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 859cb6a8a3..130fd6aa8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.320.0-alpha.2", + "version": "0.320.0-alpha.3", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 0179b2315e6800b8c5e124e4496c6db552065ae2 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 29 Aug 2017 19:11:05 -0400 Subject: [PATCH 38/66] avoid webpack 1.x including `browser` rollbar because apparently the `electron-main` target incorrectly grabs the `browser` version of libraries when bundling for production :/ --- app/main.development.js | 11 +++++++---- webpack.config.electron.js | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/main.development.js b/app/main.development.js index 10be4bb37e..2b10a6754f 100755 --- a/app/main.development.js +++ b/app/main.development.js @@ -6,14 +6,17 @@ import { autoUpdater } from 'electron-updater'; import * as chromeFinder from 'lighthouse/chrome-launcher/chrome-finder'; import { sync as syncActions } from './actions'; import Raven from 'raven'; -import Rollbar from 'rollbar'; +import Rollbar from 'rollbar/src/server/rollbar'; +let rollbar; if(process.env.NODE_ENV === 'production') { - const rollbar = new Rollbar({ + rollbar = new Rollbar({ accessToken: __ROLLBAR_POST_TOKEN__, - environment: 'electron_main_process', captureUncaught: true, - captureUnhandledRejections: true + captureUnhandledRejections: true, + payload: { + environment: 'electron_main_process' + } }); } diff --git a/webpack.config.electron.js b/webpack.config.electron.js index e2399ed697..341a1a78f4 100755 --- a/webpack.config.electron.js +++ b/webpack.config.electron.js @@ -40,6 +40,7 @@ export default validate(merge(baseConfig, { new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production'), 'process.env.BUILD': JSON.stringify(process.env.BUILD) || '"prod"', + __ROLLBAR_POST_TOKEN__: JSON.stringify(process.env.ROLLBAR_POST_TOKEN), }) ], From bebb635065b36d42dbe37215269557056f85c463 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Fri, 1 Sep 2017 12:36:54 +0100 Subject: [PATCH 39/66] bumping version number to test upgrade path --- 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 3cb2c7e18e..e488362b1f 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.320.0-alpha.4", + "version": "0.320.0-alpha.5", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 41e5fabb1d..e32065d570 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.320.0-alpha.4", + "version": "0.320.0-alpha.5", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From b5f32a018c35a2bfac323275f17a811b14545bcb Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 4 Sep 2017 11:38:14 +0100 Subject: [PATCH 40/66] bump version number --- 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 e488362b1f..e5da7544aa 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "0.320.0-alpha.5", + "version": "0.320.0-alpha.6", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index e32065d570..d20a87ed9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "0.320.0-alpha.5", + "version": "0.320.0-alpha.6", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 18651dce9dd3de89c66c933e6cf8a3fa73f08262 Mon Sep 17 00:00:00 2001 From: DorianScholz Date: Fri, 8 Sep 2017 10:00:14 +0200 Subject: [PATCH 41/66] Revert "Revert "Support for FreeStyle Libre (retry)"" This reverts commit c74e7da3ee76bf8414efb83a7ccb50216104bfb8. From 3515af8f703c245c70ea573f8096e64f05777b1b Mon Sep 17 00:00:00 2001 From: DorianScholz Date: Fri, 8 Sep 2017 10:00:14 +0200 Subject: [PATCH 42/66] Revert "Revert "Support for FreeStyle Libre (retry)"" This reverts commit c74e7da3ee76bf8414efb83a7ccb50216104bfb8. --- .babelrc | 9 +- .eslintignore | 1 + .gitignore | 2 + app/reducers/devices.js | 8 + docs/checklists/README.md | 5 +- docs/checklists/abbottFreeStyleLibre.md | 147 ++++ docs/checklisttemplates/CGMChecklist.md | 4 - lib/core/device.js | 3 + lib/drivers/abbott/.eslintrc | 61 ++ lib/drivers/abbott/abbottFreeStyleLibre.js | 207 ++++++ lib/drivers/abbott/cli/fslibre.js | 168 +++++ lib/drivers/abbott/cli/stringify.js | 81 +++ lib/drivers/abbott/freeStyleLibreConstants.js | 534 ++++++++++++++ lib/drivers/abbott/freeStyleLibreData.js | 513 +++++++++++++ lib/drivers/abbott/freeStyleLibreProtocol.js | 675 ++++++++++++++++++ lib/drivers/abbott/tools/README | 4 + .../abbott/tools/fslibre_usb_dissector.lua | 278 ++++++++ lib/drivers/abbott/tools/lua_debug.sh | 33 + lib/struct.js | 14 +- manifest.json | 7 + package.json | 19 +- test/lib/abbot/testFreeStyleLibreData.js | 188 +++++ test/lib/abbot/testFreeStyleLibreProtocol.js | 133 ++++ test/lib/testStruct.js | 26 +- yarn.lock | 607 ++++++++-------- 25 files changed, 3410 insertions(+), 317 deletions(-) create mode 100644 docs/checklists/abbottFreeStyleLibre.md create mode 100644 lib/drivers/abbott/.eslintrc create mode 100644 lib/drivers/abbott/abbottFreeStyleLibre.js create mode 100755 lib/drivers/abbott/cli/fslibre.js create mode 100644 lib/drivers/abbott/cli/stringify.js create mode 100644 lib/drivers/abbott/freeStyleLibreConstants.js create mode 100644 lib/drivers/abbott/freeStyleLibreData.js create mode 100644 lib/drivers/abbott/freeStyleLibreProtocol.js create mode 100644 lib/drivers/abbott/tools/README create mode 100644 lib/drivers/abbott/tools/fslibre_usb_dissector.lua create mode 100755 lib/drivers/abbott/tools/lua_debug.sh create mode 100644 test/lib/abbot/testFreeStyleLibreData.js create mode 100644 test/lib/abbot/testFreeStyleLibreProtocol.js diff --git a/.babelrc b/.babelrc index c31d5a0af4..fd37f72076 100644 --- a/.babelrc +++ b/.babelrc @@ -4,6 +4,7 @@ "stage-0", "react" ], + "retainLines": true, "plugins": ["add-module-exports"], "env": { "production": { @@ -19,7 +20,13 @@ }, "test": { "plugins": [ - ["resolver", { "resolveDirs": [ "app/node_modules" ]}], + [ "module-resolver", { + "root": ["./app/node_modules"], + "alias": { + "node-hid": "./app/node_modules/node-hid", + "serialport": "./app/node_modules/serialport" + } + } ], ["webpack-loaders", { "config": "webpack.config.test.js", "verbose": false }], "babel-plugin-rewire", ["transform-define", { diff --git a/.eslintignore b/.eslintignore index 5c81f84c22..c44e35bdc7 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ app/dist/ app/main.js node_modules +dist/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index fb430899a8..bbb7eb2362 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ coverage _book/ web/ + +\.vscode/ diff --git a/app/reducers/devices.js b/app/reducers/devices.js index 9be7b8d46c..03e3d746a0 100644 --- a/app/reducers/devices.js +++ b/app/reducers/devices.js @@ -66,6 +66,14 @@ const devices = { source: {type: 'device', driverId: 'AbbottFreeStyleFreedomLite'}, enabled: {mac: false, win: true} }, + abbottfreestylelibre: { + instructions: 'Plug in meter with micro-USB', + key: 'abbottfreestylelibre', + name: 'Abbott FreeStyle Libre', + showDriverLink: {linux: false, mac: false, win: false}, + source: {type: 'device', driverId: 'AbbottFreeStyleLibre'}, + enabled: {linux: true, mac: true, win: true} + }, bayercontournext: { instructions: 'Plug in meter with micro-USB', key: 'bayercontournext', diff --git a/docs/checklists/README.md b/docs/checklists/README.md index e863f5a1fb..d3d208734f 100644 --- a/docs/checklists/README.md +++ b/docs/checklists/README.md @@ -1,6 +1,7 @@ Checklists for the implementation of drivers for reading data from diabetes devices currently supported or in development. - * [Abbott FreeStyle (BGM)](abbottFreeStyleLite.md) + * [Abbott FreeStyle Lite & Freedom Lite (BGM)](abbottFreeStyleLite.md) + * [Abbott FreeStyle Libre (CGM & BGM data)](abbottFreeStyleLibre.md) * [Abbott Precision Xtra (blood glucose & ketone meter)](abbottPrecisionXtra.md) * [Animas Vibe (CGM data)](animasCGM.md) * [Animas Ping and Vibe Insulin Pumps](animasPingAndVibe.md) @@ -11,4 +12,4 @@ Checklists for the implementation of drivers for reading data from diabetes devi * [Insulet OmniPod Insulin Delivery System](insuletOmniPod.md) * [OneTouch VerioIQ (BGM)](oneTouchVerioIQ.md) * [Tandem Insulin Pumps](tandem.md) - * [Tandem G4 (CGM data)](tandemCGM.md) \ No newline at end of file + * [Tandem G4 (CGM data)](tandemCGM.md) diff --git a/docs/checklists/abbottFreeStyleLibre.md b/docs/checklists/abbottFreeStyleLibre.md new file mode 100644 index 0000000000..65da87d8a8 --- /dev/null +++ b/docs/checklists/abbottFreeStyleLibre.md @@ -0,0 +1,147 @@ +## Checklist for CGM Implementation + +(Key: + + - `[x]` available in data protocol/documented in spec and implemented + - `[-]` available in data protocol/documented in spec but *not* yet implemented + - `[?]` unknown whether available in data protocol/documented in spec; *not* yet implemented + - `*[ ]` TODO: needs implementation! + - `[ ]` unavailable in data protocol and/or not documented in spec and not yet implemented) + +### Required if Present + +#### CBG + + - `[x]` cbg values + - `[ ]` units of cbg values (read from device, not hard-coded) + - `[x]` out-of-range values (LO or HI) + - `[x]` out-of-range value thresholds (e.g., often 40 for low and 400 for high on CGMs) + +Device-specific? (Add any device-specific notes/additions here.) + - internal glucose unit is always mg/dL for this device, independent of display unit + - out-of-range thresholds are 41 mg/dL and 499 mg/dL + - out-of-range measurements are reported as values 40 or 500 respectively + +#### Device Events + - `[ ]` calibrations + - `[ ]` calibration value + - `[ ]` units of calibration value (read from device, not hard-coded) + - `[x]` time changes (presence of which is also in the [BtUTC section](#bootstrapping-to-utc) below) + - `[x]` device display time `from` (before change) and `to` (result of change) + - `[x]` agent of change (`automatic` or `manual`) + - `[ ]` timezone + - `[ ]` reason for change (read from device) + +Device-specific? (Add any device-specific notes/additions here.) + - device does not need calibration + +#### Settings + + - `[x]` units preference for BG display + - `[x]` units of data being uploaded (will be mutated to mmol/L storage units if not mmol/L) + - `[x]` transmitter ID + - `[ ]` low alert settings + - `[ ]` enabled + - `[ ]` level/threshold + - `[ ]` snooze threshold + - `[ ]` high alert settings + - `[ ]` enabled + - `[ ]` level/threshold + - `[ ]` snooze threshold + - `[ ]` rate-of-change alerts + - `[ ]` fall rate alert + - `[ ]` enabled + - `[ ]` rate threshold for alerting + - `[ ]` rise rate alert + - `[ ]` enabled + - `[ ]` rate threshold for alerting + - `[ ]` out-of-range alerts + - `[ ]` enabled + - `[ ]` snooze time between alerts + - `[ ]` predictive alerts + - `[ ]` low prediction + - `[ ]` enabled + - `[ ]` time sensitivity (minutes to predicted low for alerting) + - `[ ]` high prediction + - `[ ]` enabled + - `[ ]` time sensitivity (minutes to predicted high for alerting) + - `[ ]` calibration alerts/reminders + - `[ ]` pre-reminder + - `[ ]` overdue alert + +Settings history: + + - `[ ]` device stores all changes to settings OR + - `[x]` device only returns current settings at time of upload + +No Tidepool data model (yet): volume and/or vibrate mode of all alerts (can/should go in `payload`). + +Device-specific? (Add any device-specific notes/additions here.) + +#### "Bootstrapping" to UTC + + - `[x]` index + - `[ ]` UTC timestamp (*Hey, one can dream!*) OR + - `[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 + +Device-specific? (Add any device-specific notes/additions here.) + +### No Tidepool Data Model Yet + +> **NB:** You can and should add to this section if there are other data types documented in the device's data protocol specification but not part of Tidepool's data model (yet). + + - `[-]` activity/exercise + - `[-]` food (e.g., Dexcom allows logging carb events) + - `[-]` notes/other events + - `[-]` insulin (rapid acting, long term) + +### Tidepool ingestion API + +Choose one of the following: + + - `[x]` legacy "jellyfish" ingestion API + - `*[ ]` platform ingestion API + +### Known implementation issues/TODOs + +*Use this space to describe device-specific known issues or implementation TODOs **not** contained in the above datatype-specific sections.* + + +## Checklist for Blood Glucose Meter Implementation + +### Required if Present + +- `[x]` smbg values +- `[ ]` units of smbg values (read from device, not hard-coded) +- `[x]` out-of-range values (LO or HI) +- `[x]` out-of-range value thresholds (e.g., often 20 for low and 600 for high on BGMs) +- `[x]` date & time settings changes +- `[x]` blood ketone values +- `[ ]` units of blood ketone values (read from device, not hard-coded) +- `[x]` ketone out-of-range values +- `[x]` ketone out-of-range value thresholds + +Device-specific? (Add any device-specific notes/additions here.) + - internal glucose unit is always mg/dL for this device, independent of display unit + - glucose out-of-range thresholds are 41 mg/dL and 499 mg/dL + - glucose out-of-range measurements are reported as values 40 or 500 respectively + - ketone out-of-range upper threshold is 8.0 mmol/L + +### No Tidepool Data Model Yet + +- `[x]` control (solution) tests (whether marked in UI or auto-detected) - until we have a data model, these should be discarded +- `[-]` device settings, other than date & time (e.g., target blood glucose range) +- `[-]` tag/note (e.g., pre- vs. post-meal) + +### Tidepool ingestion API + +Choose one of the following: + + - `[x]` legacy "jellyfish" ingestion API + - `*[ ]` platform ingestion API + +### Known implementation issues/TODOs + +*Use this space to describe device-specific known issues or implementation TODOs **not** contained in the above datatype-specific sections.* diff --git a/docs/checklisttemplates/CGMChecklist.md b/docs/checklisttemplates/CGMChecklist.md index 07b448b776..aede368eef 100644 --- a/docs/checklisttemplates/CGMChecklist.md +++ b/docs/checklisttemplates/CGMChecklist.md @@ -101,8 +101,4 @@ Choose one of the following: ### Known implementation issues/TODOs -Add any device-specific known issues or implementation TODOs here in checklist format. - -### Known implementation issues/TODOs - *Use this space to describe device-specific known issues or implementation TODOs **not** contained in the above datatype-specific sections.* diff --git a/lib/core/device.js b/lib/core/device.js index f255e83fe1..f1b4070c46 100644 --- a/lib/core/device.js +++ b/lib/core/device.js @@ -37,6 +37,7 @@ var insuletOmniPod = require('../drivers/insulet/insuletDriver'); var oneTouchUltra2 = require('../drivers/onetouch/oneTouchUltra2'); var oneTouchVerioIQ = require('../drivers/onetouch/oneTouchVerioIQ'); var abbottFreeStyleLite = require('../drivers/abbott/abbottFreeStyleLite'); +var abbottFreeStyleLibre = require('../drivers/abbott/abbottFreeStyleLibre'); var bayerContourNext = require('../drivers/bayer/bayerContourNext'); var animasDriver = require('../drivers/animas/animasDriver'); var medtronicDriver = require('../drivers/medtronic/medtronicDriver'); @@ -61,6 +62,7 @@ device._deviceDrivers = { 'OneTouchVerioIQ': oneTouchVerioIQ, 'AbbottFreeStyleLite': abbottFreeStyleLite, 'AbbottFreeStyleFreedomLite': abbottFreeStyleLite, + 'AbbottFreeStyleLibre': abbottFreeStyleLibre, 'BayerContourNext': bayerContourNext, 'BayerContourNextUsb': bayerContourNext, 'BayerContourUsb': bayerContourNext, @@ -77,6 +79,7 @@ device._deviceComms = { 'OneTouchVerioIQ': serialDevice, 'AbbottFreeStyleLite': serialDevice, 'AbbottFreeStyleFreedomLite': serialDevice, + 'AbbottFreeStyleLibre': hidDevice, 'Tandem': serialDevice, 'BayerContourNext': hidDevice, 'BayerContourNextUsb': hidDevice, diff --git a/lib/drivers/abbott/.eslintrc b/lib/drivers/abbott/.eslintrc new file mode 100644 index 0000000000..769cd6b450 --- /dev/null +++ b/lib/drivers/abbott/.eslintrc @@ -0,0 +1,61 @@ +{ + "extends": "airbnb", + "parser": "babel-eslint", + "plugins": ["lodash"], + "parserOptions": { + "ecmaVersion": 6 + }, + "rules": { + "no-plusplus": [ + "error", + { + "allowForLoopAfterthoughts": true + } + ] + }, + "overrides": [ + { + "files": [ + "abbottFreeStyleLite.js", + "abbottPrecisionXtra.js" + ], + "rules": { + "func-names": "warn", + "no-var": "warn", + "vars-on-top": "warn", + "no-unused-vars": "warn", + "object-shorthand": "warn", + "comma-dangle": "warn", + "space-before-function-paren": "warn", + "no-param-reassign": "warn", + "prefer-template": "warn", + "no-useless-escape": "warn", + "keyword-spacing": "warn", + "indent": "warn", + "spaced-comment": "warn", + "eqeqeq": "warn", + "space-infix-ops": "warn", + "prefer-arrow-callback": "warn", + "no-shadow": "warn", + "array-bracket-spacing": "warn", + "no-use-before-define": "warn", + "no-else-return": "warn", + "no-bitwise": "warn", + "consistent-return": "warn", + "no-plusplus": "warn", + "no-continue": "warn", + "no-loop-func": "warn", + "object-curly-spacing": "warn", + "key-spacing": "warn", + "padded-blocks": "warn", + "no-console": "warn", + "no-multi-spaces": "warn", + "no-mixed-operators": "warn", + "max-len": "warn" + } + } + ], + "settings": { + "lodash": 3 + } +} \ No newline at end of file diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js new file mode 100644 index 0000000000..0d2ecd1f42 --- /dev/null +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -0,0 +1,207 @@ +/* + * == BSD2 LICENSE == + * Copyright (c) 2017, 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 { clone, assign } from 'lodash'; +import async from 'async'; +import sundial from 'sundial'; + +import FreeStyleLibreProtocol from './freeStyleLibreProtocol'; +import FreeStyleLibreData from './freeStyleLibreData'; +import { DB_TABLE_ID, CFG_TABLE_ID, DEVICE_MODEL_NAME, COMPRESSION } from './freeStyleLibreConstants'; + +const isBrowser = typeof window !== 'undefined'; +// eslint-disable-next-line no-console +const debug = isBrowser ? require('bows')('FreeStyleLibreDriver') : console.log; + +export default function (config) { + const cfg = clone(config); + const hidDevice = config.deviceComms; + const protocol = new FreeStyleLibreProtocol(cfg); + const dataParser = new FreeStyleLibreData(cfg); + + return { + /* eslint no-param-reassign: + [ "error", { "props": true, "ignorePropertyModificationsFor": ["data"] } ] */ + detect(deviceInfo, cb) { + cb(null, deviceInfo); + }, + + setup(deviceInfo, progress, cb) { + progress(100); + cb(null, { deviceInfo }); + }, + + connect(progress, data, cb) { + hidDevice.connect(data.deviceInfo, FreeStyleLibreProtocol.probe, (err) => { + if (err) { + return cb(err); + } + return protocol.initCommunication(() => { + // ignore results of init as it seems not to be relevant to the following communication + data.disconnect = false; + progress(100); + return cb(null, data); + }); + }); + }, + + getConfigInfo(progress, data, cb) { + progress(0); + + const getterFunctions = [ + (callback) => { protocol.getSerialNumber(callback); }, + (callback) => { protocol.getFirmwareVersion(callback); }, + (callback) => { protocol.getDBRecordNumber(callback); }, + ]; + let counter = 0; + async.series(getterFunctions, (err, result) => { + counter += 1; + progress(100 * (counter / getterFunctions.length)); + + if (err) { + debug('getConfigInfo: ', err); + return cb(err, null); + } + data.connect = true; + result.forEach((element) => { + if (typeof element === 'object') { + debug('getConfigInfo: result object: ', element); + assign(data.deviceInfo, element); + } + return null; + }); + debug('getConfigInfo: data: ', data); + + return cb(null, data); + }); + }, + + fetchData(progress, data, cb) { + progress(0); + + const getterFunctions = [ + (callback) => { protocol.setCompression(COMPRESSION.ENABLED, callback); }, + (callback) => { protocol.getDbSchema(callback); }, + (callback) => { protocol.getCfgSchema(callback); }, + (callback) => { protocol.getDateTime(callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.METER_FACTORY_CONFIGURATION, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.METER_SETTINGS, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.USER_PATIENT_CONFIGURATION, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.USER_PATIENT_SETTINGS, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.INSULIN_SETTINGS, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.REMINDER_STRING, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.SMART_TAG_NOTES, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.STORED_SENSOR_INFORMATION, callback); }, + (callback) => { protocol.getCfgData(CFG_TABLE_ID.REMINDER_DATA, callback); }, + (callback) => { protocol.getDatabase(DB_TABLE_ID.GLUCOSE_RESULT, callback); }, + (callback) => { protocol.getDatabase(DB_TABLE_ID.RAPID_ACTING_INSULIN, callback); }, + (callback) => { protocol.getDatabase(DB_TABLE_ID.HISTORICAL_DATA, callback); }, + (callback) => { protocol.getDatabase(DB_TABLE_ID.EVENT, callback); }, + ]; + + data.aapPackets = []; + let counter = 0; + async.series(getterFunctions, (err, results) => { + counter += 1; + progress(100 * (counter / getterFunctions.length)); + + if (err) { + debug('fetchData: error: ', err); + return cb(err, data); + } + results.forEach((aapPackets) => { + if (typeof aapPackets === 'object') { + data.aapPackets = data.aapPackets.concat(aapPackets); + } + }); + return cb(null, data); + }); + }, + + processData(progress, data, cb) { + debug('processData: num aapPackets:', data.aapPackets.length); + progress(0); + + data.deviceInfo.deviceId = `${data.deviceInfo.driverId}-${data.deviceInfo.serialNumber}`; + cfg.builder.setDefaults({ deviceId: data.deviceInfo.deviceId }); + + data.post_records = + dataParser.processAapPackets(data.aapPackets, data.deviceInfo.dbRecordNumber); + debug('processData: num post records:', data.post_records.length); + + progress(100); + data.processData = true; + return cb(null, data); + }, + + uploadData(progress, data, cb) { + debug('uploadData: num post records:', data.post_records.length); + progress(0); + + const sessionInfo = { + deviceTags: ['bgm', 'cgm'], + deviceManufacturers: ['Abbott'], + deviceModel: DEVICE_MODEL_NAME, + deviceSerialNumber: data.deviceInfo.serialNumber, + deviceId: data.deviceInfo.deviceId, + start: sundial.utcDateString(), + timeProcessing: cfg.tzoUtil.type, + tzName: cfg.timezone, + version: cfg.version, + }; + + cfg.api.upload.toPlatform(data.post_records, sessionInfo, progress, cfg.groupId, + (err, result) => { + progress(100); + + if (err) { + debug(err); + debug(result); + return cb(err, data); + } + data.cleanup = true; + return cb(null, data); + }); + }, + + disconnect(progress, data, cb) { + debug('disconnect'); + hidDevice.removeListeners(); + // 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(FreeStyleLibreProtocol.buildHidPacket(0x00, ''), () => { + progress(100); + cb(null, data); + }); + }, + + cleanup(progress, data, cb) { + debug('cleanup'); + if (!data.disconnect) { + hidDevice.disconnect(data, () => { + progress(100); + data.cleanup = true; + data.disconnect = true; + cb(null, data); + }); + } else { + progress(100); + } + }, + }; +} diff --git a/lib/drivers/abbott/cli/fslibre.js b/lib/drivers/abbott/cli/fslibre.js new file mode 100755 index 0000000000..a3be050f52 --- /dev/null +++ b/lib/drivers/abbott/cli/fslibre.js @@ -0,0 +1,168 @@ +#!/usr/bin/env babel-node +/* eslint-disable no-console,no-use-before-define */ + +import program from 'commander'; +import fs from 'fs'; +import async from 'async'; + +import hidDevice from '../../../hidDevice'; +import api from '../../../core/api'; +import device from '../../../core/device'; +import config from '../../../../.config'; +import pkg from '../../../../package.json'; +import builder from '../../../objectBuilder'; +import abbottFreeStyleLibre from '../abbottFreeStyleLibre'; + +import stringify from './stringify'; + +// eslint-disable-next-line no-underscore-dangle +global.__DEBUG__ = true; + +const intro = 'FSLibre CLI:'; +let libreDriver; + +program + .version('0.0.1', null) + .option('-u, --username [user]', 'username') + .option('-p, --password [pw]', 'password') + .option('-t, --timezone [tz]', 'named timezone', config.DEFAULT_TIMEZONE) + .option('-f, --file [path]', 'load deviceInfo and aapPackets from JSON file instead of device') + .option('-o, --output [path]', 'save processed data to JSON file instead of uploading') + .parse(process.argv); + +const options = { + api, + timezone: program.timezone, + version: `${pkg.name} ${pkg.version}`, + builder: builder(), +}; + + +if ((program.username && program.password) || program.output) { + if (program.output) { + device.init(options, initCallback); + } else { + login(program.username, program.password, config); + } +} else { + program.help(); +} + +function login(username, password, cfg) { + console.log(intro, 'login:', cfg.API_URL); + api.create({ + apiUrl: cfg.API_URL, + uploadUrl: cfg.UPLOAD_URL, + dataUrl: cfg.DATA_URL, + version: 'uploader node CLI tool - fslibre', + }); + api.init(() => { + api.user.login({ username, password }, loginCallback); + }); +} + +function loginCallback(error, loginData) { + if (error) { + console.log(intro, 'loginCallback: Failed authentication!'); + console.log(error); + process.exit(); + } + console.log(intro, 'loginCallback:', 'Uploading using the timezone', program.timezone); + console.log(intro, 'loginCallback:', 'Uploading for user ', loginData.userid); + + console.log(intro, 'loginCallback:', 'Starting connection to device...'); + options.targetId = loginData.userid; + options.groupId = loginData.userid; + device.init(options, initCallback); +} + +function readDataFromFile() { + console.log(intro, 'Reading JSON data from:', program.file); + return JSON.parse(fs.readFileSync(program.file, 'utf8'), (k, v) => { + if (v !== null && typeof v === 'object' && 'type' in v && + v.type === 'Buffer' && 'data' in v && Array.isArray(v.data)) { + // re-create Buffer objects for data fields of aapPackets + return new Buffer(v.data); + } + return v; + }); +} + +function initCallback() { + if (program.file) { + const data = readDataFromFile(); + + console.log(intro, 'Processing AAP packets, length:', data.aapPackets.length); + libreDriver = abbottFreeStyleLibre(options); + libreDriver.processData(progress => progress, data, processCallback); + } else { + device.detect('AbbottFreeStyleLibre', options, detectCallback); + } +} + +function processCallback(error, data) { + if (error) { + console.log(intro, 'processCallback: Failed:', error); + process.exit(); + } + + console.log(intro, 'Num post records:', data.post_records.length); + + if (program.output) { + writeDataToFile(data, done); + } else { + libreDriver.uploadData(progress => progress, data, uploadCallback); + } +} + +function detectCallback(error, deviceInfo) { + if (deviceInfo !== undefined) { + console.log(intro, 'detectCallback:', 'deviceInfo: ', deviceInfo); + options.deviceInfo = deviceInfo; + if (program.output) { + copyDataFromDeviceToFile(deviceInfo); + } else { + device.upload('AbbottFreeStyleLibre', options, uploadCallback); + } + } else { + console.error(intro, 'detectCallback:', 'Could not find FreeStyle Libre device. Is it connected via USB?'); + console.error(intro, 'detectCallback:', `Error value: ${error}`); + } +} + +function copyDataFromDeviceToFile(deviceInfo) { + options.deviceComms = hidDevice(); + libreDriver = abbottFreeStyleLibre(options); + async.waterfall([ + libreDriver.setup.bind(libreDriver, deviceInfo, () => {}), + libreDriver.connect.bind(libreDriver, () => {}), + libreDriver.getConfigInfo.bind(libreDriver, () => {}), + libreDriver.fetchData.bind(libreDriver, () => {}), + libreDriver.processData.bind(libreDriver, () => {}), + // no call to the upload function here, since we only want to download the data from the device + libreDriver.disconnect.bind(libreDriver, () => {}), + ], (err, resultOptional) => { + const result = resultOptional || {}; + libreDriver.cleanup(() => {}, result, () => { + writeDataToFile(result, done); + }); + }); +} + +function uploadCallback(error) { + if (error) { + console.log(intro, 'uploadCallback:', 'error: ', error); + process.exit(); + } + done(); +} + +function writeDataToFile(data, callback) { + console.log(intro, 'uploadCallback:', 'writing data to file:', program.output); + fs.writeFile(program.output, stringify(data, { indent: 2, maxLevelPretty: 3 }), 'utf8', callback); +} + +function done() { + console.log(intro, 'Done!'); + process.exit(); +} diff --git a/lib/drivers/abbott/cli/stringify.js b/lib/drivers/abbott/cli/stringify.js new file mode 100644 index 0000000000..a70d7e040b --- /dev/null +++ b/lib/drivers/abbott/cli/stringify.js @@ -0,0 +1,81 @@ +// a wrapper around JSON.stringify to allow for more control over the formatting of the JSON + +export default function stringify(obj, optionsOptional) { + const stringOrChar = /("(?:[^\\"]|\\.)*")|[:,]/g; + + function prettify(string) { + return string.replace(stringOrChar, (match, str) => (str ? match : `${match} `)); + } + + function get(opt, name, defaultValue) { + return (name in opt ? opt[name] : defaultValue); + } + + const options = optionsOptional || {}; + const indent = JSON.stringify([1], null, get(options, 'indent', 2)).slice(2, -3); + const maxLength = (indent === '' ? Infinity : get(options, 'maxLength', 80)); + const maxLevelPretty = get(options, 'maxLevelPretty', Infinity); + + return (function _stringify(objectParam, currentIndent, reserved) { + let object = objectParam; + if (object && typeof object.toJSON === 'function') { + object = object.toJSON(); + } + + const string = JSON.stringify(object); + + if (string === undefined) { + return string; + } + + const currentLevel = currentIndent.length / indent.length; + if (currentLevel >= maxLevelPretty) { + return string; + } + + const length = maxLength - currentIndent.length - reserved; + + if (string.length <= length) { + const prettified = prettify(string); + if (prettified.length <= length) { + return prettified; + } + } + + if (typeof object === 'object' && object !== null) { + const nextIndent = currentIndent + indent; + const items = []; + let delimiters; + const comma = (array, index) => (index === array.length - 1 ? 0 : 1); + + if (Array.isArray(object)) { + for (let index = 0; index < object.length; index++) { + items.push( + _stringify(object[index], nextIndent, comma(object, index)) || 'null', + ); + } + delimiters = '[]'; + } else { + Object.keys(object).forEach((key, index, array) => { + const keyPart = `${JSON.stringify(key)}: `; + const value = _stringify(object[key], nextIndent, + keyPart.length + comma(array, index)); + if (value !== undefined) { + items.push(keyPart + value); + } + }); + delimiters = '{}'; + } + + if (items.length > 0) { + return [ + delimiters[0], + indent + items.join(`,\n${nextIndent}`), + delimiters[1], + ].join(`\n${currentIndent}`); + } + } + + return string; + }(obj, '', 0)); +} diff --git a/lib/drivers/abbott/freeStyleLibreConstants.js b/lib/drivers/abbott/freeStyleLibreConstants.js new file mode 100644 index 0000000000..c77b7f886a --- /dev/null +++ b/lib/drivers/abbott/freeStyleLibreConstants.js @@ -0,0 +1,534 @@ +/* + * == BSD2 LICENSE == + * Copyright (c) 2017, 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 == + */ + +export const DEVICE_MODEL_NAME = 'FreeStyle Libre'; + +export const KETONE_VALUE_FACTOR = 18.0; // according to specs +export const KETONE_HI = 8.0; +export const KETONE_LO = null; // ketone value cannot be low + +export const GLUCOSE_HI = 500; +export const GLUCOSE_LO = 40; + +export const COMMAND = { + INIT_REQUEST_1: 0x04, + INIT_REQUEST_2: 0x05, + INIT_REQUEST_3: 0x15, + INIT_REQUEST_4: 0x01, + BINARY_REQUEST: 0x0a, + BINARY_RESPONSE: 0x0b, + ACK_FROM_DEVICE: 0x0c, + ACK_FROM_HOST: 0x0d, + TEXT_REQUEST: 0x21, + TEXT_RESPONSE: 0x60, +}; + +export const OP_CODE = { + GET_DATABASE: 0x31, + GET_DB_SCHEMA: 0x34, + COMPRESSED_DATABASE: 0x35, + GET_DATE_TIME: 0x41, + GET_CFG_DATA: 0x51, + GET_CFG_SCHEMA: 0x54, + SET_COMPRESSION: 0x60, + FLUSH_BUFFERS: 0x7d, + ERROR: 0x7e, +}; + +export const ERROR = { + OK: 0, + BAD_PARAMS: 1, + WRONG_PARAM_NUM: 2, + CMD_FAILED: 3, + CRC_ERROR: 4, + INVALID_ID: 5, +}; + +export const ERROR_DESCRIPTION = {}; +ERROR_DESCRIPTION[ERROR.OK] = 'OK: No Error.'; +ERROR_DESCRIPTION[ERROR.BAD_PARAMS] = 'Bad parameter values / out of range!'; +ERROR_DESCRIPTION[ERROR.WRONG_PARAM_NUM] = 'Wrong number of parameters!'; +ERROR_DESCRIPTION[ERROR.CMD_FAILED] = 'Command failed!'; +ERROR_DESCRIPTION[ERROR.CRC_ERROR] = 'Wrong checksum!'; +ERROR_DESCRIPTION[ERROR.INVALID_ID] = 'Wrong table ID!'; + +// for CFG and DB fields +export const FIELD_TYPE = { + UNSIGNED_DECIMAL: 0, // uint + UNSIGNED_HEX: 1, // uint (display as hex) + SIGNED_DECIMAL: 2, // int + UTF8: 3, // string + BULK_DATA: 4, // bytes + CRC32: 10, // uint32 + CRC16: 11, // uint16 +}; + +export const DB_TABLE_ID = { + GLUCOSE_RESULT: 0, + RAPID_ACTING_INSULIN: 1, + HISTORICAL_DATA: 6, + EVENT: 7, +}; + +export const DB_RECORD_TYPE = { + COMMON_HEADER: 255, + GLUCOSE_KETONE_SERVING: 0, + GLUCOSE_KETONE_MEAL: 1, + GLUCOSE_KETONE_CARBS: 2, + UNLOGGED_INSULIN: 3, + CONTROL_SOL_TEST: 4, + TIME_CHANGE_RESULT: 5, + INSULIN_CALC: 6, + INSULIN_MANUAL: 7, + HISTORICAL_DATA: 12, + RESULT_RECORD_WRAP: 13, + INSULIN_WRAP: 14, + HISTORICAL_WRAP: 17, + ERROR: 32, + LOW_BATTERY: 33, + DEAD_BATTERY: 34, + TIME_CHANGE: 35, + LOST_TIME: 36, + INSULIN_SETUP_1: 37, + INSULIN_SETUP_2: 38, + INSULIN_SETUP_3: 39, + INSULIN_SETUP_4: 40, + RESTORE_CONFIG: 41, + CLEAR_RESULT_DB: 42, + CLEAR__SCAN_DB: 43, + CLEAR_ACTIVATION_DB: 44, + CLEAR_HISTORICAL_DB: 45, + USER_TIME_CHANGE: 46, + CLEAR_EVENT_DB: 47, + RECOVERY_EVENT: 48, + MICROCONTROLLER_RESET_EVENT: 49, + MASKED_MODE_STATUS_EVENT: 50, + SENSOR_EXPIRED_EVENT: 51, + EVENT_DATABASE_RECORD_NUMBER_WRAP: 52, +}; + +export const DB_WRAP_RECORDS = {}; +DB_WRAP_RECORDS[DB_RECORD_TYPE.RESULT_RECORD_WRAP] = { + TABLE_ID: DB_TABLE_ID.GLUCOSE_RESULT, + CRC_OFFSET: 12, +}; +DB_WRAP_RECORDS[DB_RECORD_TYPE.INSULIN_WRAP] = { + TABLE_ID: DB_TABLE_ID.RAPID_ACTING_INSULIN, + CRC_OFFSET: 12, +}; +DB_WRAP_RECORDS[DB_RECORD_TYPE.HISTORICAL_WRAP] = { + TABLE_ID: DB_TABLE_ID.HISTORICAL_DATA, + CRC_OFFSET: 6, +}; +DB_WRAP_RECORDS[DB_RECORD_TYPE.EVENT_DATABASE_RECORD_NUMBER_WRAP] = { + TABLE_ID: DB_TABLE_ID.EVENT, + CRC_OFFSET: 10, +}; + +export const DB_FIELD_ID = { + RECORD_NUMBER: 0, + TIME_VALID: 7, + TYPE: 8, + READER_TIME: 9, + USER_TIME_OFFSET: 10, + RESULT: 20, + RESULT_STATUS: 61, + TEST_TYPE: 23, + SMART_TAGS: 24, + LONG_ACTING_INSULIN_RECORDED: 25, + RAPID_ACTING_INSULIN: 26, + MEDICATION: 28, + EXERCISE: 29, + TREND: 30, + RAI_RECORD_POINTER: 32, + RAI_DATA_FLAG: 33, + LONG_ACTING_INSULIN: 34, + GLYCEMIC_ALARM: 35, + GRAMS_PER_SERVING: 36, + SERVING_COUNT: 37, + MEAL_TYPE: 38, + GRAMS_OF_CARB: 39, + FOOD_DATA_FLAG: 40, + FOOD_QUICK_TAG: 41, + RESULT_OLD_READER_TIME: 42, + RESULT_OLD_USER_OFFSET: 43, + RESULT_OLD_VALID: 44, + DATA_CRC: 49, + SMART_TAG_0: 50, + SMART_TAG_1: 51, + SMART_TAG_2: 52, + SMART_TAG_3: 53, + SMART_TAG_4: 54, + SMART_TAG_5: 55, + SMART_TAG_CRC: 56, + RESULT_DATA_QUALITY_ERROR: 57, + RESULT_UNLOGGED_INSULIN: 58, + EFFECTIVE_TIME: 59, + WRAP_RECORD_NUMBER: 60, + RAI_RESULT: 70, + SIGNED_OVERRIDE: 71, + SIGNED_CORRECTION: 72, + IOB: 73, + MEAL_INSULIN: 74, + UNLOGGED_INSULIN: 75, + TIME_OFFSET: 76, + INSULIN_CRC: 77, + MANUAL_RAI_RESULT: 78, + INSULIN_RECORD_WARP: 79, + GLUCOSE: 150, + FIRST_FLAG: 151, + TIME_CHANGE: 152, + FOOD_FLAG: 153, + HISTORICAL_RAPID_ACTING_INSULIN: 154, + HISTORICAL_CRC: 155, + HISTORICAL_DATA_QUALITY_ERROR: 156, + LIFE_COUNTER: 157, + HISTORICAL_DATA_WRAP: 158, + ERROR_CODE: 160, + ERROR_DATA: 161, + OLD_READER_TIME: 165, + OLD_USER_OFFSET: 166, + VALID: 167, + RTC_COUNTER: 168, + HIGH_CORRECTION: 203, + LOW_CORRECTION: 204, + CORRECTION_FACTOR: 205, + CALCULATOR_OFF_FLAG: 237, + FIXED_DOSE_BREAKFAST: 206, + FIXED_DOSE_LUNCH: 207, + FIXED_DOSE_DINNER: 208, + MORNING_CARB_INSULIN: 209, + MID_DAY_CARB_INSULIN: 210, + EVENING_CARB_INSULIN: 211, + NIGHT_CARB_INSULIN: 212, + MORNING_UNITS: 213, + MID_DAY_UNITS: 214, + EVENING_UNITS: 215, + NIGH_UNITS: 216, + GRAMS_UNITS: 217, + CARBS: 218, + UNITS_TIME_OF_DAY_BLOCK: 219, + CARB_TIME_OF_DAY_BLOCK: 220, + MORNING_HIGH_CORRECTION: 221, + MORNING_LOW_CORRECTION: 222, + MID_DAY_HIGH_CORRECTION: 223, + MID_DAY_LOW_CORRECTION: 224, + EVENING_HIGH_CORRECTION: 225, + EVENING_LOW_CORRECTION: 226, + NIGHT_HIGH_CORRECTION: 227, + NIGHT_LOW_CORRECTION: 228, + CORRECTION_TIME_OF_DAY_BLOCK: 229, + MORNING_FACTOR: 230, + MID_DAY_FACTOR: 231, + EVENING_FACTOR: 232, + NIGHT_FACTOR: 233, + INSULIN_DURATION: 234, + TARGET_TIME_OF_DAY_BLOCK: 235, + BOB_SYMBOL: 236, + PATIENT_CONFIG: 170, + FACTORY_CONFIG: 171, + CAL_CONFIG_CLEAR: 172, + STRIP_COUNT: 239, + SCAN_COUNTER: 241, + ACTIVATION_COUNT: 242, + RECOVERY_ITEM: 175, + LOW_VOLTAGE: 181, + LOSS_OF_CLOCK: 182, + LOSS_OF_LOCK: 183, + WATCHDOG: 184, + EXTERNAL_PIN_RESET: 185, + POWER_ON_RESET: 186, + JTAG_RESET: 187, + LOCK_UP_ARM: 188, + SOFTWARE_RESET: 189, + MDM_AP_RESET: 190, + EZ_PORT_RESET: 191, + STOP_MODE_RESET: 192, + OLD_MASK_MODE: 193, + NEW_MASK_MODE: 194, + PDU_STATE: 195, + WRITTEN_BY_UI: 196, + EVENT_WRAP: 197, + EVENT_CRC: 253, +}; + +export const CFG_TABLE_ID = { + METER_FACTORY_CONFIGURATION: 1, + METER_SETTINGS: 2, + USER_PATIENT_CONFIGURATION: 3, + USER_PATIENT_SETTINGS: 4, + INSULIN_SETTINGS: 5, + REMINDER_STRING: 6, + SMART_TAG_NOTES: 7, + STORED_SENSOR_INFORMATION: 9, + REMINDER_DATA: 10, +}; + +export const CFG_FIELD_ID = { + SYSTEM_TYPE: 1025, + MARKET_LEVEL: 1026, + MARKET_SUB_LEVEL: 1027, + MARKET_PUCK_LEVEL: 1028, + BRAND_NAME: 1029, + NUMBER_FORMAT: 1056, + UNIT_OF_MEASURE: 1057, + INSULIN_CALC_PRESENT: 1058, + ALLOWABLE_MEAL_UNIT: 1059, + GLYCEMIC_RANGE_HIGH: 1067, + GLYCEMIC_RANGE_LOW: 1068, + TIME_CONVERSION: 1072, + FIRST_TIME_STARTUP_DONE: 1106, + PATIENT_NAME: 1130, + PATIENT_ID: 1131, + TARGET_RANGE_LOW: 1132, + TARGET_RANGE_HIGH: 1133, + LANGUAGE_SETTING: 1134, + TIME_FORMAT: 1135, + INSULIN_DOSE_INCREMENT: 1136, + MASK_MODE_OPTION: 1137, + MASK_MODE_REMINDER: 1138, + MASK_MODE_HOUR: 1139, + MASK_MODE_MIN: 1140, + BEEPER_VOLUME: 1160, + NOTIFICATION_SOUND: 1161, + NOTIFICATION_VIBE: 1162, + BUTTON_SOUND: 1163, + INSULIN_MODE: 1190, + EASY_DONE_FLAG: 1191, + ADVANCE_DONE_FLAG: 1192, + CARB_TYPE: 1193, + CARBS_PER_SERVING: 1194, + CARB_RATIO_FLAG: 1195, + CARB_RATIO_ALL_DAY: 1196, + CARB_RATIO_MORNING: 1197, + CARB_RATIO_MIDDAY: 1198, + CARB_RATIO_EVENING: 1199, + CARB_RATIO_NIGHT: 1200, + SERVING_RATIO_FLAG: 1201, + SERVING_RATIO_ALL_DAY: 1202, + SERVING_RATIO_MORNING: 1203, + SERVING_RATIO_MIDDAY: 1204, + SERVING_RATIO_EVENING: 1205, + SERVING_RATIO_NIGHT: 1206, + IOB_ICON_FLAG: 1207, + INSULIN_DURATION: 1208, + FIXED_DOSE_BREAKFAST: 1209, + FIXED_DOSE_LUNCH: 1210, + FIXED_DOES_DINNER: 1211, + CORRECTION_FACTORS_REQ: 1212, + CORRECTION_TYPE: 1213, + SINGLE_TARGET_RATIO_FLAG: 1214, + SINGLE_TARGET_RATIO_ALL_DAY: 1215, + SINGLE_TARGET_RATIO_MORNING: 1216, + SINGLE_TARGET_RATIO_MIDDAY: 1217, + SINGLE_TARGET_RATIO_EVENING: 1218, + SINGLE_TARGET_RATIO_NIGHT: 1219, + LOW_TARGET_RATIO_FLAG: 1220, + LOW_TARGET_RATIO_ALL_DAY: 1221, + LOW_TARGET_RATIO_MORNING: 1222, + LOW_TARGET_RATIO_MIDDAY: 1223, + LOW_TARGET_RATIO_EVENING: 1224, + LOW_TARGET_RATIO_NIGHT: 1225, + HIGH_TARGET_RATIO_FLAG: 1226, + HIGH_TARGET_RATIO_ALL_DAY: 1227, + HIGH_TARGET_RATIO_MORNING: 1228, + HIGH_TARGET_RATIO_MIDDAY: 1229, + HIGH_TARGET_RATIO_EVENING: 1230, + HIGH_TARGET_RATIO_NIGHT: 1231, + BG_DROP_CORRECTION_RATIO_FLAG: 1232, + BG_DROP_ALL_DAY: 1233, + BG_DROP_MORNING: 1234, + BG_DROP_MIDDAY: 1235, + BG_DROP_EVENING: 1236, + BG_DROP_NIGHT: 1237, + REMINDER_STRING_0: 1260, + REMINDER_STRING_1: 1261, + REMINDER_STRING_2: 1262, + REMINDER_STRING_3: 1263, + REMINDER_STRING_4: 1264, + REMINDER_STRING_5: 1265, + REMINDER_STRING_6: 1266, + REMINDER_STRING_7: 1267, + REMINDER_STRING_8: 1268, + REMINDER_STRING_9: 1269, + REMINDER_STRING_10: 1270, + REMINDER_STRING_11: 1271, + SMART_TAG_0: 1290, + SMART_TAG_1: 1291, + SMART_TAG_2: 1292, + SMART_TAG_3: 1293, + SMART_TAG_4: 1294, + SMART_TAG_5: 1295, + BULK_STORAGE: 1310, + SENSOR_STATE: 1320, + SENSOR_UID: 1321, + PAIRED_FLAG: 1322, + SENSOR_PUCK_INFO: 1323, + SENSOR_START_TIME: 1324, + REMINDER_CUSTOM_STRING_1: 1400, + REMINDER_CUSTOM_STRING_2: 1401, + REMINDER_CUSTOM_STRING_3: 1402, + REMINDER_CUSTOM_STRING_4: 1403, + REMINDER_CUSTOM_STRING_5: 1404, + REMINDER_CUSTOM_STRING_6: 1405, + REMINDER_CUSTOM_STRING_7: 1406, + REMINDER_CUSTOM_STRING_8: 1407, + REMINDER_CUSTOM_STRING_9: 1408, + REMINDER_1_DATA_TYPE: 1415, + REMINDER_1_DATA_STRING_INDEX: 1416, + REMINDER_1_DATA_TIME_HOUR: 1417, + REMINDER_1_DATA_TIME_MINUTE: 1418, + REMINDER_1_DATA_TIME_SECOND: 1419, + REMINDER_1_DATA_STATUS: 1475, + REMINDER_2_DATA_TYPE: 1420, + REMINDER_2_DATA_STRING_INDEX: 1421, + REMINDER_2_DATA_TIME_HOUR: 1422, + REMINDER_2_DATA_TIME_MINUTE: 1423, + REMINDER_2_DATA_TIME_SECOND: 1424, + REMINDER_2_DATA_STATUS: 1476, + REMINDER_3_DATA_TYPE: 1425, + REMINDER_3_DATA_STRING_INDEX: 1426, + REMINDER_3_DATA_TIME_HOUR: 1427, + REMINDER_3_DATA_TIME_MINUTE: 1428, + REMINDER_3_DATA_TIME_SECOND: 1429, + REMINDER_3_DATA_STATUS: 1477, + REMINDER_4_DATA_TYPE: 1430, + REMINDER_4_DATA_STRING_INDEX: 1431, + REMINDER_4_DATA_TIME_HOUR: 1432, + REMINDER_4_DATA_TIME_MINUTE: 1433, + REMINDER_4_DATA_TIME_SECOND: 1434, + REMINDER_4_DATA_STATUS: 1478, + REMINDER_5_DATA_TYPE: 1435, + REMINDER_5_DATA_STRING_INDEX: 1436, + REMINDER_5_DATA_TIME_HOUR: 1437, + REMINDER_5_DATA_TIME_MINUTE: 1438, + REMINDER_5_DATA_TIME_SECOND: 1439, + REMINDER_5_DATA_STATUS: 1479, + REMINDER_6_DATA_TYPE: 1440, + REMINDER_6_DATA_STRING_INDEX: 1441, + REMINDER_6_DATA_TIME_HOUR: 1442, + REMINDER_6_DATA_TIME_MINUTE: 1443, + REMINDER_6_DATA_TIME_SECOND: 1444, + REMINDER_6_DATA_STATUS: 1480, + REMINDER_7_DATA_TYPE: 1445, + REMINDER_7_DATA_STRING_INDEX: 1446, + REMINDER_7_DATA_TIME_HOUR: 1447, + REMINDER_7_DATA_TIME_MINUTE: 1448, + REMINDER_7_DATA_TIME_SECOND: 1449, + REMINDER_7_DATA_STATUS: 1481, + REMINDER_8_DATA_TYPE: 1450, + REMINDER_8_DATA_STRING_INDEX: 1451, + REMINDER_8_DATA_TIME_HOUR: 1452, + REMINDER_8_DATA_TIME_MINUTE: 1453, + REMINDER_8_DATA_TIME_SECOND: 1454, + REMINDER_8_DATA_STATUS: 1482, + REMINDER_9_DATA_TYPE: 1455, + REMINDER_9_DATA_STRING_INDEX: 1456, + REMINDER_9_DATA_TIME_HOUR: 1457, + REMINDER_9_DATA_TIME_MINUTE: 1458, + REMINDER_9_DATA_TIME_SECOND: 1459, + REMINDER_9_DATA_STATUS: 1483, + REMINDER_10_DATA_TYPE: 1460, + REMINDER_10_DATA_STRING_INDEX: 1461, + REMINDER_10_DATA_TIME_HOUR: 1462, + REMINDER_10_DATA_TIME_MINUTE: 1463, + REMINDER_10_DATA_TIME_SECOND: 1464, + REMINDER_10_DATA_STATUS: 1484, + REMINDER_11_DATA_TYPE: 1465, + REMINDER_11_DATA_STRING_INDEX: 1466, + REMINDER_11_DATA_TIME_HOUR: 1467, + REMINDER_11_DATA_TIME_MINUTE: 1468, + REMINDER_11_DATA_TIME_SECOND: 1469, + REMINDER_11_DATA_STATUS: 1485, + REMINDER_12_DATA_TYPE: 1470, + REMINDER_12_DATA_STRING_INDEX: 1471, + REMINDER_12_DATA_TIME_HOUR: 1472, + REMINDER_12_DATA_TIME_MINUTE: 1473, + REMINDER_12_DATA_TIME_SECOND: 1474, + REMINDER_12_DATA_STATUS: 1486, + CONFIG_CRC: 2047, +}; + +export const RESULT_VALUE_TYPE = { + GLUCOSE: 0, + KETONE: 1, + SCAN: 2, +}; + +export const COMPRESSION = { + DISABLED: 0, + ENABLED: 1, +}; + +export const COMPRESSION_TYPE = { + UNCOMPRESSED: 0xfd, + ZERO_COMPRESSED: 0xff, +}; + +export const CRC32_TABLE = [ + 0x00000000, + 0x04c11db7, + 0x09823b6e, + 0x0d4326d9, + 0x130476dc, + 0x17c56b6b, + 0x1a864db2, + 0x1e475005, + 0x2608edb8, + 0x22c9f00f, + 0x2f8ad6d6, + 0x2b4bcb61, + 0x350c9b64, + 0x31cd86d3, + 0x3c8ea00a, + 0x384fbdbd, +]; + +export const CRC16_TABLE = [ + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, +]; diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js new file mode 100644 index 0000000000..e80ae4c4bd --- /dev/null +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -0,0 +1,513 @@ +/* + * == BSD2 LICENSE == + * Copyright (c) 2017, 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 sundial from 'sundial'; + +import structJs from '../../struct'; +import TZOUtil from '../../TimezoneOffsetUtil'; +import annotate from '../../eventAnnotations'; + +import { + OP_CODE, + ERROR_DESCRIPTION, + DB_TABLE_ID, + DB_WRAP_RECORDS, + DB_RECORD_TYPE, + CFG_TABLE_ID, + RESULT_VALUE_TYPE, + COMPRESSION_TYPE, + KETONE_VALUE_FACTOR, + KETONE_HI, + KETONE_LO, + GLUCOSE_HI, + GLUCOSE_LO, + CRC16_TABLE, +} from './freeStyleLibreConstants'; + +const struct = structJs(); + +const isBrowser = typeof window !== 'undefined'; +// eslint-disable-next-line no-console +const debug = isBrowser ? require('bows')('FreeStyleLibreDriver') : console.log; + +const FORMAT = { + ERROR: 'bb', + DATE_TIME: 'bbbbbsb', + RECORD_HEADER: 'sbbin', + HISTORICAL_DATA: 'ssss', + TIME_CHANGE: 'insss', // despite the specs, user time offset is a signed value, same as in header +}; + +export const FORMAT_LENGTH = _.mapValues(FORMAT, format => struct.structlen(format)); + +const OP_CODE_PROCESSING_ORDER = [ + OP_CODE.GET_CFG_SCHEMA, // not used for now + OP_CODE.GET_DB_SCHEMA, // not used for now + OP_CODE.GET_DATE_TIME, + OP_CODE.GET_CFG_DATA, + OP_CODE.COMPRESSED_DATABASE, + OP_CODE.GET_DATABASE, +]; + +export default class FreeStyleLibreData { + constructor(cfg) { + this.cfg = cfg; + + this.opCodeHandlers = {}; + this.opCodeHandlers[OP_CODE.GET_DATE_TIME] = this.handleDateTime.bind(this); + this.opCodeHandlers[OP_CODE.GET_DB_SCHEMA] = this.handleDatabaseSchema.bind(this); + this.opCodeHandlers[OP_CODE.COMPRESSED_DATABASE] = this.handleCompressedDatabase.bind(this); + this.opCodeHandlers[OP_CODE.GET_DATABASE] = this.handleDatabase.bind(this); + this.opCodeHandlers[OP_CODE.GET_CFG_SCHEMA] = this.handleConfigSchema.bind(this); + this.opCodeHandlers[OP_CODE.GET_CFG_DATA] = this.handleConfigData.bind(this); + this.opCodeHandlers[OP_CODE.ERROR] = this.constructor.handleError; + } + + processAapPackets(aapPackets, dbRecordNumber) { + this.factoryConfig = {}; + this.deviceDateTime = null; + this.records = []; + 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; + this.dbRecordNumberNextWrap[DB_TABLE_ID.GLUCOSE_RESULT] = nextWrap; + this.dbRecordNumberNextWrap[DB_TABLE_ID.RAPID_ACTING_INSULIN] = nextWrap; + 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) => { + const opCode = aapPacket.opCode; + if (!(opCode in aapPacketsByOpCode)) { + aapPacketsByOpCode[opCode] = []; + } + aapPacketsByOpCode[opCode].push(aapPacket); + }); + + // process AAP packet in fixed order to make sure data is available when needed + OP_CODE_PROCESSING_ORDER.forEach((opCode) => { + if (opCode in aapPacketsByOpCode) { + aapPacketsByOpCode[opCode].forEach((aapPacket) => { + const handler = this.opCodeHandlers[aapPacket.opCode]; + if (handler) { + handler(aapPacket); + } else { + debug('processAapPackets: no handler found for OP code:', aapPacket.opCode); + } + }); + } + }); + + // 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 1000 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, 1000 - 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', + aapPackets.length, 'AAP packets.'); + return []; + } + + // sort records ascending by record number to honor the timeChangeFlag + this.records.sort((a, b) => a.headerFields.recordNumber - b.headerFields.recordNumber); + + // if timeChangeFlag is set, set record number of previous history record lower than the + // previous time change record + // this prevents these records from being bootstrapped with the wrong timezone + let previousTimeChangeRecord = null; + let previousHistoryRecord = null; + this.records.forEach((record) => { + if (record.historyFields) { + if (record.historyFields.timeChangeFlag && previousTimeChangeRecord) { + previousHistoryRecord.headerFields.recordNumber = + previousTimeChangeRecord.headerFields.recordNumber - 1; + } + previousHistoryRecord = record; + } else if (record.timeChangeFields) { + previousTimeChangeRecord = record; + } + }); + + // sort records again ascending by record number to find the most recent one + this.records.sort((a, b) => a.headerFields.recordNumber - b.headerFields.recordNumber); + const timestamp = this.records[this.records.length - 1].jsDate; + const mostRecent = sundial.applyTimezone(timestamp, this.cfg.timezone).toISOString(); + + this.buildTimeChangeRecords(); + this.cfg.tzoUtil = new TZOUtil(this.cfg.timezone, mostRecent, this.postRecords); + + this.buildCBGRecords(); + this.buildMeasurementRecords(); + + return this.postRecords; + } + + static handleError(aapPacket) { + const fields = struct.unpack(aapPacket.data, 0, FORMAT.ERROR, ['opCode', 'errorCode']); + debug('handleError:', ERROR_DESCRIPTION[fields.errorCode], 'for OP code', fields.opCode); + if (aapPacket.data.length > FORMAT_LENGTH.ERROR) { + debug('handleError: extra data:', aapPacket.data.slice(FORMAT_LENGTH.ERROR).toString('hex')); + } + } + + handleDateTime(aapPacket) { + if (aapPacket.dataLength !== FORMAT_LENGTH.DATE_TIME) { + debug('handleDateTime: wrong data length:', aapPacket.dataLength, 'instead of', FORMAT_LENGTH.DATE_TIME); + return; + } + const fields = struct.unpack(aapPacket.data, 0, FORMAT.DATE_TIME, + ['second', 'minute', 'hour', 'day', 'month', 'year', 'valid']); + if (fields.valid !== 1) { + debug('handleDateTime: date not marked as valid:', fields.valid, aapPacket.data.data[0]); + return; + } + this.deviceDateTime = new Date(fields.year, fields.month - 1, fields.day, + fields.hour, fields.minute, fields.second); + debug('handleDateTime: datetime:', this.deviceDateTime); + } + + // eslint-disable-next-line no-unused-vars,class-methods-use-this + handleDatabaseSchema(aapPacket) { + /* + * These are ignored for now, as the schemata are already known from the specs. + * For now they are hardcoded based on the specs for the few record types that are actually + * needed. + * + * The schemata describe the fields in the database records, so that using this information to + * parse the records instead of the hardcoded format strings, would make it possible to + * understand the data even after a potential firmware upgrade that changes the database + * structure. + * (As long as the field IDs stay the same, the fields parsed via these schemata can still be + * evaluated properly.) + * + * Schema description: (example: the record header prefixed to all records) + * + UINT8 RecordHeader_schema[] = + { + // schema descriptor + 48, 0, // [uint16_le] schema table length (including this descriptor) + 1, 0, // [uint16_le] schema table version + 255, // [uint8] schema table/record ID + 6, 0, // [uint16_le] number of data words (16bit) in the record + 5, // [uint8] number of fields in the record + + // field descriptors (8 byte each) + // [uint16_le], [uint16_le], [uint8], [uint8], [uint16_le] + // field ID, word offset, bit offset inside the word, data type, data length in bits + 0,0,0,0,0,1,16,0, + 8,0,1,0,0,0,8,0, + 7,0,1,0,15,0,1,0, + 9,0,2,0,0,0,32,0, + 10,0,4,0,0,2,32,0 + }; + * + */ + } + + getDateTime(readerTime, userTimeOffset) { + const unixTimestamp = this.factoryConfig.timeConversion + readerTime + userTimeOffset; + return new Date(unixTimestamp * 1000); + } + + buildTimeChangeRecords() { + this.records.filter(elem => elem.headerFields.recordType === DB_RECORD_TYPE.TIME_CHANGE_RESULT) + .forEach((record) => { + const oldDateTime = this.getDateTime(record.timeChangeFields.oldReaderTime, + record.timeChangeFields.oldUserTimeOffset); + + const timeChange = this.cfg.builder.makeDeviceEventTimeChange() + .with_change({ + from: sundial.formatDeviceTime(oldDateTime), + to: sundial.formatDeviceTime(record.jsDate), + agent: 'manual', + }) + .with_deviceTime(sundial.formatDeviceTime(record.jsDate)) + .set('index', record.headerFields.recordNumber) + .set('jsDate', record.jsDate); + this.postRecords.push(timeChange); + }); + } + + static addOutOfRangeAnnotation(recordBuilder, low, high, step, type) { + if (low !== null && recordBuilder.value < low + step) { + recordBuilder.with_value(low); + annotate.annotateEvent(recordBuilder, { + code: `${type}/out-of-range`, + value: 'low', + threshold: low + step, + }); + } else if (high !== null && recordBuilder.value > high - step) { + recordBuilder.with_value(high); + annotate.annotateEvent(recordBuilder, { + code: `${type}/out-of-range`, + value: 'high', + threshold: high - step, + }); + } + } + + buildCBGRecords() { + this.records.filter(elem => elem.headerFields.recordType === DB_RECORD_TYPE.HISTORICAL_DATA) + .forEach((record) => { + const cbg = this.cfg.builder.makeCBG() + .with_value(record.historyFields.glucoseValue) + .with_units('mg/dL') // values are always in 'mg/dL', independent of the unitOfMeasure setting + .with_deviceTime(sundial.formatDeviceTime(record.jsDate)) + .set('index', record.headerFields.recordNumber); + + this.constructor.addOutOfRangeAnnotation(cbg, GLUCOSE_LO, GLUCOSE_HI, 1, 'bg'); + + this.cfg.tzoUtil.fillInUTCInfo(cbg, record.jsDate); + this.postRecords.push(cbg.done()); + }); + } + + buildMeasurementRecords() { + this.records.filter(elem => + [DB_RECORD_TYPE.GLUCOSE_KETONE_SERVING, + DB_RECORD_TYPE.GLUCOSE_KETONE_MEAL, + DB_RECORD_TYPE.GLUCOSE_KETONE_CARBS, + ].includes(elem.headerFields.recordType)).forEach((record) => { + let recordBuilder; + + if (record.measurementFields.resultType === RESULT_VALUE_TYPE.GLUCOSE) { + recordBuilder = this.cfg.builder.makeSMBG() + .with_value(record.measurementFields.resultValue) + .with_units('mg/dL'); // values are always in 'mg/dL', independent of the unitOfMeasure setting + + this.constructor.addOutOfRangeAnnotation(recordBuilder, GLUCOSE_LO, GLUCOSE_HI, 1, 'bg'); + } else if (record.measurementFields.resultType === RESULT_VALUE_TYPE.KETONE) { + recordBuilder = this.cfg.builder.makeBloodKetone() + .with_value(record.measurementFields.resultValue / KETONE_VALUE_FACTOR) + .with_units('mmol/L'); + + this.constructor.addOutOfRangeAnnotation(recordBuilder, KETONE_LO, KETONE_HI, 1 / KETONE_VALUE_FACTOR, 'ketone'); + } + + if (recordBuilder) { + recordBuilder = recordBuilder.with_deviceTime(sundial.formatDeviceTime(record.jsDate)) + .set('index', record.headerFields.recordNumber); + this.cfg.tzoUtil.fillInUTCInfo(recordBuilder, record.jsDate); + this.postRecords.push(recordBuilder.done()); + } + }); + } + + handleCompressedDatabase(aapPacket) { + let decompressedBuffer = new Buffer(1); + let compressedOffset = 0; + + // copy table ID + decompressedBuffer[0] = aapPacket.data[compressedOffset]; + compressedOffset += 1; + + while (compressedOffset < aapPacket.dataLength) { + const blockType = aapPacket.data[compressedOffset]; + compressedOffset += 1; + + // parse 24 bit little endian block length + /* eslint-disable no-bitwise */ + let blockLength = aapPacket.data[compressedOffset] + | (aapPacket.data[compressedOffset + 1] << 8) + | (aapPacket.data[compressedOffset + 2] << 16); + /* eslint-enable no-bitwise */ + compressedOffset += 3; + + blockLength *= 4; // convert number of uint32 values to number of uint8 values + + if (blockType === COMPRESSION_TYPE.UNCOMPRESSED) { + decompressedBuffer = Buffer.concat([decompressedBuffer, + aapPacket.data.slice(compressedOffset, compressedOffset + blockLength)]); + 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; + } + } + + // build decompressed AAP packet to process + const decompressedAapPacket = { + packetLength: (aapPacket.packetLength - aapPacket.dataLength) + decompressedBuffer.length, + data: decompressedBuffer, + dataLength: decompressedBuffer.length, + opCode: OP_CODE.GET_DATABASE, + }; + + this.handleDatabase(decompressedAapPacket); + } + + /* eslint-disable no-bitwise */ + static calcCrc16(data) { + let residue = 0xffff; + + data.forEach((byte) => { + const tableIndex = (residue & 0xff) ^ byte; + residue >>= 8; + residue ^= CRC16_TABLE[tableIndex]; + }); + + // copy the bits of the residue into the crc16 in reverse order + let crc16 = 0; + for (let i = 0; i < 16; i++) { + crc16 = (crc16 << 1) | ((residue >> i) & 0x0001); + } + + return crc16; + } + + checkCrc16(data, crc16) { + const calculatedCrc16 = + this.constructor.calcCrc16(data); + if (crc16 !== calculatedCrc16) { + debug('checkCrc16: Error:', crc16.toString(16), '!=', calculatedCrc16.toString(16)); + return false; + } + return true; + } + + handleDatabase(aapPacket) { + if (aapPacket.dataLength === 0) { + return; + } + + const TABLE_ID_OFFSET = 0; + const TABLE_ID_LENGTH = 1; + const databaseTableId = aapPacket.data[TABLE_ID_OFFSET]; + + const RECORD_HEADER_OFFSET = TABLE_ID_LENGTH; + const headerFields = struct.unpack(aapPacket.data, RECORD_HEADER_OFFSET, FORMAT.RECORD_HEADER, + ['recordNumber', 'recordType', 'isTimeValid', 'readerTime', 'userTimeOffset']); + headerFields.isTimeValid = ((headerFields.isTimeValid & 0x80) > 0); + + const RECORD_OFFSET = RECORD_HEADER_OFFSET + FORMAT_LENGTH.RECORD_HEADER; + + // calculate 32bit record number from 16bit header record number and next wrap around number + 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) { + const timeChangeFields = struct.unpack(aapPacket.data, RECORD_OFFSET, FORMAT.TIME_CHANGE, + ['oldReaderTime', 'oldUserTimeOffset', 'valid', 'unused', 'CRC16']); + + if (this.checkCrc16(aapPacket.data.slice(RECORD_HEADER_OFFSET, + RECORD_OFFSET + (FORMAT_LENGTH.TIME_CHANGE - 2)), timeChangeFields.CRC16)) { + if (timeChangeFields.valid) { + 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, + ['glucoseValue', 'lifeCounter', 'dataQualityErrorFlags', 'CRC16']); + historyFields.firstFlag = ((historyFields.glucoseValue & 0x1000) > 0); + historyFields.timeChangeFlag = ((historyFields.glucoseValue & 0x2000) > 0); + historyFields.foodFlag = ((historyFields.glucoseValue & 0x4000) > 0); + historyFields.rapidActingInsulinFlag = ((historyFields.glucoseValue & 0x8000) > 0); + historyFields.glucoseValue &= 0x03ff; + + if (this.checkCrc16(aapPacket.data.slice(RECORD_HEADER_OFFSET, + RECORD_OFFSET + (FORMAT_LENGTH.HISTORICAL_DATA - 2)), historyFields.CRC16)) { + if (historyFields.dataQualityErrorFlags === 0) { + this.records.push({ headerFields, historyFields, jsDate: dateTime }); + } + } + } else if ([DB_RECORD_TYPE.GLUCOSE_KETONE_SERVING, + DB_RECORD_TYPE.GLUCOSE_KETONE_MEAL, + DB_RECORD_TYPE.GLUCOSE_KETONE_CARBS, + ].includes(headerFields.recordType)) { + const measurementFields = {}; + const RESULT_VALUE_OFFSET = 0; + struct.unpack(aapPacket.data, RECORD_OFFSET + RESULT_VALUE_OFFSET, 's', ['resultValue'], + measurementFields); + measurementFields.resultType = (measurementFields.resultValue >> 14) & 0x3; + measurementFields.resultValue &= 0x03ff; + + const DATA_QUALITY_ERROR_FLAGS_OFFSET = 10; + struct.unpack(aapPacket.data, RECORD_OFFSET + DATA_QUALITY_ERROR_FLAGS_OFFSET, 's', + ['dataQualityErrorFlags'], measurementFields); + + const CRC_OFFSET = 12; + struct.unpack(aapPacket.data, RECORD_OFFSET + CRC_OFFSET, 's', ['CRC16'], measurementFields); + if (this.checkCrc16(aapPacket.data.slice(RECORD_HEADER_OFFSET, RECORD_OFFSET + CRC_OFFSET), + measurementFields.CRC16)) { + if (measurementFields.dataQualityErrorFlags === 0) { + this.records.push({ headerFields, measurementFields, jsDate: dateTime }); + } + } + } else if (headerFields.recordType in DB_WRAP_RECORDS) { + const wrapFields = {}; + + const CRC_OFFSET = DB_WRAP_RECORDS[headerFields.recordType].CRC_OFFSET; + struct.unpack(aapPacket.data, RECORD_OFFSET + CRC_OFFSET, 's', ['CRC16'], wrapFields); + + if (this.checkCrc16(aapPacket.data.slice(RECORD_HEADER_OFFSET, RECORD_OFFSET + CRC_OFFSET), + wrapFields.CRC16)) { + const DB_RECORD_NUMBER_OFFSET = 0; + this.dbRecordNumberNextWrap[databaseTableId] = + aapPacket.data.readUInt32LE(RECORD_OFFSET + DB_RECORD_NUMBER_OFFSET); + } + } + } + /* eslint-enable no-bitwise */ + + // eslint-disable-next-line no-unused-vars,class-methods-use-this + handleConfigSchema(aapPacket) { + // ignored, since they are currently hardcoded based on the specs + } + + handleConfigData(aapPacket) { + let offset = 0; + const tableId = aapPacket.data[offset]; + offset += 1; + if (tableId === CFG_TABLE_ID.METER_FACTORY_CONFIGURATION) { + const UNIT_OF_MEASURE_OFFSET = 133; + struct.unpack(aapPacket.data, offset + UNIT_OF_MEASURE_OFFSET, 'b', ['unitOfMeasure'], this.factoryConfig); + this.factoryConfig.unitOfMeasure = ['mmol/L', 'mg/dL'][this.factoryConfig.unitOfMeasure]; + + const TIME_CONVERSION_OFFSET = 156; + struct.unpack(aapPacket.data, offset + TIME_CONVERSION_OFFSET, 'i', ['timeConversion'], this.factoryConfig); + } + } +} diff --git a/lib/drivers/abbott/freeStyleLibreProtocol.js b/lib/drivers/abbott/freeStyleLibreProtocol.js new file mode 100644 index 0000000000..5fb896f56b --- /dev/null +++ b/lib/drivers/abbott/freeStyleLibreProtocol.js @@ -0,0 +1,675 @@ +/* + * == BSD2 LICENSE == + * Copyright (c) 2017, 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 == + */ + +/* + * *** FreeStyle Libre communication via USB HID *** + * + * *** HID DATA TRANSFER *** + * - HID reports are used to encapsulate the text and the binary protocol + * - HID report frames always have 64 bytes + * + * HID_FRAME: + * |--------------------------------------------------------------------- + * HID_HEADER HID_DATA + * |- |- |------------------------------------------------ + * COMMAND DATA_LENGTH PAYLOAD_DATA GARBAGE + * |- |- |------------------- |-------------------------- + * 0xnn 0xll (up to 62 bytes) + * + * + * HID_HEADER: + * - COMMAND: 1 byte + * - DATA_LENGTH: 1 byte (excluding HID_HEADER, so valid range is 0-62) + * + * HID_DATA: + * - PAYLOAD_DATA: DATA_LENGTH bytes actual data + * - GARBAGE: (62 - DATA_LENGTH) bytes fill the rest of the frame + * + * COMMAND CODES: + * - from host to device: + * --- 0x01: used in init? + * --- 0x04: used in init? + * --- 0x05: used in init? + * --- 0x0a: BINARY PROTOCOL request data with AAP OP_CODES + * --- 0x0d: ACK received packets + * --- 0x15: used in init? + * --- 0x21: TEXT PROTOCOL command + * --- 0x60: TEXT PROTOCOL command + * + * - from device to host: + * --- 0x06: answer to init 0x05, data in text format containing the device's serial number + * --- 0x0b: BINARY PROTOCOL response to 0x0a + * --- 0x0c: ACK received packets + * --- 0x22: at seemingly random points in the communication? always the same single data byte: 0x05 + * --- 0x34: answer to init 0x04, single data byte with different values? + * --- 0x35: answer to init 0x05, data in text format containing the devices software version + * --- 0x60: TEXT PROTOCOL response + * --- 0x71: answer to init 0x01, single data byte with value 0x01? + * + * + * *** BINARY PROTOCOL *** + * + * - ABMP: ADC Binary 22175 communication Meter Protocol + * --- ATP: ABMP Transport Protocol + * ----- AAP: ABMP Application Protocol + * + * ATP_FRAME: + * + * PAYLOAD_DATA + * |--------------------------------------------------------------- + * ATP_HEADER ATP_DATA + * |- |- |---- |--------------------- |---------- + * SEQ_RX SEQ_TX CRC AAP_FRAME_1 AAP_FRAME_2... + * |--------------------- + * AAP_HEADER AAP_DATA + * |--- |- |--------- + * AAP_LENGTH OP_CODE AAP_DATA + * + * ATP_FRAME: + * - ATP_HEADER + * --- SEQ_RX: 1 byte sequence information: the next expected packet's sequence number + * --- SEQ_TX: 1 byte sequence information: this packet's sequence number + * --- CRC: 32 bit CRC (variation of CRC32-CCITT, using 8 XORs but only a size 16 lookup table) + * - ATP_DATA + * --- can contain one or multiple AAP frames or only parts of one + * + * AAP_FRAME: + * - AAP_HEADER: + * --- AAP_LENGTH: 0 to 3 bytes + * ----- if high bit is set, the lower 7 bits are the length -> max 21 bits for length + * ----- if not, this byte is already the OP_CODE byte + * --- OP_CODE: 1 byte (high bit is 0) + * - AAP_DATA: up to 2MB spread over multiple ATP_DATA fields of consecutive ATP_FRAMES + * + * OP_CODE: (in addition to the ones defined in the specs) + * - 0x7d: make device flush its output buffer + * (sends remaining AAP data, even if not a full ATP frame can be filled) + * + * BINARY COMMAND: + * - exactly one AAP frame (contained in a single ATP frame, inside a single HID report frame) + * + * BINARY RESPONSE: + * - can span multiple AAP frames, possibly spread over multiple ATP and HID frames + * - only completely filled ATP frames are sent + * --- send OP Code 0x7d to force device to send remaining AAP data in partially filled ATP frame + * + * + * *** TEXT PROTOCOL *** + * + * TEXT COMMAND: + * + * PAYLOAD_DATA + * |---------------- + * MESSAGE SEP + * |-------- |-- + * $command? \r\n + * + * TEXT RESPONSE: + * - can span multiple HID frames, ending with STATUS ("CMD OK\r\n" or "CMD Fail!\r\n") + * - lines are separated by SEP: "\r\n" (0x0a 0x0d) + * - MESSAGE is followed by CHECKSUM and STATUS, each in its own line + * + * PAYLOAD_DATA + * |------------------------------------------------------------------------ + * MESSAGE SEP CHECKSUM SEP STATUS SEP + * |-------- |-- |------------- |-- |------ |-- + * message... \r\n "CKSM:[0-9A-F]{8}" \r\n "CMD OK" or "CMD Fail!" \r\n + * + */ + +import async from 'async'; +import structJs from '../../struct'; + +import { DEVICE_MODEL_NAME, OP_CODE, COMMAND, CRC32_TABLE } from './freeStyleLibreConstants'; + +const struct = structJs(); + +const isBrowser = typeof window !== 'undefined'; +// eslint-disable-next-line no-console +const debug = isBrowser ? require('bows')('FreeStyleLibreDriver') : console.log; + +const HID_PACKET_SIZE = 64; +const HID_HEADER_FORMAT = 'bb'; +const HID_HEADER_LENGTH = struct.structlen(HID_HEADER_FORMAT); + +const ATP_HEADER_FORMAT = 'bbi'; +const ATP_HEADER_LENGTH = struct.structlen(ATP_HEADER_FORMAT); + +const ACK_HEADER_FORMAT = 'bb2Z'; +const ACK_HEADER_LENGTH = struct.structlen(ACK_HEADER_FORMAT); + +const READ_TIMEOUT = 5000; // [ms] +const ACK_INTERVAL = 10; // [ms] + +const INIT_ACK_MAGIC_DATA = '\x00\x02'; + +// to know then all AAP responses for a request were received, +// we can look for the AAP data length of the final packet +const FINAL_AAP_DATA_LENGTHS = {}; +// contrary to the specs the db tables are concluded by just 0x31 with length 0, not 0x81 0x31 0xcc +FINAL_AAP_DATA_LENGTHS[OP_CODE.GET_DATABASE] = 0; +FINAL_AAP_DATA_LENGTHS[OP_CODE.GET_DB_SCHEMA] = 0; +FINAL_AAP_DATA_LENGTHS[OP_CODE.GET_DATE_TIME] = 8; +FINAL_AAP_DATA_LENGTHS[OP_CODE.GET_CFG_DATA] = -1; +FINAL_AAP_DATA_LENGTHS[OP_CODE.GET_CFG_SCHEMA] = 0; +FINAL_AAP_DATA_LENGTHS[OP_CODE.SET_COMPRESSION] = 1; + +// +// regular expressions for matching text protocol responses +// +const TEXT_CHECKSUM_FORMAT = 'CKSM:([0-9A-F]{8})\r\n'; +const TEXT_STATUS_FORMAT = 'CMD (OK|Fail!)\r\n'; +const TEXT_STATUS_REGEX = new RegExp(TEXT_STATUS_FORMAT); +// in javascript RegExp "[^]*" has to be used instead of ".*" to match all chars over multiple lines +// the multiline flag /s/ does not exist, so ".*" will never match newlines +const TEXT_RESPONSE_REGEX = new RegExp(`^([^]*)${TEXT_CHECKSUM_FORMAT}${TEXT_STATUS_FORMAT}`); + +const DB_RECORD_NUMBER_REGEX = new RegExp('^DB Record Number = ([0-9]+)$'); + +// after db record responses (e.g. $arresult?, $history?) an additional line is send, +// containing the record count and an additional checksum of just the records: +// COUNT,RECORD_CHECKSUM\r\n +// eslint-disable-next-line no-control-regex +const DB_RECORDS_REGEX = new RegExp('^([^]*\r\n)([0-9]+),([0-9A-F]{8})$'); + + +export default class FreeStyleLibreProtocol { + constructor(config) { + this.config = config; + this.hidDevice = config.deviceComms; + this.sequenceRx = 0; + this.sequenceTx = 0; + this.lastAckRx = 0; + } + + readResponse(responseType, timeout, cb) { + let receiveTimeout = null; + const resetReceiveTimeout = () => { + if (receiveTimeout !== null) { + clearTimeout(receiveTimeout); + } + receiveTimeout = setTimeout(() => { + debug('readResponse: TIMEOUT'); + const e = new Error('Timeout error.'); + e.name = 'TIMEOUT'; + return cb(e, null); + }, timeout); + }; + + let ackInterval = null; + if (responseType === COMMAND.BINARY_RESPONSE) { + ackInterval = setInterval(() => { + if (this.sequenceRx !== this.lastAckRx) { + this.sendAck(); + } + }, ACK_INTERVAL); + } + + const aapPackets = []; + let receiveBuffer = new Buffer(0); + async.doWhilst( + (callback) => { + resetReceiveTimeout(); + this.hidDevice.receive((buffer) => { + if (buffer !== undefined && buffer.length > 0) { + const hidPacket = this.constructor.parseHidPacket(buffer); + + if (hidPacket.responseType === COMMAND.TEXT_RESPONSE) { + // append newly received data to message string + receiveBuffer = Buffer.concat([receiveBuffer, hidPacket.data]); + } else if (hidPacket.responseType === COMMAND.BINARY_RESPONSE) { + const atpPacket = this.constructor.parseAtpFrame(hidPacket.data); + if (atpPacket === null) { + // CRC error: try to get damaged package again + this.sendAck(); + } else if (this.sequenceRx === atpPacket.sequenceTx) { + // next sequence number expected is one higher than the one just received + this.sequenceRx = (this.sequenceRx + 1) % 0x100; + + receiveBuffer = Buffer.concat([receiveBuffer, atpPacket.data]); + } else { + debug('readResponse: Received wrong sequence number', atpPacket.sequenceTx, + ', expected', this.sequenceRx); + // try to get missing package by sending an ACK containing the next expected + // sequence number to the device + this.sendAck(); + } + } else if (hidPacket.responseType === COMMAND.ACK_FROM_DEVICE) { + const ackPacket = this.constructor.parseAckFrame(hidPacket.data); + if (ackPacket.sequenceRx !== this.sequenceTx - 1) { + return callback(new Error('Received invalid ACK sequence number: ' + + `${ackPacket.sequenceRx} != ${this.sequenceTx - 1}. Please try again!`)); + // instead of throwing an error here, we could resend the packets the device missed + // to try and recover this session (but this error does not seem to happen anyways) + } + } + } + + // run test to see if we are done receiving + return callback(); + }); + }, + + () => { + if (responseType === COMMAND.TEXT_RESPONSE) { + // if we are waiting for a text response and the buffer contains the status line: done + return !(TEXT_STATUS_REGEX.exec(receiveBuffer.toString())); + } else if (responseType === COMMAND.BINARY_RESPONSE) { + // collect all valid AAP packets from the buffer + let aapPacket; + do { + aapPacket = this.constructor.parseAapFrame(receiveBuffer); + if (aapPacket !== null) { + aapPackets.push(aapPacket); + // remove parsed packet from buffer + receiveBuffer = receiveBuffer.slice(aapPacket.packetLength); + } + } while (aapPacket !== null && receiveBuffer.length > 0); + + if (aapPackets.length === 0) { + return true; + } + + // we can recognise the last AAP packet of a response from its data length + // or from the number of AAP packets + const lastAapPacket = aapPackets[aapPackets.length - 1]; + const finalLength = FINAL_AAP_DATA_LENGTHS[lastAapPacket.opCode]; + // if the finalLength value is negative it describes the index of the final AAP packets + if (finalLength < 0) { + return aapPackets.length < -finalLength; + } + // if it is 0 or higher, it describes the dataLength of the final AAP packet + return lastAapPacket.dataLength !== finalLength; + } else if (responseType === null) { + // no response needed + return false; + } + // continue iterating + return true; + }, + + (err) => { + clearTimeout(receiveTimeout); + // send a final Ack and stop interval timer + if (ackInterval !== null) { + clearInterval(ackInterval); + this.sendAck(); + } + if (err) { + return cb(err, null); + } + if (responseType === COMMAND.BINARY_RESPONSE) { + return cb(null, aapPackets); + } + return cb(null, receiveBuffer.toString()); + }, + ); + } + + static validateTextChecksum(dataString, expectedChecksum) { + /* eslint-disable no-bitwise */ + const calculatedChecksum = dataString.split('') + .reduce((a, b) => a + (b.charCodeAt(0) & 0xff), 0); + /* eslint-enable no-bitwise */ + if (calculatedChecksum !== expectedChecksum) { + debug(`validateTextChecksum: wrong checksum: ${calculatedChecksum} != ${expectedChecksum}`); + } + return calculatedChecksum === expectedChecksum; + } + + static parseHidPacket(buffer) { + const packet = struct.unpack(buffer, 0, HID_HEADER_FORMAT, ['responseType', 'dataLen']); + packet.data = buffer.slice(HID_HEADER_LENGTH, HID_HEADER_LENGTH + packet.dataLen); + return packet; + } + + static buildHidPacket(commandType, data) { + const bytes = new Uint8Array(HID_PACKET_SIZE); + const counter = struct.pack(bytes, 0, HID_HEADER_FORMAT, commandType, data.length); + if (data.length) { + // data can be either a TypedArray or a string + let dataTypeChar = 'B'; + if (typeof (data) === 'string') { + dataTypeChar = 'Z'; + } + struct.pack(bytes, counter, data.length + dataTypeChar, data); + } + return bytes.buffer; + } + + /* eslint-disable no-bitwise */ + static parseAapFrame(buffer) { + const packet = { + dataLength: 0, + }; + + let dataLengthNumBytes = 0; + // the first 0 to 3 bytes describe the aap frame length in their lower 7 bits in little endian + for (let i = 0; i <= 2; i++) { + if (i >= buffer.length) { + return null; + } + const values = struct.unpack(buffer, i, 'b', ['byte']); + // if highest bit is not set, this is already the command byte + if ((values.byte & 0x80) === 0) { + break; + } + // highest bit was set, extract lower 7 bits as length value + let lengthValue = values.byte & 0x7f; + // shift these 7 bits to the left depending on the index i + lengthValue <<= (7 * i); + // combine these bits with the previous length value + packet.dataLength |= lengthValue; + + dataLengthNumBytes += 1; + } + + const opCodeNumBytes = 1; + + if (buffer.length > dataLengthNumBytes) { + // add opCode to packet + struct.unpack(buffer, dataLengthNumBytes, 'b', ['opCode'], packet); + } + + // if there is data missing, return null + packet.packetLength = dataLengthNumBytes + opCodeNumBytes + packet.dataLength; + const numBytesMissing = packet.packetLength - buffer.length; + if (numBytesMissing > 0) { + return null; + } + + if ((packet.opCode & 0x80) !== 0) { + debug(`parseAapFrame: Faulty op code: 0x${packet.opCode.toString(16)}`); + return null; + } + + // add data to packet + packet.data = buffer.slice(dataLengthNumBytes + opCodeNumBytes, packet.packetLength); + + return packet; + } + + static buildAapFrame(opCode, dataArrayOptional) { + let dataArray = dataArrayOptional; + if (dataArray === undefined) { + dataArray = []; + } + const aapDataLengthBytes = []; + let dataLength = dataArray.length; + // as long as there are length bits left + while (dataLength > 0) { + // put the lowest 7 bits in a length byte and set the high bit + const lengthByte = 0x80 | (dataLength & 0x7f); + // append new length byte to length string (little endian ordering) + aapDataLengthBytes.push(lengthByte); + // shift length by the 7 bits just used + dataLength >>= 7; + } + + const packetFormat = `${aapDataLengthBytes.length}Bb${dataArray.length}B`; + const packetLength = struct.structlen(packetFormat); + + const bytes = new Uint8Array(packetLength); + struct.pack(bytes, 0, packetFormat, aapDataLengthBytes, opCode, dataArray); + return bytes; + } + + static parseAtpFrame(buffer) { + const packet = struct.unpack(buffer, 0, ATP_HEADER_FORMAT, ['sequenceRx', 'sequenceTx', 'crc32']); + packet.data = buffer.slice(ATP_HEADER_LENGTH); + const crc32 = FreeStyleLibreProtocol.calcCrc32(packet.data); + if (crc32 !== packet.crc32) { + debug('parseAtpFrame: CRC32 did not match:', crc32.toString(16), '!=', packet.crc32.toString(16)); + return null; + } + return packet; + } + + static calcCrc32(buffer) { + // make zero-padded buffer with length that is multiple of 4 + const paddedBuffer = Buffer.alloc((buffer.length + 3) & 0xfffffffc); + Buffer.from(buffer).copy(paddedBuffer); + + let remainder = 0xffffffff; + for (let index = 0; index < paddedBuffer.length / 4; index++) { + let data = paddedBuffer.readUInt32LE(index * 4); + + data ^= remainder; + + for (let i = 0; i < 8; i++) { + remainder = data >>> 28; + data <<= 4; + data ^= CRC32_TABLE[remainder >>> 0]; // use unsigned remainder as index + } + + remainder = data; + } + return remainder >>> 0; // return unsigned remainder + } + /* eslint-enable no-bitwise */ + + buildAtpFrame(aapFrameArray) { + const atpCrc = this.constructor.calcCrc32(aapFrameArray); + const atpFrameArray = new Uint8Array(ATP_HEADER_LENGTH + aapFrameArray.length); + struct.pack(atpFrameArray, 0, `${ATP_HEADER_FORMAT + aapFrameArray.length}B`, + this.sequenceRx, + this.sequenceTx, + atpCrc, + aapFrameArray); + return atpFrameArray; + } + + static parseAckFrame(buffer) { + const packet = struct.unpack(buffer, 0, ACK_HEADER_FORMAT, + ['sequenceRx', 'sequenceTx', 'unknownData']); + return packet; + } + + buildAckFrame(unknownDataOptional) { + let unknownData = unknownDataOptional; + if (unknownData === undefined) { + unknownData = '\x00\x00'; + } + const ackFrameArray = new Uint8Array(ACK_HEADER_LENGTH); + struct.pack(ackFrameArray, 0, ACK_HEADER_FORMAT, + this.sequenceRx, + this.sequenceTx, + unknownData); + return ackFrameArray; + } + + sendAck(unknownData, cbOptional) { + let cb = cbOptional; + if (cb === undefined) { + cb = () => {}; + } + this.lastAckRx = this.sequenceRx; + const ackFrameArray = this.buildAckFrame(unknownData); + this.hidDevice.send(this.constructor.buildHidPacket(COMMAND.ACK_FROM_HOST, ackFrameArray), cb); + } + + sendCommand(command, responseType, data, cb) { + this.hidDevice.send(this.constructor.buildHidPacket(command, data), () => { + this.readResponse(responseType, READ_TIMEOUT, cb); + }); + } + + parseTextResponse(responseData) { + const match = TEXT_RESPONSE_REGEX.exec(responseData); + if (!match) { + return new Error('Invalid text responseData format.'); + } + const data = match[1]; + const checksum = parseInt(match[2], 16); + const result = match[3]; + + if (result === 'OK') { + if (this.constructor.validateTextChecksum(data, checksum)) { + return data.replace(/\r\n$/, ''); + } + return new Error('Invalid checksum.'); + } + return new Error(`Device responseData was not "OK", but "${result}"`); + } + + requestTextResponse(command, successCallback, errorCallback) { + debug(`requestTextResponse: Sending command: 0x${COMMAND.TEXT_REQUEST.toString(16)}`, + ', data: ', command); + this.sendCommand(COMMAND.TEXT_REQUEST, COMMAND.TEXT_RESPONSE, command, (err, responseData) => { + if (err) { + debug('requestTextResponse: error: ', err); + return errorCallback(err, responseData); + } + + const data = this.parseTextResponse(responseData); + if (data instanceof Error) { + return errorCallback(data, responseData); + } + debug(`requestTextResponse: data: "${data}"`); + return successCallback(data); + }); + } + + requestBinaryResponse(opCode, aapData, cb) { + const atpFrameArray = this.buildAtpFrame(this.constructor.buildAapFrame(opCode, aapData)); + this.sequenceTx = (this.sequenceTx + 1) % 0x100; + debug(`requestBinaryResponse: Sending command: 0x${COMMAND.BINARY_REQUEST.toString(16)}`, + ', data: ', Buffer.from(atpFrameArray).toString('hex')); + this.hidDevice.send( + this.constructor.buildHidPacket(COMMAND.BINARY_REQUEST, atpFrameArray), () => { + const flushData = this.buildAtpFrame(this.constructor.buildAapFrame(OP_CODE.FLUSH_BUFFERS)); + this.sequenceTx = (this.sequenceTx + 1) % 0x100; + this.sendCommand(COMMAND.BINARY_REQUEST, COMMAND.BINARY_RESPONSE, flushData, + (err, aapPackets) => { + if (err) { + debug('requestBinaryResponse: error: ', err); + return cb(err, aapPackets); + } + + debug(`requestBinaryResponse: num aapPackets: ${aapPackets.length}`); + return cb(null, aapPackets); + }); + }); + } + + getDBRecords(command, successCallback, errorCallback) { + debug(`getDBRecords: ${command}`); + this.requestTextResponse(command, (data) => { + const match = DB_RECORDS_REGEX.exec(data); + if (!match) { + return errorCallback(new Error('Invalid response format for database records.'), data); + } + let dbRecords = match[1]; + const dbRecordCount = parseInt(match[2], 10); + const dbRecordChecksum = parseInt(match[3], 16); + + if (!this.constructor.validateTextChecksum(dbRecords, dbRecordChecksum)) { + return errorCallback(new Error('Invalid database record checksum.'), data); + } + + dbRecords = dbRecords.split('\r\n'); + + if (dbRecordCount !== dbRecords.length) { + return errorCallback( + new Error(`Invalid database record count: ${dbRecordCount} != ${dbRecords.length}`), data); + } + + return successCallback(null, dbRecords); + }, errorCallback); + } + + // this is currently unused as it uses part of the text protocol not meant for production + getReaderResultData(cb) { + this.getDBRecords('$arresult?', (data) => { + cb(null, { readerResultData: data }); + }, cb); + } + + // this is currently unused as it uses part of the text protocol not meant for production + getHistoricalScanData(cb) { + this.getDBRecords('$history?', (data) => { + cb(null, { historicalScanData: data }); + }, cb); + } + + getDBRecordNumber(cb) { + const command = '$dbrnum?'; + this.requestTextResponse(command, (data) => { + const match = DB_RECORD_NUMBER_REGEX.exec(data); + if (!match) { + return cb(new Error('Invalid response format for database record number.'), data); + } + const dbRecordNumber = parseInt(match[1], 10); + + return cb(null, { dbRecordNumber }); + }, cb); + } + + setCompression(enableCompression, cb) { + this.requestBinaryResponse(OP_CODE.SET_COMPRESSION, [enableCompression], cb); + } + + getDateTime(cb) { + this.requestBinaryResponse(OP_CODE.GET_DATE_TIME, [], cb); + } + + getDbSchema(cb) { + this.requestBinaryResponse(OP_CODE.GET_DB_SCHEMA, [], cb); + } + + getCfgSchema(cb) { + this.requestBinaryResponse(OP_CODE.GET_CFG_SCHEMA, [], cb); + } + + getCfgData(tableNumber, cb) { + this.requestBinaryResponse(OP_CODE.GET_CFG_DATA, [tableNumber], cb); + } + + getDatabase(tableNumber, cb) { + this.requestBinaryResponse(OP_CODE.GET_DATABASE, [tableNumber], cb); + } + + getFirmwareVersion(cb) { + this.requestTextResponse('$swver?', (data) => { + cb(null, { firmwareVersion: data }); + }, cb); + } + + getSerialNumber(cb) { + this.requestTextResponse('$sn?', (data) => { + cb(null, { serialNumber: data }); + }, cb); + } + + initCommunication(cb) { + const initFunctions = [ + (callback) => { this.sendCommand(COMMAND.INIT_REQUEST_1, null, '', callback); }, + (callback) => { this.sendAck(INIT_ACK_MAGIC_DATA, callback); }, + (callback) => { this.sendCommand(COMMAND.INIT_REQUEST_2, null, '', callback); }, + (callback) => { this.sendCommand(COMMAND.INIT_REQUEST_3, null, '', callback); }, + (callback) => { this.sendCommand(COMMAND.INIT_REQUEST_4, null, '', callback); }, + ]; + async.series(initFunctions, (err, result) => { + cb(err, result); + }); + } + + static probe(cb) { + debug(`probe: not using probe for ${DEVICE_MODEL_NAME}`); + cb(); + } +} diff --git a/lib/drivers/abbott/tools/README b/lib/drivers/abbott/tools/README new file mode 100644 index 0000000000..2a8a50cce5 --- /dev/null +++ b/lib/drivers/abbott/tools/README @@ -0,0 +1,4 @@ +To analyze the USB protocol of the Abbott FreeStyle Libre, install this Lua plugin for Wireshark and sniff the traffic on the appropriate usbmon interface. + +To install this plugin, copy it or make a symlink to it in: +~/.wireshark/plugins diff --git a/lib/drivers/abbott/tools/fslibre_usb_dissector.lua b/lib/drivers/abbott/tools/fslibre_usb_dissector.lua new file mode 100644 index 0000000000..cf36cf8727 --- /dev/null +++ b/lib/drivers/abbott/tools/fslibre_usb_dissector.lua @@ -0,0 +1,278 @@ +-- +-- Wireshark plugin to dissect the USB HID packets of the Abbott FreeStyle Libre +-- + +-- needed for debugging this script +--_G.debug = require("debug") +--require("mobdebug").start() +-- + +local fslibre_usb = Proto("fslibre_usb", "Abbott FreeStyle Libre USB Protocol") + +local fslibre_dump = ProtoField.new("FSLibre Dump", "fslibre_usb.dump", ftypes.BYTES) + +local command = ProtoField.new("Command", "fslibre_usb.command", ftypes.UINT8, nil, base.HEX) +local data_length = ProtoField.new("Data Length", "fslibre_usb.data_length", ftypes.UINT8) + +local text = ProtoField.new("Text", "fslibre_usb.text", ftypes.STRING) + +local atp_frame = ProtoField.new("ATP Frame", "fslibre_usb.atp", ftypes.NONE) +local atp_data = ProtoField.new("ATP Data", "fslibre_usb.atp.data", ftypes.BYTES) +local atp_sequence_rx = ProtoField.new("ATP Seq Rx", "fslibre_usb.atp.sequence_rx", ftypes.UINT8) +local atp_sequence_tx = ProtoField.new("ATP Seq Tx", "fslibre_usb.atp.sequence_tx", ftypes.UINT8) +local atp_crc32 = ProtoField.new("ATP CRC32", "fslibre_usb.atp.crc32", ftypes.UINT32, nil, base.HEX) +local atp_crc32bin = ProtoField.new("ATP CRC32 BIN", "fslibre_usb.atp.crc32bin", ftypes.STRING) +local atp_unknown = ProtoField.new("ATP UNKNOWN", "fslibre_usb.atp.unknown", ftypes.UINT16, nil, base.HEX) + +local aap_frame = ProtoField.new("AAP Frame", "fslibre_usb.aap", ftypes.STRING) +local aap_data_length = ProtoField.new("AAP Data Length", "fslibre_usb.aap.data_length", ftypes.UINT32) +local aap_op_code = ProtoField.new("AAP OP Code", "fslibre_usb.aap.op_code", ftypes.UINT8, nil, base.HEX) +local aap_data = ProtoField.new("AAP Data", "fslibre_usb.aap.data", ftypes.BYTES) +local aap_dump = ProtoField.new("AAP Dump", "fslibre_usb.aap.dump", ftypes.BYTES) + + +fslibre_usb.fields = { + fslibre_dump, + command, + text, + atp_frame, + data_length, + atp_data, + atp_sequence_rx, + atp_sequence_tx, + atp_crc32, + atp_crc32bin, + atp_unknown, + aap_frame, + aap_data_length, + aap_op_code, + aap_data, + aap_dump +} + +local HID_REPORT_LENGTH = 64 +local AAP_OPCODE_LENGTH = 1 + +local pkt_state = {} +local partial_aap_buf = {} + +local function to_bits(num, bits) + -- returns a string of bits, most significant first + bits = bits or math.max(1, select(2, math.frexp(num))) + local t = {} -- table containing the bits + for b = bits, 1, -1 do + t[b] = math.fmod(num, 2) + num = math.floor((num - t[b]) / 2) + end + return table.concat(t) -- convert table to string +end + + +local function dissect_aap(atp_payload_buf, atp_tree) + local aap_data_length_num_bytes = 0 + local aap_data_length_value = 0 + -- the first 0 to 3 bytes describe the aap frame length in their lower 7 bits in little endian + for i = 0, 2 do + -- if we are still parsing the length when we reach the buffer's end, we need at least 1 more byte + if i >= atp_payload_buf:len() then + -- show data as partial aap frame + atp_tree:add(aap_frame, atp_payload_buf:range(0), "[partial]: length not known yet") + return -1 + end + + local byte_value = atp_payload_buf:range(i, 1):uint() + -- if highest bit is not set, this is already the command byte + if not bit32.btest(byte_value, 0x80) then + break + end + -- highest bit was set, extract lower 7 bits as length value + local byte_length_value = bit32.band(byte_value, 0x7f) + -- shift these 7 bits to the left depending on the index i + byte_length_value = bit32.lshift(byte_length_value, 7 * i) + -- combine these bits with the previous length value + aap_data_length_value = bit32.bor(byte_length_value, aap_data_length_value) + aap_data_length_num_bytes = aap_data_length_num_bytes + 1 + end + + local aap_data_offset = aap_data_length_num_bytes + AAP_OPCODE_LENGTH + local aap_data_length_in_this_frame = math.min(atp_payload_buf:len() - aap_data_offset, aap_data_length_value) + + -- if aap packet is longer than current buffer, return number of missing bytes as negative number + if aap_data_length_in_this_frame < aap_data_length_value then + -- show data as partial aap frame, with info about missing bytes and possibly opcode + local op_code_info = "" + if atp_payload_buf:len() > aap_data_length_num_bytes then + local aap_op_code_value = atp_payload_buf:range(aap_data_length_num_bytes, 1):uint() + op_code_info = string.format("[OP Code 0x%x]", aap_op_code_value) + end + local description = string.format("[partial]%s %d of %d bytes", + op_code_info, + aap_data_offset + aap_data_length_in_this_frame, + aap_data_offset + aap_data_length_value) + atp_tree:add(aap_frame, atp_payload_buf:range(0), description) + + return - (aap_data_length_value - aap_data_length_in_this_frame) + end + + -- check that opcode does not have the highest bit set, otherwise cancel parsing due to faulty data + local aap_op_code_value = atp_payload_buf:range(aap_data_length_num_bytes, 1):uint() + if bit32.btest(aap_op_code_value, 0x80) then + return 0 + end + + -- add new aap sub-tree + local aap_tree = atp_tree:add(aap_frame, + atp_payload_buf:range(0, aap_data_length_num_bytes + AAP_OPCODE_LENGTH + aap_data_length_in_this_frame), "") + + -- add hidden field that can be used in custom column to show aap packet data + aap_tree:add(aap_dump, atp_payload_buf:range(0, aap_data_offset + aap_data_length_in_this_frame)):set_hidden() + + -- mark the aap data length bytes at the aap frame start + aap_tree:add(aap_data_length, atp_payload_buf:range(0, aap_data_length_num_bytes), aap_data_length_value) + + -- aap op code is the first byte after the aap length + aap_tree:add(aap_op_code, atp_payload_buf:range(aap_data_length_num_bytes, AAP_OPCODE_LENGTH)) + + if aap_data_length_in_this_frame > 0 then + -- aap data bytes start after the op code + aap_tree:add(aap_data, atp_payload_buf:range(aap_data_offset, aap_data_length_in_this_frame)) + end + + return aap_data_offset + aap_data_length_in_this_frame +end + + +local function reassemble_aap(atp_data_buf, pktinfo, atp_tree) + + local aap_buf + local state = pkt_state[pktinfo.number] + + if state ~= nil then + -- we've already processed this packet + aap_buf = ByteArray.tvb(state.buffer, "AAP Buffer") + state.processed = True + else + -- first time processing this packet + state = {} + + if partial_aap_buf[tostring(pktinfo.src)] ~= nil then + partial_aap_buf[tostring(pktinfo.src)]:append(atp_data_buf(0):bytes()) + aap_buf = ByteArray.tvb(partial_aap_buf[tostring(pktinfo.src)], "AAP Buffer") + else + aap_buf = atp_data_buf + end + end + + if state.processed == nil then + state.buffer = aap_buf(0):bytes() + end + + while aap_buf:len() > 0 do + local aap_packet_length = dissect_aap(aap_buf, atp_tree) + + if aap_packet_length == 0 then + + -- error disecting aap + if state.processed == nil then + pkt_state[pktinfo.number] = state + partial_aap_buf[tostring(pktinfo.src)] = nil + end + return + + elseif aap_packet_length < 0 then + + -- we don't have all the data we need yet + if state.processed == nil then + -- save remaining data + partial_aap_buf[tostring(pktinfo.src)] = aap_buf(0):bytes() + pkt_state[pktinfo.number] = state + end + return + + else + -- consumed one aap packet from aap_buf, remove it and continue parsing + aap_buf = aap_buf:range(aap_packet_length):tvb() + end + end + + if state.processed == nil then + -- emptied aap_buf without any remaining partial aap data + pkt_state[pktinfo.number] = state + partial_aap_buf[tostring(pktinfo.src)] = nil + end +end + + + +function fslibre_usb.dissector(tvbuf, pktinfo, root) + + pktinfo.cols.protocol:set("fslibre_usb") + local pktlen = tvbuf:len() + + if pktlen < HID_REPORT_LENGTH then + -- tell Wireshark that this packet was not for us + return 0 + end + + -- cut off leading data before the actual HID report, which is always 64 bytes + local hid_report_buf = tvbuf:range(pktlen - HID_REPORT_LENGTH, HID_REPORT_LENGTH):tvb() + + pktinfo.cols.protocol = fslibre_usb.name + + local command_value = hid_report_buf:range(0, 1):uint() + local data_length_value = hid_report_buf:range(1, 1):uint() + + local data_offset = 2 + local tree = root:add(fslibre_usb, hid_report_buf:range(0, data_offset + data_length_value)) + + -- add hidden field that can be used in custom column to show whole packet data + tree:add(fslibre_dump, hid_report_buf:range(0, data_offset + data_length_value)):set_hidden() + + -- actually the command is only in the lower 6 bits of the first byte, + -- but the 2 high bits are currently always 0 anyhow + tree:add(command, hid_report_buf:range(0, 1)) + + tree:add(data_length, hid_report_buf:range(1, 1)) + + if data_length_value > 0 then + if command_value == 0x60 or command_value == 0x21 or command_value == 0x06 or command_value == 0x35 then + tree:add(text, hid_report_buf:range(data_offset, data_length_value)) + + else + local atp_tree = tree:add(atp_frame, hid_report_buf:range(data_offset, data_length_value)) + + local atp_buf = hid_report_buf:range(data_offset, data_length_value):tvb() + atp_tree:add(atp_data, atp_buf:range()):set_hidden() + + if data_length_value >= 2 then + atp_tree:add(atp_sequence_rx, atp_buf:range(0, 1)) + atp_tree:add(atp_sequence_tx, atp_buf:range(1, 1)) + + if data_length_value >= 6 then + atp_tree:add(atp_crc32, atp_buf:range(2, 4)) + + local crc32_value = atp_buf:range(2, 4):uint() + atp_tree:add(atp_crc32bin, atp_buf:range(2, 4), to_bits(crc32_value, 32)):set_hidden() + + if data_length_value > 6 then + reassemble_aap(atp_buf:range(6):tvb(), pktinfo, atp_tree) + end + + elseif data_length_value == 4 then + atp_tree:add(atp_unknown, atp_buf:range(2, 2)) + end + end + end + end +end + + +function fslibre_usb.init() + -- needed to track the state of aap reassembly + pkt_state = {} + partial_aap_buf = {} + + -- register this disector for USB vendor:product 1a61:3650 + DissectorTable.get("usb.product"):add(0x1a613650, fslibre_usb) +end + diff --git a/lib/drivers/abbott/tools/lua_debug.sh b/lib/drivers/abbott/tools/lua_debug.sh new file mode 100755 index 0000000000..e7bec69a04 --- /dev/null +++ b/lib/drivers/abbott/tools/lua_debug.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# This script helps with debugging a Lua Wireshark plugin on Linux (and possibly OSX). +# Before using it, install Zero Brane Studio IDE and start its Debugger Server. +# Open the plugin script to be debugged in the IDE from its install path (e.g. the Wireshark plugin dir). +# Make sure the ZBS variable is set to the install path of the IDE: +export ZBS=/opt/zbstudio + +# In your Lua plugin add these two lines at the very top: +# _G.debug = require("debug") +# require("mobdebug").start() + +# Run this script and it will stop at the above lines in the debugger. + + + +if [[ "$(uname -m)" == "x86_64" ]]; then ARCH="x64"; else ARCH="x86"; fi + +export LUA_PATH="./?.lua;$ZBS/lualibs/?/?.lua;$ZBS/lualibs/?.lua" +export LUA_CPATH="$ZBS/bin/?.so;$ZBS/bin/linux/$ARCH/clibs52/?.so" + +if [ "$#" -ne 1 ]; then + echo "usage: $0 PCAP_FILE" + exit +fi + +# If the plugin is loaded automatically by Wireshark from one of its plugin directories: +tshark -r $1 +#wireshark -r $1 + +# If the plugin is to be manually loaded: +#tshark -X lua_script:fslibre_usb_dissector.lua -r $1 +#wireshark -X lua_script:fslibre_usb_dissector.lua -r $1 diff --git a/lib/struct.js b/lib/struct.js index 7042c07695..1ac5ae07e7 100644 --- a/lib/struct.js +++ b/lib/struct.js @@ -23,6 +23,7 @@ // H -- a 2-byte signed integer in big-endian format // z -- a zero-terminated string of maximum length controlled by the size parameter. // Z -- a string of bytes with the length controlled by the size parameter. +// B -- an array of bytes with the length controlled by the size parameter. // f -- a 4-byte float in little-endian format // F -- a 4-byte float in big-endian format // . -- the appropriate number of bytes is ignored (used for padding) @@ -61,6 +62,9 @@ var _ = require('lodash'); module.exports = function() { var extractString = function(bytes, start, len) { + if (start === undefined) { + start = 0; + } if (!len) { len = bytes.length; } @@ -204,6 +208,13 @@ module.exports = function() { var storeByte = function(v, b, st) { b[st] = v & 0xFF; }; + var storeBytes = function(v, b, st) { + var i=0; + while (i { + if (v !== null && typeof v === 'object' && 'type' in v && + v.type === 'Buffer' && 'data' in v && Array.isArray(v.data)) { + // re-create Buffer objects for data fields of aapPackets + return new Buffer(v.data); + } + return v; + }); +} + +describe('freeStyleLibreData.js', () => { + const cfg = { + builder: builder(), + timezone: 'Europe/Berlin' + }; + + describe('non-static', () => { + let fsLibreData; + + beforeEach(function(){ + fsLibreData = new FreeStyleLibreData(cfg); + }); + + it('should correctly restore 32bit records numbers', () => { + const data = { + aapPackets: [ + deserialize(factoryConfigJson), + deserialize(historicalRecordsJson)[0] + ] + }; + + // potentially problematic 32bit record numbers + const recordNumbers = [0, 1, 0xfffe, 0xffff, 0x10000, 0x10001, 0xffffffff]; + + recordNumbers.forEach(recordNumber => { + // use lower 16bits to replace 16bit record number in historical record + data.aapPackets[1].data.writeUInt16LE(recordNumber & 0xffff, RECORD_HEADER_OFFSET); + + // update CRC16 to be valid again + const crc16 = FreeStyleLibreData.calcCrc16( + data.aapPackets[1].data.slice(RECORD_HEADER_OFFSET, HISTORICAL_RECORD_CRC_OFFSET)); + data.aapPackets[1].data.writeUInt16LE(crc16, HISTORICAL_RECORD_CRC_OFFSET); + + // use recordNumber + 1 as current DB record number (which will be used for next record written) + const postRecords = fsLibreData.processAapPackets(data.aapPackets, recordNumber + 1); + + // check if valid record was returned and contains correct 32bit record number + expect(postRecords.length).equals(1); + expect(postRecords[0].index).equals(recordNumber); + }); + }); + + it('should reject altered records (by CRC16)', () => { + const data = { + aapPackets: [ + deserialize(factoryConfigJson), + deserialize(historicalRecordsJson)[0] + ] + }; + + // read record number from packet + let recordNumber = data.aapPackets[1].data.readUInt16LE(RECORD_HEADER_OFFSET); + + // flip one bit in the record number + recordNumber ^= 0x0100; + + // write record number back into packet + data.aapPackets[1].data.writeUInt16LE(recordNumber, RECORD_HEADER_OFFSET); + + // use recordNumber + 1 as current DB record number (which will be used for next record written) + const postRecords = fsLibreData.processAapPackets(data.aapPackets, recordNumber + 1); + + // check that no valid record was returned + expect(postRecords.length).equals(0); + }); + + }); + + describe('static', () => { + + it('should validate DB record CRC16', () => { + deserialize(historicalRecordsJson).forEach(packet => { + const crc16 = packet.data.readUInt16LE(HISTORICAL_RECORD_CRC_OFFSET); + const data = packet.data.slice(RECORD_HEADER_OFFSET, HISTORICAL_RECORD_CRC_OFFSET); + expect(FreeStyleLibreData.calcCrc16(data)).equals(crc16); + }); + }); + + it('should only annotate out-of-range BG values', () => { + const inputData = [ + [GLUCOSE_LO, true], + [GLUCOSE_HI, true], + [GLUCOSE_LO - 1, true], + [GLUCOSE_HI + 1, true], + [GLUCOSE_LO + 1, false], + [GLUCOSE_HI - 1, false], + ]; + inputData.forEach(([value, expectedResult]) => { + const cbg = cfg.builder.makeCBG() + .with_value(value) + .with_units('mg/dL'); + + FreeStyleLibreData.addOutOfRangeAnnotation(cbg, GLUCOSE_LO, GLUCOSE_HI, 1, 'bg'); + + const isAnnotated = annotate.isAnnotated(cbg, 'bg/out-of-range'); + + expect(isAnnotated).equals(expectedResult); + }); + }); + + }); +}); diff --git a/test/lib/abbot/testFreeStyleLibreProtocol.js b/test/lib/abbot/testFreeStyleLibreProtocol.js new file mode 100644 index 0000000000..8d05a72f74 --- /dev/null +++ b/test/lib/abbot/testFreeStyleLibreProtocol.js @@ -0,0 +1,133 @@ +/* + * == BSD2 LICENSE == + * Copyright (c) 2017, 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 == + */ + +/* global beforeEach, describe, it */ + +import {expect} from 'salinity'; + +import FreeStyleLibreProtocol from '../../../lib/drivers/abbott/freeStyleLibreProtocol'; + +describe('freeStyleLibreProtocol.js', () => { + const cfg = {}; + + describe('non-static', () => { + let protocol; + + beforeEach(function(){ + protocol = new FreeStyleLibreProtocol(cfg); + }); + + describe('parse text responses', () => { + + it('should parse and return valid text responses', () => { + const inputData = [ + ['DB Record Number = 226988\r\nCKSM:00000765\r\nCMD OK\r\n', 'DB Record Number = 226988'], + ['2.1.2\r\nCKSM:00000108\r\nCMD OK\r\n', '2.1.2'] + ]; + inputData.forEach(([data, expectedResult]) => { + const result = protocol.parseTextResponse(data); + expect(result).deep.equals(expectedResult); + } + ); + }); + + + it('should not accept invalid text responses', () => { + const inputData = [ + ['DB Record Number = 226988\r\nCKSM:00000765\r\nCMD Fail!\r\n', Error], + ['2.1.2\r\nCKSM:00000111\r\nCMD OK\r\n', Error], + ['2.1.2\r\nCKSM:108\r\nCMD OK\r\n', Error] + ]; + inputData.forEach(([data, expectedResult]) => { + const result = protocol.parseTextResponse(data); + expect(result).instanceof(expectedResult); + } + ); + }); + }); + + }); + + describe('static', () => { + + describe('validate binary protocol checksum', () => { + + it('should produce valid checksums', () => { + // data captured using Wireshark: mapping from AAP packet string to its corresponding ATP CRC32 + const ATP_CRC_LOOKUP = { + '\x34': 0x0032c637, + '\x54': 0xac9700a0, + '\x41': 0xf743b0bb, + '\x7d': 0x167d464f, + '\x81\x51\x01': 0x281fba26, + '\x81\x51\x02': 0x2a764faf, + '\x81\x51\x03': 0x2baee328, + '\x81\x51\x04': 0x2ea5a4bd, + '\x81\x51\x05': 0x2f7d083a, + '\x81\x51\x06': 0x2d14fdb3, + '\x81\x51\x07': 0x2ccc5134, + '\x81\x51\x08': 0x27027299, + '\x81\x51\x09': 0x26dade1e, + '\x81\x51\x0a': 0x24b32b97, + '\x81\x31\x00': 0x48224ccb, + '\x81\x31\x01': 0x49fae04c, + '\x81\x31\x06': 0x4cf1a7d9, + '\x81\x31\x07': 0x4d290b5e, + '\x81\x60\x01': 0xcaf4d6cf + }; + Object.keys(ATP_CRC_LOOKUP).forEach(key => { + const expectedChecksum = ATP_CRC_LOOKUP[key]; + const buffer = new Buffer(key, 'binary'); + const calculatedChecksum = FreeStyleLibreProtocol.calcCrc32(buffer); + expect(calculatedChecksum).equals(expectedChecksum); + } + ); + }); + }); + + describe('validate text protocol checksum', () => { + + it('should accept valid checksums', () => { + const inputData = [ + ['', 0], + ['\x01\x02\x03\x04\x05', 15] + ]; + inputData.forEach(([data, checksum]) => { + const result = FreeStyleLibreProtocol.validateTextChecksum(data, checksum); + expect(result).deep.equals(true); + } + ); + }); + + it('should decline invalid checksums', () => { + const inputData = [ + ['', 10], + ['\x01\x02\x03\x04\x05', 0], + ['', null], + ['', undefined], + ['', ''], + ]; + inputData.forEach(([data, checksum]) => { + const result = FreeStyleLibreProtocol.validateTextChecksum(data, checksum); + expect(result).deep.equals(false); + } + ); + }); + }); + + }); +}); diff --git a/test/lib/testStruct.js b/test/lib/testStruct.js index dc01866b54..603a368dd1 100644 --- a/test/lib/testStruct.js +++ b/test/lib/testStruct.js @@ -130,22 +130,7 @@ describe('struct.js', function(){ expect(theStruct).itself.to.respondTo('copyBytes'); }); }); -// The legal type characters are: -// b -- a 1-byte unsigned value -// y -- a 1-byte signed value -// s -- a 2-byte unsigned short in little-endian format (0x01 0x00 is returned as 1, not 256) -// S -- a 2-byte unsigned short in big-endian format (0x01 0x00 is returned as 256, not 1) -// i -- a 4-byte unsigned integer in little-endian format -// I -- a 4-byte unsigned integer in big-endian format -// n -- a 4-byte signed integer in little-endian format -// N -- a 4-byte signed integer in big-endian format -// h -- a 2-byte signed integer in little-endian format -// H -- a 2-byte signed integer in big-endian format -// z -- a zero-terminated string of maximum length controlled by the size parameter. -// Z -- a string of bytes with the length controlled by the size parameter. -// f -- a 4-byte float in little-endian format -// F -- a 4-byte float in big-endian format -// . -- the appropriate number of bytes is ignored (used for padding) + // The legal type characters are and their meaning are described at the top of the struct.js file. describe('structlen and format parsing', function(){ it('work properly', function(){ expect(theStruct.structlen('b6.Si')).to.equal(13); @@ -196,6 +181,15 @@ describe('struct.js', function(){ var s = String.fromCharCode.apply(null, buf); expect(s).to.equal('\u0055\u0055\u0055\u0055\u00AA\u00AA\u00AA\u00AA\u00FF\u00FF\u00FF\u00FF\u0000\u0000\u0000\u0000'); }); + it('works for B', function(){ + var buf = new Uint8Array(4); + var inputBuf = [1, 2, 3, 4]; + var len = theStruct.pack(buf, 0, '4B', inputBuf); + expect(len).to.equal(4); + var result = String.fromCharCode.apply(null, buf); + var expected = String.fromCharCode.apply(null, inputBuf); + expect(result).to.equal(expected); + }); it('works for z', function(){ var buf = new Uint8Array(8); var len = theStruct.pack(buf, 0, '8z', 'banana'); diff --git a/yarn.lock b/yarn.lock index 4c97d02c91..c98378b9d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -78,8 +78,8 @@ acorn@^4.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" acorn@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" + version "5.1.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" ajv-keywords@^1.0.0: version "1.5.1" @@ -96,7 +96,7 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.5: +ajv@^5.1.5, ajv@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" dependencies: @@ -135,6 +135,10 @@ ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +ansi-escapes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -238,9 +242,9 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.3.0.tgz#cb8a9984e2862711c83c80ade5b8f5ca0de2b467" +aria-query@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" dependencies: ast-types-flow "0.0.7" @@ -274,6 +278,13 @@ array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-index@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" @@ -295,13 +306,6 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -array.prototype.find@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -424,13 +428,19 @@ axe-core@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-2.2.0.tgz#00b410b3fc899207d4f2f8e3753cff150d34e4bb" +axobject-query@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + dependencies: + ast-types-flow "0.0.7" + babar@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/babar/-/babar-0.0.3.tgz#2f394d4a5918f7e1ae9e5408e9a96f3f935ee1e2" dependencies: colors "~0.6.2" -babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.11.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: @@ -764,19 +774,20 @@ babel-plugin-minify-type-constructors@^0.0.4: dependencies: babel-helper-is-void-0 "^0.0.1" +babel-plugin-module-resolver@2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-2.7.1.tgz#18be3c42ddf59f7a456c9e0512cd91394f6e4be1" + dependencies: + find-babel-config "^1.0.1" + glob "^7.1.1" + resolve "^1.2.0" + babel-plugin-react-transform@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz#515bbfa996893981142d90b1f9b1635de2995109" dependencies: lodash "^4.6.1" -babel-plugin-resolver@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-resolver/-/babel-plugin-resolver-1.1.0.tgz#e67c1c1d567fb905434cb587cbdb49fa6e6dd099" - dependencies: - babel-resolver "^1.1.0" - lodash "^4.6.0" - babel-plugin-rewire@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-rewire/-/babel-plugin-rewire-1.1.0.tgz#a6b966d9d8c06c03d95dcda2eec4e2521519549b" @@ -1456,10 +1467,6 @@ babel-register@^6.16.3, babel-register@^6.24.1, babel-register@^6.26.0, babel-re mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-resolver@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-resolver/-/babel-resolver-1.1.0.tgz#ad705d1a67345840839ec36ab33a0238f307fc41" - babel-runtime@6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078" @@ -1587,6 +1594,10 @@ binary@^0.3.0: buffers "~0.1.1" chainsaw "~0.1.0" +bindings@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" + bl@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" @@ -1687,14 +1698,15 @@ browserify-aes@0.4.0: inherits "^2.0.1" browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + version "1.0.8" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.8.tgz#c8fa3b1b7585bb7ba77c5560b60996ddec6d5309" dependencies: - buffer-xor "^1.0.2" + buffer-xor "^1.0.3" cipher-base "^1.0.0" create-hash "^1.1.0" - evp_bytestokey "^1.0.0" + evp_bytestokey "^1.0.3" inherits "^2.0.1" + safe-buffer "^5.0.1" browserify-cipher@^1.0.0: version "1.0.0" @@ -1737,12 +1749,12 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@1.7.5: - version "1.7.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.5.tgz#eca4713897b51e444283241facf3985de49a9e2b" +browserslist@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" dependencies: - caniuse-db "^1.0.30000624" - electron-to-chromium "^1.2.3" + caniuse-lite "^1.0.30000670" + electron-to-chromium "^1.3.11" browserslist@^1.3.6, browserslist@^1.4.0, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.7" @@ -1759,7 +1771,7 @@ buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" -buffer-xor@^1.0.2: +buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1852,13 +1864,17 @@ caniuse-api@^1.5.2: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-db@1.0.30000626: - version "1.0.30000626" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000626.tgz#44363dc86857efaf758fea9faef6a15ed93d8f33" +caniuse-db@1.0.30000671: + version "1.0.30000671" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000671.tgz#9f071bbc7b96994638ccbaf47829d58a1577a8ed" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000726" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000726.tgz#9bb742f8d026a62df873bc03c06843d2255b60d7" -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000624, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000718" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000718.tgz#86cdd97987302554934c61e106f4e470f16f993c" +caniuse-lite@^1.0.30000670: + version "1.0.30000726" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000726.tgz#966a753fa107a09d4131cf8b3d616723a06ccf7e" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1920,7 +1936,7 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.1.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" dependencies: @@ -2000,8 +2016,8 @@ chromium-pickle-js@^0.2.0: resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + version "1.1.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.1.tgz#47b44df118c48d2597b56d342e7e25791060171a" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -2025,8 +2041,8 @@ classnames@2.2.5, classnames@^2.2.4: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" clean-css@4.1.x: - version "4.1.7" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.7.tgz#b9aea4f85679889cf3eae8b40349ec4ebdfdd032" + version "4.1.8" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.8.tgz#061455b2494a750ac98f46d8d5ebb17c679ea9d1" dependencies: source-map "0.5.x" @@ -2034,7 +2050,7 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-cursor@^1.0.1, cli-cursor@^1.0.2: +cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: @@ -2231,7 +2247,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.6.0, concat-stream@^1.4.6, concat-stream@^1.5.2: +concat-stream@1.6.0, concat-stream@^1.4.6, concat-stream@^1.5.2, concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -2325,8 +2341,8 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" core-js@^2.4.0, core-js@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" + version "2.5.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2616,13 +2632,13 @@ dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" -debug@2, debug@2.6.8, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.4.5, debug@^2.5.1, debug@^2.6.1, debug@^2.6.6, debug@^2.6.8: +debug@2, debug@2.6.8, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.2, debug@^2.4.5, debug@^2.5.1, debug@^2.6.1, debug@^2.6.6, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" -debug@2.2.0: +debug@2.2.0, debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: @@ -2837,8 +2853,8 @@ diff@3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" diff@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" + version "3.3.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" diffie-hellman@^5.0.0: version "5.0.2" @@ -2856,7 +2872,7 @@ difflet@1.0.1: deep-is "0.1.x" traverse "0.6.x" -doctrine@1.5.0, doctrine@^1.2.2: +doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: @@ -3148,9 +3164,9 @@ electron-rebuild@1.5.7: spawn-rx "^2.0.7" yargs "^3.31.0" -electron-to-chromium@^1.2.3, electron-to-chromium@^1.2.7: - version "1.3.18" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz#3dcc99da3e6b665f6abbc71c28ad51a2cd731a9c" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.11: + version "1.3.21" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2" electron-updater@1.14.2: version "1.14.2" @@ -3273,11 +3289,11 @@ error-stack-parser@^1.3.6: stackframe "^0.3.1" es-abstract@^1.6.1, es-abstract@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" + version "1.8.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee" dependencies: es-to-primitive "^1.1.1" - function-bind "^1.1.0" + function-bind "^1.1.1" has "^1.0.1" is-callable "^1.1.3" is-regex "^1.0.4" @@ -3297,7 +3313,7 @@ es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: es6-iterator "2" es6-symbol "~3.1" -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: +es6-iterator@2: version "2.0.1" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" dependencies: @@ -3305,47 +3321,17 @@ es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: es5-ext "^0.10.14" es6-symbol "^3.1" -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - es6-promise@^4.0.5: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.0.2, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: +es6-symbol@^3.0.2, es6-symbol@^3.1, es6-symbol@~3.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: d "1" es5-ext "~0.10.14" -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3365,26 +3351,17 @@ escodegen@^1.6.1: optionalDependencies: source-map "~0.2.0" -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-config-airbnb-base@^11.1.0: +eslint-config-airbnb-base@^11.3.0: version "11.3.2" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" dependencies: eslint-restricted-globals "^0.1.1" -eslint-config-airbnb@14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-14.1.0.tgz#355d290040bbf8e00bf8b4b19f4b70cbe7c2317f" +eslint-config-airbnb@15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" dependencies: - eslint-config-airbnb-base "^11.1.0" + eslint-config-airbnb-base "^11.3.0" eslint-formatter-pretty@1.1.0: version "1.1.0" @@ -3396,13 +3373,12 @@ eslint-formatter-pretty@1.1.0: plur "^2.1.2" string-width "^2.0.0" -eslint-import-resolver-node@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" +eslint-import-resolver-node@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" dependencies: - debug "^2.2.0" - object-assign "^4.0.1" - resolve "^1.1.6" + debug "^2.6.8" + resolve "^1.2.0" eslint-import-resolver-webpack@0.8.1: version "0.8.1" @@ -3420,113 +3396,128 @@ eslint-import-resolver-webpack@0.8.1: resolve "^1.2.0" semver "^5.3.0" -eslint-module-utils@^2.0.0: +eslint-module-utils@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" dependencies: debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-compat@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-compat/-/eslint-plugin-compat-1.0.2.tgz#914a8fb93a96950140ff902ad2890930e901046c" +eslint-plugin-compat@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-compat/-/eslint-plugin-compat-1.0.4.tgz#76e52038119a5080e2612cc4141d687f4d140398" dependencies: babel-runtime "^6.23.0" - browserslist "1.7.5" - caniuse-db "1.0.30000626" + browserslist "2.1.4" + caniuse-db "1.0.30000671" requireindex "^1.1.0" -eslint-plugin-import@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" +eslint-plugin-import@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.7.0.tgz#21de33380b9efb55f5ef6d2e210ec0e07e7fa69f" dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" - debug "^2.2.0" + debug "^2.6.8" doctrine "1.5.0" - eslint-import-resolver-node "^0.2.0" - eslint-module-utils "^2.0.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.1.1" has "^1.0.1" lodash.cond "^4.3.0" minimatch "^3.0.3" - pkg-up "^1.0.0" + read-pkg-up "^2.0.0" -eslint-plugin-jsx-a11y@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz#779bb0fe7b08da564a422624911de10061e048ee" +eslint-plugin-jsx-a11y@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" dependencies: - aria-query "^0.3.0" + aria-query "^0.7.0" + array-includes "^3.0.3" ast-types-flow "0.0.7" + axobject-query "^0.1.0" damerau-levenshtein "^1.0.0" emoji-regex "^6.1.0" - jsx-ast-utils "^1.0.0" - object-assign "^4.0.1" + jsx-ast-utils "^1.4.0" -eslint-plugin-mocha@4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-4.9.0.tgz#917a8b499ab8d0c01d69c6e4f81d362ee099b6fd" +eslint-plugin-lodash@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-2.4.3.tgz#8d6f7efebdeaeed0f338cf28405efddca247fc64" dependencies: - ramda "^0.23.0" + 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" + dependencies: + ramda "^0.24.1" eslint-plugin-promise@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" -eslint-plugin-react@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" +eslint-plugin-react@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.3.0.tgz#ca9368da36f733fbdc05718ae4e91f778f38e344" dependencies: - array.prototype.find "^2.0.1" - doctrine "^1.2.2" + doctrine "^2.0.0" has "^1.0.1" - jsx-ast-utils "^1.3.4" - object.assign "^4.0.4" + jsx-ast-utils "^2.0.0" + prop-types "^15.5.10" 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@3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: - babel-code-frame "^6.16.0" - chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.5.0.tgz#bb75d3b8bde97fb5e13efcd539744677feb019c3" + dependencies: + ajv "^5.2.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^2.6.8" doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" + eslint-scope "^3.7.1" + espree "^3.5.0" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^9.17.0" + ignore "^3.3.3" imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" + inquirer "^3.0.6" is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify "^1.0.1" levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" + path-is-inside "^1.0.2" + pluralize "^4.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" strip-json-comments "~2.0.1" - table "^3.7.8" + table "^4.0.1" text-table "~0.2.0" - user-home "^2.0.0" -espree@^3.4.0: +espree@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" dependencies: @@ -3570,13 +3561,6 @@ etag@~1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" @@ -3591,9 +3575,9 @@ eventsource@0.1.6: dependencies: original ">=0.0.5" -evp_bytestokey@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz#f66bb88ecd57f71a766821e20283ea38c68bf80a" +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -3706,7 +3690,7 @@ extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" -external-editor@^2.0.1: +external-editor@^2.0.1, external-editor@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" dependencies: @@ -3803,13 +3787,6 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -3874,6 +3851,13 @@ finalhandler@~1.0.0, finalhandler@~1.0.4: statuses "~1.3.1" unpipe "~1.0.0" +find-babel-config@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -4113,7 +4097,7 @@ fsevents@^1.0.0: nan "^2.3.0" node-pre-gyp "^0.6.36" -fstream-ignore@^1.0.0, fstream-ignore@^1.0.5: +fstream-ignore@^1.0.0, fstream-ignore@^1.0.5, fstream-ignore@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: @@ -4144,7 +4128,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10, fstream@~1.0.8 mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0: +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4156,6 +4140,10 @@ function.prototype.name@^1.0.0: function-bind "^1.1.0" is-callable "^1.1.3" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" @@ -4324,7 +4312,7 @@ glob@^6.0.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -4369,7 +4357,7 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^9.14.0, globals@^9.18.0: +globals@^9.17.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -4726,7 +4714,7 @@ iferr@^0.1.5, iferr@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -ignore@^3.2.0: +ignore@^3.3.3: version "3.3.5" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" @@ -4738,6 +4726,10 @@ image-ssim@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/image-ssim/-/image-ssim-0.2.0.tgz#83b42c7a2e6e4b85505477fe6917f5dbc56420e5" +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -4792,22 +4784,23 @@ init-package-json@~1.9.3, init-package-json@~1.9.4: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" +inquirer@^3.0.6: + version "3.2.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.3.tgz#1c7b1731cf77b934ec47d22c9ac5aa8fe7fbe095" dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" + ansi-escapes "^2.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" cli-width "^2.0.0" - figures "^1.3.5" + external-editor "^2.0.4" + figures "^2.0.0" lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" through "^2.3.6" inquirer@~3.0.6: @@ -4947,7 +4940,7 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: +is-my-json-valid@^2.12.4: version "2.16.1" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" dependencies: @@ -5149,7 +5142,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.5.1, js-yaml@^3.8.3, js-yaml@^3.8.4: +js-yaml@^3.8.3, js-yaml@^3.8.4, js-yaml@^3.9.1: version "3.9.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" dependencies: @@ -5223,7 +5216,7 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: +json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: @@ -5270,10 +5263,16 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: +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: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + dependencies: + array-includes "^3.0.3" + kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -5340,6 +5339,12 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lie@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + dependencies: + immediate "~3.0.5" + lighthouse@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lighthouse/-/lighthouse-2.0.0.tgz#55962239ab858eadf46af03468ae1ca17703fde2" @@ -5739,7 +5744,7 @@ lodash@4.5.1: version "4.5.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.5.1.tgz#80e8a074ca5f3893a6b1c10b2a636492d710c316" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.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.0, lodash@^4.6.1, lodash@^4.8.0, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.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" @@ -5917,7 +5922,7 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.29.0 < 2": +"mime-db@>= 1.29.0 < 2", mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" @@ -5925,15 +5930,11 @@ mime-db@~1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" -mime-db@~1.29.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" - mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.7: - version "2.1.16" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: - mime-db "~1.29.0" + mime-db "~1.30.0" mime-types@~2.0.3: version "2.0.14" @@ -6094,10 +6095,6 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - 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" @@ -6110,9 +6107,9 @@ mz@^2.3.1: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.2.0, nan@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" +nan@^2.2.0, nan@^2.3.0, nan@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" native-promise-only@^0.8.1: version "0.8.1" @@ -6196,6 +6193,13 @@ node-gyp@~3.3.0: tar "^2.0.0" which "1" +node-hid@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.5.4.tgz#a7246dfc08d52774147fa264354d5da6eab40253" + dependencies: + nan "^2.4.0" + node-pre-gyp "0.6.31" + node-libs-browser@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" @@ -6252,7 +6256,21 @@ node-libs-browser@^1.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-pre-gyp@^0.6.36, node-pre-gyp@~0.6.32: +node-pre-gyp@0.6.31: + version "0.6.31" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.31.tgz#d8a00ddaa301a940615dbcc8caad4024d58f6017" + dependencies: + mkdirp "~0.5.1" + nopt "~3.0.6" + npmlog "^4.0.0" + rc "~1.1.6" + request "^2.75.0" + rimraf "~2.5.4" + semver "~5.3.0" + tar "~2.2.1" + tar-pack "~3.3.0" + +node-pre-gyp@^0.6.32, node-pre-gyp@^0.6.36, node-pre-gyp@~0.6.32: version "0.6.36" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" dependencies: @@ -6603,7 +6621,7 @@ npmi@1.0.1: are-we-there-yet "~1.1.2" gauge "~1.2.5" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -6687,7 +6705,7 @@ 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: +object.assign@^4.0.3, object.assign@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" dependencies: @@ -6937,7 +6955,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@~1.0.0, path-is-inside@~1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.0, path-is-inside@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -7024,12 +7042,6 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" -pkg-up@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" - dependencies: - find-up "^1.0.0" - plist@2.1.0, plist@^2.0.1, plist@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" @@ -7044,9 +7056,9 @@ plur@^2.1.2: dependencies: irregular-plurals "^1.0.0" -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +pluralize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" postcss-calc@^5.2.0: version "5.3.1" @@ -7287,12 +7299,12 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 supports-color "^3.2.3" postcss@^6.0.1: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.10.tgz#c311b89734483d87a91a56dc9e53f15f4e6e84e4" + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.11.tgz#f48db210b1d37a7f7ab6499b7a54982997ab6f72" dependencies: chalk "^2.1.0" source-map "^0.5.7" - supports-color "^4.2.1" + supports-color "^4.4.0" prelude-ls@~1.1.2: version "1.1.2" @@ -7343,9 +7355,9 @@ progress-stream@^1.1.0: speedometer "~0.1.2" through2 "~0.2.3" -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" promise@^7.1.1: version "7.3.1" @@ -7365,7 +7377,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.0.0, prop-types@^15.5.4, prop-types@^15.5.8: +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: @@ -7468,9 +7480,9 @@ querystringify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" -ramda@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.23.0.tgz#ccd13fff73497a93974e3e86327bfd87bd6e8e2b" +ramda@^0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" randomatic@^1.1.3: version "1.1.7" @@ -7498,6 +7510,15 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: minimist "^1.2.0" strip-json-comments "~2.0.1" +rc@~1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-addons-test-utils@15.5.1: version "15.5.1" resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.5.1.tgz#e0d258cda2a122ad0dff69f838260d0c3958f5f7" @@ -7733,7 +7754,7 @@ readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@~2.1.5: +readable-stream@~2.1.4, readable-stream@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" dependencies: @@ -7763,14 +7784,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - realize-package-specifier@~3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz#d0def882952b8de3f67eba5e91199661271f41f4" @@ -7876,11 +7889,10 @@ regenerator-transform@^0.10.0: private "^0.1.6" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" regexpu-core@^1.0.0: version "1.0.0" @@ -7957,7 +7969,7 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" -request@2, request@^2.45.0, request@^2.47.0, request@^2.65.0, request@^2.72.0, request@^2.74.0, request@^2.79.0, request@^2.81.0, request@~2.81.0: +request@2, request@^2.45.0, request@^2.47.0, request@^2.65.0, request@^2.72.0, request@^2.74.0, request@^2.75.0, request@^2.79.0, request@^2.81.0, request@~2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -8044,7 +8056,7 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.2: +require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: @@ -8130,7 +8142,7 @@ rimraf@2.2.8: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" -rimraf@~2.5.2, rimraf@~2.5.4: +rimraf@~2.5.1, rimraf@~2.5.2, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -8147,21 +8159,21 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" - run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: is-promise "^2.1.0" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" rx@2.3.24: version "2.3.24" @@ -8279,6 +8291,18 @@ send@0.15.4: range-parser "~1.2.0" statuses "~1.3.1" +serialport@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/serialport/-/serialport-4.0.7.tgz#421c618a8a612bd40cfa461b4a46154daf2229a5" + dependencies: + bindings "1.2.1" + commander "^2.9.0" + debug "^2.3.2" + lie "^3.1.0" + nan "^2.4.0" + node-pre-gyp "^0.6.32" + object.assign "^4.0.3" + serve-index@^1.7.2: version "1.9.0" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.0.tgz#d2b280fc560d616ee81b48bf0fa82abed2485ce7" @@ -8364,7 +8388,7 @@ shelljs@0.7.0: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@0.7.8, shelljs@^0.7.5: +shelljs@0.7.8: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" dependencies: @@ -8485,8 +8509,8 @@ source-map-support@0.4.14: source-map "^0.5.6" source-map-support@^0.4.14, source-map-support@^0.4.15, source-map-support@^0.4.2: - version "0.4.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8" + version "0.4.17" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.17.tgz#6f2150553e6375375d0ccb3180502b78c18ba430" dependencies: source-map "^0.5.6" @@ -8653,7 +8677,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: +string-width@^2.0.0, string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -8787,9 +8811,9 @@ supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.2.3, supports-co dependencies: has-flag "^1.0.0" -supports-color@^4.0.0, supports-color@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" +supports-color@^4.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" dependencies: has-flag "^2.0.0" @@ -8817,9 +8841,9 @@ symbol@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/symbol/-/symbol-0.2.3.tgz#3b9873b8a901e47c6efe21526a3ac372ef28bbc7" -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" +table@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" dependencies: ajv "^4.7.0" ajv-keywords "^1.0.0" @@ -8849,6 +8873,19 @@ tar-pack@^3.4.0: tar "^2.2.1" uid-number "^0.0.6" +tar-pack@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" + dependencies: + debug "~2.2.0" + fstream "~1.0.10" + fstream-ignore "~1.0.5" + once "~1.3.3" + readable-stream "~2.1.4" + rimraf "~2.5.1" + tar "~2.2.1" + uid-number "~0.0.6" + tar-stream@^1.5.0, tar-stream@^1.5.2: version "1.5.4" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.4.tgz#36549cf04ed1aee9b2a30c0143252238daf94016" @@ -9115,7 +9152,7 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uid-number@0.0.6, uid-number@^0.0.6: +uid-number@0.0.6, uid-number@^0.0.6, uid-number@~0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -9237,7 +9274,7 @@ url@^0.11.0, url@~0.11.0: punycode "1.3.2" querystring "0.2.0" -user-home@2.0.0, user-home@^2.0.0: +user-home@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" dependencies: From e1e8a0f82564666407df4d150fe4c6e0fed88f55 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 11 Sep 2017 11:21:03 +0100 Subject: [PATCH 43/66] add 'beta unsupported' to device description --- app/reducers/devices.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/reducers/devices.js b/app/reducers/devices.js index 03e3d746a0..2507ab2508 100644 --- a/app/reducers/devices.js +++ b/app/reducers/devices.js @@ -69,7 +69,7 @@ const devices = { abbottfreestylelibre: { instructions: 'Plug in meter with micro-USB', key: 'abbottfreestylelibre', - name: 'Abbott FreeStyle Libre', + name: 'Abbott FreeStyle Libre (Beta Unsupported)', showDriverLink: {linux: false, mac: false, win: false}, source: {type: 'device', driverId: 'AbbottFreeStyleLibre'}, enabled: {linux: true, mac: true, win: true} From 86571c38df3a69fc6739ed1638f8a557287b7dc5 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Mon, 11 Sep 2017 14:51:47 +0100 Subject: [PATCH 44/66] change 'beta' and 'unsupported' text locations --- app/reducers/devices.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/reducers/devices.js b/app/reducers/devices.js index 2507ab2508..890c9cd0b5 100644 --- a/app/reducers/devices.js +++ b/app/reducers/devices.js @@ -67,9 +67,9 @@ const devices = { enabled: {mac: false, win: true} }, abbottfreestylelibre: { - instructions: 'Plug in meter with micro-USB', + instructions: '(Unsupported) Plug in meter with micro-USB cable', key: 'abbottfreestylelibre', - name: 'Abbott FreeStyle Libre (Beta Unsupported)', + name: 'Abbott FreeStyle Libre (Beta)', showDriverLink: {linux: false, mac: false, win: false}, source: {type: 'device', driverId: 'AbbottFreeStyleLibre'}, enabled: {linux: true, mac: true, win: true} From 036c1fcfe9331a0a6cc4d318d4f9bfd69af11ea7 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 13 Sep 2017 15:07:19 +0100 Subject: [PATCH 45/66] upload Libre through platform instead of jellyfish --- lib/drivers/abbott/abbottFreeStyleLibre.js | 2 +- lib/drivers/abbott/freeStyleLibreData.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js index 0d2ecd1f42..ac450cb9e5 100644 --- a/lib/drivers/abbott/abbottFreeStyleLibre.js +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -175,7 +175,7 @@ export default function (config) { } data.cleanup = true; return cb(null, data); - }); + },'dataservices'); }, disconnect(progress, data, cb) { diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js index e80ae4c4bd..b080b5b5fb 100644 --- a/lib/drivers/abbott/freeStyleLibreData.js +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -289,6 +289,7 @@ export default class FreeStyleLibreData { this.constructor.addOutOfRangeAnnotation(cbg, GLUCOSE_LO, GLUCOSE_HI, 1, 'bg'); this.cfg.tzoUtil.fillInUTCInfo(cbg, record.jsDate); + delete cbg.index; this.postRecords.push(cbg.done()); }); } @@ -319,6 +320,7 @@ export default class FreeStyleLibreData { recordBuilder = recordBuilder.with_deviceTime(sundial.formatDeviceTime(record.jsDate)) .set('index', record.headerFields.recordNumber); this.cfg.tzoUtil.fillInUTCInfo(recordBuilder, record.jsDate); + delete recordBuilder.index; this.postRecords.push(recordBuilder.done()); } }); From 77771f79f2f3dbb0fc1fbd76040b84ca66423d75 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 13 Sep 2017 15:48:19 +0100 Subject: [PATCH 46/66] only delete index just before uploading so that we don't break tests --- lib/drivers/abbott/abbottFreeStyleLibre.js | 5 ++++- lib/drivers/abbott/freeStyleLibreData.js | 2 -- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js index ac450cb9e5..4548ade15b 100644 --- a/lib/drivers/abbott/abbottFreeStyleLibre.js +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -140,7 +140,10 @@ export default function (config) { cfg.builder.setDefaults({ deviceId: data.deviceInfo.deviceId }); data.post_records = - dataParser.processAapPackets(data.aapPackets, data.deviceInfo.dbRecordNumber); + _.map(dataParser.processAapPackets(data.aapPackets, data.deviceInfo.dbRecordNumber), function(d) { + delete d.index; + return d; + }); debug('processData: num post records:', data.post_records.length); progress(100); diff --git a/lib/drivers/abbott/freeStyleLibreData.js b/lib/drivers/abbott/freeStyleLibreData.js index b080b5b5fb..e80ae4c4bd 100644 --- a/lib/drivers/abbott/freeStyleLibreData.js +++ b/lib/drivers/abbott/freeStyleLibreData.js @@ -289,7 +289,6 @@ export default class FreeStyleLibreData { this.constructor.addOutOfRangeAnnotation(cbg, GLUCOSE_LO, GLUCOSE_HI, 1, 'bg'); this.cfg.tzoUtil.fillInUTCInfo(cbg, record.jsDate); - delete cbg.index; this.postRecords.push(cbg.done()); }); } @@ -320,7 +319,6 @@ export default class FreeStyleLibreData { recordBuilder = recordBuilder.with_deviceTime(sundial.formatDeviceTime(record.jsDate)) .set('index', record.headerFields.recordNumber); this.cfg.tzoUtil.fillInUTCInfo(recordBuilder, record.jsDate); - delete recordBuilder.index; this.postRecords.push(recordBuilder.done()); } }); From c9aeebd197ca7d2a523e1971d79d01c5b5acc742 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Wed, 13 Sep 2017 16:07:41 +0100 Subject: [PATCH 47/66] fixing issues identified by linter --- .eslintignore | 3 ++- lib/drivers/abbott/abbottFreeStyleLibre.js | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.eslintignore b/.eslintignore index c44e35bdc7..a90dec0850 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,5 @@ app/dist/ app/main.js node_modules -dist/ \ No newline at end of file +dist/ +web/ diff --git a/lib/drivers/abbott/abbottFreeStyleLibre.js b/lib/drivers/abbott/abbottFreeStyleLibre.js index 4548ade15b..a4d202017c 100644 --- a/lib/drivers/abbott/abbottFreeStyleLibre.js +++ b/lib/drivers/abbott/abbottFreeStyleLibre.js @@ -140,10 +140,10 @@ export default function (config) { cfg.builder.setDefaults({ deviceId: data.deviceInfo.deviceId }); data.post_records = - _.map(dataParser.processAapPackets(data.aapPackets, data.deviceInfo.dbRecordNumber), function(d) { - delete d.index; - return d; - }); + dataParser.processAapPackets(data.aapPackets, data.deviceInfo.dbRecordNumber); + for (let i = 0; i < data.post_records.length; ++i) { + delete data.post_records[i].index; + } debug('processData: num post records:', data.post_records.length); progress(100); @@ -178,7 +178,7 @@ export default function (config) { } data.cleanup = true; return cb(null, data); - },'dataservices'); + }, 'dataservices'); }, disconnect(progress, data, cb) { From 6750c6f0a178f84fb0b9aa1a23257aca29d5e9f2 Mon Sep 17 00:00:00 2001 From: Dorian Scholz Date: Thu, 14 Sep 2017 11:10:40 +0200 Subject: [PATCH 48/66] update ACK sequence validation --- lib/drivers/abbott/freeStyleLibreProtocol.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/drivers/abbott/freeStyleLibreProtocol.js b/lib/drivers/abbott/freeStyleLibreProtocol.js index 5fb896f56b..16d67e1278 100644 --- a/lib/drivers/abbott/freeStyleLibreProtocol.js +++ b/lib/drivers/abbott/freeStyleLibreProtocol.js @@ -250,9 +250,11 @@ export default class FreeStyleLibreProtocol { } } else if (hidPacket.responseType === COMMAND.ACK_FROM_DEVICE) { const ackPacket = this.constructor.parseAckFrame(hidPacket.data); - if (ackPacket.sequenceRx !== this.sequenceTx - 1) { - return callback(new Error('Received invalid ACK sequence number: ' - + `${ackPacket.sequenceRx} != ${this.sequenceTx - 1}. Please try again!`)); + const validAckSequenceNumbers = + [this.sequenceTx, ((this.sequenceTx - 1) + 0x100) % 0x100]; + if (!(ackPacket.sequenceRx in validAckSequenceNumbers)) { + return callback(new Error('Received invalid ACK sequence number: ' + + `${ackPacket.sequenceRx} not in ${validAckSequenceNumbers}. Please try again!`)); // instead of throwing an error here, we could resend the packets the device missed // to try and recover this session (but this error does not seem to happen anyways) } From 4197ddb51b1fe7cc5bbbab997f9638d3af86accf Mon Sep 17 00:00:00 2001 From: Dorian Scholz Date: Thu, 14 Sep 2017 11:24:48 +0200 Subject: [PATCH 49/66] fix ACK sequence check --- lib/drivers/abbott/freeStyleLibreProtocol.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/drivers/abbott/freeStyleLibreProtocol.js b/lib/drivers/abbott/freeStyleLibreProtocol.js index 16d67e1278..e0bd5edac9 100644 --- a/lib/drivers/abbott/freeStyleLibreProtocol.js +++ b/lib/drivers/abbott/freeStyleLibreProtocol.js @@ -252,7 +252,7 @@ export default class FreeStyleLibreProtocol { const ackPacket = this.constructor.parseAckFrame(hidPacket.data); const validAckSequenceNumbers = [this.sequenceTx, ((this.sequenceTx - 1) + 0x100) % 0x100]; - if (!(ackPacket.sequenceRx in validAckSequenceNumbers)) { + if (validAckSequenceNumbers.indexOf(ackPacket.sequenceRx) === -1) { return callback(new Error('Received invalid ACK sequence number: ' + `${ackPacket.sequenceRx} not in ${validAckSequenceNumbers}. Please try again!`)); // instead of throwing an error here, we could resend the packets the device missed From e5cc659d857e299cf7f5cdd1b9d6804d4ef2cac7 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 26 Sep 2017 10:54:12 -0400 Subject: [PATCH 50/66] drop Sentry in favor of Rollbar --- app/index.js | 9 +-------- app/main.development.js | 7 ------- package.json | 7 +------ yarn.lock | 45 +++++++---------------------------------- 4 files changed, 9 insertions(+), 59 deletions(-) diff --git a/app/index.js b/app/index.js index e6db7359cd..09aebd0838 100755 --- a/app/index.js +++ b/app/index.js @@ -12,14 +12,13 @@ import configureStore from './store/configureStore'; import './app.global.css'; import '../styles/main.less'; import { ipcRenderer } from 'electron'; -import Raven from 'raven-js'; import Rollbar from 'rollbar/dist/rollbar.umd'; let rollbar = new Rollbar({ accessToken: '1843589282464f4facd43f794c8201a8', captureUncaught: true, payload: { - environment: 'test', + environment: 'electron_renderer', client: { javascript: { code_version: __VERSION_SHA__, @@ -43,12 +42,6 @@ let rollbar = new Rollbar({ } ); -Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78@sentry.io/183894', { - autoBreadcrumbs: { - 'console': true // console logging - } -}).install(); - const store = configureStore(); const history = syncHistoryWithStore(hashHistory, store); store.dispatch(push('/')); diff --git a/app/main.development.js b/app/main.development.js index bba6350f88..e57e1548f9 100755 --- a/app/main.development.js +++ b/app/main.development.js @@ -6,7 +6,6 @@ import { autoUpdater } from 'electron-updater'; import * as chromeFinder from 'chrome-launcher/chrome-finder'; import { sync as syncActions } from './actions'; import debugMode from '../app/utils/debugMode'; -import Raven from 'raven'; import Rollbar from 'rollbar/src/server/rollbar'; let rollbar; @@ -21,12 +20,6 @@ if(process.env.NODE_ENV === 'production') { }); } -Raven.config('https://ae50ed563cf24caab8ed7f469b0b0c78:32643a50ee9241c18b97f0c1ed5ed228@sentry.io/183894', { - autoBreadcrumbs: { - 'console': true // console logging - } -}).install(); - crashReporter.start({ productName: 'Uploader', companyName: 'Tidepool', diff --git a/package.json b/package.json index 9f18b36fa5..dc77ff00ce 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,6 @@ "is-electron": "2.0.0", "lodash": "3.10.1", "plist": "2.1.0", - "raven": "2.1.0", - "raven-js": "3.17.0", "react": "15.4.2", "react-addons-update": "15.4.2", "react-dom": "15.4.2", @@ -58,8 +56,6 @@ "redux": "3.6.0", "redux-form": "5.3.4", "redux-thunk": "2.2.0", - "rollbar": "2.2.6", - "rollbar-sourcemap-webpack-plugin": "2.2.0", "semver": "5.3.0", "source-map-support": "0.4.14", "stack-trace": "0.0.9", @@ -201,8 +197,7 @@ "eslint-plugin-jsx-a11y": "4.0.0", "eslint-plugin-mocha": "4.9.0", "eslint-plugin-promise": "3.5.0", - "eslint-plugin-react": "7.3.0", - "exports-loader": "0.6.4", + "eslint-plugin-react": "6.10.3", "express": "4.15.2", "extract-text-webpack-plugin": "1.0.1", "fbjs-scripts": "0.7.1", diff --git a/yarn.lock b/yarn.lock index b2d2fe4371..47e536cd8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1934,9 +1934,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" @@ -2713,10 +2715,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" @@ -5231,7 +5229,7 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +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" @@ -5780,10 +5778,6 @@ lru-cache@~4.0.1: pseudomap "^1.0.1" yallist "^2.0.0" -lsmod@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b" - macaddress@^0.2.7, macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" @@ -7454,21 +7448,6 @@ range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -raven-js@3.17.0: - version "3.17.0" - resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.17.0.tgz#779457ac7910512c3c2cc9bb6d0a9eeb59a969ec" - -raven@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/raven/-/raven-2.1.0.tgz#1b624e56374d9c9d93c74448461a2a356ce37527" - dependencies: - cookie "0.3.1" - json-stringify-safe "5.0.1" - lsmod "1.0.0" - stack-trace "0.0.9" - timed-out "4.0.1" - uuid "3.0.0" - rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" @@ -7808,12 +7787,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" @@ -8939,7 +8912,7 @@ time-stamp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" -timed-out@4.0.1, timed-out@^4.0.0: +timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -9270,10 +9243,6 @@ uuid-1345@^0.99.6: dependencies: macaddress "^0.2.7" -uuid@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" - uuid@3.0.x: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" From 06b49215ed1d3acd87fccbf8023d31fa456cacf8 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 26 Sep 2017 10:59:36 -0400 Subject: [PATCH 51/66] revert changes to test config --- webpack.config.test.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/webpack.config.test.js b/webpack.config.test.js index 231ab91efb..ab3309ce19 100755 --- a/webpack.config.test.js +++ b/webpack.config.test.js @@ -4,14 +4,13 @@ require('babel-register'); const validate = require('webpack-validator'); const devConfig = require('./webpack.config.development'); -const loaders = devConfig.default.module.loaders.slice(1); module.exports = validate({ output: { libraryTarget: 'commonjs2' }, module: { - // Use base + development loaders, but exclude 'babel-loader' and 'trackerjs' - loaders: loaders + // Use base + development loaders, but exclude 'babel-loader' + loaders: devConfig.default.module.loaders.slice(1) } }); From 8fbc7194b19bcce5c42a8d24b2974e7d86f4f474 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 26 Sep 2017 11:02:28 -0400 Subject: [PATCH 52/66] update yarn.lock --- yarn.lock | 142 +++++++++--------------------------------------------- 1 file changed, 23 insertions(+), 119 deletions(-) diff --git a/yarn.lock b/yarn.lock index 47e536cd8e..93c37e6dc7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -282,13 +282,6 @@ array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - array-index@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" @@ -310,6 +303,13 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array.prototype.find@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -391,7 +391,7 @@ async@^0.9.0, async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.0, async@^2.0.1, async@^2.1.4: +async@^2.0.0, async@^2.0.1: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: @@ -401,10 +401,6 @@ async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" -async@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/async/-/async-1.2.1.tgz#a4816a17cd5ff516dfa2c7698a453369b9790de0" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1476,7 +1472,7 @@ babel-runtime@6.23.0, babel-runtime@~6.23.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -2281,10 +2277,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" -console-polyfill@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/console-polyfill/-/console-polyfill-0.3.0.tgz#84900902a18c47a5eba932be75fa44d23e8af861" - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -2645,12 +2637,6 @@ debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" -decache@^3.0.5: - version "3.1.0" - resolved "https://registry.yarnpkg.com/decache/-/decache-3.1.0.tgz#4f5036fbd6581fcc97237ac3954a244b9536c2da" - dependencies: - find "^0.2.4" - 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" @@ -2852,7 +2838,7 @@ difflet@1.0.1: deep-is "0.1.x" traverse "0.6.x" -doctrine@1.5.0: +doctrine@1.5.0, doctrine@^1.2.2: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: @@ -3262,12 +3248,6 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -error-stack-parser@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.3.tgz#fada6e3a9cd2b0e080e6d6fc751418649734f35c" - dependencies: - stackframe "^0.3.1" - error-stack-parser@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" @@ -3474,14 +3454,15 @@ eslint-plugin-promise@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" -eslint-plugin-react@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.3.0.tgz#ca9368da36f733fbdc05718ae4e91f778f38e344" +eslint-plugin-react@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" dependencies: - doctrine "^2.0.0" + array.prototype.find "^2.0.1" + doctrine "^1.2.2" has "^1.0.1" - jsx-ast-utils "^2.0.0" - prop-types "^15.5.10" + jsx-ast-utils "^1.3.4" + object.assign "^4.0.4" eslint-restricted-globals@^0.1.1: version "0.1.1" @@ -3633,13 +3614,6 @@ expand-tilde@^1.2.2: dependencies: os-homedir "^1.0.1" -exports-loader@0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" - dependencies: - loader-utils "^1.0.2" - source-map "0.5.x" - express@4.15.2: version "4.15.2" resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" @@ -3710,10 +3684,6 @@ extend@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/extend/-/extend-1.2.1.tgz#a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c" -extend@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" - extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3918,12 +3888,6 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -find@^0.2.4: - version "0.2.7" - resolved "https://registry.yarnpkg.com/find/-/find-0.2.7.tgz#7afbd00f8f08c5b622f97cda6f714173d547bb3f" - dependencies: - traverse-chain "~0.1.0" - findup-sync@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5" @@ -5086,10 +5050,6 @@ is-windows@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" -is_js@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/is_js/-/is_js-0.9.0.tgz#0ab94540502ba7afa24c856aa985561669e9c52d" - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -5229,7 +5189,7 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: +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" @@ -5270,16 +5230,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^1.0.0: +jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: 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: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.0.tgz#ec06a3d60cf307e5e119dac7bad81e89f096f0f8" - dependencies: - array-includes "^3.0.3" - kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -5544,15 +5498,11 @@ lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" -lodash.find@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" - lodash.flatten@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" -lodash.foreach@^4.2.0, lodash.foreach@^4.3.0: +lodash.foreach@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" @@ -5627,7 +5577,7 @@ lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" -lodash.reduce@^4.3.0, lodash.reduce@^4.4.0: +lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" @@ -5767,10 +5717,6 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@~2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" - lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -7324,7 +7270,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8: +prop-types@^15.0.0, prop-types@^15.5.4, prop-types@^15.5.8: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: @@ -7910,12 +7856,6 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" -request-ip@~2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-2.0.2.tgz#deeae6d4af21768497db8cd05fa37143f8f1257e" - dependencies: - is_js "^0.9.0" - request@2, request@^2.45.0, request@^2.47.0, request@^2.65.0, request@^2.72.0, request@^2.74.0, request@^2.79.0, request@^2.81.0, request@~2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -8102,34 +8042,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" -rollbar-sourcemap-webpack-plugin@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollbar-sourcemap-webpack-plugin/-/rollbar-sourcemap-webpack-plugin-2.2.0.tgz#37fc39e79a410efc3aa7095b0cde084452a789a6" - dependencies: - async "^2.1.4" - babel-runtime "^6.20.0" - lodash.find "^4.3.0" - lodash.foreach "^4.2.0" - lodash.reduce "^4.3.0" - request "^2.72.0" - verror "^1.6.1" - -rollbar@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-2.2.6.tgz#7a90541648d4c4714dbd4de6308e906cb29c6152" - dependencies: - async "~1.2.1" - console-polyfill "0.3.0" - debug "2.6.8" - error-stack-parser "1.3.3" - extend "3.0.0" - json-stringify-safe "~5.0.0" - lru-cache "~2.2.1" - request-ip "~2.0.1" - uuid "3.0.x" - optionalDependencies: - decache "^3.0.5" - run-async@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" @@ -8978,10 +8890,6 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" -traverse-chain@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" - traverse@0.6.6, traverse@0.6.x: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" @@ -9243,10 +9151,6 @@ uuid-1345@^0.99.6: dependencies: macaddress "^0.2.7" -uuid@3.0.x: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - uuid@3.1.0, uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -9286,7 +9190,7 @@ vendors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" -verror@1.10.0, verror@^1.6.1: +verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: From 374af5bf45d97873dd6195d8b742b48d5391ab73 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 26 Sep 2017 11:11:02 -0400 Subject: [PATCH 53/66] add rollbar to package.json... --- package.json | 1 + yarn.lock | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index dc77ff00ce..c283b4eebd 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "redux": "3.6.0", "redux-form": "5.3.4", "redux-thunk": "2.2.0", + "rollbar": "2.2.8", "semver": "5.3.0", "source-map-support": "0.4.14", "stack-trace": "0.0.9", diff --git a/yarn.lock b/yarn.lock index 93c37e6dc7..7d7e1cc67d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -401,6 +401,10 @@ async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +async@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/async/-/async-1.2.1.tgz#a4816a17cd5ff516dfa2c7698a453369b9790de0" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2277,6 +2281,10 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" +console-polyfill@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/console-polyfill/-/console-polyfill-0.3.0.tgz#84900902a18c47a5eba932be75fa44d23e8af861" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -2637,6 +2645,12 @@ debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" +decache@^3.0.5: + version "3.1.0" + resolved "https://registry.yarnpkg.com/decache/-/decache-3.1.0.tgz#4f5036fbd6581fcc97237ac3954a244b9536c2da" + dependencies: + find "^0.2.4" + 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" @@ -3248,6 +3262,12 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +error-stack-parser@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.3.tgz#fada6e3a9cd2b0e080e6d6fc751418649734f35c" + dependencies: + stackframe "^0.3.1" + error-stack-parser@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" @@ -3684,6 +3704,10 @@ extend@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/extend/-/extend-1.2.1.tgz#a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c" +extend@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3888,6 +3912,12 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" +find@^0.2.4: + version "0.2.7" + resolved "https://registry.yarnpkg.com/find/-/find-0.2.7.tgz#7afbd00f8f08c5b622f97cda6f714173d547bb3f" + dependencies: + traverse-chain "~0.1.0" + findup-sync@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5" @@ -5050,6 +5080,10 @@ is-windows@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" +is_js@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/is_js/-/is_js-0.9.0.tgz#0ab94540502ba7afa24c856aa985561669e9c52d" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -5189,7 +5223,7 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +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" @@ -5717,6 +5751,10 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@~2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -7856,6 +7894,12 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" +request-ip@~2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-2.0.2.tgz#deeae6d4af21768497db8cd05fa37143f8f1257e" + dependencies: + is_js "^0.9.0" + request@2, request@^2.45.0, request@^2.47.0, request@^2.65.0, request@^2.72.0, request@^2.74.0, request@^2.79.0, request@^2.81.0, request@~2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -8042,6 +8086,22 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +rollbar@^2.2.8: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-2.2.8.tgz#83fa127eece554f945753bad6951d8d48b92f227" + dependencies: + async "~1.2.1" + console-polyfill "0.3.0" + debug "2.6.8" + error-stack-parser "1.3.3" + extend "3.0.0" + json-stringify-safe "~5.0.0" + lru-cache "~2.2.1" + request-ip "~2.0.1" + uuid "3.0.x" + optionalDependencies: + decache "^3.0.5" + run-async@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" @@ -8890,6 +8950,10 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +traverse-chain@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" + traverse@0.6.6, traverse@0.6.x: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" @@ -9151,6 +9215,10 @@ uuid-1345@^0.99.6: dependencies: macaddress "^0.2.7" +uuid@3.0.x: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + uuid@3.1.0, uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" From 51abd48cca0b9d0e3f64d2edb925495988d346e0 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 26 Sep 2017 11:56:17 -0400 Subject: [PATCH 54/66] remove charm resolution --- package.json | 3 --- yarn.lock | 10 ++++------ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index c283b4eebd..e947f4badd 100644 --- a/package.json +++ b/package.json @@ -237,8 +237,5 @@ "devEngines": { "node": ">=7.4.x", "npm": ">=3.x" - }, - "resolutions": { - "charm": "1.0.1" } } diff --git a/yarn.lock b/yarn.lock index 7d7e1cc67d..ffbce94ae1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1934,11 +1934,9 @@ 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, 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" +charm@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" cheerio@^0.22.0: version "0.22.0" @@ -8086,7 +8084,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" -rollbar@^2.2.8: +rollbar@2.2.8: version "2.2.8" resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-2.2.8.tgz#83fa127eece554f945753bad6951d8d48b92f227" dependencies: From cf2048a62838805ca6e5192a80a32bb932fb3e1a Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 26 Sep 2017 12:06:51 -0400 Subject: [PATCH 55/66] add sourcemap support to package --- package.json | 1 + yarn.lock | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e947f4badd..524bd335c2 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "redux-form": "5.3.4", "redux-thunk": "2.2.0", "rollbar": "2.2.8", + "rollbar-sourcemap-webpack-plugin": "2.2.0", "semver": "5.3.0", "source-map-support": "0.4.14", "stack-trace": "0.0.9", diff --git a/yarn.lock b/yarn.lock index ffbce94ae1..e936e28e07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -391,7 +391,7 @@ async@^0.9.0, async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.0, async@^2.0.1: +async@^2.0.0, async@^2.0.1, async@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: @@ -1476,7 +1476,7 @@ babel-runtime@6.23.0, babel-runtime@~6.23.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: +babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -5530,11 +5530,15 @@ lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" +lodash.find@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + lodash.flatten@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" -lodash.foreach@^4.3.0: +lodash.foreach@^4.2.0, lodash.foreach@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" @@ -5609,7 +5613,7 @@ lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" -lodash.reduce@^4.4.0: +lodash.reduce@^4.3.0, lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" @@ -8084,6 +8088,18 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +rollbar-sourcemap-webpack-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/rollbar-sourcemap-webpack-plugin/-/rollbar-sourcemap-webpack-plugin-2.2.0.tgz#37fc39e79a410efc3aa7095b0cde084452a789a6" + dependencies: + async "^2.1.4" + babel-runtime "^6.20.0" + lodash.find "^4.3.0" + lodash.foreach "^4.2.0" + lodash.reduce "^4.3.0" + request "^2.72.0" + verror "^1.6.1" + rollbar@2.2.8: version "2.2.8" resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-2.2.8.tgz#83fa127eece554f945753bad6951d8d48b92f227" @@ -9256,7 +9272,7 @@ vendors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" -verror@1.10.0: +verror@1.10.0, verror@^1.6.1: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: From ef1e726b6f72ffb5f483101b47bf7292291b476d Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 26 Sep 2017 12:11:45 -0400 Subject: [PATCH 56/66] add back in resolution --- package.json | 3 +++ yarn.lock | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 524bd335c2..2a650a90b7 100644 --- a/package.json +++ b/package.json @@ -238,5 +238,8 @@ "devEngines": { "node": ">=7.4.x", "npm": ">=3.x" + }, + "resolutions": { + "charm": "1.0.1" } } diff --git a/yarn.lock b/yarn.lock index e936e28e07..dba7dcfa81 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1934,9 +1934,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" From 9e0184c17e6b3a5128f28d43f44a82aff7c0f153 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 27 Sep 2017 13:38:26 -0400 Subject: [PATCH 57/66] move rollbar to own module so wrapping can happen at top --- app/index.js | 31 +------------------------------ app/utils/rollbar.js | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 app/utils/rollbar.js diff --git a/app/index.js b/app/index.js index 09aebd0838..4030fcdaa4 100755 --- a/app/index.js +++ b/app/index.js @@ -1,4 +1,4 @@ -/* global __VERSION_SHA__ */ +import rollbar from './utils/rollbar'; import _ from 'lodash'; import React from 'react'; import { render } from 'react-dom'; @@ -12,35 +12,6 @@ import configureStore from './store/configureStore'; import './app.global.css'; import '../styles/main.less'; import { ipcRenderer } from 'electron'; -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 - } - } - }, - // 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'; - } - } - } - } - } -); const store = configureStore(); const history = syncHistoryWithStore(hashHistory, store); diff --git a/app/utils/rollbar.js b/app/utils/rollbar.js new file mode 100644 index 0000000000..bddfda6860 --- /dev/null +++ b/app/utils/rollbar.js @@ -0,0 +1,33 @@ +/* global __VERSION_SHA__ */ + +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 + } + } + }, + // 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 f6e405863bed4db6e44db09464587ece71ebd7c5 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 18 Oct 2017 14:35:58 -0400 Subject: [PATCH 58/66] add user tracking to rollbar, include mock for testing --- .babelrc | 1 + app/actions/sync.js | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/.babelrc b/.babelrc index c31d5a0af4..7aa7ee538a 100644 --- a/.babelrc +++ b/.babelrc @@ -24,6 +24,7 @@ "babel-plugin-rewire", ["transform-define", { "__TEST__": "true", + "__VERSION_SHA__": "abcd", "__DEBUG__": false }] ] diff --git a/app/actions/sync.js b/app/actions/sync.js index 15e28e17c6..9ffdcc1768 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -17,6 +17,7 @@ import _ from 'lodash'; +import rollbar from '../utils/rollbar'; import * as actionTypes from '../constants/actionTypes'; import * as actionSources from '../constants/actionSources'; @@ -287,6 +288,14 @@ export function loginRequest() { export function loginSuccess(results) { const { user, profile, memberships } = results; const isClinicAccount = personUtils.userHasRole(user, 'clinic'); + rollbar.configure({ + payload: { + person: { + id: user.userid, + username: user.username, + } + } + }); return { type: actionTypes.LOGIN_SUCCESS, payload: { user, profile, memberships }, From f092bc8b3d11018080747dba67da0c8fa9b8d02d Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 19 Oct 2017 18:23:48 -0400 Subject: [PATCH 59/66] update version to build for testing --- 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 765635e676..b3cf6cf362 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.0.3", + "version": "2.2.0-libre-rollbar.1", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 707c5eaf55..e6c3b8e94e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.0.3", + "version": "2.2.0-libre-rollbar.1", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 846cb48499f8f8ecd6941b7c052dd2e4b0d23529 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Fri, 20 Oct 2017 09:07:39 -0400 Subject: [PATCH 60/66] lintfix --- 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 e9521c0938..e7a1634b5e 100644 --- a/lib/drivers/abbott/abbottFreeStyleLite.js +++ b/lib/drivers/abbott/abbottFreeStyleLite.js @@ -431,7 +431,7 @@ module.exports = function (config) { // and the FreeStyle Lite as they use the same cable, so the USB PID/VID // is the same. data.model = 'AbbottFreeStyleFreedomLite'; - } else if (data.serialNumber[0] === 'D'){ + } else if (data.serialNumber[0] === 'D') { data.model = 'AbbottFreeStyleLite'; } else { data.model = 'UnknownFreeStyle'; From e394c1e94cc7ef7fb05a1943f9a86611d893b16b Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 24 Oct 2017 14:58:12 +0100 Subject: [PATCH 61/66] script to re-create binary blob from fragments in console log --- lib/drivers/medtronic/cli/getBlobFromLog.js | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/drivers/medtronic/cli/getBlobFromLog.js diff --git a/lib/drivers/medtronic/cli/getBlobFromLog.js b/lib/drivers/medtronic/cli/getBlobFromLog.js new file mode 100644 index 0000000000..0d16a359bf --- /dev/null +++ b/lib/drivers/medtronic/cli/getBlobFromLog.js @@ -0,0 +1,48 @@ +const fs = require('fs'); +const readline = require('readline'); +const program = require('commander'); + +program + .version('0.0.1') + .option('-f, --file [path]', 'console log file path') + .parse(process.argv); + +if (program.file && fs.existsSync(program.file)){ + console.log('Loading console log file...'); + let inputFile = fs.createReadStream(program.file); + const rl = readline.createInterface({ + input: inputFile + }); + + let pages = []; + + rl.on('line', (input) => { + if(input.indexOf('Reading CGM history') > 1) { + // skip CGM history for now + rl.close(); + } + const pos = input.indexOf('| Page '); + if ( pos > -1 ) { + let bytes = []; + const hexString = input.slice(input.indexOf(' ',pos+8)+1); + for (var i = 0; i < hexString.length-1; i+=2) { + bytes.push(parseInt(hexString.substr(i,2),16)); + } + let arr = new Uint8Array(bytes.length); + arr.set(bytes); + + pages.push({ + page: arr, + nak: false, + valid: true + }); + } + }); + + rl.on('close', () => { + console.log(JSON.stringify(pages, null, 4)); + }); + +}else{ + program.help(); +} From b5fa7f375dd5110bed47ceabf1dd0c4303d82df9 Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Tue, 24 Oct 2017 15:19:37 +0100 Subject: [PATCH 62/66] script writes blob to file --- lib/drivers/medtronic/cli/getBlobFromLog.js | 48 ++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/lib/drivers/medtronic/cli/getBlobFromLog.js b/lib/drivers/medtronic/cli/getBlobFromLog.js index 0d16a359bf..46d100565f 100644 --- a/lib/drivers/medtronic/cli/getBlobFromLog.js +++ b/lib/drivers/medtronic/cli/getBlobFromLog.js @@ -1,3 +1,20 @@ +/* + * == BSD2 LICENSE == + * Copyright (c) 2017, 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 == + */ + const fs = require('fs'); const readline = require('readline'); const program = require('commander'); @@ -5,9 +22,10 @@ const program = require('commander'); program .version('0.0.1') .option('-f, --file [path]', 'console log file path') + .option('-o, --output [path]', 'output file path') .parse(process.argv); -if (program.file && fs.existsSync(program.file)){ +if (program.file && program.output && fs.existsSync(program.file)){ console.log('Loading console log file...'); let inputFile = fs.createReadStream(program.file); const rl = readline.createInterface({ @@ -41,6 +59,34 @@ if (program.file && fs.existsSync(program.file)){ rl.on('close', () => { console.log(JSON.stringify(pages, null, 4)); + + // since we don't have the binary settings data, we have to + // use some default values for the processing to work + const settings = { + modelNumber: '523', + strokesPerUnit: 40, + basalSchedules: { + standard: [] + }, + units: { + bg: 'mg/dL', + carb: 'grams' + }, + activeSchedule: 'standard', + currentDeviceTime: new Date().toISOString(), + deviceId: 'MedT-523-000000' + }; + + const json = JSON.stringify({ + settings: settings, + pages: pages + }, null, 4); + + fs.writeFile(program.output, json, (err) => { + if (err) throw err; + console.log('The file has been saved!'); + }); + }); }else{ From 2835e4353349f729d5bf3b0a7f195b96e310b324 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 26 Oct 2017 17:40:56 -0400 Subject: [PATCH 63/66] move rollbar import so sync can be used in both processes --- app/actions/sync.js | 3 +-- app/package.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/actions/sync.js b/app/actions/sync.js index 9ffdcc1768..f55c552bb3 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -17,8 +17,6 @@ import _ from 'lodash'; -import rollbar from '../utils/rollbar'; - import * as actionTypes from '../constants/actionTypes'; import * as actionSources from '../constants/actionSources'; import * as metrics from '../constants/metrics'; @@ -286,6 +284,7 @@ export function loginRequest() { } export function loginSuccess(results) { + const rollbar = require('../utils/rollbar'); const { user, profile, memberships } = results; const isClinicAccount = personUtils.userHasRole(user, 'clinic'); rollbar.configure({ diff --git a/app/package.json b/app/package.json index b3cf6cf362..fe04f1715a 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.2.0-libre-rollbar.1", + "version": "2.2.0-libre-rollbar.2", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index e6c3b8e94e..fa11676d0d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.2.0-libre-rollbar.1", + "version": "2.2.0-libre-rollbar.2", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 871cdb052751d2d7c097a601f095cba4c3c4c231 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 26 Oct 2017 18:37:15 -0400 Subject: [PATCH 64/66] test fix, rework test debug command --- app/actions/sync.js | 3 ++- package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/actions/sync.js b/app/actions/sync.js index f55c552bb3..709bae9cc1 100644 --- a/app/actions/sync.js +++ b/app/actions/sync.js @@ -287,7 +287,8 @@ export function loginSuccess(results) { const rollbar = require('../utils/rollbar'); const { user, profile, memberships } = results; const isClinicAccount = personUtils.userHasRole(user, 'clinic'); - rollbar.configure({ + // the rewire plugin messes with default export in tests + rollbar.configure && rollbar.configure({ payload: { person: { id: user.userid, diff --git a/package.json b/package.json index fa11676d0d..dd715d3b22 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build-docs": "./scripts/update-gh-pages.sh", "serve-docs": "./node_modules/.bin/gitbook serve", "test": "cross-env NODE_ENV=test BABEL_DISABLE_CACHE=1 electron-mocha --renderer --retries 2 --compilers js:babel-register --recursive test/", - "test-debug": "cross-env NODE_ENV=test BABEL_DISABLE_CACHE=1 mocha --retries 2 --compilers js:babel-register --recursive --require ./test/setup.js test/**/*.js --inspect --debug-brk", + "test-debug": "cross-env NODE_ENV=test BABEL_DISABLE_CACHE=1 electron-mocha --interactive --retries 2 --compilers js:babel-register --recursive test/", "test-all": "npm run lint && npm run test && npm run build", "test-e2e": "cross-env NODE_ENV=test BABEL_DISABLE_CACHE=1 mocha --retries 2 --compilers js:babel-register --require ./test/setup.js ./test/e2e.js", "lint": "eslint --cache --format=node_modules/eslint-formatter-pretty .", From e4cae468120feb6c78ea0903e6f727d8c5d5411b Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 26 Oct 2017 20:38:36 -0400 Subject: [PATCH 65/66] add libre to new manifest --- app/package.json | 2 +- lib/core/device.js | 6 ++++++ package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/package.json b/app/package.json index fe04f1715a..b44037c2aa 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.2.0-libre-rollbar.2", + "version": "2.2.0-libre-rollbar.3", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/lib/core/device.js b/lib/core/device.js index 170db474b9..69d9b9e90d 100644 --- a/lib/core/device.js +++ b/lib/core/device.js @@ -123,6 +123,12 @@ device._driverManifests = { {vendorId: 1027, productId: 24577} // FTDI cable ] }, + 'AbbottFreeStyleLibre': { + mode: 'HID', + usb: [ + {vendorId: 6753, productId: 13904} + ] + }, 'BayerContourNext': { mode: 'HID', usb: [ diff --git a/package.json b/package.json index dd715d3b22..6578e0447c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.2.0-libre-rollbar.2", + "version": "2.2.0-libre-rollbar.3", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js", From 7335b1ef1cb800f7a6f59c9d7b13024b94fe5c6f Mon Sep 17 00:00:00 2001 From: Gerrit Niezen Date: Thu, 2 Nov 2017 09:57:20 +0000 Subject: [PATCH 66/66] finalising version number after testing --- 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 b44037c2aa..5d4b90caaa 100755 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "tidepool-uploader", "productName": "tidepool-uploader", - "version": "2.2.0-libre-rollbar.3", + "version": "2.2.0", "description": "Tidepool Project Universal Uploader", "main": "./main.js", "author": { diff --git a/package.json b/package.json index 23e114a359..38fdc45221 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidepool-uploader", - "version": "2.2.0-libre-rollbar.3", + "version": "2.2.0", "description": "Tidepool Project Universal Uploader", "private": true, "main": "main.js",