UNPKG

fitbit-livedata

Version:

This project aims to getting `livedata` from Fitbit tracker

138 lines (126 loc) 5.31 kB
#!/usr/bin/env node 'use strict'; 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); }); });