diff --git a/examples/openapi-ts-angular-common/src/client/client/types.gen.ts b/examples/openapi-ts-angular-common/src/client/client/types.gen.ts index 18bc780efb..76668ecc1d 100644 --- a/examples/openapi-ts-angular-common/src/client/client/types.gen.ts +++ b/examples/openapi-ts-angular-common/src/client/client/types.gen.ts @@ -96,6 +96,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-angular/src/client/client/types.gen.ts b/examples/openapi-ts-angular/src/client/client/types.gen.ts index 18bc780efb..76668ecc1d 100644 --- a/examples/openapi-ts-angular/src/client/client/types.gen.ts +++ b/examples/openapi-ts-angular/src/client/client/types.gen.ts @@ -96,6 +96,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-fastify/src/client/client/types.gen.ts b/examples/openapi-ts-fastify/src/client/client/types.gen.ts index 61a8dffa32..79041f6378 100644 --- a/examples/openapi-ts-fastify/src/client/client/types.gen.ts +++ b/examples/openapi-ts-fastify/src/client/client/types.gen.ts @@ -89,6 +89,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-fetch/src/client/client/types.gen.ts b/examples/openapi-ts-fetch/src/client/client/types.gen.ts index 61a8dffa32..79041f6378 100644 --- a/examples/openapi-ts-fetch/src/client/client/types.gen.ts +++ b/examples/openapi-ts-fetch/src/client/client/types.gen.ts @@ -89,6 +89,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-ky/src/client/client/types.gen.ts b/examples/openapi-ts-ky/src/client/client/types.gen.ts index 5b83a0ab00..4d66bba196 100644 --- a/examples/openapi-ts-ky/src/client/client/types.gen.ts +++ b/examples/openapi-ts-ky/src/client/client/types.gen.ts @@ -121,6 +121,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-next/src/client/client/client.gen.ts b/examples/openapi-ts-next/src/client/client/client.gen.ts index 45519b96b9..67f64c401e 100644 --- a/examples/openapi-ts-next/src/client/client/client.gen.ts +++ b/examples/openapi-ts-next/src/client/client/client.gen.ts @@ -67,7 +67,6 @@ export const createClient = (config: Config = {}): Client => { // @ts-expect-error const request: Client['request'] = async (options) => { - // @ts-expect-error const { opts, url } = await beforeRequest(options); for (const fn of interceptors.request.fns) { @@ -207,14 +206,18 @@ export const createClient = (config: Config = {}): Client => { method, onRequest: async (url, init) => { let request = new Request(url, init); + // Create options for interceptor - convert headers to Headers instance + // to match ResolvedRequestOptions type const requestInit = { ...init, + headers: new Headers(init.headers), method: init.method as Config['method'], url, }; for (const fn of interceptors.request.fns) { if (fn) { - await fn(requestInit); + // Cast to ResolvedRequestOptions: structurally matches with headers: Headers + await fn(requestInit as ResolvedRequestOptions); request = new Request(requestInit.url, requestInit); } } diff --git a/examples/openapi-ts-next/src/client/client/types.gen.ts b/examples/openapi-ts-next/src/client/client/types.gen.ts index 6dcf29dca3..5c510c6459 100644 --- a/examples/openapi-ts-next/src/client/client/types.gen.ts +++ b/examples/openapi-ts-next/src/client/client/types.gen.ts @@ -71,6 +71,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-ofetch/src/client/client/types.gen.ts b/examples/openapi-ts-ofetch/src/client/client/types.gen.ts index a193bd1d75..6020d0a9d1 100644 --- a/examples/openapi-ts-ofetch/src/client/client/types.gen.ts +++ b/examples/openapi-ts-ofetch/src/client/client/types.gen.ts @@ -153,6 +153,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-openai/src/client/client/types.gen.ts b/examples/openapi-ts-openai/src/client/client/types.gen.ts index cb6d0d54a0..44b69e041f 100644 --- a/examples/openapi-ts-openai/src/client/client/types.gen.ts +++ b/examples/openapi-ts-openai/src/client/client/types.gen.ts @@ -92,6 +92,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-pinia-colada/src/client/client/types.gen.ts b/examples/openapi-ts-pinia-colada/src/client/client/types.gen.ts index 61a8dffa32..79041f6378 100644 --- a/examples/openapi-ts-pinia-colada/src/client/client/types.gen.ts +++ b/examples/openapi-ts-pinia-colada/src/client/client/types.gen.ts @@ -89,6 +89,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-tanstack-angular-query-experimental/src/client/client/types.gen.ts b/examples/openapi-ts-tanstack-angular-query-experimental/src/client/client/types.gen.ts index 18bc780efb..76668ecc1d 100644 --- a/examples/openapi-ts-tanstack-angular-query-experimental/src/client/client/types.gen.ts +++ b/examples/openapi-ts-tanstack-angular-query-experimental/src/client/client/types.gen.ts @@ -96,6 +96,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-tanstack-react-query/src/client/client/types.gen.ts b/examples/openapi-ts-tanstack-react-query/src/client/client/types.gen.ts index 61a8dffa32..79041f6378 100644 --- a/examples/openapi-ts-tanstack-react-query/src/client/client/types.gen.ts +++ b/examples/openapi-ts-tanstack-react-query/src/client/client/types.gen.ts @@ -89,6 +89,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-tanstack-svelte-query/src/client/client/types.gen.ts b/examples/openapi-ts-tanstack-svelte-query/src/client/client/types.gen.ts index 61a8dffa32..79041f6378 100644 --- a/examples/openapi-ts-tanstack-svelte-query/src/client/client/types.gen.ts +++ b/examples/openapi-ts-tanstack-svelte-query/src/client/client/types.gen.ts @@ -89,6 +89,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/examples/openapi-ts-tanstack-vue-query/src/client/client/types.gen.ts b/examples/openapi-ts-tanstack-vue-query/src/client/client/types.gen.ts index 61a8dffa32..79041f6378 100644 --- a/examples/openapi-ts-tanstack-vue-query/src/client/client/types.gen.ts +++ b/examples/openapi-ts-tanstack-vue-query/src/client/client/types.gen.ts @@ -89,6 +89,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/packages/custom-client/src/client.ts b/packages/custom-client/src/client.ts index d0f5b2e49c..4d83b118f5 100644 --- a/packages/custom-client/src/client.ts +++ b/packages/custom-client/src/client.ts @@ -1,4 +1,4 @@ -import type { Client, Config, RequestOptions } from './types'; +import type { Client, Config, ResolvedRequestOptions } from './types'; import { buildUrl, createConfig, @@ -24,7 +24,7 @@ export const createClient = (config: Config = {}): Client => { return getConfig(); }; - const interceptors = createInterceptors(); + const interceptors = createInterceptors(); // @ts-expect-error const request: Client['request'] = async (options) => { diff --git a/packages/custom-client/src/types.ts b/packages/custom-client/src/types.ts index 8cb353eb81..cac8883e06 100644 --- a/packages/custom-client/src/types.ts +++ b/packages/custom-client/src/types.ts @@ -53,6 +53,18 @@ export interface RequestOptions< url: Url; } +export interface ResolvedRequestOptions< + ThrowOnError extends boolean = boolean, + Url extends string = string, +> extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; + serializedBody?: string; +} + export type RequestResult< TData = unknown, TError = unknown, @@ -96,7 +108,7 @@ type BuildUrlFn = < ) => string; export type Client = CoreClient & { - interceptors: Middleware; + interceptors: Middleware; }; /** diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-angular/bundle/types.ts b/packages/openapi-ts/src/plugins/@hey-api/client-angular/bundle/types.ts index 54a9dfe628..e9905be39a 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-angular/bundle/types.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-angular/bundle/types.ts @@ -97,6 +97,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/types.ts b/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/types.ts index f2789cbc52..4fd803261c 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/types.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/types.ts @@ -90,6 +90,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-ky/bundle/types.ts b/packages/openapi-ts/src/plugins/@hey-api/client-ky/bundle/types.ts index 136269181f..f63d63bbe6 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-ky/bundle/types.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-ky/bundle/types.ts @@ -122,6 +122,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/client.ts b/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/client.ts index 4e76ab03de..117c20f04e 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/client.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/client.ts @@ -65,7 +65,6 @@ export const createClient = (config: Config = {}): Client => { // @ts-expect-error const request: Client['request'] = async (options) => { - // @ts-expect-error const { opts, url } = await beforeRequest(options); for (const fn of interceptors.request.fns) { @@ -205,14 +204,18 @@ export const createClient = (config: Config = {}): Client => { method, onRequest: async (url, init) => { let request = new Request(url, init); + // Create options for interceptor - convert headers to Headers instance + // to match ResolvedRequestOptions type const requestInit = { ...init, + headers: new Headers(init.headers), method: init.method as Config['method'], url, }; for (const fn of interceptors.request.fns) { if (fn) { - await fn(requestInit); + // Cast to ResolvedRequestOptions: structurally matches with headers: Headers + await fn(requestInit as ResolvedRequestOptions); request = new Request(requestInit.url, requestInit); } } diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/types.ts b/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/types.ts index 2a8de33eca..ee3856ff62 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/types.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/types.ts @@ -72,6 +72,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; } diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-ofetch/bundle/types.ts b/packages/openapi-ts/src/plugins/@hey-api/client-ofetch/bundle/types.ts index 38af322af3..30beb390aa 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-ofetch/bundle/types.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-ofetch/bundle/types.ts @@ -154,6 +154,11 @@ export interface ResolvedRequestOptions< ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { + /** + * Headers object after merging config and request headers. + * Always a Headers instance in request interceptors. + */ + headers: Headers; serializedBody?: string; }