UNPKG

nandos

Version:

Server-side JS library for the Nando's API

363 lines (286 loc) 10.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _hasInstance = require('babel-runtime/core-js/symbol/has-instance'); var _hasInstance2 = _interopRequireDefault(_hasInstance); var _defineProperty = require('babel-runtime/core-js/object/define-property'); var _defineProperty2 = _interopRequireDefault(_defineProperty); var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto); var _requestPromiseAny = require('request-promise-any'); var _requestPromiseAny2 = _interopRequireDefault(_requestPromiseAny); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Options = function () { function Options(input) { return input != null && (input.baseUrl == null || typeof input.baseUrl === 'string') && typeof input.clientKeyId === 'string' && typeof input.clientKeySecret === 'string' && typeof input.userEmail === 'string' && typeof input.userPassword === 'string'; } ; (0, _defineProperty2.default)(Options, _hasInstance2.default, { value: function value(input) { return Options(input); } }); return Options; }(); var Loyalty = function () { function Loyalty(options) { (0, _classCallCheck3.default)(this, Loyalty); if (!Options(options)) { throw new TypeError('Value of argument "options" violates contract.\n\nExpected:\nOptions\n\nGot:\n' + _inspect(options)); } this._options = (0, _extends3.default)({ baseUrl: 'https://www.nandos.co.uk/' }, options); if (!Options(this._options)) { throw new TypeError('Value of "this._options" violates contract.\n\nExpected:\nOptions\n\nGot:\n' + _inspect(this._options)); } this._client = _requestPromiseAny2.default.defaults({ baseUrl: this._options.baseUrl }); if (!(typeof this._client === 'function')) { throw new TypeError('Value of "this._client" violates contract.\n\nExpected:\n(string, string, bool, {}) => Promise\n\nGot:\n' + _inspect(this._client)); } } (0, _createClass3.default)(Loyalty, [{ key: 'getAccount', value: function () { var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._request('api_validate'); case 2: return _context.abrupt('return', _context.sent); case 3: case 'end': return _context.stop(); } } }, _callee, this); })); function getAccount() { return _ref5.apply(this, arguments); } return getAccount; }() }, { key: 'getRewards', value: function () { var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(cardNumber) { return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (typeof cardNumber === 'string') { _context2.next = 2; break; } throw new TypeError('Value of argument "cardNumber" violates contract.\n\nExpected:\nstring\n\nGot:\n' + _inspect(cardNumber)); case 2: _context2.next = 4; return this._request('api_bonus_plan', { // eslint-disable-next-line camelcase card_number: cardNumber }); case 4: return _context2.abrupt('return', _context2.sent); case 5: case 'end': return _context2.stop(); } } }, _callee2, this); })); function getRewards(_x) { return _ref6.apply(this, arguments); } return getRewards; }() }, { key: 'getTransactions', value: function () { var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(cardNumber) { var result; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (typeof cardNumber === 'string') { _context3.next = 2; break; } throw new TypeError('Value of argument "cardNumber" violates contract.\n\nExpected:\nstring\n\nGot:\n' + _inspect(cardNumber)); case 2: _context3.next = 4; return this._request('api_transaction_list', { // eslint-disable-next-line camelcase card_number: cardNumber }); case 4: result = _context3.sent; return _context3.abrupt('return', result.visit_data); case 6: case 'end': return _context3.stop(); } } }, _callee3, this); })); function getTransactions(_x2) { return _ref7.apply(this, arguments); } return getTransactions; }() }, { key: '_request', value: function () { var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(method, params) { var json, hmac, hash, response, error; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: if (typeof method === 'string') { _context4.next = 2; break; } throw new TypeError('Value of argument "method" violates contract.\n\nExpected:\nstring\n\nGot:\n' + _inspect(method)); case 2: if (params == null || params != null && (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) === 'object') { _context4.next = 4; break; } throw new TypeError('Value of argument "params" violates contract.\n\nExpected:\n?{}\n\nGot:\n' + _inspect(params)); case 4: json = (0, _stringify2.default)({ jsonrpc: '2.0', id: 1, method: method, params: (0, _extends3.default)({ email: this._options.userEmail, password: this._options.userPassword }, params) }); hmac = _crypto2.default.createHmac('sha256', this._options.clientKeySecret); hash = hmac.update(json, 'utf8').digest('hex'); _context4.next = 9; return this._client({ method: 'post', uri: '/js/nandoscard_json_api/call', json: true, form: { key: this._options.clientKeyId, request: json, signature: hash } }); case 9: response = _context4.sent; if (!response.error) { _context4.next = 15; break; } error = new Error(response.executionStatusDescription || 'Unknown'); error.response = response; error.code = response.code; throw error; case 15: return _context4.abrupt('return', response.result); case 16: case 'end': return _context4.stop(); } } }, _callee4, this); })); function _request(_x3, _x4) { return _ref8.apply(this, arguments); } return _request; }() }]); return Loyalty; }(); exports.default = Loyalty; function _inspect(input, depth) { var maxDepth = 4; var maxKeys = 15; if (depth === undefined) { depth = 0; } depth += 1; if (input === null) { return 'null'; } else if (input === undefined) { return 'void'; } else if (typeof input === 'string' || typeof input === 'number' || typeof input === 'boolean') { return typeof input === 'undefined' ? 'undefined' : (0, _typeof3.default)(input); } else if (Array.isArray(input)) { if (input.length > 0) { var _ret = function () { if (depth > maxDepth) return { v: '[...]' }; var first = _inspect(input[0], depth); if (input.every(function (item) { return _inspect(item, depth) === first; })) { return { v: first.trim() + '[]' }; } else { return { v: '[' + input.slice(0, maxKeys).map(function (item) { return _inspect(item, depth); }).join(', ') + (input.length >= maxKeys ? ', ...' : '') + ']' }; } }(); if ((typeof _ret === 'undefined' ? 'undefined' : (0, _typeof3.default)(_ret)) === "object") return _ret.v; } else { return 'Array'; } } else { var keys = (0, _keys2.default)(input); if (!keys.length) { if (input.constructor && input.constructor.name && input.constructor.name !== 'Object') { return input.constructor.name; } else { return 'Object'; } } if (depth > maxDepth) return '{...}'; var indent = ' '.repeat(depth - 1); var entries = keys.slice(0, maxKeys).map(function (key) { return (/^([A-Z_$][A-Z0-9_$]*)$/i.test(key) ? key : (0, _stringify2.default)(key)) + ': ' + _inspect(input[key], depth) + ';'; }).join('\n ' + indent); if (keys.length >= maxKeys) { entries += '\n ' + indent + '...'; } if (input.constructor && input.constructor.name && input.constructor.name !== 'Object') { return input.constructor.name + ' {\n ' + indent + entries + '\n' + indent + '}'; } else { return '{\n ' + indent + entries + '\n' + indent + '}'; } } } //# sourceMappingURL=loyalty.js.map