From fa3f998cf1a92c0e61f8230533fd061a471d0742 Mon Sep 17 00:00:00 2001 From: wangxiang06 Date: Tue, 21 Apr 2026 16:27:33 +0800 Subject: [PATCH] fix: send responseReceived with EventSource type for SSE requests --- packages/network-debugger/src/core/fetch.ts | 9 ++++-- .../src/fork/module/network/index.ts | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/packages/network-debugger/src/core/fetch.ts b/packages/network-debugger/src/core/fetch.ts index c930212..a9326eb 100644 --- a/packages/network-debugger/src/core/fetch.ts +++ b/packages/network-debugger/src/core/fetch.ts @@ -39,6 +39,8 @@ export function fetchProxyFactory(fetchFn: typeof fetch, mainProcess: MainProces } requestDetail.requestData = options?.body + requestDetail.loadCallFrames() + const result = fetchFn(request as string | Request, options) .then(fetchResponseHandlerFactory(requestDetail, mainProcess)) .catch(fetchErrorHandlerFactory(requestDetail, mainProcess)) @@ -80,8 +82,11 @@ async function handleEventStreamResponse( let buffer = '' const allChunks: Uint8Array[] = [] - // Send initial response info - mainProcess.sendRequest('updateRequest', requestDetail) + // Send responseReceived first (type: EventSource) so DevTools knows this is an SSE request + mainProcess.send({ + type: 'eventSourceResponseReceived', + data: requestDetail + }) try { while (true) { diff --git a/packages/network-debugger/src/fork/module/network/index.ts b/packages/network-debugger/src/fork/module/network/index.ts index 935f62a..e37732d 100644 --- a/packages/network-debugger/src/fork/module/network/index.ts +++ b/packages/network-debugger/src/fork/module/network/index.ts @@ -197,6 +197,36 @@ export const networkPlugin = createPlugin('network', ({ devtool, core }) => { endRequest(request) }) + // Handle SSE response received - send responseReceived with type: EventSource before streaming messages + useHandler('eventSourceResponseReceived', ({ data }) => { + const request = new RequestDetail(data) + requests[request.id] = request + devtool.updateTimestamp() + const headers = new RequestHeaderPipe(request.responseHeaders) + const contentType = headers.getHeader('content-type') || 'text/event-stream' + + devtool.send({ + method: 'Network.responseReceived', + params: { + requestId: request.id, + frameId, + loaderId, + timestamp: devtool.timestamp, + type: 'EventSource', + response: { + url: request.url, + status: request.responseStatusCode, + statusText: request.responseStatusCode === 200 ? 'OK' : '', + headers: request.responseHeaders, + connectionReused: false, + encodedDataLength: 0, + charset: 'utf-8', + mimeType: toMimeType(contentType) + } + } + }) + }) + useHandler<{ id: string rawData: Array