UNPKG

surger

Version:

CLI wifi gps powered surge pricing indicator for Uber

170 lines (130 loc) 6.33 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime-corejs2/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); _Object$defineProperty(exports, "__esModule", { value: true }); exports.init = init; var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values")); var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify")); var _getOwnPropertyNames = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-names")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); var util = _interopRequireWildcard(require("util")); var _eventemitter = _interopRequireDefault(require("eventemitter2")); var _chalk = _interopRequireDefault(require("chalk")); var _textTable = _interopRequireDefault(require("text-table")); var _currentLocation = _interopRequireDefault(require("current-location")); var _stripAnsi = _interopRequireDefault(require("strip-ansi")); var pkg = require('../package'); var uber = new (require('node-uber'))(pkg.uber); var geo = require('node-geocoder')(pkg.geo); var Surger = function Surger() { var _this = this; var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; (0, _classCallCheck2["default"])(this, Surger); (0, _defineProperty2["default"])(this, "isNonEmptyObject", function (obj) { return (0, _getOwnPropertyNames["default"])(obj || {}).length !== 0; }); (0, _defineProperty2["default"])(this, "handleCoords", function (_ref) { var lat = _ref.lat, lng = _ref.lng; return _this.getDetailsFromLatLng(lat, lng).then(function () { return _this.getPriceEstimateFromLatLng(lat, lng)["catch"](function (err) { _this.emitter.emit('debug.handleCoords', 'getPriceEstimateFromLatLng failed', err); throw err; }); })["catch"](function (err) { _this.emitter.emit('debug.handleCoords', 'getDetailsFromLatLng failed', err); throw err; }); }); (0, _defineProperty2["default"])(this, "handlePriceEstimate", function (err, estimates) { if (err) throw err; _this.parseEstimates(estimates); }); (0, _defineProperty2["default"])(this, "parseEstimates", function (estimates) { console.log((0, _textTable["default"])(estimates)); }); (0, _defineProperty2["default"])(this, "parseDetails", function (details) { var _details$find = details.find(Object), streetName = _details$find.streetName; console.log(''); console.log('Estimates near', _chalk["default"].blue(streetName)); console.log(''); }); (0, _defineProperty2["default"])(this, "getDetailsFromLatLng", function (lat, lng) { _this.emitter.emit('debug.getDetailsFromLatLng', 'geo reversing', lat, lng); return geo.reverse({ lat: lat, lon: lng }).then(function (details) { return _this.parseDetails(details); }); }); (0, _defineProperty2["default"])(this, "getPriceEstimateFromLatLng", function (lat, lng) { var yay = _chalk["default"].dim.bgGreen.bold; var nay = _chalk["default"].white.bgRed.bold; _this.emitter.emit('debug.getPriceEstimateFromLatLng', 'getting estimates'); return uber.estimates.getPriceForRouteAsync(lat, lng, lat, lng).then(function (resp) { _this.estimates = resp.prices.map(function (resp) { _this.emitter.emit('debug.getPriceEstimateFromLatLng', 'getPriceForRouteAsync', (0, _stringify["default"])(resp)); var currency_code = resp.currency_code, display_name = resp.display_name, distance = resp.distance, duration = resp.duration, estimate = resp.estimate, high_estimate = resp.high_estimate, localized_display_name = resp.localized_display_name, low_estimate = resp.low_estimate, product_id = resp.product_id, _resp$surge_multiplie = resp.surge_multiplier, surge_multiplier = _resp$surge_multiplie === void 0 ? 1 : _resp$surge_multiplie; return [// UberX, UberT, etc. localized_display_name, // Surge Pricing? surge_multiplier === 1 ? yay(" \u2714 GOOD [min. ".concat(low_estimate, " ").concat(currency_code, "]")) : nay(" $ SURGE ".concat(surge_multiplier, "x [min. ").concat(estimate, " ").concat(currency_code, "]"))]; }); _this.emitter.emit('debug.estimates', 'estimates', (0, _stringify["default"])(_this.estimates.map(function (a) { return a.map(_stripAnsi["default"]); }))); _this.parseEstimates(_this.estimates); }).error(function (err) { _this.emitter.emit('debug.getPriceEstimateFromLatLng', 'getting estimate failed'); throw err; }); }); (0, _defineProperty2["default"])(this, "getCoords", function (cb) { var gpsP = util.promisify(_currentLocation["default"]); _this.emitter.emit('debug.getCoords', 'finding location'); return gpsP().then(function (location) { var _ref2 = location || {}, latitude = _ref2.latitude, longitude = _ref2.longitude; _this.emitter.emit('debug.getCoords', 'confirmed location', (0, _values["default"])(location)); return cb({ lat: latitude, lng: longitude }); }); }); this.options = options; this.estimates = []; this.emitter = new _eventemitter["default"]({ wildcard: true }); this.options.debug && this.emitter.on('debug.*', function (title) { var _console; for (var _len = arguments.length, message = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { message[_key - 1] = arguments[_key]; } (_console = console).warn.apply(_console, [_chalk["default"].red.bold(this.event), _chalk["default"].magenta(title)].concat(message)); }); this.getCoords(this.handleCoords)["catch"](function (err) { _this.emitter.emit('debug.surger', 'getCoords failed', err); console.error(err); }); }; function init(options) { return new Surger(options); }