From 48f0e913b80b3df0ed6c37889ef9431c4e7ab47a Mon Sep 17 00:00:00 2001 From: Svante Bengtson Date: Mon, 8 Dec 2025 15:15:07 +0100 Subject: [PATCH 1/3] Provide unserialized body to onRequest middleware it's relatively expensive to have to clone the request to extract the body again in middleware, and as bodySerializer is provided as part of the options given to the requestSerializer it makes sense to also provide the original body here for advanced use cases that aren't covered by the bodySerializer. --- packages/openapi-fetch/src/index.d.ts | 5 ++++- packages/openapi-fetch/src/index.js | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/openapi-fetch/src/index.d.ts b/packages/openapi-fetch/src/index.d.ts index 387a5642f..b63029978 100644 --- a/packages/openapi-fetch/src/index.d.ts +++ b/packages/openapi-fetch/src/index.d.ts @@ -150,7 +150,10 @@ export interface MiddlewareCallbackParams { } type MiddlewareOnRequest = ( - options: MiddlewareCallbackParams, + options: MiddlewareCallbackParams & { + /** body as provided to the original openapi-fetch function, pre-serialization */ + body?: unknown + }, ) => void | Request | Response | undefined | Promise; type MiddlewareOnResponse = ( options: MiddlewareCallbackParams & { response: Response }, diff --git a/packages/openapi-fetch/src/index.js b/packages/openapi-fetch/src/index.js index be3b153a3..e8fe5e43d 100644 --- a/packages/openapi-fetch/src/index.js +++ b/packages/openapi-fetch/src/index.js @@ -143,6 +143,7 @@ export default function createClient(clientOptions) { request, schemaPath, params, + body, options, id, }); From c2752707625422f40e4141a365fadee0a5d201b5 Mon Sep 17 00:00:00 2001 From: Svante Bengtson Date: Mon, 8 Dec 2025 15:22:08 +0100 Subject: [PATCH 2/3] update tests --- packages/openapi-fetch/test/middleware/middleware.test.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/openapi-fetch/test/middleware/middleware.test.ts b/packages/openapi-fetch/test/middleware/middleware.test.ts index 2d96ab457..c91bd842a 100644 --- a/packages/openapi-fetch/test/middleware/middleware.test.ts +++ b/packages/openapi-fetch/test/middleware/middleware.test.ts @@ -1,5 +1,5 @@ import { assertType, expect, expectTypeOf, test } from "vitest"; -import type { Middleware, MiddlewareCallbackParams } from "../../src/index.js"; +import type { Middleware, MiddlewareCallbackParams, MiddlewareOnRequest } from "../../src/index.js"; import { createObservedClient } from "../helpers.js"; import type { paths } from "./schemas/middleware.js"; @@ -297,12 +297,14 @@ test("receives OpenAPI options passed in from parent", async () => { let receivedPath = ""; let receivedParams: MiddlewareCallbackParams["params"] = {}; + let receivedBody: unknown = {}; const client = createObservedClient(); client.use({ - onRequest({ schemaPath, params }) { + onRequest({ schemaPath, params , body }) { receivedPath = schemaPath; receivedParams = params; + receivedBody = body; return undefined; }, }); @@ -310,6 +312,7 @@ test("receives OpenAPI options passed in from parent", async () => { expect(receivedPath).toBe(pathname); expect(receivedParams).toEqual(tagData.params); + expect(receivedBody).toEqual(tagData.body); }); test("can be skipped without interrupting request", async () => { From 944502d11b608b407b8d31fdebeb618dc4c8331e Mon Sep 17 00:00:00 2001 From: Svante Bengtson Date: Mon, 8 Dec 2025 15:30:51 +0100 Subject: [PATCH 3/3] fix lint --- packages/openapi-fetch/src/index.d.ts | 2 +- packages/openapi-fetch/test/middleware/middleware.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/openapi-fetch/src/index.d.ts b/packages/openapi-fetch/src/index.d.ts index b63029978..b677e10eb 100644 --- a/packages/openapi-fetch/src/index.d.ts +++ b/packages/openapi-fetch/src/index.d.ts @@ -152,7 +152,7 @@ export interface MiddlewareCallbackParams { type MiddlewareOnRequest = ( options: MiddlewareCallbackParams & { /** body as provided to the original openapi-fetch function, pre-serialization */ - body?: unknown + body?: unknown; }, ) => void | Request | Response | undefined | Promise; type MiddlewareOnResponse = ( diff --git a/packages/openapi-fetch/test/middleware/middleware.test.ts b/packages/openapi-fetch/test/middleware/middleware.test.ts index c91bd842a..5de781ba1 100644 --- a/packages/openapi-fetch/test/middleware/middleware.test.ts +++ b/packages/openapi-fetch/test/middleware/middleware.test.ts @@ -301,7 +301,7 @@ test("receives OpenAPI options passed in from parent", async () => { const client = createObservedClient(); client.use({ - onRequest({ schemaPath, params , body }) { + onRequest({ schemaPath, params, body }) { receivedPath = schemaPath; receivedParams = params; receivedBody = body;