MCPcopy Index your code
hub / github.com/ChatLab/ChatLab / fetchSSEWithHandlers

Function fetchSSEWithHandlers

src/services/utils/sse.ts:81–118  ·  view source on GitHub ↗
(options: {
  url: string
  method?: 'GET' | 'POST'
  body?: unknown
  signal?: AbortSignal
  onProgress?: (data: unknown) => void
  resultEvent?: string
})

Source from the content-addressed store, hash-verified

79 * 便捷方法:发起 SSE 请求,按 event type 分发解析后的 JSON。
80 */
81export async function fetchSSEWithHandlers<TResult = unknown>(options: {
82 url: string
83 method?: 'GET' | 'POST'
84 body?: unknown
85 signal?: AbortSignal
86 onProgress?: (data: unknown) => void
87 resultEvent?: string
88}): Promise<TResult> {
89 const { url, method, body, signal, onProgress, resultEvent = 'result' } = options
90
91 return new Promise<TResult>((resolve, reject) => {
92 let resolved = false
93
94 fetchSSE({
95 url,
96 method,
97 body,
98 signal,
99 onEvent: ({ event, data }) => {
100 try {
101 const parsed = JSON.parse(data)
102 if (event === resultEvent) {
103 resolved = true
104 resolve(parsed as TResult)
105 } else if (event === 'progress' && onProgress) {
106 onProgress(parsed)
107 }
108 } catch {
109 // skip malformed JSON
110 }
111 },
112 })
113 .then(() => {
114 if (!resolved) reject(new Error('SSE stream ended without result event'))
115 })
116 .catch(reject)
117 })
118}

Callers

nothing calls this directly

Calls 4

fetchSSEFunction · 0.85
resolveFunction · 0.85
parseMethod · 0.80
onProgressFunction · 0.50

Tested by

no test coverage detected