UNPKG

acp-sdk

Version:

Agent Communication Protocol SDK

57 lines (55 loc) 1.6 kB
import { EventSourceParserStream } from 'eventsource-parser/stream'; import { SSEError } from './errors.js'; async function createEventSource({ url, fetch = globalThis.fetch, options }) { const response = await fetch(url, getFetchOptions(options)); return { response, async *consume() { if (response.status === 204) { throw new SSEError("Server sent HTTP 204, not connecting", response); } if (!response.ok) { throw new SSEError( `Non-200 status code (${response.status})`, response ); } if (!response.headers.get("content-type")?.startsWith("text/event-stream")) { throw new SSEError( 'Invalid content type, expected "text/event-stream"', response ); } if (!response.body) { throw new SSEError("Missing response body", response); } const stream = response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream({ onError: "terminate" })); try { for await (const message of stream) { yield message; } } catch (e) { const err = e; if (err.name !== "AbortError") { throw new SSEError(err.message, response, { cause: err }); } else { throw err; } } } }; } function getFetchOptions(options) { return { ...options, headers: { Accept: "text/event-stream", ...options?.headers }, cache: "no-store" }; } export { createEventSource }; //# sourceMappingURL=sse.js.map //# sourceMappingURL=sse.js.map