diff --git a/adaptor-ym.js b/adaptor-ym.js index de7d145..9c90793 100644 --- a/adaptor-ym.js +++ b/adaptor-ym.js @@ -10,10 +10,10 @@ function onReady() { YM.login(username, password); } -function onLoginSuccessful(data) { +function onOnline(data) { logger.info('YM login successful', {data: data}); - if (callbacks.onLoginSuccessful) { - callbacks.onLoginSuccessful(); + if (callbacks.onOnline) { + callbacks.onOnline(); } } @@ -43,7 +43,7 @@ function init(_username, _password, _logger, _callbacks) { callbacks = _callbacks; YM.on('ready', onReady); - YM.on('loginSuccessful', onLoginSuccessful); + YM.on('loginSuccessful', onOnline); YM.on('loginError', onLoginError); YM.on('friendsList', onFriendsList); YM.on('pm', onPM); diff --git a/index.js b/index.js index 06ed839..18e575c 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,6 @@ var fs = require('fs'); var ini = require('ini'); var expresso = require('sate24-expresso'); -var partner = require('./partner-ym'); var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); process.chdir(__dirname); @@ -9,7 +8,9 @@ process.chdir(__dirname); var logger = require('sate24/logger.js').start(); var HttpServer = require('sate24/httpserver.js'); var aaa = require('sate24/aaa.js'); -var partner = require('./partner-ym.js'); +var partner = require('sate24/partner-im.js'); +var imAdaptor = require('./adaptor-ym'); + var matrix = aaa.prepareMatrix(); @@ -19,6 +20,7 @@ var options = { 'config': config, 'matrix': matrix, 'partner': partner, + 'imAdaptor': imAdaptor } var httpServer = HttpServer.start(config, options); diff --git a/partner-ym.js b/partner-ym.js deleted file mode 100644 index 7c177ca..0000000 --- a/partner-ym.js +++ /dev/null @@ -1,141 +0,0 @@ -var im = require('sate24/im.js') -var YM = require('yahoomessenger'); -var imAdaptor = require('./adaptor-ym'); - -var config; -var aaa; -var logger; -var callbackReport; - -function onLoginSuccessful() { - logger.info('Login successful, resuming aaa communication'); - aaa.resume(); -} - -function onPM(from, msg) { - - if (!im.isAllowedFrom(from)) { - logger.info('Ignoring message from unknown sender', {from: from, msg: msg}); - return; - } - - var remoteProduct = im.getRemoteProductFromMessage(msg); - var destination = im.getDestinationFromMessage(msg); - - if (!remoteProduct && !destination) { - logger.warn('Missing remote product or destination', {remoteProduct: remoteProduct, destination: destination, msg: msg}); - return; - } - - logger.info('Got report from partner', {remoteProduct: remoteProduct, destination: destination, msg: msg}); - im.getTask(remoteProduct, destination, function(err, task) { - if (err) { - logger.warn('Error getting relevant task'); - return; - } - - if (!task) { - logger.warn('Something wrong, undefined task without error') - return; - } - - logger.verbose('Got relevant task', {task: task, msg: msg}); - var rc = im.getRcFromMessage(msg); - if (rc == '00') { - var sn = im.getSnFromMessage(msg); - if (sn) { - msg = 'SN=' + sn + ';' + msg; - } - } - - if (['00', '55', '68'].indexOf(rc) == -1) { - im.deleteTask(remoteProduct, destination); - } - - if (rc != '68') { - im.cancelResendDelay(task); - } - - callbackReport(task.requestId, rc, msg); - }); -} - -function start(options) { - if (options && options.config) { - config = options.config; - } else { - console.log('Unknown options.config'); - process.exit('1'); - } - - if (options && options.aaa) { - aaa = options.aaa; - } - - if (options && options.aaa && options.aaa.callbackReport) { - callbackReport = options.aaa.callbackReport; - } else { - console.log('Unknown options.aaa.callbackReport') - process.exit(2); - } - - if (options && options.logger) { - logger = options.logger; - } else { - logger = new winston.Logger({ - transports: [ - new (winston.transports.Console)() - ] - }); - } - - var callbacks = { - onLoginSuccessful: onLoginSuccessful, - onPM: onPM, - } - - im.init(options); - imAdaptor.init(config.h2h_out.ym_id, config.h2h_out.ym_password, logger, callbacks); -} - -function onSameDayDupe(task, archivedTask) { - if (task.requestId == archivedTask.requestId) { - logger.info('Mengulang trx untuk advice', {task: task}); - _topupRequest(task); - } else { - logger.info('Terdeteksi trx sama dalam satu hari yang sama', {task: task}); - callbackReport(task.requestId, '55', 'Terdeteksi trx sama dalam satu hari yang sama'); - } -} - -function _topupRequest(task) { - var pattern = config.h2h_out.request_pattern; - - var keywords = { - remoteProduct: task.remoteProduct, - destination: task.destination, - pin: config.h2h_out.pin - } - - im.saveTask(task, function() { - im.registerResendDelay(task); - - var msg = im.createMessage(pattern, keywords); - imAdaptor.sendMessage(config.h2h_out.partner, msg); - }); - -} - -function topupRequest(task) { - if (!aaa.isTodayTrx(task)) { - logger.warn('Maaf, transaksi beda hari tidak dapat dilakukan'); - callbackReport(task.requestId, '68', 'Maaf, transaksi beda hari tidak dapat dilakukan'); - im.cancelResendDelay(task); - return; - } - - im.checkForSameDayDuplicate(task, _topupRequest, onSameDayDupe, _topupRequest); -} - -exports.start = start; -exports.topupRequest = topupRequest; diff --git a/sample.config.ini b/sample.config.ini index 19f41e2..88ebed8 100644 --- a/sample.config.ini +++ b/sample.config.ini @@ -8,12 +8,12 @@ apikey=123497 redis_host=localhost redis_port=6379 balance_regex=Saldo: Rp (\d+?)\. -auto_resend_delay_secs=120 +auto_resend_delay_secs=300 dump_stats_interval_secs=300 [h2h_out] -ym_id=myymid -ym_password=mypassword +im_username=myymid +im_password=mypassword partner=partnerymid allow_response_from=partnerymid pin=1234