Commit 205f271b3db52c638dde49efa5ad7077116c3960

Authored by Adhidarma Hadiwinoto
1 parent 875a930294
Exists in master

im.js pakai modul dari node-sate24

Showing 3 changed files with 1 additions and 333 deletions Side-by-side Diff

... ... @@ -1,331 +0,0 @@
1   -var redis = require('redis');
2   -var moment = require('moment');
3   -var LRU = require('lru-cache');
4   -
5   -var config;
6   -var logger;
7   -var partner;
8   -var imConfig;
9   -var redisClient;
10   -
11   -var resendHandlers = LRU({max: 2000, maxAge: 1000 * 3600 * 36});
12   -
13   -function dumpStats() {
14   - if (config.globals.auto_resend_delay_secs) {
15   - logger.verbose('DUMP STATS', {
16   - 'resendHandlers:length': resendHandlers.length,
17   - 'resendHandlers:itemCount': resendHandlers.itemCount,
18   - });
19   - }
20   -}
21   -
22   -function dumpStatsPeriodic() {
23   - var dumpStatsInterval = 1000 * 120;
24   - if (config.globals.dump_stats_interval_secs) {
25   - dumpStatsInterval = config.globals.dump_stats_interval_secs * 1000;
26   - }
27   - logger.verbose('Dump stats every ' + dumpStatsInterval / 1000 + ' secs (override it with config.globals.dump_stats_interval_secs)');
28   - setInterval(dumpStats, dumpStatsInterval);
29   -}
30   -
31   -function init(options) {
32   - if (options && options.config) {
33   - config = options.config;
34   - }
35   -
36   - if (options && options.logger) {
37   - logger = options.logger;
38   - }
39   -
40   - if (options && options.partner) {
41   - partner = options.partner;
42   - }
43   -
44   - createRedisClient(config.globals.redis_host, config.globals.redis_port);
45   - readImConfig();
46   -
47   - dumpStatsPeriodic();
48   -}
49   -
50   -function createRedisClient(host, port) {
51   - try {
52   - redisClient = redis.createClient(port, host);
53   - } catch(err) {
54   - logger.warn("Error creating redis client to " + host + ':' + port);
55   - }
56   -}
57   -
58   -function readImConfig(filename) {
59   -
60   - if (!filename) {
61   - filename = process.cwd() + '/config.im.json';
62   - }
63   -
64   - try {
65   - imConfig = require(filename);
66   - }
67   - catch(e) {
68   - imConfig = {};
69   - }
70   -
71   - logger.verbose('IM Config', {imConfig: imConfig});
72   - return imConfig;
73   -}
74   -
75   -function getPatternFromMessage(message, pattern, patternMatchIndex) {
76   - var re = new RegExp(pattern);
77   - var matches = message.match(re);
78   -
79   - if (!matches) {
80   - return null;
81   - }
82   -
83   - if (patternMatchIndex < matches.length) {
84   - return matches[patternMatchIndex];
85   - } else {
86   - return null;
87   - }
88   -}
89   -
90   -function getPatternsFromMessage(message, patterns) {
91   - var patternCount = patterns.length;
92   - for (var i = 0; i < patternCount; i++) {
93   -
94   - var pattern = patterns[i];
95   -
96   - var result = getPatternFromMessage(message, pattern.pattern, pattern.matchIndex);
97   - if (result) {
98   - return result;
99   - }
100   - }
101   -}
102   -
103   -function getTaskKey(task, chipInfo, today) {
104   - if (!chipInfo && config && config.globals && config.globals.gateway_name) {
105   - chipInfo = config.globals.gateway_name;
106   - }
107   -
108   - if (task.timestamp && !today) {
109   - today = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYYMMDD');
110   - }
111   -
112   - return chipInfo + '.trx.date:' + today + '.rProduct:' + task.remoteProduct.toUpperCase() + '.dest:' + task.destination ;
113   -}
114   -
115   -function saveTask(task, cb) {
116   - var key = getTaskKey(task, config.globals.gateway_name);
117   - logger.verbose('Saving task', {key: key, task: task});
118   -
119   - redisClient.set(key, JSON.stringify(task), function() {
120   - redisClient.expire(key, 3600*24);
121   - if (cb) {
122   - cb();
123   - }
124   - });
125   -}
126   -
127   -function getTask(remoteProduct, destination, cb) {
128   - var dummyTask = {
129   - remoteProduct: remoteProduct,
130   - destination: destination,
131   - }
132   -
133   - var key = getTaskKey(dummyTask, config.globals.gateway_name, moment().format('YYYYMMDD'));
134   - redisClient.get(key, function(err, result) {
135   - if (err) {
136   - logger.verbose('getTask: task not found', {key: key, params: dummyTask});
137   -
138   - cb(err, null);
139   - return;
140   - }
141   -
142   - var task = {};
143   -
144   - try {
145   - task = JSON.parse(result);
146   - }
147   - catch(e) {
148   - logger.warn('getTask: Can not parse result', {key: key, params: dummyTask, data: result});
149   - err = "Can not parse result"
150   - }
151   - cb(err, task);
152   - });
153   -}
154   -
155   -function deleteTask(remoteProduct, destination) {
156   - var dummyTask = {
157   - remoteProduct: remoteProduct,
158   - destination: destination,
159   - }
160   -
161   - var key = getTaskKey(dummyTask, config.globals.gateway_name, moment().format('YYYYMMDD'));
162   -
163   - try {
164   - redisClient.del(key);
165   - }
166   - catch(e) {};
167   -}
168   -
169   -function createMessage(pattern, keywords) {
170   - var msg = pattern;
171   -
172   - for (var key in keywords) {
173   - msg = msg.replace('[' + key + ']', keywords[key]);
174   - }
175   - return msg;
176   -}
177   -
178   -function getRemoteProductFromMessage(msg) {
179   - return getPatternsFromMessage(msg, imConfig.product_patterns);
180   -}
181   -
182   -function getDestinationFromMessage(msg) {
183   - return getPatternsFromMessage(msg, imConfig.destination_patterns);
184   -}
185   -
186   -function getSnFromMessage(msg) {
187   - return getPatternsFromMessage(msg, imConfig.sn_patterns);
188   -}
189   -
190   -function getRcFromMessage(msg) {
191   - var rcs = imConfig.response_codes;
192   - var rcsCount = rcs.length;
193   -
194   - for (var i = 0; i < rcsCount; i++) {
195   -
196   - var item = rcs[i];
197   - var re = new RegExp(item.pattern);
198   - if (msg.search(re) != -1) {
199   - return item.rc;
200   - }
201   -
202   - }
203   - return '68';
204   -}
205   -
206   -function isAllowedFrom(sender) {
207   - if (!config || !config.h2h_out || !config.h2h_out.allowed_response_from) {
208   - return true;
209   - }
210   -
211   - whitelist = config.h2h_out.allowed_response_from.split(',');
212   - whitelistCount = whitelist.length;
213   -
214   - for(var i=0; i<whitelistCount; i++) {
215   - if (sender == whitelist[i]) {
216   - return true;
217   - }
218   - }
219   -
220   - return false;
221   -}
222   -
223   -function checkForSameDayDuplicate(task, cbNoDupe, cbDupe, cbDupeWithSameReqId) {
224   - getTask(task.remoteProduct, task.destination, function(err, archivedTask) {
225   - if (err) {
226   - logger.warn('Error on checking same day duplicate', {task: task});
227   - cbNoDupe(task);
228   - return;
229   - }
230   -
231   - if (archivedTask && archivedTask.requestId) {
232   - if (cbDupeWithSameReqId && task.requestId == archivedTask.requestId) {
233   - logger.verbose('Duplicate trx on same day with same requestId', {task: task});
234   - cbDupeWithSameReqId(task, archivedTask);
235   - return;
236   - }
237   -
238   - logger.verbose('Duplicate trx on same day', {task: task, archivedTask: archivedTask});
239   - cbDupe(task, archivedTask);
240   - return;
241   - }
242   -
243   - cbNoDupe(task);
244   - });
245   -}
246   -
247   -function registerResendDelay(task) {
248   - if (!task.requestId) {
249   - logger.warn('Invalid task on resendDelay')
250   - return;
251   - }
252   -
253   - if (!config || !config.globals || !Number(config.globals.auto_resend_delay_secs)) {
254   - return;
255   - }
256   -
257   - if (!partner || !partner.topupRequest) {
258   - logger.warn('Skip request resend delay because partner.topupRequest is not exists');
259   - return;
260   - }
261   -
262   - var retry = 10;
263   - var oldHandler = resendHandlers.get(task.requestId);
264   - if (oldHandler) {
265   - retry = oldHandler.retry - 1;
266   -
267   - try {
268   - cancelResendDelay(task);
269   - }
270   - catch(e) {}
271   - }
272   -
273   - if (retry <= 0) {
274   - logger.verbose('Resend delay retry exceeded', {task: task});
275   - cancelResendDelay(task);
276   - return;
277   - }
278   -
279   - logger.verbose('Registering resend delay task request', {task: task, delay: config.globals.auto_resend_delay_secs, retry: retry});
280   - var handlerData = {
281   - handler: setTimeout(partner.topupRequest, config.globals.auto_resend_delay_secs * 1000, task),
282   - task: task,
283   - retry: retry
284   - }
285   -
286   - resendHandlers.set(task.requestId, handlerData);
287   -}
288   -
289   -function cancelResendDelay(task) {
290   - if (!task || !task.requestId) {
291   - logger.warn('Invalid task on cancelResendDelay');
292   - return;
293   - }
294   -
295   - var oldHandler = resendHandlers.get(task.requestId);
296   - if (!oldHandler) {
297   - return;
298   - }
299   -
300   - logger.verbose('Canceling resend delay', {task: task});
301   -
302   - try {
303   - if (oldHandler.handler) {
304   - clearTimeout(oldHandler.handler);
305   - }
306   - }
307   - catch(e) {};
308   -
309   - try {
310   - resendHandlers.del(task.requestId);
311   - }
312   - catch(e) {};
313   -}
314   -
315   -exports.init = init;
316   -exports.start = init;
317   -exports.getPatternFromMessage = getPatternFromMessage;
318   -exports.getPatternsFromMessage = getPatternsFromMessage;
319   -exports.saveTask = saveTask;
320   -exports.getTask = getTask;
321   -exports.readImConfig = readImConfig;
322   -exports.createMessage = createMessage;
323   -exports.getRemoteProductFromMessage = getRemoteProductFromMessage;
324   -exports.getDestinationFromMessage = getDestinationFromMessage;
325   -exports.getRcFromMessage = getRcFromMessage;
326   -exports.getSnFromMessage = getSnFromMessage;
327   -exports.isAllowedFrom = isAllowedFrom;
328   -exports.checkForSameDayDuplicate = checkForSameDayDuplicate;
329   -exports.deleteTask = deleteTask;
330   -exports.registerResendDelay = registerResendDelay;
331   -exports.cancelResendDelay = cancelResendDelay;
... ... @@ -22,7 +22,6 @@
22 22 "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
23 23 "license": "ISC",
24 24 "dependencies": {
25   - "lru-cache": "^4.0.1",
26 25 "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git",
27 26 "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
28 27 "yahoomessenger": "^0.1.3-Beta"
1   -var im = require('./im.js')
  1 +var im = require('sate24/im.js')
2 2 var YM = require('yahoomessenger');
3 3 var imAdaptor = require('./adaptor-ym');
4 4