nandos
Version:
Server-side JS library for the Nando's API
363 lines (286 loc) • 10.1 kB
JavaScript
'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