From 97804819ede20281554fdd958b6151260e4a5d3c Mon Sep 17 00:00:00 2001 From: George He Date: Thu, 23 Jan 2025 11:03:51 +0800 Subject: [PATCH 1/2] fix: get response size from bytesRead value --- .../src/objects/__tests__/request.test.ts | 6 ++--- packages/insomnia-sdk/src/objects/request.ts | 23 +++++++++++------- packages/insomnia-sdk/src/objects/response.ts | 24 ++++++++++++------- packages/insomnia/src/network/network.ts | 1 + 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/packages/insomnia-sdk/src/objects/__tests__/request.test.ts b/packages/insomnia-sdk/src/objects/__tests__/request.test.ts index 193452c62e2..58de85872af 100644 --- a/packages/insomnia-sdk/src/objects/__tests__/request.test.ts +++ b/packages/insomnia-sdk/src/objects/__tests__/request.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { Header, HeaderList } from '../headers'; -import { calculateRequestSize, mergeRequestBody, Request, RequestBody, RequestBodyOptions, toScriptRequestBody } from '../request'; +import { calculatePayloadSize, mergeRequestBody, Request, RequestBody, RequestBodyOptions, toScriptRequestBody } from '../request'; describe('test request and response objects', () => { it('test RequestBody methods', () => { @@ -145,8 +145,8 @@ describe('test request and response objects', () => { ]; reqBodyTestCases.forEach(({ body, headers, expectedTotal }) => { - it(`test calculateRequestSize: ${body.raw}`, () => { - const reqSize = calculateRequestSize(new RequestBody(body), headers); + it(`test calculatePayloadSize: ${body.raw}`, () => { + const reqSize = calculatePayloadSize(new RequestBody(body).toString(), headers); expect(reqSize.total).toEqual(expectedTotal); }); diff --git a/packages/insomnia-sdk/src/objects/request.ts b/packages/insomnia-sdk/src/objects/request.ts index f6d19308f3c..c54f71cb93b 100644 --- a/packages/insomnia-sdk/src/objects/request.ts +++ b/packages/insomnia-sdk/src/objects/request.ts @@ -388,7 +388,7 @@ export class Request extends Property { } size(): RequestSize { - return calculateRequestSize(this.body, this.headers); + return calculatePayloadSize((this.body || '').toString(), this.headers); } override toJSON() { @@ -684,8 +684,18 @@ export function mergeRequests( }; } -export function calculateRequestSize(body: RequestBody | undefined, headers: HeaderList
): RequestSize { - const bodySize = new Blob([(body || '').toString()]).size; +export function calculatePayloadSize(body: string, headers: HeaderList
): RequestSize { + const bodySize = new Blob([body]).size; + const headerSize = calculateHeadersSize(headers); + return { + body: bodySize, + header: headerSize, + total: bodySize + headerSize, + source: 'COMPUTED', + }; +} + +export function calculateHeadersSize(headers: HeaderList
): number { const headerSize = new Blob([ headers.reduce( (acc, header) => (acc + header.toString() + '\n'), @@ -694,10 +704,5 @@ export function calculateRequestSize(body: RequestBody | undefined, headers: Hea ), ]).size; - return { - body: bodySize, - header: headerSize, - total: bodySize + headerSize, - source: 'COMPUTED', - }; + return headerSize; } diff --git a/packages/insomnia-sdk/src/objects/response.ts b/packages/insomnia-sdk/src/objects/response.ts index 57013e91086..1b16f7237d8 100644 --- a/packages/insomnia-sdk/src/objects/response.ts +++ b/packages/insomnia-sdk/src/objects/response.ts @@ -8,7 +8,7 @@ import { Cookie, type CookieOptions } from './cookies'; import { CookieList } from './cookies'; import { Header, type HeaderDefinition, HeaderList } from './headers'; import { Property, unsupportedError } from './properties'; -import { Request } from './request'; +import { calculateHeadersSize, Request } from './request'; export interface ResponseOptions { code: number; @@ -20,6 +20,7 @@ export interface ResponseOptions { stream?: Buffer | ArrayBuffer; responseTime: number; originalRequest: Request; + bytesRead?: number; // this is from Insomnia for returning response size() directly } export interface ResponseContentInfo { @@ -44,6 +45,8 @@ export class Response extends Property { status: string; stream?: Buffer | ArrayBuffer; + private bytesRead: number; // + constructor(options: ResponseOptions) { super(); @@ -67,6 +70,8 @@ export class Response extends Property { } else { this.status = detectedStatus; } + + this.bytesRead = options.bytesRead || 0; } // TODO: the accurate type of the response should be given @@ -180,14 +185,14 @@ export class Response extends Property { return this.status; } - size(): number { - try { - const contentLength = this.headers.get('Content-Length'); - // TODO: improve this by manual counting - return contentLength == null ? -1 : parseInt(contentLength.valueOf()); - } catch (e) { - throw Error('size: ${e}'); - } + size() { + const headerSize = calculateHeadersSize(this.headers); + return { + body: this.bytesRead, + header: headerSize, + total: this.bytesRead + headerSize, + source: 'COMPUTED', + }; } text() { @@ -305,6 +310,7 @@ export function toScriptResponse( // stream is duplicated with body responseTime: partialResponse.elapsedTime, originalRequest, + bytesRead: partialResponse.bytesRead, }; return new Response(responseOption); diff --git a/packages/insomnia/src/network/network.ts b/packages/insomnia/src/network/network.ts index b3ba22fa987..0388deb3b53 100644 --- a/packages/insomnia/src/network/network.ts +++ b/packages/insomnia/src/network/network.ts @@ -615,6 +615,7 @@ export interface sendCurlAndWriteTimelineResponse extends ResponsePatch { statusMessage: string; cookies: Cookie[]; timeline: string[]; + bytesRead: number; } export async function sendCurlAndWriteTimeline( From 020330722500b38156092877020bc3954c421efa Mon Sep 17 00:00:00 2001 From: George He Date: Thu, 23 Jan 2025 11:49:49 +0800 Subject: [PATCH 2/2] fix: lint error --- packages/insomnia/src/network/network.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/insomnia/src/network/network.ts b/packages/insomnia/src/network/network.ts index 0388deb3b53..f6f6ceaf328 100644 --- a/packages/insomnia/src/network/network.ts +++ b/packages/insomnia/src/network/network.ts @@ -615,7 +615,7 @@ export interface sendCurlAndWriteTimelineResponse extends ResponsePatch { statusMessage: string; cookies: Cookie[]; timeline: string[]; - bytesRead: number; + bytesRead?: number; } export async function sendCurlAndWriteTimeline(