UNPKG

@whiskeysockets/baileys

Version:

A WebSockets library for interacting with WhatsApp Web

40 lines 1.71 kB
/** * Creates a processor for offline stanza nodes that: * - Queues nodes for sequential processing * - Yields to the event loop periodically to avoid blocking * - Catches handler errors to prevent the processing loop from crashing */ export function makeOfflineNodeProcessor(nodeProcessorMap, deps, batchSize = 10) { const nodes = []; let isProcessing = false; const enqueue = (type, node) => { nodes.push({ type, node }); if (isProcessing) { return; } isProcessing = true; const promise = async () => { let processedInBatch = 0; while (nodes.length && deps.isWsOpen()) { const { type, node } = nodes.shift(); const nodeProcessor = nodeProcessorMap.get(type); if (!nodeProcessor) { deps.onUnexpectedError(new Error(`unknown offline node type: ${type}`), 'processing offline node'); continue; } await nodeProcessor(node).catch(err => deps.onUnexpectedError(err, `processing offline ${type}`)); processedInBatch++; // Yield to event loop after processing a batch // This prevents blocking the event loop for too long when there are many offline nodes if (processedInBatch >= batchSize) { processedInBatch = 0; await deps.yieldToEventLoop(); } } isProcessing = false; }; promise().catch(error => deps.onUnexpectedError(error, 'processing offline nodes')); }; return { enqueue }; } //# sourceMappingURL=offline-node-processor.js.map