UNPKG

ticketvr

Version:

check your ticketVR balance in the command line - Brazilian tickets only

218 lines (189 loc) 6.79 kB
(function() { var Insight, checkCards, clc, defaults, fs, getTransactionList, insight, makeRequest, notifier, pkg, request, showError, showResult, showScheduling, showTransactionList, ticketVR, updateNotifier, userhome, writeFile; ticketVR = require('commander'); request = require('request'); fs = require('fs'); userhome = require('userhome'); clc = require('cli-color'); updateNotifier = require('update-notifier'); Insight = require('insight'); pkg = require('../package.json'); insight = new Insight({ packageName: pkg.name, packageVersion: pkg.version, trackingCode: 'UA-5427757-46' }); if (insight.optOut === void 0) { return insight.askPermission(); } String.prototype.clean = function() { return this.replace(/[ -.]/g, ''); }; defaults = { base: "http://www.ticket.com.br/portal-web/consult-card", random: function() { return Math.random(); }, url: function(type, card) { return "" + this.base + "/balance/json?chkProduto=TR&card=" + card + "&rand=" + this.random; }, tUrl: function(card, token, rows) { return "" + this.base + "/release/json?txtOperacao=lancamentos&token=" + token + "&card=" + card + "&rows=" + rows + "&rand=" + this.random; }, list: ['Ticket Restaurante', 'Ticket Alimentação'], types: ['TR', 'TA'], file: userhome('.ticketVR.json') }; ticketVR.version(pkg.version).option('-r, --remove', 'Remover os cartões salvos').option('-l, --list [value]', 'Listar últimas transações. Ex: ticketVR -l 10', parseInt).parse(process.argv); notifier = updateNotifier({ packagePath: '../package' }); if (notifier.update) { notifier.notify(); } makeRequest = function(type, card, callback) { var options; options = { headers: { "Host": "www.ticket.com.br", "Referer": "http://www.ticket.com.br/portal/portalcorporativo/home/home.htm", "X-Requested-With": "XMLHttpRequest", "Accept": "application/json, text/javascript, */*; q=0.01" }, url: defaults.url(type, card) }; return request(options, function(err, res, body) { var result, val; if (!err && res.statusCode === 200) { result = JSON.parse(body); if (err || !result.status) { return showError(result.messageError, card); } else { showResult(type, clc.blue(result.card.balance.value)); if (ticketVR.list) { val = typeof ticketVR.list === 'number' ? ticketVR.list : 6; getTransactionList(card, result.token, val); } showScheduling(result.card.scheduling); if (typeof callback === "function") { return callback(); } } } else { console.log('----------------------------------'); console.log(clc.red("Não foi possível conectar com o servidor :(\nVerifique sua conexão com a internet.")); console.log('----------------------------------'); return process.stdin.destroy(); } }); }; getTransactionList = function(card, token, rows) { var options; options = { headers: { "Host": "www.ticket.com.br", "Referer": "http://www.ticket.com.br/portal/portalcorporativo/usuario/consulte-seu-saldo/consulte-seu-saldo.htm?card=" + card + "&token=" + token, "X-Requested-With": "XMLHttpRequest", "Accept": "application/json, text/javascript, */*; q=0.01" }, url: defaults.tUrl(card, token, rows) }; return request(options, function(err, res, body) { var result; result = JSON.parse(body); if (err || !result.status) { return showError(result.messageError, token); } else { return showTransactionList(result.card.release); } }); }; checkCards = function(type, file, callback) { var data, json; if (fs.existsSync(file)) { data = fs.readFileSync(file, 'utf8'); json = JSON.parse(data); if (!!json[type]) { defaults.cards = json[type]; return callback(true); } else { return callback(false); } } else { return callback(false); } }; showTransactionList = function(itens) { if (itens.length > 0) { console.log("Últimas transações:"); itens.forEach(function(iten) { return console.log(" • " + iten.date + " | %s | " + iten.description, clc.red("R$" + iten.value)); }); return console.log('----------------------------------'); } }; showScheduling = function(itens) { if (itens.length > 0) { return itens.forEach(function(iten) { console.log("Próximo depósito no dia %s no valor de R$ %s", clc.blue(iten.date), clc.blue(iten.value)); console.log("Motivo: " + iten.description); return console.log('----------------------------------'); }); } }; showResult = function(type, value) { console.log('----------------------------------'); console.log(' O saldo do seu %s é R$ %s', type, value); console.log('----------------------------------'); return process.stdin.destroy(); }; showError = function(err, card) { console.log(clc.red('ERRO')); console.log(clc.red('%s: %s'), err, card); insight.track('error', 'err'); return process.stdin.destroy(); }; writeFile = function(file, type, card) { var data, json; if (fs.existsSync(file)) { data = fs.readFileSync(file, 'utf8'); json = JSON.parse(data); } else { json = {}; } json[type] = card.clean(); fs.writeFileSync(file, JSON.stringify(json, null, 4)); console.log("Seu cartão foi salvo com sucesso!\nPara apagar use o comando 'ticketVR -r'\n----------------------------------"); return insight.track('cards', 'saved'); }; console.log('----------------------------------'); console.log("Escolha o tipo de cartão:"); if (ticketVR.remove) { fs.unlinkSync(defaults.file); insight.track('cards', 'deleted'); } ticketVR.choose(defaults.list, function(i) { var list, type; type = defaults.types[i]; list = defaults.list[i]; if (ticketVR.list) { insight.track('cards', 'list', 'type', type); } else { insight.track('cards', 'type', type); } return checkCards(type, defaults.file, function(exist) { if (exist) { return makeRequest(type, defaults.cards.clean()); } else { return ticketVR.prompt("Número do " + list + ": ", /\b(?:\d[ -.]*?){16}\b/, function(card) { return makeRequest(type, card.clean(), function() { return writeFile(defaults.file, type, card); }); }); } }); }); }).call(this); /* //@ sourceMappingURL=ticketVR.js.map */