@whiskeysockets/baileys
Version:
A WebSockets library for interacting with WhatsApp Web
40 lines • 1.71 kB
JavaScript
/**
* 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