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 };