From 80b63545f14b43067ba290ab6bf15e3d8438f966 Mon Sep 17 00:00:00 2001 From: Shreyas Date: Thu, 10 Apr 2025 13:28:20 +0530 Subject: [PATCH] fix(common): extention interceptor response meta (#4980) --- .../kernel-interceptors/extension/index.ts | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/packages/hoppscotch-common/src/platform/std/kernel-interceptors/extension/index.ts b/packages/hoppscotch-common/src/platform/std/kernel-interceptors/extension/index.ts index 45a03370..1b18b403 100644 --- a/packages/hoppscotch-common/src/platform/std/kernel-interceptors/extension/index.ts +++ b/packages/hoppscotch-common/src/platform/std/kernel-interceptors/extension/index.ts @@ -227,6 +227,7 @@ export class ExtensionKernelInterceptorService } try { + const startTime = Date.now() let requestData: any = null if (request.content) { @@ -281,14 +282,40 @@ export class ExtensionKernelInterceptorService wantsBinary: true, }) + const endTime = Date.now() + + const headersSize = JSON.stringify(extensionResponse.headers).length + const bodySize = extensionResponse.data?.byteLength || 0 + const totalSize = headersSize + bodySize + + const timingMeta = extensionResponse.timeData + ? { + start: extensionResponse.timeData.startTime, + end: extensionResponse.timeData.endTime, + } + : { + start: startTime, + end: endTime, + } + return E.right({ + id: request.id, status: extensionResponse.status, statusText: extensionResponse.statusText, + version: request.version, headers: extensionResponse.headers, body: body.body( extensionResponse.data, extensionResponse.headers["content-type"] ), + meta: { + timing: timingMeta, + size: { + headers: headersSize, + body: bodySize, + total: totalSize, + }, + }, }) } catch (e) { console.error(e) @@ -296,11 +323,37 @@ export class ExtensionKernelInterceptorService if (e instanceof Error && "response" in e) { const response = (e as any).response if (response) { + const headersSize = JSON.stringify(response.headers).length + const bodySize = response.data?.byteLength || 0 + const totalSize = headersSize + bodySize + + const timingMeta = response.timeData + ? { + start: response.timeData.startTime, + end: response.timeData.endTime, + } + : { + // Fallback timing - at least show it took some time, + // this is mainly for cross compat with other interceptor settings. + start: Date.now() - 1, + end: Date.now(), + } + return E.right({ + id: request.id, status: response.status, statusText: response.statusText, + version: request.version, headers: response.headers, body: body.body(response.data, response.headers["content-type"]), + meta: { + timing: timingMeta, + size: { + headers: headersSize, + body: bodySize, + total: totalSize, + }, + }, }) } }