'use strict';
// Dependencies
var request = require('request-promise');
var fs = require('fs');
var debug = require('debug')('node-cba-netbank');
// Initialisation
var DEFAULT_OPTION = {
jar: true,
followAllRedirects: true,
resolveWithFullResponse: true,
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
};
// Utilities
var myRequest = request.defaults(DEFAULT_OPTION);
var isString = function isString(obj) {
return typeof obj === 'string' || obj instanceof String;
};
function writeToFile(filename, content) {
fs.writeFile('log/' + filename, content, function (err) {
Iif (err) {
debug(err);
}
debug('Wrote to file => \'log/' + filename + '\'.');
});
}
function shorten(form) {
var MAX_LEN = 200;
var shortenForm = {};
Object.keys(form).forEach(function (key) {
shortenForm[key] = form[key].length > MAX_LEN ? form[key].substring(0, MAX_LEN) + '... (' + (form[key].length - MAX_LEN) + ' bytes more)' : form[key];
});
return shortenForm;
}
function req() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var sequence = Date.now();
var partial = params.partial;
var headers = Object.assign({}, params.headers);
if (partial) {
headers['X-MicrosoftAjax'] = 'Delta=true';
}
var myParams = Object.assign({ method: 'GET' }, params, { headers: headers });
Eif (debug.enabled) {
debug(myParams.method + ' ' + myParams.url.substring(0, 80) + '...');
debug('headers => ' + JSON.stringify(shorten(myParams.headers)));
if (myParams.method === 'POST') {
debug('form => ' + JSON.stringify(shorten(myParams.form)));
}
writeToFile(sequence + '-1-request.json', JSON.stringify(shorten(myParams), null, 2));
}
return myRequest(myParams).then(function (response) {
Eif (debug.enabled) {
writeToFile(sequence + '-2-response.json', JSON.stringify({
request: response.request,
status: {
code: response.statusCode,
message: response.statusMessage
},
headers: response.headers,
body: response.body.substring(0, 1000) + '...'
}, null, 2));
writeToFile(sequence + '-3-response-body.html', response.body);
}
return { url: response.request.href, headers: response.headers, body: response.body };
});
}
// Export
module.exports = {
get: function get(params) {
return isString(params) ? req({ url: params }) : req(params);
},
post: function post(params) {
return req(Object.assign({ method: 'POST' }, params));
}
}; |