fitbit-livedata
Version:
This project aims to getting `livedata` from Fitbit tracker
138 lines (126 loc) • 5.31 kB
JavaScript
;
var _readline = require('readline');var _readline2 = _interopRequireDefault(_readline);
var _stream = require('stream');var _stream2 = _interopRequireDefault(_stream);
var _commander = require('commander');var _commander2 = _interopRequireDefault(_commander);
var _debug = require('debug');var _debug2 = _interopRequireDefault(_debug);
var _ = require('..');var _2 = _interopRequireDefault(_);
var _package = require('../../package.json');var _package2 = _interopRequireDefault(_package);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
var mutableStdout = new _stream2.default.Writable({
write: function write(chunk, encoding, callback) {
if (!this.muted) process.stdout.write(chunk, encoding);
callback();
} });
var rl = _readline2.default.createInterface({
input: process.stdin,
output: mutableStdout,
terminal: true });
var parseCodes = function parseCodes(val, codes) {
codes.push(val);
return codes;
};
_commander2.default.
version(_package2.default.version).
option('-u, --username [value]', 'username').
option('-p, --password [value]', 'password').
option('-t, --trackername [value]', 'trackername').
option('-c, --authcodes <items>', 'authentication codes', parseCodes, []).
parse(process.argv);
Promise.resolve().then(function () {
if (_commander2.default.authcodes.length > 0) {
var firstCode = _commander2.default.rawArgs.indexOf(_commander2.default.authcodes[0]);
for (var i = firstCode + 1; i < _commander2.default.rawArgs.length; i += 1) {
if (_commander2.default.rawArgs[i][0] === '-') break;else
_commander2.default.authcodes.push(_commander2.default.rawArgs[i]);
}
return _commander2.default.authcodes.map(function (authCode) {return {
authCode: authCode };});
}
return Promise.resolve().then(function () {return (
_commander2.default.username || new Promise(function (resolve) {
process.stdout.write('Enter FitBit account\n');
rl.question('username : ', function (answer) {
resolve(answer);
});
mutableStdout.muted = false;
}));}).
then(function (username) {
var isRequired = !_commander2.default.password || _commander2.default.username !== username;
_commander2.default.username = username;
return isRequired ? new Promise(function (resolve) {
rl.question('Password : ', function (answer) {
mutableStdout.muted = false;
resolve(answer);
});
mutableStdout.muted = true;
}) : _commander2.default.password;
}).
then(function (password) {
_commander2.default.password = password;
});
}).
then(function (authCodes) {
var authInfos = authCodes || [{
username: _commander2.default.username,
password: _commander2.default.password }];
var trackers = [];
authInfos.reduce(function (prev, account) {return (
prev.then(function () {return (
new Promise(function (resolve) {return (
_2.default.getTrackers(account).
then(function (trackerInfos) {
trackerInfos.forEach(function (trackerInfo) {
trackers.push(trackerInfo);
});
resolve();
}).
catch(function (err) {
(0, _debug2.default)('fitbit-livedata-cli')('' + err);
if (!authCodes || authCodes.length <= 1) {
process.stderr.write('login failed\n');
process.exit(1);
} else {
resolve();
}
}));}));}));}, Promise.resolve()).then(function () {
(0, _debug2.default)('fitbit-livedata-cli')('all trackers are ' + JSON.stringify(trackers, null, 2));
_2.default.on('discover', function (tracker) {
tracker.on('disconnected', function () {
(0, _debug2.default)('tracker')('disconnected');
tracker.connect();
});
tracker.on('connected', function () {
(0, _debug2.default)('tracker')('connected');
});
tracker.on('connecting', function () {
(0, _debug2.default)('tracker')('connecting');
});
tracker.on('openingSession', function () {
(0, _debug2.default)('tracker')('openSession');
});
tracker.on('authenticating', function () {
(0, _debug2.default)('tracker')('authenticate');
});
tracker.on('sendAuth', function () {
(0, _debug2.default)('tracker')('sendAuth');
});
tracker.on('authenticated', function () {
(0, _debug2.default)('tracker')('authenticated');
});
tracker.on('data', function (livedata) {
process.stdout.write(JSON.stringify(livedata) + '\n');
});
tracker.connect();
});
_2.default.on('error', function (error) {
process.stderr.write(error + '\n');
process.exit(1);
});
var filtered = _commander2.default.trackername ? trackers.filter(function (t) {return t.name === _commander2.default.trackername;}) : trackers;
if (filtered.length === 0) {
process.stderr.write((_commander2.default.trackername ? 'Tracker \'' + _commander2.default.trackername + '\' is ' : 'Trackers are ') + 'not found.');
process.exit(1);
}
_2.default.scanTrackers(filtered);
});
});