@bpanel/price
Version:
Fetch BTC-fiat exchange rate and add to app store.
524 lines (439 loc) • 16 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.feeds = undefined;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var curl = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(url) {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return curlClient.get(url.host + '?path=' + url.path);
case 3:
return _context.abrupt('return', _context.sent);
case 6:
_context.prev = 6;
_context.t0 = _context['catch'](0);
console.log('Error fetching JSON API: ', _context.t0);
return _context.abrupt('return', {});
case 10:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[0, 6]]);
}));
return function curl(_x) {
return _ref.apply(this, arguments);
};
}();
/*
* Add any exchange API you want here
* Name of feed is object key, value is object with 2 functions
* getPrice takes 3-letter acronym strings {fiat, crypto} and retuns a float
* getFiats takes no arguments and returns an array of 3-letter fiat currencies
*/
var _bcurl = require('bcurl');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// determine the port and ssl usage
var protocol = window.location.protocol; /* eslint-disable no-console */
var hostname = window.location.hostname;
var port = window.location.port;
var ssl = false;
// use https and http ports when the window doesn't render them
if (port === '') protocol === 'https:' ? port = '443' : port = '80';
if (protocol === 'https:') ssl = true;
var curlClient = new _bcurl.Client({
port: parseInt(port, 10),
path: '/curl/',
host: hostname,
ssl: ssl
});
var feeds = exports.feeds = {
Coinbase: {
getPrice: function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(_ref3) {
var fiat = _ref3.fiat,
crypto = _ref3.crypto;
var path, url, result;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
path = 'products/' + crypto + '-' + fiat + '/ticker';
url = {
host: 'api.pro.coinbase.com',
path: path
};
_context2.next = 4;
return curl(url);
case 4:
result = _context2.sent;
return _context2.abrupt('return', result.price);
case 6:
case 'end':
return _context2.stop();
}
}
}, _callee2, undefined);
}));
return function getPrice(_x2) {
return _ref2.apply(this, arguments);
};
}(),
getFiats: function () {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
var url, result, fiats, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, item;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
url = {
host: 'api.pro.coinbase.com',
path: 'currencies'
};
_context3.next = 3;
return curl(url);
case 3:
result = _context3.sent;
fiats = [];
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context3.prev = 8;
for (_iterator = (0, _getIterator3.default)(result); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
item = _step.value;
if (item.details.type === 'fiat') fiats.push(item.id);
}
_context3.next = 16;
break;
case 12:
_context3.prev = 12;
_context3.t0 = _context3['catch'](8);
_didIteratorError = true;
_iteratorError = _context3.t0;
case 16:
_context3.prev = 16;
_context3.prev = 17;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 19:
_context3.prev = 19;
if (!_didIteratorError) {
_context3.next = 22;
break;
}
throw _iteratorError;
case 22:
return _context3.finish(19);
case 23:
return _context3.finish(16);
case 24:
return _context3.abrupt('return', fiats);
case 25:
case 'end':
return _context3.stop();
}
}
}, _callee3, undefined, [[8, 12, 16, 24], [17,, 19, 23]]);
}));
return function getFiats() {
return _ref4.apply(this, arguments);
};
}()
},
Blockchain_info: {
getPrice: function () {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(_ref6) {
var fiat = _ref6.fiat,
crypto = _ref6.crypto;
var path, url, result, price;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
if (!(crypto !== 'BTC')) {
_context4.next = 2;
break;
}
return _context4.abrupt('return', 0);
case 2:
path = 'ticker';
url = {
host: 'blockchain.info',
path: path
};
_context4.next = 6;
return curl(url);
case 6:
result = _context4.sent;
price = result[fiat].last;
return _context4.abrupt('return', price);
case 9:
case 'end':
return _context4.stop();
}
}
}, _callee4, undefined);
}));
return function getPrice(_x3) {
return _ref5.apply(this, arguments);
};
}(),
getFiats: function () {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5() {
var path, url, result, fiats;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
path = 'ticker';
url = {
host: 'blockchain.info',
path: path
};
_context5.next = 4;
return curl(url);
case 4:
result = _context5.sent;
fiats = (0, _keys2.default)(result);
return _context5.abrupt('return', fiats);
case 7:
case 'end':
return _context5.stop();
}
}
}, _callee5, undefined);
}));
return function getFiats() {
return _ref7.apply(this, arguments);
};
}()
},
Bitfinex: {
getPrice: function () {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(_ref9) {
var fiat = _ref9.fiat,
crypto = _ref9.crypto;
var path, url, result;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
if (!(crypto !== 'BTC')) {
_context6.next = 2;
break;
}
return _context6.abrupt('return', 0);
case 2:
path = 'v1/pubticker/' + crypto + fiat;
url = {
host: 'api.bitfinex.com',
path: path
};
_context6.next = 6;
return curl(url);
case 6:
result = _context6.sent;
return _context6.abrupt('return', result.last_price);
case 8:
case 'end':
return _context6.stop();
}
}
}, _callee6, undefined);
}));
return function getPrice(_x4) {
return _ref8.apply(this, arguments);
};
}(),
getFiats: function () {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7() {
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
return _context7.abrupt('return', _promise2.default.resolve(['USD', 'EUR', 'GBP', 'JPY']));
case 1:
case 'end':
return _context7.stop();
}
}
}, _callee7, undefined);
}));
return function getFiats() {
return _ref10.apply(this, arguments);
};
}()
},
Bitstamp: {
getPrice: function () {
var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(_ref12) {
var fiat = _ref12.fiat,
crypto = _ref12.crypto;
var path, url, result;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
path = 'api/v2/ticker/' + crypto + fiat;
url = {
host: 'www.bitstamp.net',
path: path
};
_context8.next = 4;
return curl(url);
case 4:
result = _context8.sent;
return _context8.abrupt('return', result.last);
case 6:
case 'end':
return _context8.stop();
}
}
}, _callee8, undefined);
}));
return function getPrice(_x5) {
return _ref11.apply(this, arguments);
};
}(),
getFiats: function () {
var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9() {
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
return _context9.abrupt('return', _promise2.default.resolve(['USD', 'EUR']));
case 1:
case 'end':
return _context9.stop();
}
}
}, _callee9, undefined);
}));
return function getFiats() {
return _ref13.apply(this, arguments);
};
}()
},
Kraken: {
getPrice: function () {
var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(_ref15) {
var fiat = _ref15.fiat,
crypto = _ref15.crypto;
var path, url, response, result, randomUselessString, actualUsefulInfo;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
// seriously!? Ok...
crypto = crypto === 'BTC' ? 'XBT' : crypto;
path = '0/public/Ticker?pair=' + crypto + fiat;
url = {
host: 'api.kraken.com',
path: path
};
_context10.next = 5;
return curl(url);
case 5:
response = _context10.sent;
result = response.result;
// Ah geez REALLY?
randomUselessString = (0, _keys2.default)(result)[0];
actualUsefulInfo = result[randomUselessString];
return _context10.abrupt('return', actualUsefulInfo.c[0]);
case 10:
case 'end':
return _context10.stop();
}
}
}, _callee10, undefined);
}));
return function getPrice(_x6) {
return _ref14.apply(this, arguments);
};
}(),
getFiats: function () {
var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11() {
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
return _context11.abrupt('return', _promise2.default.resolve(['USD', 'EUR', 'CAD', 'JPY']));
case 1:
case 'end':
return _context11.stop();
}
}
}, _callee11, undefined);
}));
return function getFiats() {
return _ref16.apply(this, arguments);
};
}()
},
Cex_io: {
getPrice: function () {
var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(_ref18) {
var fiat = _ref18.fiat,
crypto = _ref18.crypto;
var path, url, result;
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
path = 'api/ticker/' + crypto + '/' + fiat;
url = {
host: 'cex.io',
path: path
};
_context12.next = 4;
return curl(url);
case 4:
result = _context12.sent;
return _context12.abrupt('return', result.last);
case 6:
case 'end':
return _context12.stop();
}
}
}, _callee12, undefined);
}));
return function getPrice(_x7) {
return _ref17.apply(this, arguments);
};
}(),
getFiats: function () {
var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13() {
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
switch (_context13.prev = _context13.next) {
case 0:
return _context13.abrupt('return', _promise2.default.resolve(['USD', 'EUR', 'GBP', 'RUB']));
case 1:
case 'end':
return _context13.stop();
}
}
}, _callee13, undefined);
}));
return function getFiats() {
return _ref19.apply(this, arguments);
};
}()
}
};