@stackline/sse 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/CONTRIBUTING.md +45 -0
- package/LICENSE +21 -0
- package/NOTICE +6 -0
- package/README.md +340 -0
- package/SECURITY.md +35 -0
- package/dist/index.cjs +1560 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.cts +293 -0
- package/dist/index.d.mts +293 -0
- package/dist/index.d.ts +293 -0
- package/dist/index.js +1539 -0
- package/dist/index.js.map +7 -0
- package/dist/index.min.js +13 -0
- package/dist/index.min.js.map +7 -0
- package/package.json +102 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.js", "../src/errors.js", "../src/parser.js", "../src/encoder.js", "../src/iterable.js", "../src/client.js", "../src/server.js"],
|
|
4
|
+
"sourcesContent": ["export {\n SSEError,\n SSEEncodeError,\n SSEHTTPError,\n SSEParseError,\n SSEReplayError,\n SSERetryError,\n SSETimeoutError\n} from './errors.js';\nexport { createParser } from './parser.js';\nexport {\n EVENT_STREAM_CONTENT_TYPE,\n EventStreamContentType,\n createEncoderStream,\n encode,\n encodeComment,\n encodeJSON,\n encodeSSE\n} from './encoder.js';\nexport { createDecoderStream, decodeJSON, decodeSSE, toAsyncIterable } from './iterable.js';\nexport { consumeSSE, fetchEventSource, fetchSSE } from './client.js';\nexport { createSSEChannel, eventStreamResponse } from './server.js';\n\nimport { createParser } from './parser.js';\nimport {\n EVENT_STREAM_CONTENT_TYPE,\n EventStreamContentType,\n createEncoderStream,\n encode,\n encodeComment,\n encodeJSON,\n encodeSSE\n} from './encoder.js';\nimport {\n SSEEncodeError,\n SSEError,\n SSEHTTPError,\n SSEParseError,\n SSEReplayError,\n SSERetryError,\n SSETimeoutError\n} from './errors.js';\nimport { createDecoderStream, decodeJSON, decodeSSE, toAsyncIterable } from './iterable.js';\nimport { consumeSSE, fetchEventSource, fetchSSE } from './client.js';\nimport { createSSEChannel, eventStreamResponse } from './server.js';\n\nconst api = Object.freeze({\n EVENT_STREAM_CONTENT_TYPE,\n EventStreamContentType,\n SSEEncodeError,\n SSEError,\n SSEHTTPError,\n SSEParseError,\n SSEReplayError,\n SSERetryError,\n SSETimeoutError,\n consumeSSE,\n createDecoderStream,\n createEncoderStream,\n createParser,\n createSSEChannel,\n decodeJSON,\n decodeSSE,\n encode,\n encodeComment,\n encodeJSON,\n encodeSSE,\n eventStreamResponse,\n fetchEventSource,\n fetchSSE,\n toAsyncIterable\n});\n\nexport default api;\n", "export class SSEError extends Error {\n constructor(message, code, details) {\n super(message);\n this.name = new.target.name;\n this.code = code;\n if (details && details.cause !== undefined) this.cause = details.cause;\n }\n}\n\nexport class SSEParseError extends SSEError {\n constructor(message, details = {}) {\n super(message, details.code || 'ERR_SSE_PARSE', details);\n this.fatal = details.fatal === true;\n if (details.field !== undefined) this.field = details.field;\n if (details.line !== undefined) this.line = details.line;\n if (details.limit !== undefined) this.limit = details.limit;\n }\n}\n\nexport class SSEEncodeError extends SSEError {\n constructor(message, field, cause) {\n super(message, 'ERR_SSE_ENCODE', { cause });\n this.field = field;\n }\n}\n\nexport class SSEHTTPError extends SSEError {\n constructor(message, response, code = 'ERR_SSE_HTTP') {\n super(message, code);\n this.response = response;\n this.status = response && typeof response.status === 'number' ? response.status : 0;\n }\n}\n\nexport class SSETimeoutError extends SSEError {\n constructor(phase, timeout, cause) {\n super(`SSE ${phase} timeout after ${timeout}ms`, 'ERR_SSE_TIMEOUT', { cause });\n this.phase = phase;\n this.timeout = timeout;\n }\n}\n\nexport class SSERetryError extends SSEError {\n constructor(attempts, cause) {\n super(`SSE retry budget exhausted after ${attempts} attempt${attempts === 1 ? '' : 's'}`, 'ERR_SSE_RETRY', { cause });\n this.attempts = attempts;\n }\n}\n\nexport class SSEReplayError extends SSEError {\n constructor() {\n super(\n 'The request body cannot be replayed. Provide bodyFactory or disable reconnection.',\n 'ERR_SSE_BODY_REPLAY'\n );\n }\n}\n", "import { SSEParseError } from './errors.js';\n\nconst DEFAULT_MAX_EVENT_SIZE = 1024 * 1024;\nconst DEFAULT_MAX_LINE_LENGTH = 1024 * 1024;\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst BOM = 0xfeff;\nconst NUL = '\\0';\n\nconst noop = () => {};\n\nexport function createParser(config = {}) {\n if (typeof config === 'function') config = { onEvent: config };\n if (!config || typeof config !== 'object') {\n throw new TypeError('Parser configuration must be an object or event callback');\n }\n\n const onEvent = typeof config.onEvent === 'function' ? config.onEvent : noop;\n const onComment = typeof config.onComment === 'function' ? config.onComment : noop;\n const onRetry = typeof config.onRetry === 'function' ? config.onRetry : noop;\n const onError = typeof config.onError === 'function' ? config.onError : noop;\n const onId = typeof config.onId === 'function' ? config.onId : noop;\n const strict = config.strict === true;\n const fatalUTF8 = config.fatalUTF8 === true;\n const maxEventSize = readLimit(\n config.maxEventSize === undefined ? config.maxBufferSize : config.maxEventSize,\n DEFAULT_MAX_EVENT_SIZE,\n 'maxEventSize'\n );\n const maxLineLength = readLimit(\n config.maxLineLength,\n DEFAULT_MAX_LINE_LENGTH,\n 'maxLineLength'\n );\n\n let decoder;\n let inputMode;\n let lineFragments = [];\n let lineLength = 0;\n let skipLeadingLF = false;\n let atStart = true;\n let dataLines = [];\n let eventSize = 0;\n let eventType;\n let idBuffer = normalizeInitialId(config.lastEventId);\n let committedId = idBuffer;\n let hasPendingId = false;\n let terminated = false;\n let bytes = 0;\n let characters = 0;\n let events = 0;\n let comments = 0;\n let retries = 0;\n\n function feed(chunk) {\n if (terminated) {\n throw new SSEParseError('Parser is terminated; call reset() before feeding more data', {\n code: 'ERR_SSE_TERMINATED',\n fatal: true\n });\n }\n if (typeof chunk === 'string') {\n if (inputMode === 'bytes') {\n throw fatal('Cannot mix string and byte chunks in one parser stream', 'ERR_SSE_CHUNK_TYPE');\n }\n inputMode = 'string';\n characters += chunk.length;\n processText(chunk);\n return api;\n }\n if (!(chunk instanceof Uint8Array)) {\n throw new TypeError('SSE parser chunks must be strings or Uint8Array values');\n }\n if (inputMode === 'string') {\n throw fatal('Cannot mix string and byte chunks in one parser stream', 'ERR_SSE_CHUNK_TYPE');\n }\n inputMode = 'bytes';\n bytes += chunk.byteLength;\n let text;\n try {\n text = getDecoder().decode(chunk, { stream: true });\n } catch (error) {\n if (error instanceof SSEParseError) throw error;\n throw fatal('Invalid UTF-8 in the SSE stream', 'ERR_SSE_UTF8', { cause: error });\n }\n characters += text.length;\n processText(text);\n return api;\n }\n\n function end() {\n if (terminated) return api;\n if (decoder) {\n try {\n const tail = decoder.decode();\n characters += tail.length;\n processText(tail);\n } catch (error) {\n throw fatal('Invalid UTF-8 at the end of the SSE stream', 'ERR_SSE_UTF8', { cause: error });\n }\n }\n discardPendingEvent();\n clearLine();\n return api;\n }\n\n function reset(options = {}) {\n if (options && options.consume && lineLength > 0) processLine(joinLine());\n const preserve = Boolean(options && options.preserveLastEventId);\n const nextId = preserve ? committedId : normalizeInitialId(config.lastEventId);\n decoder = undefined;\n inputMode = undefined;\n lineFragments = [];\n lineLength = 0;\n skipLeadingLF = false;\n atStart = true;\n dataLines = [];\n eventSize = 0;\n eventType = undefined;\n idBuffer = nextId;\n committedId = nextId;\n hasPendingId = false;\n terminated = false;\n bytes = 0;\n characters = 0;\n events = 0;\n comments = 0;\n retries = 0;\n return api;\n }\n\n function processText(input) {\n let text = input;\n if (atStart && text.length > 0) {\n atStart = false;\n if (text.charCodeAt(0) === BOM) text = text.slice(1);\n }\n if (text.length === 0) return;\n\n if (!skipLeadingLF && text.indexOf('\\r') === -1) {\n processLFText(text);\n return;\n }\n\n let index = 0;\n let segmentStart = 0;\n if (skipLeadingLF) {\n skipLeadingLF = false;\n if (text.charCodeAt(0) === LF) {\n index = 1;\n segmentStart = 1;\n }\n }\n\n for (; index < text.length; index++) {\n const code = text.charCodeAt(index);\n if (code !== LF && code !== CR) continue;\n appendLine(text.slice(segmentStart, index));\n processLine(joinLine());\n clearLine();\n if (code === CR) {\n if (text.charCodeAt(index + 1) === LF) index++;\n else if (index + 1 === text.length) skipLeadingLF = true;\n }\n segmentStart = index + 1;\n }\n appendLine(text.slice(segmentStart));\n }\n\n function processLFText(text) {\n let start = 0;\n let end = text.indexOf('\\n');\n while (end !== -1) {\n if (\n lineLength === 0 &&\n dataLines.length === 0 &&\n text.charCodeAt(end + 1) === LF &&\n isDataPrefix(text, start)\n ) {\n const valueStart = text.charCodeAt(start + 5) === SPACE ? start + 6 : start + 5;\n const value = text.slice(valueStart, end);\n if (end - start > maxLineLength) {\n throw fatal(`SSE line exceeded ${maxLineLength} characters`, 'ERR_SSE_LINE_LIMIT', {\n limit: maxLineLength\n });\n }\n addEventSize(value.length + 1);\n dispatchSingleData(value);\n start = end + 2;\n end = text.indexOf('\\n', start);\n continue;\n }\n if (lineLength > 0) {\n appendLine(text.slice(start, end));\n processLine(joinLine());\n clearLine();\n } else {\n const length = end - start;\n if (length > maxLineLength) {\n throw fatal(`SSE line exceeded ${maxLineLength} characters`, 'ERR_SSE_LINE_LIMIT', {\n limit: maxLineLength\n });\n }\n processLine(text.slice(start, end));\n }\n start = end + 1;\n end = text.indexOf('\\n', start);\n }\n appendLine(text.slice(start));\n }\n\n function appendLine(fragment) {\n if (!fragment) return;\n lineFragments.push(fragment);\n lineLength += fragment.length;\n if (lineLength > maxLineLength) {\n throw fatal(`SSE line exceeded ${maxLineLength} characters`, 'ERR_SSE_LINE_LIMIT', {\n limit: maxLineLength\n });\n }\n }\n\n function joinLine() {\n if (lineFragments.length === 0) return '';\n if (lineFragments.length === 1) return lineFragments[0];\n return lineFragments.join('');\n }\n\n function clearLine() {\n lineFragments = [];\n lineLength = 0;\n }\n\n function processLine(line) {\n if (line.length === 0) {\n dispatchEvent();\n return;\n }\n if (line.charCodeAt(0) === 58) {\n comments++;\n onComment(line.slice(line.charCodeAt(1) === SPACE ? 2 : 1));\n return;\n }\n\n const first = line.charCodeAt(0);\n if (\n first === 100 &&\n line.charCodeAt(1) === 97 &&\n line.charCodeAt(2) === 116 &&\n line.charCodeAt(3) === 97 &&\n line.charCodeAt(4) === 58\n ) {\n const start = line.charCodeAt(5) === SPACE ? 6 : 5;\n const value = line.slice(start);\n addEventSize(value.length + 1);\n dataLines.push(value);\n return;\n }\n if (\n first === 101 &&\n line.charCodeAt(1) === 118 &&\n line.charCodeAt(2) === 101 &&\n line.charCodeAt(3) === 110 &&\n line.charCodeAt(4) === 116 &&\n line.charCodeAt(5) === 58\n ) {\n const start = line.charCodeAt(6) === SPACE ? 7 : 6;\n const value = line.slice(start);\n addEventSize(value.length);\n eventType = value || undefined;\n return;\n }\n if (first === 105 && line.charCodeAt(1) === 100 && line.charCodeAt(2) === 58) {\n const start = line.charCodeAt(3) === SPACE ? 4 : 3;\n const value = line.slice(start);\n if (value.indexOf(NUL) === -1) {\n addEventSize(value.length);\n idBuffer = value;\n hasPendingId = true;\n }\n return;\n }\n if (\n first === 114 &&\n line.charCodeAt(1) === 101 &&\n line.charCodeAt(2) === 116 &&\n line.charCodeAt(3) === 114 &&\n line.charCodeAt(4) === 121 &&\n line.charCodeAt(5) === 58\n ) {\n const start = line.charCodeAt(6) === SPACE ? 7 : 6;\n processRetry(line.slice(start), line);\n return;\n }\n\n const separator = line.indexOf(':');\n const field = separator === -1 ? line : line.slice(0, separator);\n let value = separator === -1 ? '' : line.slice(separator + 1);\n if (value.charCodeAt(0) === SPACE) value = value.slice(1);\n\n switch (field) {\n case 'data':\n addEventSize(value.length + 1);\n dataLines.push(value);\n break;\n case 'event':\n addEventSize(value.length);\n eventType = value || undefined;\n break;\n case 'id':\n if (value.indexOf(NUL) === -1) {\n addEventSize(value.length);\n idBuffer = value;\n hasPendingId = true;\n }\n break;\n case 'retry':\n processRetry(value, line);\n break;\n default:\n if (strict) recoverable(`Unknown SSE field \"${truncate(field)}\"`, 'ERR_SSE_UNKNOWN_FIELD', {\n field,\n line\n });\n }\n }\n\n function processRetry(value, line) {\n if (!isAsciiDigits(value)) {\n if (strict) recoverable(`Invalid SSE retry value \"${truncate(value)}\"`, 'ERR_SSE_RETRY_VALUE', {\n field: 'retry',\n line\n });\n return;\n }\n const number = Number(value);\n if (!Number.isSafeInteger(number)) {\n if (strict) recoverable('SSE retry value exceeds the safe integer range', 'ERR_SSE_RETRY_VALUE', {\n field: 'retry',\n line\n });\n return;\n }\n retries++;\n onRetry(number);\n }\n\n function dispatchEvent() {\n const eventId = hasPendingId ? idBuffer : undefined;\n if (hasPendingId) {\n committedId = idBuffer;\n hasPendingId = false;\n onId(committedId);\n }\n if (dataLines.length === 0) {\n eventType = undefined;\n eventSize = 0;\n return;\n }\n const event = {\n data: dataLines.join('\\n'),\n id: eventId,\n event: eventType,\n lastEventId: committedId\n };\n events++;\n dataLines = [];\n eventType = undefined;\n eventSize = 0;\n onEvent(event);\n }\n\n function dispatchSingleData(data) {\n const eventId = hasPendingId ? idBuffer : undefined;\n if (hasPendingId) {\n committedId = idBuffer;\n hasPendingId = false;\n onId(committedId);\n }\n const event = {\n data,\n id: eventId,\n event: eventType,\n lastEventId: committedId\n };\n events++;\n eventType = undefined;\n eventSize = 0;\n onEvent(event);\n }\n\n function addEventSize(amount) {\n eventSize += amount;\n if (eventSize > maxEventSize) {\n throw fatal(`SSE event exceeded ${maxEventSize} characters`, 'ERR_SSE_EVENT_LIMIT', {\n limit: maxEventSize\n });\n }\n }\n\n function discardPendingEvent() {\n dataLines = [];\n eventType = undefined;\n eventSize = 0;\n hasPendingId = false;\n idBuffer = committedId;\n }\n\n function getDecoder() {\n if (!decoder) {\n if (typeof TextDecoder !== 'function') {\n throw fatal('TextDecoder is required for byte chunks', 'ERR_SSE_TEXT_DECODER');\n }\n decoder = new TextDecoder('utf-8', { fatal: fatalUTF8 });\n }\n return decoder;\n }\n\n function recoverable(message, code, details) {\n const error = new SSEParseError(message, { ...details, code, fatal: false });\n onError(error);\n return error;\n }\n\n function fatal(message, code, details = {}) {\n terminated = true;\n lineFragments = [];\n lineLength = 0;\n dataLines = [];\n eventType = undefined;\n eventSize = 0;\n const error = new SSEParseError(message, { ...details, code, fatal: true });\n onError(error);\n return error;\n }\n\n const api = {\n feed,\n end,\n reset,\n get state() {\n return Object.freeze({\n buffered: lineLength + eventSize,\n bytes,\n characters,\n comments,\n events,\n lastEventId: committedId,\n retries,\n terminated\n });\n }\n };\n\n return api;\n}\n\nfunction readLimit(value, fallback, name) {\n const limit = value === undefined ? fallback : value;\n if (!Number.isSafeInteger(limit) || limit < 1) {\n throw new RangeError(`${name} must be a positive safe integer`);\n }\n return limit;\n}\n\nfunction normalizeInitialId(value) {\n if (value === undefined || value === null) return '';\n if (typeof value !== 'string') throw new TypeError('lastEventId must be a string');\n if (value.indexOf(NUL) !== -1 || value.indexOf('\\r') !== -1 || value.indexOf('\\n') !== -1) {\n throw new TypeError('lastEventId cannot contain NUL, CR or LF');\n }\n return value;\n}\n\nfunction isAsciiDigits(value) {\n if (value.length === 0) return false;\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code < 48 || code > 57) return false;\n }\n return true;\n}\n\nfunction truncate(value) {\n return value.length > 80 ? `${value.slice(0, 80)}...` : value;\n}\n\nfunction isDataPrefix(value, index) {\n return (\n value.charCodeAt(index) === 100 &&\n value.charCodeAt(index + 1) === 97 &&\n value.charCodeAt(index + 2) === 116 &&\n value.charCodeAt(index + 3) === 97 &&\n value.charCodeAt(index + 4) === 58\n );\n}\n", "import { SSEEncodeError } from './errors.js';\n\nexport const EVENT_STREAM_CONTENT_TYPE = 'text/event-stream';\nexport const EventStreamContentType = EVENT_STREAM_CONTENT_TYPE;\n\nexport function encodeSSE(message, options = {}) {\n if (!message || typeof message !== 'object') {\n throw new TypeError('SSE message must be an object');\n }\n const newline = options.newline === undefined ? '\\n' : options.newline;\n if (newline !== '\\n' && newline !== '\\r\\n') {\n throw new SSEEncodeError('newline must be \"\\\\n\" or \"\\\\r\\\\n\"', 'newline');\n }\n\n const lines = [];\n if (message.comment !== undefined) {\n for (const line of splitLines(toText(message.comment, 'comment'))) lines.push(`:${line ? ` ${line}` : ''}`);\n }\n if (message.event !== undefined && message.event !== '') {\n const value = toText(message.event, 'event');\n assertSingleLine(value, 'event', false);\n lines.push(`event: ${value}`);\n }\n if (message.id !== undefined) {\n const value = toText(message.id, 'id');\n assertSingleLine(value, 'id', true);\n lines.push(`id: ${value}`);\n }\n if (message.retry !== undefined) {\n if (!Number.isSafeInteger(message.retry) || message.retry < 0) {\n throw new SSEEncodeError('retry must be a non-negative safe integer', 'retry');\n }\n lines.push(`retry: ${message.retry}`);\n }\n if (message.data !== undefined) {\n for (const line of splitLines(toText(message.data, 'data'))) lines.push(`data: ${line}`);\n }\n if (lines.length === 0) {\n throw new SSEEncodeError('SSE message must contain data, comment, event, id or retry', 'message');\n }\n return `${lines.join(newline)}${newline}${newline}`;\n}\n\nexport const encode = encodeSSE;\n\nexport function encodeJSON(data, fields = {}, options = {}) {\n let encoded;\n try {\n encoded = JSON.stringify(data, options.replacer);\n } catch (error) {\n throw new SSEEncodeError('Unable to encode SSE JSON data', 'data', error);\n }\n if (encoded === undefined) {\n throw new SSEEncodeError('JSON data cannot be undefined, a function or a symbol', 'data');\n }\n return encodeSSE({ ...fields, data: encoded }, options);\n}\n\nexport function encodeComment(comment, options = {}) {\n return encodeSSE({ comment }, options);\n}\n\nexport function createEncoderStream(options = {}) {\n const Transform = getTransformStream();\n const bytes = options.bytes !== false;\n const encoder = bytes ? getTextEncoder() : null;\n return new Transform({\n transform(message, controller) {\n const output = options.json === true\n ? encodeJSON(message.data, message, options)\n : encodeSSE(message, options);\n controller.enqueue(encoder ? encoder.encode(output) : output);\n }\n });\n}\n\nfunction splitLines(value) {\n const lines = [];\n let start = 0;\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code !== 10 && code !== 13) continue;\n lines.push(value.slice(start, index));\n if (code === 13 && value.charCodeAt(index + 1) === 10) index++;\n start = index + 1;\n }\n lines.push(value.slice(start));\n return lines;\n}\n\nfunction toText(value, field) {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value);\n }\n throw new SSEEncodeError(`${field} must be a string or primitive value`, field);\n}\n\nfunction assertSingleLine(value, field, rejectNul) {\n if (value.indexOf('\\r') !== -1 || value.indexOf('\\n') !== -1 || (rejectNul && value.indexOf('\\0') !== -1)) {\n throw new SSEEncodeError(`${field} contains a forbidden control character`, field);\n }\n}\n\nfunction getTransformStream() {\n if (typeof TransformStream !== 'function') {\n throw new Error('TransformStream is not available in this runtime');\n }\n return TransformStream;\n}\n\nfunction getTextEncoder() {\n if (typeof TextEncoder !== 'function') throw new Error('TextEncoder is not available in this runtime');\n return new TextEncoder();\n}\n", "import { SSEParseError } from './errors.js';\nimport { createParser } from './parser.js';\n\nconst DEFAULT_FEED_SIZE = 16 * 1024;\nconst DEFAULT_MAX_QUEUED_EVENTS = 4096;\n\nexport async function* decodeSSE(source, options = {}) {\n const signal = options.signal;\n const feedSize = readPositive(options.feedSize, DEFAULT_FEED_SIZE, 'feedSize');\n const maxQueuedEvents = readPositive(\n options.maxQueuedEvents,\n DEFAULT_MAX_QUEUED_EVENTS,\n 'maxQueuedEvents'\n );\n const queue = [];\n const parserOptions = options.parser || options;\n const userOnEvent = parserOptions.onEvent;\n const parser = createParser({\n ...parserOptions,\n onEvent(event) {\n if (queue.length >= maxQueuedEvents) {\n throw new SSEParseError(`Queued SSE events exceeded ${maxQueuedEvents}`, {\n code: 'ERR_SSE_QUEUE_LIMIT',\n fatal: true,\n limit: maxQueuedEvents\n });\n }\n queue.push(event);\n if (typeof userOnEvent === 'function') userOnEvent(event);\n }\n });\n const iterable = toAsyncIterable(source);\n const iterator = iterable[Symbol.asyncIterator]();\n\n try {\n while (true) {\n throwIfAborted(signal);\n const item = await nextWithAbort(iterator, signal);\n if (item.done) break;\n const chunk = item.value;\n if (typeof options.onChunk === 'function') options.onChunk(chunk);\n if (typeof chunk !== 'string' && !(chunk instanceof Uint8Array)) {\n throw new TypeError('SSE stream chunks must be strings or Uint8Array values');\n }\n for (let offset = 0; offset < chunk.length; offset += feedSize) {\n parser.feed(chunk.slice(offset, offset + feedSize));\n for (let index = 0; index < queue.length; index++) yield queue[index];\n queue.length = 0;\n throwIfAborted(signal);\n }\n }\n parser.end();\n for (let index = 0; index < queue.length; index++) yield queue[index];\n } finally {\n await closeIterator(iterator, signal);\n }\n}\n\nexport async function* decodeJSON(source, options = {}) {\n const doneSentinel = options.doneSentinel === undefined ? '[DONE]' : options.doneSentinel;\n for await (const event of decodeSSE(source, options)) {\n if (doneSentinel !== false && event.data === doneSentinel) return;\n try {\n yield { ...event, data: JSON.parse(event.data, options.reviver) };\n } catch (cause) {\n if (options.ignoreInvalidJSON === true) continue;\n throw new SSEParseError('SSE event data is not valid JSON', {\n code: 'ERR_SSE_JSON',\n fatal: true,\n cause\n });\n }\n }\n}\n\nexport function createDecoderStream(options = {}) {\n if (typeof TransformStream !== 'function') {\n throw new Error('TransformStream is not available in this runtime');\n }\n let controller;\n const parser = createParser({\n ...(options.parser || options),\n onEvent(event) {\n controller.enqueue(event);\n const callback = (options.parser || options).onEvent;\n if (typeof callback === 'function') callback(event);\n }\n });\n return new TransformStream({\n start(value) {\n controller = value;\n },\n transform(chunk) {\n parser.feed(chunk);\n },\n flush() {\n parser.end();\n }\n });\n}\n\nexport function toAsyncIterable(source) {\n const value = source && source.body ? source.body : source;\n if (!value) throw new TypeError('An SSE stream source is required');\n if (typeof value[Symbol.asyncIterator] === 'function') return value;\n if (typeof value.getReader === 'function') return webStreamIterable(value);\n if (typeof value[Symbol.iterator] === 'function') return syncToAsync(value);\n throw new TypeError('Source must be a Response, ReadableStream, AsyncIterable or Iterable');\n}\n\nasync function* webStreamIterable(stream) {\n const reader = stream.getReader();\n try {\n while (true) {\n const item = await reader.read();\n if (item.done) return;\n yield item.value;\n }\n } finally {\n try {\n await reader.cancel();\n } catch {\n // The stream may already be closed or errored.\n }\n if (typeof reader.releaseLock === 'function') reader.releaseLock();\n }\n}\n\nasync function* syncToAsync(iterable) {\n yield* iterable;\n}\n\nfunction throwIfAborted(signal) {\n if (!signal || !signal.aborted) return;\n if (signal.reason instanceof Error) throw signal.reason;\n const error = new Error('The operation was aborted');\n error.name = 'AbortError';\n throw error;\n}\n\nfunction nextWithAbort(iterator, signal) {\n if (!signal) return iterator.next();\n throwIfAborted(signal);\n return new Promise((resolve, reject) => {\n const cleanup = () => signal.removeEventListener('abort', abort);\n const abort = () => {\n cleanup();\n try {\n throwIfAborted(signal);\n } catch (error) {\n reject(error);\n }\n };\n signal.addEventListener('abort', abort, { once: true });\n if (signal.aborted) {\n abort();\n return;\n }\n Promise.resolve(iterator.next()).then(\n (item) => {\n cleanup();\n resolve(item);\n },\n (error) => {\n cleanup();\n reject(error);\n }\n );\n });\n}\n\nasync function closeIterator(iterator, signal) {\n if (typeof iterator.return !== 'function') return;\n try {\n const result = iterator.return();\n if (!signal || !signal.aborted) await result;\n else Promise.resolve(result).catch(() => {});\n } catch (error) {\n if (!signal || !signal.aborted) throw error;\n }\n}\n\nfunction readPositive(value, fallback, name) {\n const number = value === undefined ? fallback : value;\n if (!Number.isSafeInteger(number) || number < 1) {\n throw new RangeError(`${name} must be a positive safe integer`);\n }\n return number;\n}\n", "import {\n SSEError,\n SSEHTTPError,\n SSEReplayError,\n SSERetryError,\n SSETimeoutError\n} from './errors.js';\nimport { EVENT_STREAM_CONTENT_TYPE } from './encoder.js';\nimport { decodeSSE } from './iterable.js';\n\nconst RETRYABLE_STATUS = new Set([408, 425, 429, 500, 502, 503, 504]);\n\nexport async function* fetchSSE(input, options = {}) {\n const fetchImpl = options.fetch === undefined ? globalThis.fetch : options.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new TypeError('No fetch implementation is available; pass options.fetch');\n }\n const retry = normalizeRetry(options.retry);\n const connectTimeout = readOptionalDelay(options.connectTimeout, 'connectTimeout');\n const idleTimeout = readOptionalDelay(options.idleTimeout, 'idleTimeout');\n const totalTimeout = readOptionalDelay(options.totalTimeout, 'totalTimeout');\n const externalSignal = options.signal;\n const requestInit = omitClientOptions(options);\n const originalBody = requestInit.body;\n const bodyReplayable = isReplayableBody(originalBody);\n let lastEventId = validateLastEventId(\n options.lastEventId === undefined ? '' : options.lastEventId\n );\n let serverRetry;\n let attempts = 0;\n let reconnects = 0;\n let lastError;\n let stopped = false;\n const startedAt = monotonicNow();\n\n while (!stopped) {\n attempts++;\n throwIfAborted(externalSignal);\n if (attempts > 1 && !bodyReplayable && typeof options.bodyFactory !== 'function') {\n throw new SSEReplayError();\n }\n\n const attempt = createAttemptController(externalSignal);\n let response;\n let timeoutPhase;\n let connectTimer;\n let idleTimer;\n let totalTimer;\n let fetchStarted = false;\n let retryDelayOverride;\n try {\n if (totalTimeout) {\n const remaining = totalTimeout - (monotonicNow() - startedAt);\n if (remaining <= 0) throw new SSETimeoutError('total', totalTimeout);\n totalTimer = setTimer(() => {\n timeoutPhase = 'total';\n attempt.abort();\n }, remaining);\n }\n if (connectTimeout) {\n connectTimer = setTimer(() => {\n timeoutPhase = 'connect';\n attempt.abort();\n }, connectTimeout);\n }\n\n let body = originalBody;\n if (typeof options.bodyFactory === 'function') {\n try {\n body = await waitForAbort(\n options.bodyFactory({\n attempt: attempts,\n lastEventId,\n signal: attempt.controller.signal\n }),\n attempt.controller.signal\n );\n } catch (cause) {\n throw new SSEError('SSE bodyFactory failed', 'ERR_SSE_BODY_FACTORY', { cause });\n }\n }\n const sourceHeaders = requestInit.headers === undefined && input && input.headers\n ? input.headers\n : requestInit.headers;\n const init = {\n ...requestInit,\n body,\n cache: requestInit.cache === undefined ? 'no-store' : requestInit.cache,\n headers: mergeSSEHeaders(sourceHeaders, lastEventId),\n signal: attempt.controller.signal\n };\n const attemptInput = cloneInput(input);\n fetchStarted = true;\n response = await waitForAbort(\n fetchImpl(attemptInput, init),\n attempt.controller.signal,\n cancelResponseBody\n );\n clearTimer(connectTimer);\n connectTimer = undefined;\n\n if (!response || typeof response.status !== 'number') {\n throw new SSEError('fetch returned an invalid Response-like value', 'ERR_SSE_RESPONSE');\n }\n\n if (response.status === 204) {\n stopped = true;\n if (typeof options.onClose === 'function') {\n await callHook(\n options.onClose,\n [{ attempts, lastEventId, reason: 'server', reconnects, response }],\n 'onClose'\n );\n }\n return;\n }\n validateResponse(response);\n if (typeof options.onOpen === 'function') {\n const result = await callHook(\n options.onOpen,\n [response, { attempts, lastEventId, reconnects }],\n 'onOpen'\n );\n if (result === false) {\n await cancelResponseBody(response);\n return;\n }\n }\n\n const resetIdle = () => {\n if (!idleTimeout) return;\n clearTimer(idleTimer);\n idleTimer = setTimer(() => {\n timeoutPhase = 'idle';\n attempt.abort();\n }, idleTimeout);\n };\n resetIdle();\n\n const parserOptions = options.parser || {};\n const userOnId = parserOptions.onId;\n const userOnRetry = parserOptions.onRetry;\n for await (const event of decodeSSE(response.body, {\n ...options.decode,\n signal: attempt.controller.signal,\n onChunk(chunk) {\n resetIdle();\n if (options.decode && typeof options.decode.onChunk === 'function') {\n options.decode.onChunk(chunk);\n }\n },\n parser: {\n ...parserOptions,\n lastEventId,\n onId(id) {\n lastEventId = id;\n if (typeof userOnId === 'function') userOnId(id);\n },\n onRetry(delay) {\n serverRetry = delay;\n if (typeof userOnRetry === 'function') userOnRetry(delay);\n }\n }\n })) {\n lastEventId = event.lastEventId;\n if (typeof options.onEvent === 'function') {\n await callHook(\n options.onEvent,\n [event, { attempts, lastEventId, reconnects, response }],\n 'onEvent'\n );\n }\n yield event;\n }\n clearTimer(idleTimer);\n lastError = undefined;\n } catch (caught) {\n clearTimer(connectTimer);\n clearTimer(idleTimer);\n clearTimer(totalTimer);\n if (externalSignal && externalSignal.aborted) throw abortReason(externalSignal);\n if (timeoutPhase) {\n lastError = new SSETimeoutError(timeoutPhase, options[`${timeoutPhase}Timeout`], caught);\n } else {\n lastError = caught;\n }\n await cancelResponseBody(response);\n if (typeof options.onError === 'function') {\n const decision = await callHook(\n options.onError,\n [{ attempt: attempts, error: lastError, lastEventId, reconnects, response }],\n 'onError'\n );\n if (decision === false) throw lastError;\n if (typeof decision === 'number') retryDelayOverride = decision;\n }\n if (!shouldRetryError(lastError, response, retry, fetchStarted)) throw lastError;\n } finally {\n clearTimer(totalTimer);\n await cancelResponseBody(response);\n attempt.dispose();\n }\n\n if (reconnects >= retry.retries) {\n if (!lastError) {\n if (typeof options.onClose === 'function') {\n await callHook(\n options.onClose,\n [{ attempts, lastEventId, reason: 'eof', reconnects, response }],\n 'onClose'\n );\n }\n return;\n }\n if (retry.retries === 0) throw lastError;\n throw new SSERetryError(attempts, lastError);\n }\n reconnects++;\n let delay = retryDelay(response, serverRetry, reconnects, retry);\n if (retryDelayOverride !== undefined) delay = clampDelay(retryDelayOverride, retry.maxDelay);\n const context = {\n attempt: attempts,\n delay,\n error: lastError,\n lastEventId,\n reconnects,\n response\n };\n if (typeof options.onRetry === 'function') {\n const decision = await callHook(options.onRetry, [context], 'onRetry');\n if (decision === false) return;\n if (typeof decision === 'number') delay = clampDelay(decision, retry.maxDelay);\n }\n await sleep(delay, externalSignal, totalTimeout, startedAt);\n }\n}\n\nexport async function consumeSSE(input, options = {}) {\n let count = 0;\n let lastEventId = options.lastEventId || '';\n for await (const event of fetchSSE(input, options)) {\n count++;\n lastEventId = event.lastEventId;\n }\n return { events: count, lastEventId };\n}\n\nexport async function fetchEventSource(input, options = {}) {\n const mapped = {\n ...options,\n onOpen: options.onopen || options.onOpen,\n onEvent: options.onmessage || options.onEvent,\n onClose: options.onclose || options.onClose,\n async onError(context) {\n if (typeof options.onerror !== 'function') {\n return typeof options.onError === 'function' ? options.onError(context) : undefined;\n }\n const decision = await options.onerror(context.error);\n return decision === undefined ? true : decision;\n },\n async onRetry(context) {\n if (typeof options.onRetry === 'function') return options.onRetry(context);\n return undefined;\n }\n };\n return consumeSSE(input, mapped);\n}\n\nfunction normalizeRetry(value) {\n const input = value === false ? { retries: 0 } : typeof value === 'number' ? { retries: value } : value || {};\n const retries = input.retries === undefined ? Infinity : input.retries;\n if (retries !== Infinity && (!Number.isSafeInteger(retries) || retries < 0)) {\n throw new RangeError('retry.retries must be a non-negative safe integer or Infinity');\n }\n const minDelay = readDelay(input.minDelay, 1000, 'retry.minDelay');\n const maxDelay = readDelay(input.maxDelay, 30000, 'retry.maxDelay');\n const factor = input.factor === undefined ? 2 : input.factor;\n if (!Number.isFinite(factor) || factor < 1) throw new RangeError('retry.factor must be at least 1');\n return {\n retries,\n minDelay,\n maxDelay: Math.max(minDelay, maxDelay),\n factor,\n jitter: input.jitter === undefined ? 'full' : input.jitter,\n statusCodes: new Set(input.statusCodes || RETRYABLE_STATUS),\n shouldRetry: input.shouldRetry\n };\n}\n\nfunction validateResponse(response) {\n if (response.status !== 200) {\n throw new SSEHTTPError(`SSE endpoint responded with HTTP ${response.status}`, response);\n }\n const contentType = response.headers && typeof response.headers.get === 'function'\n ? response.headers.get('content-type')\n : null;\n if (!contentType || contentType.split(';', 1)[0].trim().toLowerCase() !== EVENT_STREAM_CONTENT_TYPE) {\n throw new SSEHTTPError(\n `Expected Content-Type ${EVENT_STREAM_CONTENT_TYPE}; received ${contentType || 'none'}`,\n response,\n 'ERR_SSE_CONTENT_TYPE'\n );\n }\n if (!response.body) throw new SSEHTTPError('SSE response has no readable body', response);\n}\n\nfunction shouldRetryError(error, response, retry, fetchStarted) {\n if (typeof retry.shouldRetry === 'function') return retry.shouldRetry({ error, response }) === true;\n if (error && error.code === 'ERR_SSE_CONTENT_TYPE') return false;\n if (!error) return false;\n if (error.code === 'ERR_SSE_TIMEOUT') return true;\n if (response && response.status !== 200) return retry.statusCodes.has(response.status);\n if (!fetchStarted) return false;\n return error.name === 'TypeError' || NETWORK_ERROR_CODES.has(error.code);\n}\n\nfunction retryDelay(response, serverRetry, reconnects, options) {\n const header = response && response.headers && typeof response.headers.get === 'function'\n ? response.headers.get('retry-after')\n : null;\n const fromHeader = parseRetryAfter(header);\n if (fromHeader !== undefined) return clampDelay(fromHeader, options.maxDelay);\n if (serverRetry !== undefined) return clampDelay(serverRetry, options.maxDelay);\n const exponential = Math.min(\n options.maxDelay,\n options.minDelay * Math.pow(options.factor, reconnects - 1)\n );\n if (options.jitter === false || options.jitter === 'none') return exponential;\n if (typeof options.jitter === 'function') return clampDelay(options.jitter(exponential), options.maxDelay);\n return Math.floor(Math.random() * (exponential + 1));\n}\n\nfunction parseRetryAfter(value) {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) return Math.round(seconds * 1000);\n const date = Date.parse(value);\n if (Number.isNaN(date)) return undefined;\n return Math.max(0, date - Date.now());\n}\n\nfunction mergeSSEHeaders(input, lastEventId) {\n const entries = [];\n if (input && typeof input[Symbol.iterator] === 'function' && typeof input !== 'string') {\n for (const pair of input) setHeader(entries, pair[0], pair[1]);\n } else if (input && typeof input.forEach === 'function') {\n input.forEach((value, key) => setHeader(entries, key, value));\n } else if (input && typeof input === 'object') {\n for (const key of Object.keys(input)) setHeader(entries, key, input[key]);\n }\n if (!hasHeader(entries, 'accept')) setHeader(entries, 'Accept', EVENT_STREAM_CONTENT_TYPE);\n if (lastEventId) setHeader(entries, 'Last-Event-ID', lastEventId);\n else deleteHeader(entries, 'last-event-id');\n return entries;\n}\n\nfunction setHeader(entries, key, value) {\n const name = String(key);\n deleteHeader(entries, name);\n entries.push([name, String(value)]);\n}\n\nfunction deleteHeader(entries, name) {\n const lower = String(name).toLowerCase();\n for (let index = entries.length - 1; index >= 0; index--) {\n if (entries[index][0].toLowerCase() === lower) entries.splice(index, 1);\n }\n}\n\nfunction hasHeader(entries, name) {\n const lower = name.toLowerCase();\n return entries.some((entry) => entry[0].toLowerCase() === lower);\n}\n\nfunction omitClientOptions(options) {\n const output = {};\n const privateKeys = new Set([\n 'bodyFactory', 'connectTimeout', 'decode', 'fetch', 'idleTimeout', 'lastEventId',\n 'onClose', 'onError', 'onEvent', 'onOpen', 'onRetry', 'onclose', 'onerror',\n 'onmessage', 'onopen', 'openWhenHidden', 'parser', 'retry', 'totalTimeout'\n ]);\n for (const key of Object.keys(options)) if (!privateKeys.has(key)) output[key] = options[key];\n return output;\n}\n\nfunction isReplayableBody(body) {\n if (body === undefined || body === null) return true;\n if (typeof body === 'string') return true;\n if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) return true;\n if (typeof URLSearchParams === 'function' && body instanceof URLSearchParams) return true;\n if (typeof Blob === 'function' && body instanceof Blob) return true;\n if (typeof FormData === 'function' && body instanceof FormData) return true;\n return !(typeof body.getReader === 'function' || typeof body[Symbol.asyncIterator] === 'function');\n}\n\nfunction cloneInput(input) {\n if (input && typeof input === 'object' && typeof input.clone === 'function') return input.clone();\n return input;\n}\n\nfunction validateLastEventId(value) {\n if (typeof value !== 'string') throw new TypeError('lastEventId must be a string');\n if (value.indexOf('\\0') !== -1 || value.indexOf('\\r') !== -1 || value.indexOf('\\n') !== -1) {\n throw new TypeError('lastEventId cannot contain NUL, CR or LF');\n }\n return value;\n}\n\nfunction createAttemptController(signal) {\n if (typeof AbortController !== 'function') throw new Error('AbortController is not available');\n const controller = new AbortController();\n const forward = () => controller.abort();\n if (signal) signal.addEventListener('abort', forward, { once: true });\n if (signal && signal.aborted) controller.abort();\n return {\n controller,\n abort() {\n controller.abort();\n },\n dispose() {\n if (signal) signal.removeEventListener('abort', forward);\n }\n };\n}\n\nasync function sleep(delay, signal, totalTimeout, startedAt) {\n if (delay <= 0) return;\n throwIfAborted(signal);\n let actual = delay;\n if (totalTimeout) {\n const remaining = totalTimeout - (monotonicNow() - startedAt);\n if (remaining <= 0) throw new SSETimeoutError('total', totalTimeout);\n actual = Math.min(actual, remaining);\n }\n await new Promise((resolve, reject) => {\n const done = () => {\n if (signal) signal.removeEventListener('abort', abort);\n resolve();\n };\n const timer = setTimer(done, actual);\n const abort = () => {\n clearTimer(timer);\n if (signal) signal.removeEventListener('abort', abort);\n reject(abortReason(signal));\n };\n if (signal) {\n signal.addEventListener('abort', abort, { once: true });\n if (signal.aborted) abort();\n }\n });\n if (totalTimeout && monotonicNow() - startedAt >= totalTimeout) {\n throw new SSETimeoutError('total', totalTimeout);\n }\n}\n\nfunction waitForAbort(value, signal, onLateValue) {\n throwIfAborted(signal);\n return new Promise((resolve, reject) => {\n let aborted = false;\n const cleanup = () => signal.removeEventListener('abort', abort);\n const abort = () => {\n aborted = true;\n cleanup();\n reject(abortReason(signal));\n };\n signal.addEventListener('abort', abort, { once: true });\n if (signal.aborted) {\n abort();\n return;\n }\n Promise.resolve(value).then(\n (result) => {\n cleanup();\n if (aborted) {\n if (onLateValue) onLateValue(result);\n return;\n }\n resolve(result);\n },\n (error) => {\n cleanup();\n reject(error);\n }\n );\n });\n}\n\nfunction setTimer(callback, delay) {\n return setTimeout(callback, delay);\n}\n\nfunction clearTimer(timer) {\n if (timer !== undefined) clearTimeout(timer);\n}\n\nfunction throwIfAborted(signal) {\n if (signal && signal.aborted) throw abortReason(signal);\n}\n\nfunction abortReason(signal) {\n if (signal && signal.reason instanceof Error) return signal.reason;\n const error = new Error('The operation was aborted');\n error.name = 'AbortError';\n return error;\n}\n\nfunction readDelay(value, fallback, name) {\n const number = value === undefined ? fallback : value;\n if (!Number.isFinite(number) || number < 0) throw new RangeError(`${name} must be a non-negative number`);\n return Math.round(number);\n}\n\nfunction readOptionalDelay(value, name) {\n if (value === undefined || value === null || value === 0) return 0;\n return readDelay(value, 0, name);\n}\n\nfunction clampDelay(value, max) {\n if (!Number.isFinite(value) || value < 0) throw new RangeError('Retry delay must be a non-negative number');\n return Math.min(Math.round(value), max);\n}\n\nfunction monotonicNow() {\n return typeof performance === 'object' && performance && typeof performance.now === 'function'\n ? performance.now()\n : Date.now();\n}\n\nfunction cancelResponseBody(response) {\n if (!response || !response.body || typeof response.body.cancel !== 'function') return;\n try {\n const cancellation = response.body.cancel();\n if (cancellation && typeof cancellation.catch === 'function') cancellation.catch(() => {});\n } catch {\n // A transport may have already closed the rejected response body.\n }\n}\n\nasync function callHook(hook, args, name) {\n try {\n return await hook(...args);\n } catch (cause) {\n throw new SSEError(`SSE ${name} callback failed`, 'ERR_SSE_CALLBACK', { cause });\n }\n}\n\nconst NETWORK_ERROR_CODES = new Set([\n 'ECONNREFUSED',\n 'ECONNRESET',\n 'EHOSTUNREACH',\n 'ENETDOWN',\n 'ENETUNREACH',\n 'ENOTFOUND',\n 'ETIMEDOUT'\n]);\n", "import { encodeJSON, encodeSSE, EVENT_STREAM_CONTENT_TYPE } from './encoder.js';\n\nexport function createSSEChannel(options = {}) {\n if (typeof ReadableStream !== 'function') throw new Error('ReadableStream is not available in this runtime');\n if (typeof TextEncoder !== 'function') throw new Error('TextEncoder is not available in this runtime');\n const encoder = new TextEncoder();\n const highWaterMark = readHighWaterMark(options.highWaterMark);\n const heartbeatInterval = readHeartbeatInterval(options.heartbeatInterval);\n const heartbeat = heartbeatInterval\n ? encoder.encode(encodeSSE({ comment: options.heartbeatComment ?? 'keep-alive' }, options))\n : undefined;\n let controller;\n let open = true;\n let readyPromise = Promise.resolve();\n let resolveReady;\n let resolveClosed;\n let heartbeatTimer;\n let responseClaimed = false;\n const closed = new Promise((resolve) => {\n resolveClosed = resolve;\n });\n\n const stream = new ReadableStream({\n start(value) {\n controller = value;\n if (heartbeatInterval) {\n heartbeatTimer = setInterval(() => {\n if (open && controller.desiredSize > 0) controller.enqueue(heartbeat);\n }, heartbeatInterval);\n if (heartbeatTimer && typeof heartbeatTimer.unref === 'function') heartbeatTimer.unref();\n }\n },\n pull() {\n if (resolveReady) {\n resolveReady();\n resolveReady = undefined;\n readyPromise = Promise.resolve();\n }\n },\n cancel(reason) {\n finish(reason);\n }\n }, {\n highWaterMark,\n size(chunk) {\n return chunk.byteLength;\n }\n });\n\n function send(message) {\n assertOpen();\n controller.enqueue(encoder.encode(encodeSSE(message, options)));\n updateReady();\n return controller.desiredSize > 0;\n }\n\n function sendJSON(data, fields = {}) {\n assertOpen();\n controller.enqueue(encoder.encode(encodeJSON(data, fields, options)));\n updateReady();\n return controller.desiredSize > 0;\n }\n\n function comment(value) {\n return send({ comment: value });\n }\n\n function close() {\n if (!open) return;\n open = false;\n clearInterval(heartbeatTimer);\n if (resolveReady) resolveReady();\n controller.close();\n resolveClosed();\n }\n\n function error(reason) {\n if (!open) return;\n open = false;\n clearInterval(heartbeatTimer);\n if (resolveReady) resolveReady();\n controller.error(reason);\n resolveClosed(reason);\n }\n\n function toResponse(init = {}) {\n if (typeof Response !== 'function') throw new Error('Response is not available in this runtime');\n if (responseClaimed) throw new Error('SSE channel response has already been created');\n responseClaimed = true;\n return new Response(stream, {\n ...init,\n headers: responseHeaders(init.headers)\n });\n }\n\n function updateReady() {\n if (controller.desiredSize > 0 || resolveReady) return;\n readyPromise = new Promise((resolve) => {\n resolveReady = resolve;\n });\n }\n\n function finish(reason) {\n if (!open) return;\n open = false;\n clearInterval(heartbeatTimer);\n if (resolveReady) resolveReady();\n resolveClosed(reason);\n }\n\n function assertOpen() {\n if (!open) throw new Error('SSE channel is closed');\n }\n\n return {\n stream,\n send,\n sendJSON,\n comment,\n close,\n error,\n toResponse,\n closed,\n get open() {\n return open;\n },\n get ready() {\n return readyPromise;\n }\n };\n}\n\nexport function eventStreamResponse(source, options = {}) {\n if (typeof ReadableStream !== 'function') throw new Error('ReadableStream is not available in this runtime');\n if (typeof Response !== 'function') throw new Error('Response is not available in this runtime');\n if (typeof TextEncoder !== 'function') throw new Error('TextEncoder is not available in this runtime');\n const encoder = new TextEncoder();\n const iterator = toIterator(source);\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n const item = await iterator.next();\n if (item.done) {\n controller.close();\n return;\n }\n const output = options.json === true\n ? encodeJSON(item.value.data, item.value, options)\n : encodeSSE(item.value, options);\n controller.enqueue(encoder.encode(output));\n } catch (error) {\n if (typeof iterator.return === 'function') {\n try {\n await iterator.return(error);\n } catch {\n // Preserve the original read failure.\n }\n }\n controller.error(error);\n }\n },\n async cancel(reason) {\n if (typeof iterator.return === 'function') await iterator.return(reason);\n }\n }, {\n highWaterMark: readHighWaterMark(options.highWaterMark),\n size(chunk) {\n return chunk.byteLength;\n }\n });\n return new Response(stream, {\n status: options.status || 200,\n statusText: options.statusText,\n headers: responseHeaders(options.headers)\n });\n}\n\nfunction responseHeaders(input) {\n const headers = typeof Headers === 'function' ? new Headers(input) : new Map();\n const has = (name) => typeof headers.has === 'function' && headers.has(name);\n const set = (name, value) => {\n if (typeof headers.set === 'function') headers.set(name, value);\n };\n if (!has('Content-Type')) set('Content-Type', `${EVENT_STREAM_CONTENT_TYPE}; charset=utf-8`);\n if (!has('Cache-Control')) set('Cache-Control', 'no-cache, no-transform');\n if (!has('X-Accel-Buffering')) set('X-Accel-Buffering', 'no');\n return headers;\n}\n\nfunction toIterator(source) {\n if (!source) throw new TypeError('An event iterable is required');\n if (typeof source[Symbol.asyncIterator] === 'function') return source[Symbol.asyncIterator]();\n if (typeof source[Symbol.iterator] === 'function') {\n const iterator = source[Symbol.iterator]();\n return {\n next() {\n return Promise.resolve(iterator.next());\n },\n return(value) {\n return Promise.resolve(typeof iterator.return === 'function' ? iterator.return(value) : { done: true, value });\n }\n };\n }\n throw new TypeError('Events must be an Iterable or AsyncIterable');\n}\n\nfunction readHighWaterMark(value) {\n const number = value === undefined ? 64 * 1024 : value;\n if (!Number.isFinite(number) || number < 1) throw new RangeError('highWaterMark must be a positive number');\n return number;\n}\n\nfunction readHeartbeatInterval(value) {\n if (value === undefined || value === null || value === 0) return 0;\n if (!Number.isFinite(value) || value < 0) {\n throw new RangeError('heartbeatInterval must be a non-negative number');\n }\n return Math.round(value);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["api", "end", "value", "throwIfAborted", "delay"]
|
|
7
|
+
}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
export type SSEChunk = string | Uint8Array;
|
|
2
|
+
|
|
3
|
+
export interface SSEEvent<T = string> {
|
|
4
|
+
data: T;
|
|
5
|
+
event?: string;
|
|
6
|
+
id?: string;
|
|
7
|
+
lastEventId: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface SSEMessage {
|
|
11
|
+
comment?: string | number | boolean | bigint;
|
|
12
|
+
data?: string | number | boolean | bigint;
|
|
13
|
+
event?: string | number | boolean | bigint;
|
|
14
|
+
id?: string | number | boolean | bigint;
|
|
15
|
+
retry?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SSEParserState {
|
|
19
|
+
readonly buffered: number;
|
|
20
|
+
readonly bytes: number;
|
|
21
|
+
readonly characters: number;
|
|
22
|
+
readonly comments: number;
|
|
23
|
+
readonly events: number;
|
|
24
|
+
readonly lastEventId: string;
|
|
25
|
+
readonly retries: number;
|
|
26
|
+
readonly terminated: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface SSEParserOptions {
|
|
30
|
+
fatalUTF8?: boolean;
|
|
31
|
+
lastEventId?: string;
|
|
32
|
+
maxBufferSize?: number;
|
|
33
|
+
maxEventSize?: number;
|
|
34
|
+
maxLineLength?: number;
|
|
35
|
+
strict?: boolean;
|
|
36
|
+
onComment?(comment: string): void;
|
|
37
|
+
onError?(error: SSEParseError): void;
|
|
38
|
+
onEvent?(event: SSEEvent): void;
|
|
39
|
+
onId?(lastEventId: string): void;
|
|
40
|
+
onRetry?(milliseconds: number): void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface SSEParser {
|
|
44
|
+
readonly state: SSEParserState;
|
|
45
|
+
feed(chunk: SSEChunk): SSEParser;
|
|
46
|
+
end(): SSEParser;
|
|
47
|
+
reset(options?: { consume?: boolean; preserveLastEventId?: boolean }): SSEParser;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface SSEEncoderOptions {
|
|
51
|
+
bytes?: boolean;
|
|
52
|
+
json?: boolean;
|
|
53
|
+
newline?: '\n' | '\r\n';
|
|
54
|
+
replacer?: (this: any, key: string, value: any) => any;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface AsyncIteratorLike<T> {
|
|
58
|
+
next(): Promise<IteratorResult<T>>;
|
|
59
|
+
return?(value?: any): Promise<IteratorResult<T>>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface AsyncIterableLike<T> {
|
|
63
|
+
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface ReadableStreamReaderLike<T> {
|
|
67
|
+
read(): Promise<IteratorResult<T>>;
|
|
68
|
+
cancel?(reason?: any): Promise<void>;
|
|
69
|
+
releaseLock?(): void;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface ReadableStreamLike<T> {
|
|
73
|
+
getReader(): ReadableStreamReaderLike<T>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface SSEHeadersLike {
|
|
77
|
+
get(name: string): string | null;
|
|
78
|
+
forEach?(callback: (value: string, key: string) => void): void;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface SSEResponseLike {
|
|
82
|
+
readonly body: ReadableStreamLike<Uint8Array> | AsyncIterableLike<Uint8Array> | null;
|
|
83
|
+
readonly headers: SSEHeadersLike;
|
|
84
|
+
readonly ok?: boolean;
|
|
85
|
+
readonly redirected?: boolean;
|
|
86
|
+
readonly status: number;
|
|
87
|
+
readonly statusText?: string;
|
|
88
|
+
readonly url?: string;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export type SSESource =
|
|
92
|
+
| { body: ReadableStreamLike<SSEChunk> | AsyncIterableLike<SSEChunk> | null }
|
|
93
|
+
| ReadableStreamLike<SSEChunk>
|
|
94
|
+
| AsyncIterable<SSEChunk>
|
|
95
|
+
| Iterable<SSEChunk>;
|
|
96
|
+
|
|
97
|
+
export interface SSEDecodeOptions extends SSEParserOptions {
|
|
98
|
+
feedSize?: number;
|
|
99
|
+
maxQueuedEvents?: number;
|
|
100
|
+
parser?: SSEParserOptions;
|
|
101
|
+
signal?: AbortSignalLike;
|
|
102
|
+
onChunk?(chunk: SSEChunk): void;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface SSEJSONDecodeOptions extends SSEDecodeOptions {
|
|
106
|
+
doneSentinel?: string | false;
|
|
107
|
+
ignoreInvalidJSON?: boolean;
|
|
108
|
+
reviver?: (this: any, key: string, value: any) => any;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface AbortSignalLike {
|
|
112
|
+
readonly aborted: boolean;
|
|
113
|
+
readonly reason?: any;
|
|
114
|
+
addEventListener(type: 'abort', listener: () => void, options?: any): void;
|
|
115
|
+
removeEventListener(type: 'abort', listener: () => void): void;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export type FetchLike = (input: any, init?: any) => Promise<SSEResponseLike>;
|
|
119
|
+
|
|
120
|
+
export interface SSERetryOptions {
|
|
121
|
+
factor?: number;
|
|
122
|
+
jitter?: 'full' | 'none' | false | ((maximumDelay: number) => number);
|
|
123
|
+
maxDelay?: number;
|
|
124
|
+
minDelay?: number;
|
|
125
|
+
retries?: number;
|
|
126
|
+
statusCodes?: Iterable<number>;
|
|
127
|
+
shouldRetry?(context: { error: any; response?: SSEResponseLike }): boolean;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface SSEClientContext {
|
|
131
|
+
attempts: number;
|
|
132
|
+
lastEventId: string;
|
|
133
|
+
reconnects: number;
|
|
134
|
+
response?: SSEResponseLike;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface SSERetryContext {
|
|
138
|
+
attempt: number;
|
|
139
|
+
delay: number;
|
|
140
|
+
error?: any;
|
|
141
|
+
lastEventId: string;
|
|
142
|
+
reconnects: number;
|
|
143
|
+
response?: SSEResponseLike;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export interface SSEClientErrorContext {
|
|
147
|
+
attempt: number;
|
|
148
|
+
error: any;
|
|
149
|
+
lastEventId: string;
|
|
150
|
+
reconnects: number;
|
|
151
|
+
response?: SSEResponseLike;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export interface SSEFetchOptions {
|
|
155
|
+
body?: any;
|
|
156
|
+
bodyFactory?(context: { attempt: number; lastEventId: string; signal: AbortSignalLike }): any | Promise<any>;
|
|
157
|
+
cache?: string;
|
|
158
|
+
connectTimeout?: number;
|
|
159
|
+
decode?: SSEDecodeOptions;
|
|
160
|
+
fetch?: FetchLike;
|
|
161
|
+
headers?: any;
|
|
162
|
+
idleTimeout?: number;
|
|
163
|
+
lastEventId?: string;
|
|
164
|
+
method?: string;
|
|
165
|
+
parser?: SSEParserOptions;
|
|
166
|
+
retry?: false | number | SSERetryOptions;
|
|
167
|
+
signal?: AbortSignalLike;
|
|
168
|
+
totalTimeout?: number;
|
|
169
|
+
onClose?(context: SSEClientContext & { reason: string }): void | Promise<void>;
|
|
170
|
+
onEvent?(event: SSEEvent, context: SSEClientContext): void | Promise<void>;
|
|
171
|
+
onError?(context: SSEClientErrorContext): void | false | number | Promise<void | false | number>;
|
|
172
|
+
onOpen?(response: SSEResponseLike, context: SSEClientContext): void | boolean | Promise<void | boolean>;
|
|
173
|
+
onRetry?(context: SSERetryContext): void | false | number | Promise<void | false | number>;
|
|
174
|
+
[key: string]: any;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface FetchEventSourceOptions extends SSEFetchOptions {
|
|
178
|
+
onclose?(context?: any): void | Promise<void>;
|
|
179
|
+
onerror?(error: any): any;
|
|
180
|
+
onmessage?(event: SSEEvent): void | Promise<void>;
|
|
181
|
+
onopen?(response: SSEResponseLike): void | boolean | Promise<void | boolean>;
|
|
182
|
+
openWhenHidden?: boolean;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export interface SSEConsumeResult {
|
|
186
|
+
events: number;
|
|
187
|
+
lastEventId: string;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export interface SSEChannel {
|
|
191
|
+
readonly stream: ReadableStreamLike<Uint8Array>;
|
|
192
|
+
readonly closed: Promise<any>;
|
|
193
|
+
readonly open: boolean;
|
|
194
|
+
readonly ready: Promise<void>;
|
|
195
|
+
close(): void;
|
|
196
|
+
comment(value: string): boolean;
|
|
197
|
+
error(reason: any): void;
|
|
198
|
+
send(message: SSEMessage): boolean;
|
|
199
|
+
sendJSON(data: any, fields?: Omit<SSEMessage, 'data'>): boolean;
|
|
200
|
+
toResponse(init?: any): any;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export interface SSEChannelOptions extends SSEEncoderOptions {
|
|
204
|
+
heartbeatComment?: string;
|
|
205
|
+
heartbeatInterval?: number;
|
|
206
|
+
highWaterMark?: number;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export class SSEError extends Error {
|
|
210
|
+
constructor(message: string, code: string, details?: { cause?: any });
|
|
211
|
+
readonly code: string;
|
|
212
|
+
readonly cause?: any;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export class SSEParseError extends SSEError {
|
|
216
|
+
constructor(message: string, details?: any);
|
|
217
|
+
readonly fatal: boolean;
|
|
218
|
+
readonly field?: string;
|
|
219
|
+
readonly line?: string;
|
|
220
|
+
readonly limit?: number;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export class SSEEncodeError extends SSEError {
|
|
224
|
+
constructor(message: string, field: string, cause?: any);
|
|
225
|
+
readonly field: string;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export class SSEHTTPError extends SSEError {
|
|
229
|
+
constructor(message: string, response: SSEResponseLike, code?: string);
|
|
230
|
+
readonly response: SSEResponseLike;
|
|
231
|
+
readonly status: number;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export class SSETimeoutError extends SSEError {
|
|
235
|
+
constructor(phase: string, timeout: number, cause?: any);
|
|
236
|
+
readonly phase: string;
|
|
237
|
+
readonly timeout: number;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export class SSERetryError extends SSEError {
|
|
241
|
+
constructor(attempts: number, cause?: any);
|
|
242
|
+
readonly attempts: number;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export class SSEReplayError extends SSEError {}
|
|
246
|
+
|
|
247
|
+
export const EVENT_STREAM_CONTENT_TYPE: 'text/event-stream';
|
|
248
|
+
export const EventStreamContentType: 'text/event-stream';
|
|
249
|
+
|
|
250
|
+
export function createParser(config?: SSEParserOptions | ((event: SSEEvent) => void)): SSEParser;
|
|
251
|
+
export function encodeSSE(message: SSEMessage, options?: SSEEncoderOptions): string;
|
|
252
|
+
export const encode: typeof encodeSSE;
|
|
253
|
+
export function encodeJSON(data: any, fields?: Omit<SSEMessage, 'data'>, options?: SSEEncoderOptions): string;
|
|
254
|
+
export function encodeComment(comment: string, options?: SSEEncoderOptions): string;
|
|
255
|
+
export function createEncoderStream(options?: SSEEncoderOptions): any;
|
|
256
|
+
export function decodeSSE(source: SSESource, options?: SSEDecodeOptions): AsyncGenerator<SSEEvent, void, unknown>;
|
|
257
|
+
export function decodeJSON<T = any>(source: SSESource, options?: SSEJSONDecodeOptions): AsyncGenerator<SSEEvent<T>, void, unknown>;
|
|
258
|
+
export function createDecoderStream(options?: SSEDecodeOptions): any;
|
|
259
|
+
export function toAsyncIterable(source: SSESource): AsyncIterable<SSEChunk>;
|
|
260
|
+
export function fetchSSE(input: any, options?: SSEFetchOptions): AsyncGenerator<SSEEvent, void, unknown>;
|
|
261
|
+
export function consumeSSE(input: any, options?: SSEFetchOptions): Promise<SSEConsumeResult>;
|
|
262
|
+
export function fetchEventSource(input: any, options?: FetchEventSourceOptions): Promise<SSEConsumeResult>;
|
|
263
|
+
export function createSSEChannel(options?: SSEChannelOptions): SSEChannel;
|
|
264
|
+
export function eventStreamResponse(source: Iterable<SSEMessage> | AsyncIterable<SSEMessage>, options?: SSEChannelOptions & { headers?: any; status?: number; statusText?: string; json?: boolean }): any;
|
|
265
|
+
|
|
266
|
+
declare const api: {
|
|
267
|
+
EVENT_STREAM_CONTENT_TYPE: typeof EVENT_STREAM_CONTENT_TYPE;
|
|
268
|
+
EventStreamContentType: typeof EventStreamContentType;
|
|
269
|
+
SSEEncodeError: typeof SSEEncodeError;
|
|
270
|
+
SSEError: typeof SSEError;
|
|
271
|
+
SSEHTTPError: typeof SSEHTTPError;
|
|
272
|
+
SSEParseError: typeof SSEParseError;
|
|
273
|
+
SSEReplayError: typeof SSEReplayError;
|
|
274
|
+
SSERetryError: typeof SSERetryError;
|
|
275
|
+
SSETimeoutError: typeof SSETimeoutError;
|
|
276
|
+
consumeSSE: typeof consumeSSE;
|
|
277
|
+
createDecoderStream: typeof createDecoderStream;
|
|
278
|
+
createEncoderStream: typeof createEncoderStream;
|
|
279
|
+
createParser: typeof createParser;
|
|
280
|
+
createSSEChannel: typeof createSSEChannel;
|
|
281
|
+
decodeJSON: typeof decodeJSON;
|
|
282
|
+
decodeSSE: typeof decodeSSE;
|
|
283
|
+
encode: typeof encode;
|
|
284
|
+
encodeComment: typeof encodeComment;
|
|
285
|
+
encodeJSON: typeof encodeJSON;
|
|
286
|
+
encodeSSE: typeof encodeSSE;
|
|
287
|
+
eventStreamResponse: typeof eventStreamResponse;
|
|
288
|
+
fetchEventSource: typeof fetchEventSource;
|
|
289
|
+
fetchSSE: typeof fetchSSE;
|
|
290
|
+
toAsyncIterable: typeof toAsyncIterable;
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
export default api;
|