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 Inline Diff

1 node_modules/ 1 node_modules/
2 logs/log* 2 logs/log*
3 config.ini 3 config.ini
4 config.im.json
4 5
File was created 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;
62
1 var fs = require('fs'); 1 var fs = require('fs');
2 var ini = require('ini'); 2 var ini = require('ini');
3 var expresso = require('sate24-expresso'); 3 var expresso = require('sate24-expresso');
4 var partner = require('./partner-ym');
4 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 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);
5 27
File was created 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;
135