diff --git a/src/FetchOpaqueInterceptor.ts b/src/FetchOpaqueInterceptor.ts index 4d34e68f..66647003 100644 --- a/src/FetchOpaqueInterceptor.ts +++ b/src/FetchOpaqueInterceptor.ts @@ -13,7 +13,7 @@ export interface FetchOpaque { [symbols.kRequestStartTime]: number; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - [symbols.kEnableRequestTiming]: number; + [symbols.kEnableRequestTiming]: boolean; } // const internalOpaque = { diff --git a/src/HttpClient.ts b/src/HttpClient.ts index 0e3dc0ea..e99f3478 100644 --- a/src/HttpClient.ts +++ b/src/HttpClient.ts @@ -40,6 +40,7 @@ import { parseJSON, digestAuthHeader, globalId, performanceTime, isReadable, upd import symbols from './symbols.js'; import { initDiagnosticsChannel } from './diagnosticsChannel.js'; import { HttpClientConnectTimeoutError, HttpClientRequestTimeoutError } from './HttpClientError.js'; +import { FetchOpaque } from './FetchOpaqueInterceptor.js'; type Exists = T extends undefined ? never : T; type UndiciRequestOption = Exists[1]>; @@ -150,12 +151,16 @@ export const channels = { export type RequestDiagnosticsMessage = { request: RequestMeta; + isSentByFetch?: boolean; + fetchOpaque?: FetchOpaque; }; export type ResponseDiagnosticsMessage = { request: RequestMeta; response: RawResponseWithMeta; error?: Error; + isSentByFetch?: boolean; + fetchOpaque?: FetchOpaque; }; export interface PoolStat { diff --git a/src/fetch.ts b/src/fetch.ts index 2fce60e4..09acdecf 100644 --- a/src/fetch.ts +++ b/src/fetch.ts @@ -51,10 +51,12 @@ export interface UrllibRequestInit extends RequestInit { export type FetchDiagnosticsMessage = { fetch: FetchMeta; + fetchOpaque: FetchOpaque; }; export type FetchResponseDiagnosticsMessage = { fetch: FetchMeta; + fetchOpaque: FetchOpaque; timingInfo?: UndiciTimingInfo; response?: Response; error?: Error; @@ -202,9 +204,12 @@ export class FetchFactory { }; channels.request.publish({ request: reqMeta, + isSentByFetch: true, + fetchOpaque: internalOpaque, } as RequestDiagnosticsMessage); channels.fetchRequest.publish({ fetch: fetchMeta, + fetchOpaque: internalOpaque, } as FetchDiagnosticsMessage); let res: Response; @@ -239,11 +244,14 @@ export class FetchFactory { channels.fetchResponse.publish({ fetch: fetchMeta, error: e, + fetchOpaque: internalOpaque, } as FetchResponseDiagnosticsMessage); channels.response.publish({ request: reqMeta, response: urllibResponse, error: e, + isSentByFetch: true, + fetchOpaque: internalOpaque, } as ResponseDiagnosticsMessage); throw e; } @@ -265,10 +273,13 @@ export class FetchFactory { fetch: fetchMeta, timingInfo: state.timingInfo, response: res!, + fetchOpaque: internalOpaque, } as FetchResponseDiagnosticsMessage); channels.response.publish({ request: reqMeta, response: urllibResponse, + isSentByFetch: true, + fetchOpaque: internalOpaque, } as ResponseDiagnosticsMessage); return res!; }