import logger from './logger.js'; let pollingRetries = 0; const MAX_POLLING_RETRIES = 5; export default class ErrorHandler { static async handleError(bot, chatId, error, context) { logger.error({ err: error, context }, 'Error in handler'); const errorMessage = process.env.NODE_ENV === 'development' ? `Error: ${error.message}` : 'An error occurred. Please try again later.'; if (!bot) return; try { await bot.sendMessage(chatId, errorMessage); } catch (sendError) { logger.error({ err: sendError }, 'Error sending error message'); } } static handlePollingError(error) { if (error.code === 'ETELEGRAM') { const statusCode = error.response?.statusCode; const description = error.response?.body?.description || ''; if (statusCode === 404 || description.includes('Not Found')) { pollingRetries++; logger.warn({ attempt: pollingRetries, maxRetries: MAX_POLLING_RETRIES, statusCode, description }, 'Invalid bot token (404). Will retry up to %d times.', MAX_POLLING_RETRIES); if (pollingRetries >= MAX_POLLING_RETRIES) { logger.error({ maxRetries: MAX_POLLING_RETRIES }, 'Bot token is invalid after %d retries. Stopping polling. Admin panel continues running.', MAX_POLLING_RETRIES); } return; } if (statusCode === 401 || statusCode === 403) { logger.error({ statusCode }, 'Authentication error. Stopping polling. Admin panel continues running.'); return; } logger.error({ err: error }, 'Telegram API Error'); } else { logger.error({ err: error }, 'Polling error'); } } }