Commit c18e1ec47550bde7cf91296f7ff54aa9f567c5d2

Authored by Adhidarma Hadiwinoto
1 parent 70f1195f5c
Exists in master

ready to run

Showing 4 changed files with 218 additions and 0 deletions Side-by-side Diff

1 1 node_modules/
2 2 logs/log*
3 3 config.ini
  4 +config.im.json
... ... @@ -0,0 +1,61 @@
  1 +var YM = require('yahoomessenger');
  2 +
  3 +var username;
  4 +var password;
  5 +
  6 +var callbacks;
  7 +
  8 +function onReady() {
  9 + logger.info('Going to login to YM as ' + username);
  10 + YM.login(username, password);
  11 +}
  12 +
  13 +function onLoginSuccessful(data) {
  14 + logger.info('YM login successful', {data: data});
  15 + if (callbacks.onLoginSuccessful) {
  16 + callbacks.onLoginSuccessful();
  17 + }
  18 +}
  19 +
  20 +function onLoginError(data) {
  21 + logger.warn('YM login error', {data: data});
  22 +}
  23 +
  24 +function onFriendsList(data) {
  25 + logger.verbose('Got list of friendlist', {data: data});
  26 +}
  27 +
  28 +function onPM(data) {
  29 + logger.verbose('Got a message', {data: data})
  30 + if (callbacks.onPM) {
  31 + callbacks.onPM(data.sender, data.message);
  32 + }
  33 +}
  34 +
  35 +function onPing(data) {
  36 + logger.verbose('Got ping', {data: data});
  37 +}
  38 +
  39 +function init(_username, _password, _logger, _callbacks) {
  40 + username = _username;
  41 + password = _password;
  42 + logger = _logger;
  43 + callbacks = _callbacks;
  44 +
  45 + YM.on('ready', onReady);
  46 + YM.on('loginSuccessful', onLoginSuccessful);
  47 + YM.on('loginError', onLoginError);
  48 + YM.on('friendsList', onFriendsList);
  49 + YM.on('pm', onPM);
  50 + YM.on('offlinePM', onPM);
  51 +
  52 + YM.newInstance();
  53 +}
  54 +
  55 +function sendMessage(destination, msg) {
  56 + logger.verbose('Sending message', {from: username, destination: destination, msg: msg});
  57 + YM.sendPM(destination, msg);
  58 +}
  59 +
  60 +exports.init = init;
  61 +exports.sendMessage = sendMessage;
1 1 var fs = require('fs');
2 2 var ini = require('ini');
3 3 var expresso = require('sate24-expresso');
  4 +var partner = require('./partner-ym');
4 5 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
  6 +
  7 +process.chdir(__dirname);
  8 +
  9 +var logger = require('sate24/logger.js').start();
  10 +var aaa = require('sate24/aaa.js');
  11 +var partner = require('./partner-ym.js');
  12 +
  13 +var matrix = aaa.prepareMatrix();
  14 +
  15 +var options = {
  16 + 'aaa': aaa,
  17 + 'logger': logger,
  18 + 'config': config,
  19 + 'matrix': matrix,
  20 +}
  21 +
  22 +aaa.pause();
  23 +
  24 +partner.start(options);
  25 +aaa.start(config, partner, options);
  26 +expresso.start(options);
... ... @@ -0,0 +1,134 @@
  1 +var im = require('sate24/im.js')
  2 +var YM = require('yahoomessenger');
  3 +var imAdaptor = require('./adaptor-ym');
  4 +
  5 +var config;
  6 +var aaa;
  7 +var logger;
  8 +var callbackReport;
  9 +
  10 +function onLoginSuccessful() {
  11 + logger.info('Login successful, resuming aaa communication');
  12 + aaa.resume();
  13 +}
  14 +
  15 +function onPM(from, msg) {
  16 +
  17 + if (!im.isAllowedFrom(from)) {
  18 + logger.info('Ignoring message from unknown sender', {from: from, msg: msg});
  19 + return;
  20 + }
  21 +
  22 + var remoteProduct = im.getRemoteProductFromMessage(msg);
  23 + var destination = im.getDestinationFromMessage(msg);
  24 +
  25 + if (!remoteProduct && !destination) {
  26 + logger.warn('Missing remote product or destination', {remoteProduct: remoteProduct, destination: destination, msg: msg});
  27 + return;
  28 + }
  29 +
  30 + logger.info('Got report from partner', {remoteProduct: remoteProduct, destination: destination, msg: msg});
  31 + im.getTask(remoteProduct, destination, function(err, task) {
  32 + if (err) {
  33 + logger.warn('Error getting relevant task');
  34 + return;
  35 + }
  36 +
  37 + if (!task) {
  38 + logger.warn('Something wrong, undefined task without error')
  39 + return;
  40 + }
  41 +
  42 + logger.verbose('Got relevant task', {task: task, msg: msg});
  43 + var rc = im.getRcFromMessage(msg);
  44 + if (rc == '00') {
  45 + var sn = im.getSnFromMessage(msg);
  46 + if (sn) {
  47 + msg = 'SN=' + sn + ';' + msg;
  48 + }
  49 + }
  50 +
  51 + if (['00', '55', '68'].indexOf(rc) == -1) {
  52 + im.deleteTask(remoteProduct, destination);
  53 + }
  54 +
  55 + callbackReport(task.requestId, rc, msg);
  56 + });
  57 +}
  58 +
  59 +function start(options) {
  60 + if (options && options.config) {
  61 + config = options.config;
  62 + } else {
  63 + console.log('Unknown options.config');
  64 + process.exit('1');
  65 + }
  66 +
  67 + if (options && options.aaa) {
  68 + aaa = options.aaa;
  69 + }
  70 +
  71 + if (options && options.aaa && options.aaa.callbackReport) {
  72 + callbackReport = options.aaa.callbackReport;
  73 + } else {
  74 + console.log('Unknown options.aaa.callbackReport')
  75 + process.exit(2);
  76 + }
  77 +
  78 + if (options && options.logger) {
  79 + logger = options.logger;
  80 + } else {
  81 + logger = new winston.Logger({
  82 + transports: [
  83 + new (winston.transports.Console)()
  84 + ]
  85 + });
  86 + }
  87 +
  88 + var callbacks = {
  89 + onLoginSuccessful: onLoginSuccessful,
  90 + onPM: onPM,
  91 + }
  92 +
  93 + im.init(options);
  94 + imAdaptor.init(config.h2h_out.ym_id, config.h2h_out.ym_password, logger, callbacks);
  95 +}
  96 +
  97 +function onSameDayDupe(task, archivedTask) {
  98 + if (task.requestId == archivedTask.requestId) {
  99 + logger.info('Mengulang trx untuk advice', {task: task});
  100 + _topupRequest(task);
  101 + } else {
  102 + logger.info('Terdeteksi trx sama dalam satu hari yang sama', {task: task});
  103 + callbackReport(task.requestId, '55', 'Terdeteksi trx sama dalam satu hari yang sama');
  104 + }
  105 +}
  106 +
  107 +function _topupRequest(task) {
  108 + var pattern = config.h2h_out.request_pattern;
  109 +
  110 + var keywords = {
  111 + remoteProduct: task.remoteProduct,
  112 + destination: task.destination,
  113 + pin: config.h2h_out.pin
  114 + }
  115 +
  116 + im.saveTask(task, function() {
  117 + var msg = im.createMessage(pattern, keywords);
  118 + imAdaptor.sendMessage(config.h2h_out.partner, msg);
  119 + });
  120 +
  121 +}
  122 +
  123 +function topupRequest(task) {
  124 + if (!aaa.isTodayTrx(task)) {
  125 + logger.warn('Maaf, transaksi beda hari tidak dapat dilakukan');
  126 + callbackReport(task.requestId, '68', 'Maaf, transaksi beda hari tidak dapat dilakukan');
  127 + return;
  128 + }
  129 +
  130 + im.checkForSameDayDuplicate(task, _topupRequest, onSameDayDupe, _topupRequest);
  131 +}
  132 +
  133 +exports.start = start;
  134 +exports.topupRequest = topupRequest;