|
|
|
const axios = require('axios');
|
|
|
|
const { default: axiosRetry } = require('axios-retry');
|
|
|
|
const webhookUrl = require('../../config').webhook;
|
|
|
|
const { logger, getUserLogger } = require('../../utils/logger.util');
|
|
|
|
|
|
|
|
// 5s, 20s, 5m, 30m, 1h, 2h, 4h, 24h
|
|
|
|
const retryDelays = [5000, 20000, 300000, 1800000, 3600000, 7200000, 14400000, 86400000];
|
|
|
|
axiosRetry(axios, {
|
|
|
|
retries: 8, // Number of retries
|
|
|
|
retryDelay: retryCount => {
|
|
|
|
const delayIndex = Math.min(retryCount - 1, retryDelays.length - 1);
|
|
|
|
const delay = retryDelays[delayIndex];
|
|
|
|
logger.warn(`retry attempt: ${retryCount}, delay: ${delay / 1000}s`);
|
|
|
|
return delay;
|
|
|
|
},
|
|
|
|
retryCondition: error => {
|
|
|
|
// return false; //
|
|
|
|
return error.response?.status !== 200; // Retry only on non-200 status codes
|
|
|
|
},
|
|
|
|
onRetry: (retryCount, error, requestConfig) => {
|
|
|
|
logger.warn({ retryCount, error: error.message }, `Retrying webhook call, attempt ${retryCount}`);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
async function callWebhook(webhookPayload) {
|
|
|
|
try {
|
|
|
|
if (!webhookUrl) {
|
|
|
|
logger.error('no webhook url provided\n', webhookPayload);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
getUserLogger(webhookPayload.whatsAppNo).info({ webhookUrl, webhookPayload });
|
|
|
|
await axios.post(webhookUrl, webhookPayload);
|
|
|
|
} catch (error) {
|
|
|
|
logger.error(JSON.stringify({ webhookUrl, webhookPayload, error: error.message }, undefined, 2), 'Error calling webhook');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = { callWebhook };
|