MCPcopy Create free account
hub / github.com/devnomad-byte/EvolveHub / sendMessage

Function sendMessage

frontend/src/api/chat.ts:110–167  ·  view source on GitHub ↗

* 发送消息并消费 SSE 响应流

(
    payload: SendChatMessageRequest,
    handlers: {
      onEvent: (event: ChatStreamEvent) => void
      onError?: (error: Error) => void
    }
  )

Source from the content-addressed store, hash-verified

108 * 发送消息并消费 SSE 响应流
109 */
110 async sendMessage(
111 payload: SendChatMessageRequest,
112 handlers: {
113 onEvent: (event: ChatStreamEvent) => void
114 onError?: (error: Error) => void
115 }
116 ) {
117 const token = localStorage.getItem('token') || ''
118 const response = await fetch('/api/user/chat/send', {
119 method: 'POST',
120 headers: {
121 'Content-Type': 'application/json',
122 Authorization: token
123 },
124 body: JSON.stringify(payload)
125 })
126
127 const contentType = response.headers.get('content-type') || ''
128 if (!response.ok || !response.body || !contentType.includes('text/event-stream')) {
129 const error = new Error(await resolveErrorMessage(response))
130 handlers.onError?.(error)
131 throw error
132 }
133
134 const reader = response.body.getReader()
135 const decoder = new TextDecoder('utf-8')
136 let buffer = ''
137
138 try {
139 while (true) {
140 const { done, value } = await reader.read()
141 if (done) {
142 break
143 }
144 buffer += decoder.decode(value, { stream: true })
145 const blocks = buffer.split('\n\n')
146 buffer = blocks.pop() || ''
147 for (const block of blocks) {
148 const event = parseSseBlock(block)
149 if (event) {
150 handlers.onEvent(event)
151 }
152 }
153 }
154 if (buffer.trim()) {
155 const event = parseSseBlock(buffer)
156 if (event) {
157 handlers.onEvent(event)
158 }
159 }
160 } catch (error) {
161 const streamError = error instanceof Error ? error : new Error('SSE 流解析失败')
162 handlers.onError?.(streamError)
163 throw streamError
164 } finally {
165 reader.releaseLock()
166 }
167 }

Callers

nothing calls this directly

Calls 3

resolveErrorMessageFunction · 0.85
parseSseBlockFunction · 0.85
getMethod · 0.65

Tested by

no test coverage detected