Blame view
lib/custom-ping.js
3.29 KB
fa547d305
|
1 2 3 4 |
const MODULE_NAME = 'CUSTOM-PING'; const uniqid = require('uniqid'); const config = require('komodo-sdk/config'); |
39e412b9c
|
5 |
const logger = require('tektrans-logger'); |
fa547d305
|
6 |
|
dcbdd261d
|
7 |
const sender = require('./sender'); |
40a07aa47
|
8 |
const isVerbose = !!(config.custom_ping && config.custom_ping.verbose); |
27022872e
|
9 10 11 |
logger.verbose(`${MODULE_NAME} CE44F47F: Verbosity initialized`, { isVerbose, }); |
40a07aa47
|
12 |
|
fa547d305
|
13 |
let bot; |
39e412b9c
|
14 15 16 |
const allowedFromPartnerList = ( (config.custom_ping && config.custom_ping.allowed_from_partners) || [] ) |
fa547d305
|
17 18 19 |
.filter((item) => typeof item === 'string') .map((item) => (item || '').trim().toUpperCase()) .filter((item) => item); |
fa547d305
|
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
const isPingMessage = (msg) => { if (!msg) return false; if (typeof msg !== 'string') return false; return ((msg || '').trim().toUpperCase().search(/^PING($| )/) === 0); }; exports.isPingMessage = isPingMessage; const isPongMessage = (msg) => { if (!msg) return false; if (typeof msg !== 'string') return false; return ((msg || '').trim().toUpperCase().search(/^PONG($| )/) === 0); }; exports.isPongMessage = isPongMessage; const isAllowedPartner = (partner) => { if (!config.custom_ping) return false; if (config.custom_ping.disable_pong) return false; if (config.custom_ping.allowed_from_all) return true; return allowedFromPartnerList.indexOf((partner || '').trim().toUpperCase()) >= 0; }; exports.isAllowedPartner = isAllowedPartner; const sendPong = (xid, partner, pingMessage) => { if (!bot) return; if (!partner || typeof partner !== 'string' || !partner.trim()) return; const tokens = pingMessage.trim().split(/ +/); const pongMessage = [ 'PONG', (tokens && tokens[1]) || null, ].filter((item) => item) .join(' '); |
40a07aa47
|
56 |
if (isVerbose) { |
fa547d305
|
57 58 59 60 |
logger.verbose(`${MODULE_NAME} F0D18EF4: Responding PING message`, { xid, partner, pongMessage, }); } |
39836a169
|
61 |
sender.send(partner.trim(), pongMessage, null, !isVerbose); |
fa547d305
|
62 63 |
}; exports.sendPong = sendPong; |
ccd4f6b5b
|
64 65 66 67 68 69 70 |
const sleepMs = (ms) => new Promise((resolve) => { setTimeout(() => { resolve(true); }, ms); }); const pingSender = async () => { |
fa547d305
|
71 |
const xid = uniqid(); |
ccd4f6b5b
|
72 |
|
043ce9c67
|
73 |
if (bot) { |
493e4fa09
|
74 |
const msg = `PING ${xid}`; |
ccd4f6b5b
|
75 |
|
39836a169
|
76 |
sender.send(config.username, msg, xid, !isVerbose); |
9a9dc5bca
|
77 |
|
043ce9c67
|
78 79 80 81 82 83 84 |
if ( config.custom_ping && config.custom_ping.send_to && Array.isArray(config.custom_ping.send_to) ) { const partnerCount = config.custom_ping.send_to.length; for (let i = 0; i < partnerCount; i += 1) { |
dcbdd261d
|
85 |
const additionalDelay = Math.random() * 1000; |
043ce9c67
|
86 |
// eslint-disable-next-line no-await-in-loop |
dcbdd261d
|
87 |
await sleepMs(1000 + additionalDelay); |
043ce9c67
|
88 89 |
const partner = config.custom_ping.send_to[i]; |
40a07aa47
|
90 |
if (isVerbose) { |
043ce9c67
|
91 92 93 94 95 96 |
logger.verbose(`${MODULE_NAME} 21358F45: Sending custom ping`, { xid, partner, msg, }); } |
39836a169
|
97 |
sender.send(partner, msg, xid, !isVerbose); |
ccd4f6b5b
|
98 |
} |
fa547d305
|
99 |
} |
ccd4f6b5b
|
100 |
} |
043ce9c67
|
101 102 103 |
await sleepMs(3 * 1000); pingSender(); |
fa547d305
|
104 |
}; |
043ce9c67
|
105 106 107 108 109 110 |
const setBot = (botFromCaller) => { logger.verbose(`${MODULE_NAME} A063F39F: Bot registered for custom ping`); bot = botFromCaller; pingSender(); }; exports.setBot = setBot; |