UNPKG

@arkade-os/sdk

Version:

Bitcoin wallet SDK with Taproot and Ark integration

61 lines (60 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.eventSourceIterator = eventSourceIterator; async function* eventSourceIterator(eventSource) { const messageQueue = []; const errorQueue = []; let messageResolve = null; let errorResolve = null; const messageHandler = (event) => { if (messageResolve) { messageResolve(event); messageResolve = null; } else { messageQueue.push(event); } }; const errorHandler = () => { const error = new Error("EventSource error"); if (errorResolve) { errorResolve(error); errorResolve = null; } else { errorQueue.push(error); } }; eventSource.addEventListener("message", messageHandler); eventSource.addEventListener("error", errorHandler); try { while (true) { // if we have queued messages, yield the first one, remove it from the queue if (messageQueue.length > 0) { yield messageQueue.shift(); continue; } // if we have queued errors, throw the first one, remove it from the queue if (errorQueue.length > 0) { const error = errorQueue.shift(); throw error; } // wait for the next message or error const result = await new Promise((resolve, reject) => { messageResolve = resolve; errorResolve = reject; }).finally(() => { messageResolve = null; errorResolve = null; }); if (result) { yield result; } } } finally { // clean up eventSource.removeEventListener("message", messageHandler); eventSource.removeEventListener("error", errorHandler); } }